Logrus

<<< Назад

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

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

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');

Обсуждение (0) (14)

Смотрите так же:
02.12.2019 Charts
30.11.2019 Шаблон поведения. Отправка сообщения на определенный терминал
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
07.10.2018 Примеры кода
29.09.2018 checkState
25.09.2018 Телеграмм. pChart
24.09.2018 Уход за базой данных
05.08.2018 Управление подсветкой на шлюзе Сяоми
21.06.2018 Каталог ссылок
10.06.2018 Меню
08.07.2018 mail()
04.05.2018 Режим "EnergyTariffMode"
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
22.04.2018 Программы
19.04.2018 Пользовательские функции
11.04.2018 Шаблон отображения в классе "ExchangeRates"
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"
25.02.2018 Бэкап и обслуживание системы

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

На форуме: Logrus