Код тестировался для Windows, но возможно будет работать и на Linux, если нет смотрите сценарий setVolume.
В моем случае актуально по утрам, когда в квартире тихо, все еще спят, чтобы Алиса не раздражала громкими уведомлениями.
Принцип работы прост, с 6 утра до 9, каждые 5 минут система получает уровень шумности в комнате, если уровень Livingroom.noise = 0 ("тихо") - устанавливает громкость системы 60%, если выше Livingroom.noise > 0 ("норма", "громко" и выше) - устанавливает 100%. В дневное время с 9 до 21 уровень громкости устанавливает 100%, после 21 - снижает до 60%.
Оборудование для определения уровня шумности в комнате:
Broadlink А1 e-Air
Работает в связке с дополнением Broadlink
Нужно передать данные свойства:
Livingroom.noise
Livingroom.noise_word
Код сценария autoVolume:
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
//выполняем авторегулировку уровня звука
//с 6:00 до 8:59
if (date("H") >= 6 && date("H") <= 8) {
if (gg("Livingroom.noise") > 0) {
//устанавливаем 100%
if (gg("ThisComputer.volumeLevel" !== 100)) {
$ret .= "Степень шумности в Квартире возросла до уровня: " . gg("Livingroom.noise_word");
runScript("setVolume", array("volume"=>"100", "level"=>"$level"));
}
} else {
//устанавливаем 60%
if (gg("ThisComputer.volumeLevel" !== 60)) {
$ret .= "Степень шумности в Квартире снизилась до уровня: " . gg("Livingroom.noise_word");
runScript("setVolume", array("volume"=>"60", "level"=>"$level"));
}
}
} else {
//с 9:00 до 20:59
if (date("H") >= 9 && date("H") <= 20) {
//устанавливаем 100%
if (gg("ThisComputer.volumeLevel" !== 100)) {
runScript("setVolume", array("volume"=>"100", "level"=>"$level"));
}
}
//с 21:00
if (date("H") >= 21) {
//устанавливаем 60%
if (gg("ThisComputer.volumeLevel" !== 60)) {
runScript("setVolume", array("volume"=>"60", "level"=>"$level"));
}
}
if ($level > 0) {
$ret .= "Текущий уровень шумности в Квартире: " . gg("Livingroom.noise_word") . ". ";
$ret .= "Текущий уровень громкости системы: " . gg("ThisComputer.volumeLevel") . "%. ";
}
}
$ret = trim($ret);
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (isset($params["volume"])) $volume = $params['volume'];
if ($volume) {
sg('ThisComputer.volumeLevel', $volume);
if (IsWindowsOS()) {
$volume_bit = round(65535 * $volume / 100);
safe_exec('..\\apps\\nircmd\\nircmdc setsysvolume ' . $volume_bit);
} else {
//для Linux не тестировалось
$volume = exec("amixer -c 0 set Master ". $volume. "%");
}
$ret = "Изменяю свою громкость до " . $volume . "%";
} else {
$ret = "Уровень громкости системы не задан";
}
sleep(1);
say($ret, $level);
echo "<br>" . $ret;
Crontab */5 * * * *
Код: Выделить всё
runScript("autoVolume", array("level"=>"0")); //автоматическая регулировка громкости
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.