Wiren Board 8.5.1, release wb-2504 (as stable)
После перезагрузки сервиса 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.


