Smoke

 
<<< Back

Разгоняем Xiaomi Home

Уменьшаем задержку в отправке команд в модуле Xiaomi Home

Предыстория

Весь свет у меня через реле Aqara Zigbee и я уже смерился с задержкой включения света в ~1 секунду после нажатия на выключатель. Ну тут в чатике чет стали обсуждать это и я полез в код. Делюсь.
Инструкция для более-менее уверенных пользователей, сильно разжёвывать не буду.

Действия, которые будем делать.

1) Изменим тип поля в таблице xiqueue
2) Изменим тип таблицы
3) Уберем "долгие" функции в цикле
4) Заставим работать цикл каждые 300мс

Делаем.

Заходим в pma, находит таблицу xiqueue, заходим в структуру и меняем в поле DATA меняем тип на varchar(255). Далее идем в операции этой же таблицы и меняем тип таблицы на MEMORY.
Далее открываем /scripts/cycle_xiaomihome.php и там:
на 99 строке меняем на while (true) {
в 108 строке с условии if ($queue[0]['ID']) { 
меняем все на:

foreach($queue as $k => $v) {
            $data = $v['DATA'];
            if ($cycle_debug) echo date('H:i:s') . ' Queue command: ' . json_encode($v) . PHP_EOL;
            if ($gate_ip != '') {
               $ip = $gate_ip;
            } else {
               $ip = $v['IP'];
            }
            if ($cycle_debug) echo date('H:i:s') . " Sending: $data to $ip" . PHP_EOL;
            $xiaomihome_module->sendMessage($data, $ip, $sock);
            SQLExec("DELETE FROM xiqueue WHERE ID=" . $v['ID']);
            $tcv_count++;
        }

Тем самым мы убили долгую функцию count() и тормозной цикл for()
Далее идем в самый низ и последние 4 строчки файла привести в такой вид:

   usleep(300000);
}

echo date('H:i:s') . ' Unexpected close of cycle' . PHP_EOL;

DebMes('Unexpected close of cycle: ' . basename(__FILE__));

Рестартим цикл и все готово.
Спешиал фенкс - Logrus.

Discuss (4) (8)

See also:
2023-03-13 Debounce настройка в z2m
2023-03-06 Боремся с mysql и жором места на диске
2021-10-24 Определяем выключен ли свет по камере о_О
2021-10-18 Опять прокси WS! Теперь для KeenDNS+NGINX
2021-09-19 Хитрый MJPEG или укрощение строптивого
2021-06-08 Парсим информер с Яндекс.Погоды
2021-01-13 Не разговаривает Алиса через облако?
2020-11-04 Проксирование WebSocket с wss:// -> ws://
2020-11-02 Как получить время езды до работы?
2020-06-02 Стилизация штатного редактора кода, часть 2
2020-06-01 Распознавание речи - бесплатно, просто, быстро.
2020-06-01 Стилизация штатного редактора кода
2020-01-29 Парсим данные баланса из ЛК Билайн (Update)
2020-01-28 Camshoter на свой лад
2020-01-21 Google Location + Yandex Maps, на свой лад
2020-01-19 Получение Я.Погоды из сценария
2020-01-17 Рассказ хейтера сцен в MJDM. Часть 2
2020-01-17 Как можно НЕ использовать сцены в MJDM. Часть 2
2020-01-16 Перезагружаем роутер Zyxel из MJDM
2019-12-12 Как подружить Camshoter и обычную вебку
2019-10-07 Управление планшетом из сцен/WEB
2019-10-07 Использование злосчастных WebSoccet
2020-01-17 ~DELETED~
2019-07-23 Как можно НЕ использовать сцены в MJDM. Часть 1.

Нижний Новгород, Россия

На форуме: SmoKE_xDDD