После перезагрузки сервиса wb-rules.service, первое сообщение от Zigbee-устройства замещается сохранённым
sudo systemctl restart wb-rules.service
Обнаружено при использовании пульта Moes Scene Switch ZS-SR-R01, у которого при коротком нажатии одной из 4-х кнопок прилетает 1_single, 2_single, 3_single, 4_single соответственно.
Начальные условия:
контроллер загружен
правила корректно обрабатываются
нажатия кнопок на пульте передаются в топик /devices/moes_sceneswitch_1/controls/action
Воспроизведение бага:
нажать на пульте кнопку 4, получив в топик значение 4_single
в консоли контроллера перезапустить сервис wb-rules.service
нажать на пульте кнопку 1, в топик прилетит значение 4_single
В попытках выяснить причины такого поведения, добавил логирование в функцию initTracker файла wb-zigbee2mqtt.js:
В результате обнаружил следующее поведение внутри wb-rules:
в момент подписки через trackMqtt на топик /devices/moes_sceneswitch_1/controls/action прилетает сохранённое значение 4_single (игнорируем)
при нажатии 1-й кнопки на пульте, initTracker устанавливает корректное значение 1_single, выдавая сообщение вида
wb-z2m: control NOT exists, setting value...
1_single
После чего в топик /devices/moes_sceneswitch_1/controls/action повторно прилетает сохранённое значение 4_single и метка времени last_seen соответствует моменту времени до перезагрузки сервиса. Последующие нажатия кнопок обрабатываются корректно.
В качестве эксперимента, подписался на отслеживание в коде правил двух топиков:
zigbee2mqtt/moes_sceneswitch_1
/devices/moes_sceneswitch_1/controls/action
Видно, что zigbee2mqtt отправляет новое значение 1_single, но перезагруженные правила первое нажатие кнопки трактуют как сохранённое 4_single.
Добрый день. Стандартная связка zigbee2mqtt и wb-zigbee2mqtt, в этой части ничего не менялось. Глубже в коды контроллера пока что не вникал - работаю на сброшенной до заводских настроек и затем обновлённой до актуального состояния версии.
Код в сценариях wb-rules только прослушивает, на данном этапе в топики ничего не записывает.
zigbee2mqtt отправляет набор полей, конвертер wb-zigbee2mqtt при инициализации создаёт виртуальное устройство и следит за обновлением значений в контролах.
Первое искажённое значение как-то связано с инициализацией контрола на созданном wb-zigbee2mqtt виртуальном устройстве (контрол не существует до момента первого с перезапуска wb-rules.service нажатия на кнопку).
Вот я про это и спрашиваю. Что, какие записи в топики устрйоства публикует z2m? Подпишитсь на них, лучше с дататаймом, для того чтобы сопоставить с логами и покажите.