очень много вопросов вызывает (тем более были кардинальные изменения в ядре и обещал расписать пример)
настройки для малинки и образа от Сергея
здесь описано управление через метод, запись в свойство для отображения, без привязки метода на изменение оного
можно писать и в свойство, а метод вызывать по изменению оного, но тогда все несколько придется изменить/адаптировать
У меня системная громкость и уже от нее громкость радио, начнем с первой так как там есть нюансы
класс Computer объект ThisComputer метод на уровне объекта VolumeLevelChanged
Система
$volume = $params['VALUE']; // получаем параметр громкости, присваиваем переменной
$this->setProperty('VolumeLevel', $volume); //пишем полученное в свойство (для отображения)
$vol = preg_replace('/[^0-9]/', '', $volume);
$input = array('100','95','90','85','80','75','70','65','60','55','50','45','40','35','30','25','20','15','10','5','0');
$output = array('100','98','95','93','90','88','85','83','80','78','75','72','70','67','65','63','60','58','55','50','0');
for ($i=0; $i <= count($input); $i++) {
if ($input[$i] == $vol) {
$vol = $output[$i];
}
}
safe_exec('amixer sset PCM,0 ' . $vol . '%'); //устанавливаем громкость с преобразованием выше (из-за неравномерности диапазона)
$ot = $params['ORIGINAL_OBJECT_TITLE'];
setTimeOut($ot . '_volumeLevel', "say('Системная громкость ' . $volume . ' процентов');", 2); //выводим сообщение в чат через таймер (если регулировали с кнопки, чтоб не спамило)
Дополнительно: если нужно с шагом в "1" преобразовывать, то неплохой способ https://t.me/MajorDoMoRu/88272
подойдет и к выше
админка - объекты - меню управления
в меню управления настраиваем слайдер аналогично скриншоту
создаем два скрипта/сценария SystemHi и SystemLow
SystemLow
$value = getGlobal('ThisComputer.VolumeLevel');
$value = $value-5;
if ($value > 5) {
callMethod('ThisComputer.VolumeLevelChanged', array('VALUE'=> $value));
} else {
callMethod('ThisComputer.VolumeLevelChanged', array('VALUE'=> 0));
}
SystemHi
$value = getGlobal('ThisComputer.VolumeLevel');
$value = $value+5;
if ($value < 100) {
callMethod('ThisComputer.VolumeLevelChanged', array('VALUE'=> $value));
} else {
callMethod('ThisComputer.VolumeLevelChanged', array('VALUE'=> 100));
}
и привязываем их в шаблонах поведения на команды система тише и система громче
Радио онлайн
класс Radio объект RadioSetting метод на уровне объкта Control (ниже вначале метода вставка своего кода для управления из меню и обязательно!!! убедитесь в отсутствии задвоения кода далее)
if (isset($params['VALUE'])) {
$params['vol'] = $params['VALUE'];
}
/* begin injection of {app_radio} */
include_once(DIR_MODULES.'app_radio/app_radio.class.php');
$app_radio = new app_radio();
if(is_array($params)) {
foreach($params as $key=>$value) {
switch((string)$key) {
case 'sta': $app_radio->change_station($params['sta'], $app_radio); break;
case 'cmd': $app_radio->control($params['cmd']); break;
case 'vol': $app_radio->set_volume($params['vol'], $app_radio); break;
default:
if($value == 'play' || $value == 'stop') $app_radio->control($value);
elseif(strpos($value, 'vol') === 0) $app_radio->set_volume((int)substr($value, 3), $app_radio);
elseif(strpos($value, 'sta:') === 0) $app_radio->change_station(substr($value, 4), $app_radio);
}
}
}
/* end injection of {app_radio} */
класс Radio объект RadioSetting метод на уровне объкта VolumeLevelChanged (создаем сами и привязываем на изменение свойства VolumeLevel, аналогично создать на уровне класса)
при нюансе в создании лишнего свойства на уровне объекта пишем и читаем здесь
$ot = $params['ORIGINAL_OBJECT_TITLE'];
$volumeLevel = $params['NEW_VALUE'];
setTimeOut($ot . '_volumeLevel', "say('Громкость радио ' . $volumeLevel . ' процентов');", 2);
админка - объекты - меню управления
в меню управления настраиваем слайдер аналогично скриншоту
создаем два скрипта/сценария RadioLow и RadioHi
RadioHi
$vol = getGlobal('RadioSetting.VolumeLevel');
$vol = $vol+5;
if ($vol < 100) {
callMethod('RadioSetting.Control', array('vol'=> $vol));
} else {
callMethod('RadioSetting.Control', array('vol'=> 100));
}
RadioLow
$vol = getGlobal('RadioSetting.volumeLevel');
$vol = $vol-5;
if ($vol > 5) {
callMethod('RadioSetting.Control', array('vol'=> $vol));
} else {
callMethod('RadioSetting.Control', array('vol'=> 0));
}
привязываем их в шаблонах к громче радио и тише радио
аналогично в шаблонах можно создать включи радио, выключи радио, включи "такую радиостанцию", другая радиостанция (рандомно) и т.д.
или
((установи(.*) громкость)(.*)(\s+)(\d+))|^((громкость)(.*)(\s+)(\d+))
$vol = $matches[6] . $matches[11];
callMethod('RadioSetting.Control', array('vol'=>$vol));
так же скрипты выше прекрасно привязываются на кнопки сяоми
runScript('RadioOn');
runScript('RadioOff');
runScript('NextRadio');
runScript('RadioHi');
runScript('RadioLow');
Нижний Тагил, Россия
На форуме: Logrus