wirenboard/wb-zigbee2mqtt

Некорректная обработка friendly name

ptath opened this issue · 0 comments

ptath commented

В zigbee2mqtt для каждого устройства создаются топики вида zigbee2mqtt/[friendly_name], в WB они превращаются в /devices/[friendly_name]

Все хорошо если friendly_name — простая строчка вида bedroom.

Но если в z2m присвоить friendly_name вида sensors/bedroom wb-zigbee2mqtt ломается:

окт 08 11:17:15 wirenboard-A5A6674T systemd[1]: Started MQTT Rule engine for Wiren Board.
окт 08 11:17:15 wirenboard-A5A6674T wb-rules[12527]: INFO: broker URL is default and mosquitto socket detected, trying to connect via it
окт 08 11:17:15 wirenboard-A5A6674T wb-rules[12527]: INFO: driver is created
окт 08 11:17:15 wirenboard-A5A6674T wb-rules[12527]: INFO: [wbgo_mqtt] rules-wirenboard-A5A6674T-12527: MQTT connection established
окт 08 11:17:16 wirenboard-A5A6674T wb-rules[12527]: INFO: driver loop is started
окт 08 11:17:16 wirenboard-A5A6674T wb-rules[12527]: INFO: wait for driver to become ready
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: WARNING: converting value '65534' to boolean 'true'
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: driver is ready
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: [rule info] using file /var/lib/wirenboard/wbrules-persistent.db for persistent DB
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: [wbgo_mqtt] wb-rules-engine-wirenboard-A5A6674T-12527: MQTT connection established
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: [engine] Starting main loop
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: the engine is ready
окт 08 11:17:17 wirenboard-A5A6674T wb-rules[12527]: INFO: [engine] Starting sync loop
окт 08 11:17:22 wirenboard-A5A6674T wb-rules[12527]: WARNING: [rule warning] DAC: no config file
окт 08 11:17:23 wirenboard-A5A6674T wb-rules[12527]: ERROR: [rule error] Error in getting device: Device with given ID doesn't exist
окт 08 11:17:23 wirenboard-A5A6674T wb-rules[12527]: ERROR: device definition error: Device ID has incorrect symbols
окт 08 11:17:23 wirenboard-A5A6674T wb-rules[12527]: ERROR: [rule error] ECMAScript error: Error: Device ID has incorrect symbols
                                                                /sbuild-nonexistent/go/pkg/mod/github.com/wirenboard/go-duktape@v0.0.0-20210723134114-881337fff8cb/api.go:124
                                                                anon  native strict preventsyield
                                                                anon /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js:124 preventsyield
                                                                parse  native strict preventsyield
                                                                anon /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js:135 preventsyield
окт 08 11:17:25 wirenboard-A5A6674T wb-rules[12527]: INFO: all rule files are loaded
окт 08 11:40:22 wirenboard-A5A6674T wb-rules[12527]: ERROR: [rule error] Error in getting device: Device with given ID doesn't exist

В работе это выглядит так: z2m-устройства в /devices уходят в retained кроме тех, кому повезло по порядку оказаться выше в списке чем проблемный девайс. Отвалившиеся перестают обновляться, "везучие" работают нормально.

Конкретно в моем случае я проверял возможность работы friendly_name вида sensors/bedroom (около 2 месяцев назад) и понял что это работает в z2m, но не отображается в mqtt WB. Всё остальное работало прекрасно и вот вчера я перезагрузил WB. После этого часть устройств z2m нормально отображались через wb-zigbee2mqtt (включая bridge), часть — нет, понять в чем причина лично для меня было весьма сложно. Убрал из z2m все со слешем, перезапустил wb-rules и все заработало.

В документации z2m:

You can use the / separator in friendly_name to structure devices. For example, using a friendly_name like kitchen/floor_light would result in a corresponding MQTT structure with kitchen as folder containing floor_light in MQTT Explorer.