Logrus

 
<<< Back

Настройки громкости

очень много вопросов вызывает (тем более были кардинальные изменения в ядре и обещал расписать пример)
настройки для малинки и образа от Сергея
здесь описано управление через метод, запись в свойство для отображения, без привязки метода на изменение оного
можно писать и в свойство, а метод вызывать по изменению оного, но тогда все несколько придется изменить/адаптировать

0
У меня системная громкость и уже от нее громкость радио, начнем с первой так как там есть нюансы
класс Computer объект ThisComputer метод на уровне объекта VolumeLevelChanged

Система
1

$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
подойдет и к выше

админка - объекты - меню управления
2
в меню управления настраиваем слайдер аналогично скриншоту

создаем два скрипта/сценария 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));
}

3
и привязываем их в шаблонах поведения на команды система тише и система громче

Радио онлайн

4
класс 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);

админка - объекты - меню управления
5
в меню управления настраиваем слайдер аналогично скриншоту

создаем два скрипта/сценария 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));
}

привязываем их в шаблонах к громче радио и тише радио
аналогично в шаблонах можно создать включи радио, выключи радио, включи "такую радиостанцию", другая радиостанция (рандомно) и т.д.

или

6

((установи(.*) громкость)(.*)(\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');

Discuss (0) (19)

See also:
2021-01-10 DROP_TABLE
2020-05-07 Телеграмм. Полезное
2019-06-30 Телеграмм. Меню - управление группами ПУ
2019-06-29 Телеграмм. Меню - запуск скриптов (сценариев)
2018-10-07 Примеры кода
2018-09-25 Телеграмм. pChart
2018-05-02 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
2018-04-05 Шаблон отображения в классе "Users"
2018-12-02 Режим "Никого нет дома"

Нижний Тагил, Россия

На форуме: Logrus