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

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Аватара пользователя
S_Nick
Сообщения: 67
Зарегистрирован: Сб сен 30, 2017 7:44 pm
Откуда: Минск
Благодарил (а): 9 раз
Поблагодарили: 55 раз
Контактная информация:

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

Сообщение S_Nick » Сб окт 26, 2019 10:24 am

Автоматическая регулировка уровня громкости сервера 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. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.
Последний раз редактировалось S_Nick Пн окт 28, 2019 3:15 pm, всего редактировалось 1 раз.
За это сообщение автора S_Nick поблагодарили (всего 2):
xor (Сб окт 26, 2019 12:55 pm) • Logrus (Сб окт 26, 2019 1:39 pm)
Рейтинг: 2.33%
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Сб окт 26, 2019 12:58 pm

У меня это реализовано не на уровне шума, а на присутствии. И установка громкости сделана методом, а не скриптом, вроде, так из коробки идёт?

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

Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Сб окт 26, 2019 1:39 pm

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

и девайс от броадлинка дорогой и бесполезный
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
S_Nick
Сообщения: 67
Зарегистрирован: Сб сен 30, 2017 7:44 pm
Откуда: Минск
Благодарил (а): 9 раз
Поблагодарили: 55 раз
Контактная информация:

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

Сообщение S_Nick » Сб окт 26, 2019 4:49 pm

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 и других
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Сб окт 26, 2019 5:54 pm

Ну да, у каждого своя ситуация. Если есть возможность контролировать шум, ок. Бродлинк у меня куплен тоже давным-давно и грех не использовать его возможности.
Приветствую ваше желание делиться своими решениями.

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

Аватара пользователя
S_Nick
Сообщения: 67
Зарегистрирован: Сб сен 30, 2017 7:44 pm
Откуда: Минск
Благодарил (а): 9 раз
Поблагодарили: 55 раз
Контактная информация:

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

Сообщение S_Nick » Сб окт 26, 2019 9:42 pm

xor писал(а):
Сб окт 26, 2019 5:54 pm
Приветствую ваше желание делиться своими решениями.
Спасибо, пользуйтесь, буду рад если кому-то пригодиться.
Вроде бы большое сообщество мажордомо, а готовых решений за частую не найти, нужно исправлять ситуацию.
За это сообщение автора S_Nick поблагодарил:
webms (Ср ноя 13, 2019 4:52 pm)
Рейтинг: 1.16%
Garik908
Сообщения: 56
Зарегистрирован: Пт ноя 01, 2019 9:58 am
Благодарил (а): 44 раза
Поблагодарили: 2 раза

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

Сообщение Garik908 » Вт ноя 05, 2019 7:40 pm

Добрый день! Какой день пытаюсь решить проблему с данными. Мозги мои не могут справится. Может подскажите. Почему при изменение громкости на компьютере автоматические не обновляются данные в VolumeLevelChanged? Может изначально данная функция не работает и нужно где то настроит?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Вт ноя 05, 2019 9:47 pm

Garik908 писал(а):
Вт ноя 05, 2019 7:40 pm
Добрый день! Какой день пытаюсь решить проблему с данными. Мозги мои не могут справится. Может подскажите. Почему при изменение громкости на компьютере автоматические не обновляются данные в VolumeLevelChanged? Может изначально данная функция не работает и нужно где то настроит?
Для какого типа терминала регилуриете звук? если для Маин то вроде должно работать. Если для других - то бесполезно
Спасибо нам ПОМОЖЕТ..!
Jilber
Сообщения: 686
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

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

Сообщение Jilber » Вт ноя 05, 2019 9:50 pm

Я так понимаю, что человек просто в Винде регулирует звук. Сейчас проверил у себя - ThisComputer.volumeLevel не меняется при регулировании звука в Винде. А должен ? ThisComputer.volumeLevel - это не громкость звука именно MajorDoMo ?
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Вт ноя 05, 2019 9:58 pm

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