Не отображаются устройство Zigbee в веб-интерфейсе контроллера

При попытке добавления реле TuYa Smart light switch - 2 gang (TS0012) сделал следующее:

  1. в файле конфигурации configuration.yaml изменил имя устройства
  2. перезагрузил zigbee2mqtt
  3. удалил в веб-интерфейсе WB устройства
  4. перезагрузил страницу CTRL-SHIFT-R

После этого устройство пропало и никак не появлялось в веб-интерейсе.

Пробовал:

  • перезагружать WB
  • удалял устройство из файла конфигурации и добалял заново

Устройство так и не появляется… Что делать? Куда копать?

При этом в логе Z2M всё ок:
Mar 19 02:47:20 wirenboard-ALKHCD3E npm[455]: Zigbee2MQTT:info 2022-03-19 02:47:20: Device ‘Light Ksusha’ is supported, identified as: TuYa Smart light switch - 2 gang (TS0012)
Mar 19 02:47:20 wirenboard-ALKHCD3E npm[455]: Zigbee2MQTT:info 2022-03-19 02:47:20: MQTT publish: topic ‘zigbee2mqtt/bridge/event’, payload ‘{“data”:{“definition”:{“description”:“Smart light switch - 2 gang”,“exposes”:[{“endpoint”:“left”,“features”:[{“access”:7,“description”:“On/off state of the switch”,“endpoint”:“left”,“name”:“state”,“property”:“state_left”,“type”:“binary”,“value_off”:“OFF”,“value_on”:“ON”,“value_toggle”:“TOGGLE”}],“type”:“switch”},{“endpoint”:“right”,“features”:[{“access”:7,“description”:“On/off state of the switch”,“endpoint”:“right”,“name”:“state”,“property”:“state_right”,“type”:“binary”,“value_off”:“OFF”,“value_on”:“ON”,“value_toggle”:“TOGGLE”}],“type”:“switch”},{“access”:1,“description”:“Link quality (signal strength)”,“name”:“linkquality”,“property”:“linkquality”,“type”:“numeric”,“unit”:“lqi”,“value_max”:255,“value_min”:0}],“model”:“TS0012”,“supports_ota”:false,“vendor”:“TuYa”},“friendly_name”:“Light Ksusha”,“ieee_address”:“0xa4c13858501c83a4”,“status”:“successful”,“supported”:true},“type”:“device_interview”}’
Mar 19 02:47:20 wirenboard-ALKHCD3E npm[455]: Zigbee2MQTT:info 2022-03-19 02:47:20: Configuring ‘Light Ksusha’
Mar 19 02:47:20 wirenboard-ALKHCD3E npm[455]: Zigbee2MQTT:info 2022-03-19 02:47:20: MQTT publish: topic ‘zigbee2mqtt/bridge/log’, payload ‘{“message”:“interview_successful”,“meta”:{“description”:“Smart light switch - 2 gang”,“friendly_name”:“Light Ksusha”,“model”:“TS0012”,“supported”:true,“vendor”:“TuYa”},“type”:“pairing”}’
Mar 19 02:47:20 wirenboard-ALKHCD3E npm[455]: Zigbee2MQTT:info 2022-03-19 02:47:20: Successfully configured ‘Light Ksusha’

Здравствуйте. А по какой инструкции вы это делали? Имя какого устройства менялось и зачем удаляли устройства в веб-интерфейсе?

Подскажите:

  1. Стоит ли пакет wb-zigbee2mqtt, покажите вывод команды apt policy wb-zigbee2mqtt.
  2. Как вы устанавливали zigbee2mqtt
1 Like

Четкой инструкции не нашел, поэтому второй вопрос - как правильно?
Я примерно так добавлял предыдущие устройства - они до сих пор нормально работают.
Имя устройства поменял с:
‘0xa4c13858501c83a4’:
friendly_name: ‘0xa4c13858501c83a4’
На:
‘0xa4c13858501c83a4’:
friendly_name: Light Ksusha

Удалял в веб-интерфейсе устройство со старым именем.

1
wb-zigbee2mqtt:
Installed: 1.0.0
Candidate: 1.0.0
Version table:
*** 1.0.0 990
990 http://deb.wirenboard.com/wb6/stretch stable/main armhf Packages
100 /var/lib/dpkg/status

  1. zigbee2mqtt устанавливал по инструкции в вики wirenboard

вот на всякий случай статус z2m:
systemctl status zigbee2mqtt
● zigbee2mqtt.service - zigbee2mqtt
Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-03-19 03:11:16 MSK; 16h ago
Main PID: 4347 (node)
CGroup: /system.slice/zigbee2mqtt.service
├─4347 npm
├─4359 sh -c node index.js
└─4360 node index.js

Инструкцию можно посмотреть в документации на zigbee2mqtt.

Вот здесь важно — вы ставили пакетом или из исходников? Какая у вас версия?

У меня не воспроизводится:

  1. Изменил для одного устройства friendly_name в файле /mnt/data/root/zigbee2mqtt/data/configuration.yaml
    изображение
  2. Перезапустил сервис командой systemctl restart zigbee2mqtt
  3. В веб-интерфейсе появилось новое устройство с заданным именем
    изображение
  4. Старое осталось, удалил нажатием на корзинку. Новое продолжило работу, данные идут.

Единственное, у меня версия zigbee2mqtt 1.24.0, но friendly_name, на сколько я помню, было всегда.

Что делать
Нам надо сейчас разобраться, где возникла проблема, поэтому мы сперва проверим, что zigbee2mqtt работает нормально, а потом будем проверять сам конвертер wb-zigbee2mqtt. Я помню, про логи, которые вы давали выше, но предлагаю всё перепроверить.

  1. Попробуйте заключить значение в кавычки, как рекомендует официальная документация, вы сказали, что у вас так:
  1. Поставьте MQTT Explorer , подключитесь к MQTT контроллера и проверьте, есть ли устройство с новым именем в топике zigbee2mqtt. У меня это выглядит так:
    изображение
  2. Если в предыдущем пункте всё в порядке, продолжаем. Так как наш конвертер wb-zigbee2mqtt — это скрипт на wb-rules, перезапустите его и проверьте, не появилось ли новое устройство. Команда для перезапуска: systemctl restart wb-rules. Пощёлкайте выключателем, так как конвертер создаёт виртуальные устройства только для тех zigbee-устройств, которые изменили своё состояние.

Обновлено
Ещё проверьте в MQTT Explorer — нет ли устройства с таким же именем и неправильными топиками. У меня при удалении устройства в веб-интерфейсе, устройство осталось в MQTT, но топики в нём стали без meta. В вашем случае ищите устройство Light Ksusha.
изображение

Изменил имя устройство, перезапустил сервис, изменений нет.

Не могу подключиться MQTT Explorer

подписался на топики из командной строки:
mosquitto_sub -t ‘#’ -v
и при включении-выключении света там появлялись следующие сообщения:
zigbee2mqtt/bridge/logging {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/Light Ksusha’, payload ‘{“last_seen”:1647899762287,“linkquality”:28,“state_left”:“OFF”,“state_right”:“ON”}’”}
zigbee2mqtt/Light Ksusha {“last_seen”:1647899762287,“linkquality”:28,“state_left”:“OFF”,“state_right”:“ON”}

стандартайх сообщений MQTT не было

без изменений

изначально устройство появилось в веб-интерфейсе, но без свойств. Т.е. там не отображался статус и никакие параметры.

Также есть датчик освещенности, который несколько недель уже отстутствует. Я его удалял из веб-интерфейса, из конфигурационного файла, но он все равно появляется еще и в двойном объёме: с имененм по умолчанию и с новым именем

Вот теперь понятна проблема и её причина. Притом появление устройства со старым именем — это похоже на баг в MQTT-брокере с retained значениями, который будет исправлен при переходе на новую версию, надеюсь, что скоро.

Попрошу @BrainRoot прокомментировать мои заключения и поправить меня.

Как это работает
Веб-интерфейс просто рисует то, что находится в MQTT-брокере в топике /devices. Чтобы он мог нарисовать устройство верно, его описание в брокере должно соответствовать конвенции.

Топики Zigbee-устройств в нотации Wiren Board MQTT Conventions создаются правилом, написанном на wb-rules, которое вы устанавливаете как пакет wb-zigbee2mqtt.

Почему ломается
В момент удаления устройства из веб-интерфейса вызывается что-то вроде mqtt-delete-retained '/devices/friendly_name/#' точнее, думаю, скажет @BrainRoot.

В то же время скрипт получает изменения от физического Zigbee устройства в топике zigbee2mqtt/friendly_name и публикует значения в /devices/friendly_name. И вот тут всё ломается — мы получаем WB- устройство, которое описано неверно и поэтому не появляется в веб-интерфейсе, но которое существует, поэтому скрипт его не создаёт заново (как на моём скрине, где у controls нет meta). Судя по всему, это баг wb-rules — я сформирую описание и оформлю багрепорт.

Что делать
Чтобы такого не повторялось, перед удалением устройства из веб-интерфейса попробуйте останавливать сервис wb-rules. Так мы должны избежать коллизии.

А с устройством Light Ksusha — подпишитесь на топик /devices/Light Ksusha/#, выключите/включите выключатель. У вас должны прилететь сообщения. Если это так, то остановите wb-rules и удалите устройство /devices/Light Ksusha. Я не знаю, как удалить через mosquitto_sub, поэтому прошу @BrainRoot помочь.

retained топики можно удалить так: MQTT — Wiren Board

Тут скорее не wb-rules а wb-zigbee2mqtt виновник.

удалилось успешно

подписался на топик
mosquitto_sub -t ‘/devices/Light Ksusha/#’ -v
ничего не прилетает

подписался на всё
mosquitto_sub -t ‘#’ -v

прилетает только в таком виде:
zigbee2mqtt/bridge/logging {“level”:“info”,“message”:“MQTT publish: topic ‘zigbee2mqtt/Light Ksusha’, payload ‘{“last_seen”:1647985748482,“linkquality”:5,“state_left”:“OFF”,“state_right”:“OFF”}’”}
zigbee2mqtt/Light Ksusha {“last_seen”:1647985748482,“linkquality”:5,“state_left”:“OFF”,“state_right”:“OFF”}

Не знаю что это значит, но отличается от других устройств.

подскажите, что я делаю не так. Почему Explorer не подключается? Логин и пароль пустой? Топик просто #?

Есть хоть какие-то идеи?

подписался по-другому:
:~# mosquitto_sub -t ‘zigbee2mqtt/Light Ksusha/#’ -v
zigbee2mqtt/Light Ksusha {“last_seen”:1647988027870,“linkquality”:33,“state_left”:“OFF”,“state_right”:“ON”}
zigbee2mqtt/Light Ksusha {“last_seen”:1647988029262,“linkquality”:33,“state_left”:“OFF”,“state_right”:“OFF”}

события начали приходить

А вы напрямую подключаетесь к контроллеру, без промежуточных шлюзов?

Предположу, что mosquitto_sub вы используете локально, тогда у вас может быть закрыто подключение к MQTT извне, откройте файл /etc/mosquitto/conf.d/listeners.conf, там должно быть так:

listener 1883 0.0.0.0

listener 18883 0.0.0.0
protocol websockets
  1. Проверьте, что wb-rules запущен: systemctl status wb-rules
  2. Подпишитесь на все значения контролов устройств, и нажмите на выключатель, так мы увидим, как он называется сейчас в /devices/:
mosquitto_sub -t '/devices/+/+/+' -v

У меня устройств и топиков много, но часть выглядела так:

/devices/Zigbee Button/controls/action single
/devices/Zigbee Button/controls/click single
/devices/wb-adc/controls/Vin 23.77

Для наглядности, как выглядит топик /devices/Zigbee Button/controls/action single в MQTT Explorer:

Это вы подписались на события моста zigbee2mqtt, хорошо, что он работает, но у нас проблема в другом.

Здесь я не понял, что вы удалили — устройство /devices/Light Ksusha? Если да, то останавливали перед этим wb-rules?

И, наверное, нам нужно снова сформулировать проблему, так как она уже может отличаться от первоначальной.

p,s, Я проверил, команда на удаление топиков устройства и самого устройства devices/Zigbee Button будет такой:
mqtt-delete-retained '/devices/Zigbee Button/#'