Странное поведение датчиков WB-MSW-ZIGBEE v.3

Причину этого я понять могу: не создались нормально топики в /devices. Такое бывает, если добавить датчик, потом удалить его в веб-интерфейсе контроллера и снова добавить.

Чтобы всё заработало, обычно достаточно перезапустить wb-rules: systemctl restart wb-rules.

Проверил, мои датчики работают на zigbee2mqtt 1.25.2 из нашего репозитория. Сейчас прошивка в датчиках 54, до этого была 52 — также работает.

Надо теперь разобраться, почему не работает у вас, @Explorerol порекомендует список шагов, чтобы выяснить причину.



Screenshot 2022-09-07 at 22-32-37 Zigbee2MQTT|690x336
Screenshot 2022-09-07 at 22-31-13 Zigbee2MQTT|690x336
Screenshot 2022-09-07 at 22-30-36 Zigbee2MQTT|690x336

Топики действительно не создаются. Не помогает ни перезапуск wb-rules, ни перезагрузка контроллера, ни удаление и переподключение устройства. Могут ли какие-то настройки z2m столь драматично влиять на работу конвертора? И почему топики при этом создаются избирательно? Может ли конвертор крэшиться на каких-то сторонних устройствах?

А какие идеи по первой проблеме?
Два датчика"из коробки" оказались переключенными в режим модбас, один - в режим зигби. Что уже странно. Независимо от положения переключателя, все датчики добавкляются по зигби, но первые два в payload вместо показаний каждого сенсора отдают null. При этом положение переключателя влияет только на работоспособность светодиодов и пищалки, а также на мигание status LED.

Тот датчик, который был изначально переключён в режим зигби, отдаёт в payload все значения корректно.
Все три датчика испытывались на трёх разных системах идентичным образом… Тот, который был изначально переключён на зигби, во всех сетапах отдаёт корректные данные, остальные два корректно отдают показания сенсоров только по модбас, а в режиме зигби не отдают данные с сенсоров ни в одном сетапе. Предполагаю, что в этих двух датчиках зигби модуль опрашивает основной микроконтроллер (судя по миганию status LED), но не получает запрошенные данные (судя по тому, что отправляет null).

Три тестовых сетапа:

  1. WB7 2Gb, z2m 1.25 из репозитория WB, установленный по инструкции WB.
  2. z2m 1.27 в HAOS на Xeon под Proxmox.
  3. z2m 1.27 в HAOS на Raspberry Pi 4.
    Поведение датчиков идентично во всех указанных системах.

Пришлите, пожалуйста, фото наклеек датчиков с серийными номерами, укажите, какие из них проблемные.

Согласен, такого быть не должно.

В датчике есть микроконтроллер, который общается с внешним миром по UART. Далее этот UART можно подключить либо к трансиверу RS-485, либо к радиомодулю Zigbee, то и делает красный переключатель. А так как модуль Zigbee продолжает работать, то вы можете подключить датчик по Zigbee, но показаний не будет. Предположу, то null может отдаваться при положении переключателя “RS-485”.

Это и правда не очевидные вещи, опишу их в документации. Спасибо вам за терпение и желание разобраться — каждый такой случай помогает сделать продукт чуточку лучше.

1 лайк

Архитектуру датчика я понял сразу. И действие выключателя тоже.

Как я уже писал ранее, NULL ПЕРЕДАЁТСЯ ПО ZIGBEE ПРИ ЛЮБОМ ПОЛОЖЕНИИ ВЫКЛЮЧАТЕЛЯ. То есть, даже при “правильном” положении выключателя zigbee модуль не получает данные.

Вопрос - почему управление светодиодами и пищалкой по зигби работает? Они управляются не через serial порт, а непосредственно через GPIO? Или связь между микроконтроллерами работает только в одну сторону? Если второе (при отсутствии проверки связи в протоколе), это похоже на банальное отсутствие контакта Tx-Rx от микроконтроллера к зигби-модулю.

Думаю, дальше процесс пошёл бы продуктивнее, если бы добрый человек из компании Wirenboard привёз бы мне заведомо работоспособные датчики, а неработающие забрал бы в вашу лабораторию для дальнейшего исследования. И с точки зрения клиентоориентированности это было бы очень правильно. Я не представляю, как использовать оборудование WB в проекте на несколько десятков шкафов автоматизации, когда уже неделю не удаётся добиться работоспособности просто датчика, который должен работать “из коробки”.

Крайне забавно. В одном из неработавших датчиков подёргал выключатель туда-обратно много раз подряд, контакт вроде появился, данные стали передаваться… Другой дома лежит, попробую проверить вечером.

Что же, и на приём, и на передачу контакты переключаются чисто механически??? И какова вероятность того, что контакт не пропадёт снова, когда датчики будут у клиента?

Обновление. После спаривания “ожившего” датчика (с многократно подёрганным выключателем) с z2m на WB (а в этом датчике в ходе эксперимента была обновлена прошивка микроконтроллера), в WB появились все топики для этого датчика! Плохая новость в том, что данные пробросились однократно и в софте WB не обновляются. В интерфейсе z2m показания видны в реальном времени, а в WB - нет, замерли на значениях, имевших место при инициализации топиков.

а вообще, продукт в компании кто-нибудь полноценно тестировал перед выпуском?

Специально съездил за третьим датчиком. Проделал ту же процедуру с многократным передёргиванием выключателя. После этого данные по zigbee начали передаваться, но топик создаётся только на co2.

Итого, обнаруживаются странные закономерности:

  1. Выключатели ненадёжны. Могут временно вылечиваться многократным передёргиванием, но, вероятно, могут и обратно терять контакт. Лучше сделать автоматическое программное переключение или реализовать параллельную работу с двумя интерфейсами.

  2. Без обновления через сериал порт, конвертор wb-zigbee2mqtt создаёт топики только для co2. После обновления создаются все топики, но данные в них не передаются (остаются те, которые были при создании). При этом, payload, отдаваемый z2m, обновляется в реальном времени и содержит все данные вне зависимости от того, обновлялась прошивка датчика или нет.

Да, это нехорошо. Пришлите, пожалуйста, фото наклеек датчиков с серийными номерами и укажите, с какими из них возникли проблемы, чтобы определить проблемную партию.

Попробуйте еще раз перезапустить сервис wb-rules:

systemctl restart wb-rules

Убедитесь, что он работает:

systemctl status wb-rules

Также попробуйте обновить пакет zigbee2mqtt до последней версии 1.25.2

Это оно? :wink:

root@wirenboard-AKZUOJZW:~# systemctl restart wb-rules
root@wirenboard-AKZUOJZW:~# systemctl status wb-rules
● wb-rules.service - MQTT Rule engine for Wiren Board
Loaded: loaded (/lib/systemd/system/wb-rules.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-09-08 14:49:08 UTC; 3min 53s ago
Main PID: 10231 (wb-rules)
CGroup: /system.slice/wb-rules.service
└─10231 /usr/bin/wb-rules -syslog -editdir /etc/wb-rules/ /usr/share/wb-rules-system/rules/ /etc/wb-rules/ /usr/share/wb-rules/

Sep 08 14:52:48 wirenboard-AKZUOJZW wb-rules[10231]: ERROR: [rule error] ECMAScript error: TypeError: invalid base value
duk_hobject_props.c:2000
anon /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js:147 preventsyield
parse native strict preventsyield
anon /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js:150 preventsyield

(эта ошибка повторяется в цикле)

После удаления “необновлённых” датчиков картина меняется. Но данные в реальном времени всё равно не передаются.

wb-rules.service - MQTT Rule engine for Wiren Board
Loaded: loaded (/lib/systemd/system/wb-rules.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-09-08 15:23:24 UTC; 3s ago
Main PID: 29334 (wb-rules)
CGroup: /system.slice/wb-rules.service
└─29334 /usr/bin/wb-rules -syslog -editdir /etc/wb-rules/ /usr/share/wb-rules-system/rules/ /etc/wb-rules/ /usr/share/wb-rules/

Sep 08 15:23:25 wirenboard-AKZUOJZW wb-rules[29334]: INFO: /usr/share/wb-rules-system/rules/wb-mqtt-dac.js is NOT under source root /etc/wb-ru
Sep 08 15:23:25 wirenboard-AKZUOJZW wb-rules[29334]: sh: 4: /etc/wb_env.sh: source: not found
Sep 08 15:23:25 wirenboard-AKZUOJZW wb-rules[29334]: INFO: /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js is NOT under source root /etc/wb
Sep 08 15:23:25 wirenboard-AKZUOJZW wb-rules[29334]: INFO: system/DTS Version: failed to convert value ‘’, passing raw
Sep 08 15:23:25 wirenboard-AKZUOJZW wb-rules[29334]: INFO: /usr/share/wb-rules-system/rules/wbmz-battery.js is NOT under source root /etc/wb-r
Sep 08 15:23:26 wirenboard-AKZUOJZW wb-rules[29334]: INFO: [rule info] add your rules to /etc/wb-rules/
Sep 08 15:23:26 wirenboard-AKZUOJZW wb-rules[29334]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
Sep 08 15:23:26 wirenboard-AKZUOJZW wb-rules[29334]: ERROR: device definition error: Control ID is incorrect
Sep 08 15:23:26 wirenboard-AKZUOJZW wb-rules[29334]: WARNING: couldn’t load /usr/share/wb-rules/load_alarms.js: Error: Control ID is incorrect
/sbuild-nonexistent/go/pkg/mod/github.com/wirenboard/go-duktape@v0.0.0-2021072313
anon native strict preventsyield
doLoad /usr/share/wb-rules-system/scripts/lib.js:649 tailcalled
anon /usr/share/wb-rules/load_alarms.js:1 preventsyield
Sep 08 15:23:26 wirenboard-AKZUOJZW wb-rules[29334]: INFO: all rule files are loaded

Да, все правильно. Из логов видно, что конвертер wb-zigbee2mqtt почему-то не смог корректно обработать данные, которые публикуются сервисом zigbee2mqtt. Постараемся изучить проблему.

Если это все логи, то в этом случае явных ошибок нет. Пришлите, пожалуйста, еще архив с диагностической информацией контроллера. Создание архива описано в инструкции.

Еще напишите, какая у вас версия модуля Zigbee: WBE2R-R-ZIGBEE v.1 или WBE2R-R-ZIGBEE v.2

При переключении переключателя режимов работы датчика ползунок точно переводили в крайнее положение ON, до упора? Иногда может показаться, что переключатель включен, но это его не крайнее положение.

V2. Точно до упора.

diag_output_AKZUOJZW_2022-09-09-14.37.12.zip (118.9 КБ)

Да, все правильно. Из логов видно, что конвертер wb-zigbee2mqtt почему-то не смог корректно обработать данные, которые публикуются сервисом zigbee2mqtt.

Покажите еще лог сервиса zigbee2mqtt с данными от датчиков:

journalctl -u zigbee2mqtt > /root/zigbee2mqtt.log

Файл /root/zigbee2mqtt.log пришлите. Попробую воспроизвести проблему.

Подключил датчик, проверяю. Смотрю топики, которые публикует zigbee2mqtt. Подписываюсь на топики командой:

mosquitto_sub -v -t zigbee2mqtt/#

Наблюдаю, что приходят такие данные:

zigbee2mqtt/0x04cd15fffea0b238 {"co2":899,"humidity":39.01,"illuminance":19352,"illuminance_lux":86,"last_seen":1663061019711,"linkquality":187,"noise":"38.67","noise_detected":false,"occupancy":false,"occupancy_level":15,"state_l1":"OFF","state_l2":"OFF","state_l3":"OFF","temperature":23.61,"update":{"state":"idle"},"update_available":false,"voc":2}

Они отображаются в веб-интерфейсе:
image

В логах wb-rules не вижу ошибок:

journalctl -f -u wb-rules

Попробуйте переустановить пакет wb-zigbee2mqtt:

apt install wb-zigbee2mqtt --reinstall

Еще какая-то проблема есть в файле /usr/share/wb-rules/load_alarms.js.