Страница 1 из 3

[Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 10:24 am
S_Nick
Автоматическая регулировка уровня громкости сервера Majordomo в зависимости от степени шумности в комнате и времени суток.
Код тестировался для 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;
}
Код сценария setVolume:

Код: Выделить всё

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;
Код для Cron:
Crontab */5 * * * *

Код: Выделить всё

runScript("autoVolume", array("level"=>"0")); //автоматическая регулировка громкости
Если есть мысли как оптимизировать улучшить код, пишите в теме.

P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 12:58 pm
xor
У меня это реализовано не на уровне шума, а на присутствии. И установка громкости сделана методом, а не скриптом, вроде, так из коробки идёт?

Отправлено с моего Redmi 4X через Tapatalk


Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 1:39 pm
Logrus
к выше, и без постоянных опросов, а по событиям
датчик звука не показатель он не понимает кто шумит

и девайс от броадлинка дорогой и бесполезный

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 4:49 pm
S_Nick
xor писал(а):
Сб окт 26, 2019 12:58 pm
У меня это реализовано не на уровне шума, а на присутствии.
Кому как удобнее, но мне по движению не подходит, по квартире утром можно ходить и тихо, а вот если в квартире стало шумно, то логично повысить громкость и умного дома.
xor писал(а):
Сб окт 26, 2019 12:58 pm
И установка громкости сделана методом, а не скриптом
Logrus писал(а):
Сб окт 26, 2019 1:39 pm
к выше, и без постоянных опросов, а по событиям
Соглашусь, возможно вызывать метод при изменение уровня шумности логичнее, но при любом резком звуке, каждый раз будет дергать громкость звука. Мне больше нравиться вариант кроном измерять уровень шума раз в 5 минут и если фоновый шум стал постоянным, к примеру, заработал телевизор, либо музыка какая-то заиграла, реагировать.
xor писал(а):
Сб окт 26, 2019 12:58 pm
вроде, так из коробки идёт?
Не в курсе, не нашел такого из коробки, если уже реализовано, покажите где.
Logrus писал(а):
Сб окт 26, 2019 1:39 pm
датчик звука не показатель он не понимает кто шумит
А какая разница кто или что шумит. У меня шуметь в квартире могут только сами жильцы/телевизор/компьютер и в любом случае это говорит о том, что жильцы не спят и можно повышать громкость умного дома.
Logrus писал(а):
Сб окт 26, 2019 1:39 pm
и девайс от броадлинка дорогой и бесполезный
Сейчас бы я его уже не покупал конечно, просто он у меня уже несколько лет и работает нормально, еще до более крутых решений xiaomi и других

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 5:54 pm
xor
Ну да, у каждого своя ситуация. Если есть возможность контролировать шум, ок. Бродлинк у меня куплен тоже давным-давно и грех не использовать его возможности.
Приветствую ваше желание делиться своими решениями.

Отправлено с моего Redmi 4X через Tapatalk


Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Сб окт 26, 2019 9:42 pm
S_Nick
xor писал(а):
Сб окт 26, 2019 5:54 pm
Приветствую ваше желание делиться своими решениями.
Спасибо, пользуйтесь, буду рад если кому-то пригодиться.
Вроде бы большое сообщество мажордомо, а готовых решений за частую не найти, нужно исправлять ситуацию.

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Вт ноя 05, 2019 7:40 pm
Garik908
Добрый день! Какой день пытаюсь решить проблему с данными. Мозги мои не могут справится. Может подскажите. Почему при изменение громкости на компьютере автоматические не обновляются данные в VolumeLevelChanged? Может изначально данная функция не работает и нужно где то настроит?

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Вт ноя 05, 2019 9:47 pm
tarasfrompir
Garik908 писал(а):
Вт ноя 05, 2019 7:40 pm
Добрый день! Какой день пытаюсь решить проблему с данными. Мозги мои не могут справится. Может подскажите. Почему при изменение громкости на компьютере автоматические не обновляются данные в VolumeLevelChanged? Может изначально данная функция не работает и нужно где то настроит?
Для какого типа терминала регилуриете звук? если для Маин то вроде должно работать. Если для других - то бесполезно

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Вт ноя 05, 2019 9:50 pm
Jilber
Я так понимаю, что человек просто в Винде регулирует звук. Сейчас проверил у себя - ThisComputer.volumeLevel не меняется при регулировании звука в Винде. А должен ? ThisComputer.volumeLevel - это не громкость звука именно MajorDoMo ?

Re: [Сценарий] Автоматическая регулировка громкости Majordomo

Добавлено: Вт ноя 05, 2019 9:58 pm
tarasfrompir
Jilber писал(а):
Вт ноя 05, 2019 9:50 pm
Я так понимаю, что человек просто в Винде регулирует звук. Сейчас проверил у себя - ThisComputer.volumeLevel не меняется при регулировании звука в Винде. А должен ? ThisComputer.volumeLevel - это не громкость звука именно MajorDoMo ?
Там еще должно быть что то типа Медиалевел - это уровень громкости терминала МАИН. И только. И не знаю точно - но на винде работало...