Smoke

<<< Назад

Разгоняем 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.

Обсуждение (4) (7)

Смотрите так же:
19.09.2021 Хитрый MJPEG или укрощение строптивого
08.06.2021 Парсим информер с Яндекс.Погоды
13.01.2021 Не разговаривает Алиса через облако?
04.11.2020 Проксирование WebSocket с wss:// -> ws://
02.11.2020 Как получить время езды до работы?
02.06.2020 Стилизация штатного редактора кода, часть 2
01.06.2020 Распознавание речи - бесплатно, просто, быстро.
01.06.2020 Стилизация штатного редактора кода
29.01.2020 Парсим данные баланса из ЛК Билайн (Update)
28.01.2020 Camshoter на свой лад
21.01.2020 Google Location + Yandex Maps, на свой лад
19.01.2020 Получение Я.Погоды из сценария
17.01.2020 Рассказ хейтера сцен в MJDM. Часть 2
17.01.2020 Как можно НЕ использовать сцены в MJDM. Часть 2
16.01.2020 Перезагружаем роутер Zyxel из MJDM
12.12.2019 Как подружить Camshoter и обычную вебку
07.10.2019 Управление планшетом из сцен/WEB
07.10.2019 Использование злосчастных WebSoccet
17.01.2020 ~DELETED~
23.07.2019 Как можно НЕ использовать сцены в MJDM. Часть 1.

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

На форуме: SmoKE_xDDD