Here you can vote for ideas by projects. You can add your ideas to any open project from the project's page.
<<< Backhttps://github.com/nick7zmail/MajorDoMo-dev_broadl...
Я готов подготовить PR еще для одной проблемы но требуется обсуждение и одбрямс :)
Как справедливо мне указали, при недоступности нескольких опрашиваемых в цикле устройств время опроса становится очень большим и MD считает модуль зависшим. А иногда и совсем может его положить.
Причина в том, что модуль опрашивает все устройства подряд (dev_broadlink_check.inc.php#78), независимо от того, доступны ли они в текущий момент или нет. В результате опрос offline устройства занимает до 10 секунд (константа Broadlink->$timeout). А некоторые устройства (тот же HYSEN) опрашиваются в несколько последовательных вызовов и время, соответственно, возрастает кратно.
Проблема более-менее эффективно решается если внутри цикла опроса сделать ping на устройство и проверить результаты (dev_broadlink_check.inc.php#84):
if(!is_null($rm) && $rm->ping() ) {
Я поигрался с этим workaround'ом, выставив таймаут в 500мс. В результате все работает как положено и даже при 10 недоступных устройствах (8 термостатов, RM4Pro и RM4mini) задержка составляет меньше 6 секунд. Успешный ping у меня отрабатывает 10-50мс, здесь тоже говорить не о чем.
НО
Метод ping() уже реализован в базовом классе. И в нем вроде бы все хорошо - за одним исключением: по умолчанию используется UDP ping, который не работает ни с одним из моих устройств. В отличие от ICMP, который (насколько я понимаю) в локальной сети должен отрабатывать практически всегда. Но поскольку у меня нет возможности проверить это на всем зоопарке поддерживаемых устройств а последствия неправильно работающей проверки будут фатальны - вопрос: насколько безопасно будет перевернуть логику, сделав ICMP ping основным, а UDP - на правах исключения для устройств там, где это действительно необходимо?
Безопасности можно добавить, реализовав checkbox "проверять доступность устройств" на странице настроек, выключенный по умолчанию.
м?