Zigbee: различия между версиями

Материал из Wiren Board
(не показано 156 промежуточных версий 9 участников)
Строка 1: Строка 1:
<languages/>
{{DISPLAYTITLE:Подключение устройств Zigbee к контроллеру Wiren Board}}
<!--T:1-->
== Описание ==
{{DISPLAYTITLE:Wiren Board 6: Подключение устройств ZigBee}}
Для использования Zigbee-устройств с контроллером Wiren Board понадобится:
== Аппаратная часть == <!--T:4-->
# Модуль расширения [[WBE2R-R-ZIGBEE v.2 ZigBee Extension Module|WBE2R-R-ZIGBEE v.2]] ([[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module|WBE2R-R-ZIGBEE v.1]]) или любой USB Zigbee стик.
[[Файл:WBE2R-R-ZIGBEE top.jpg|300px|thumb|right| Лицевая сторона модуля  WBE2R-R-ZIGBEE]]  
# Дополнительное ПО:
[[Файл:WBE2R-R-ZIGBEE bot.jpg|300px|thumb|right| Обратная сторона модуля WBE2R-R-ZIGBEE]]  
#* zigbee2mqtt — мост, с помощью которого можно управлять Zigbee-устройствами через [[MQTT]], [https://www.zigbee2mqtt.io/supported-devices/ поддерживаемые устройства].
[[Файл:Cc2531-usb.png|300px|thumb|right| USB стик СС2531]]  
#* wb-zigbee2mqtt — конвертер данных из топиков zigbee2mqtt в [https://github.com/wirenboard/conventions/ Wiren Board MQTT Conventions].


<!--T:5-->
Инструкции по установке смотрите ниже на этой странице.  
Для работы контроллера с ZigBee устройствами необходимо подключить специальный модуль. Есть несколько вариантовː


* [[Wbe2r-r-zigbee|WBE2R-R-ZIGBEE - Модуль расширения Zigbee]]
{{Wbincludes:Installing Software In Console}}
* USB Стик CC2531 (Можно приобрести на [https://ru.aliexpress.com/wholesale?SearchText=CC2531 Aliexpress.com])
* Модуль СС2530 c переходником usb-uart. Подключениеː
<!--T:6-->
{| class="wikitable"
!USB-Serial Adaper
!CC2530
|-
|3V3
|VCC
|-
|GND
|GND
|-
|TXD
|P02
|-
|RXD
|P03
|}
<!--T:7-->


== Прошивка == <!--T:8-->
== Установка и настройка zigbee2mqtt ==
=== Процесс установки ===
Версия пакета zigbee2mqtt в стабильном релизе может отставать от актуальной версии, которая доступна у автора. Самая свежая версия всегда доступна в [[testing | тестовом релизе]].


<!--T:9-->
Мы рекомендуем устанавливать готовый пакет из нашего репозитория, их там два:
С завода модуль [[WBE2R-R-ZIGBEE]] уже прошит оптимизированной для WB и SprutHub прошивкой. Однако если это необходимо, его можно перепрошить.
* zigbee2mqtt — всегда свежая версия, рекомендуем ставить её.
* zigbee2mqtt-1.18.1 — версия для старых адаптеров WBE2R-R-ZIGBEE v.1, выпущенных до января 2022 года. [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module#revisions |Таблица ревизий]].


Для прошивки [[WBE2R-R-ZIGBEE]] или USB стика потребуется CC Debugger и загрузочный кабель. (Можно приобрести на [https://ru.aliexpress.com/wholesale?SearchText=CC2531+загрузочный+кабель Aliexpress.com]) Перед прошивкой установите [http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=swrc212&fileType=zip драйвер.]
Для установки свежей версии, введите команду:
:<syntaxhighlight lang="bash">
apt update && apt install zigbee2mqtt
</syntaxhighlight>


Подключите CC Debugger к [[WBE2R-R-ZIGBEE]] или к USB стику через загрузочный кабель. Подключите USB кабель CC Debugger(a) к компьютеру. Скачайте и установите приложение [http://www.ti.com/tool/flash-programmer FLASH-PROGRAMMER] ( обычную версию, не v2) c сайта TI. Устройство должно определиться в таблице. Укажите путь к файлу прошивки. В области "Actions" выберите "Erase, program and verify" и нажмите кнопку "Perform actions". Полезную информацию по прошивке вы так же можете найти на [https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html сайте zigbee2mqtt].
Чтобы установить 1.18.1, выполните:
:<syntaxhighlight lang="bash">
apt update && apt install zigbee2mqtt-1.18.1
</syntaxhighlight>


== zigbee2mqtt == <!--T:10-->
Альтернативный способ установки — сборка из исходников по [[Zigbee2mqtt-src | инструкции]].


<!--T:11-->
Дальше мост надо настроить, смотрите раздел Конфигурация.
[https://github.com/Koenkk/zigbee2mqtt zigbee2mqtt] - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд.
<!--T:12-->
Вы найдете всю необходимую информацию на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].


== Установка == <!--T:15-->
После установки пакета сервис zigbee2mqtt будет запускаться автоматически при старте контроллера, вы можете отключать и включать автозапуск командами:
<syntaxhighlight lang="bash">
systemctl disable zigbee2mqtt
systemctl enable zigbee2mqtt
</syntaxhighlight>


=== Конфигурация ===
<div id="config">
Если вы используете модуль расширения [[WBE2R-R-ZIGBEE]], убедитесь, что правильно выставили модуль в '''Settings''' → '''Configs''' → '''Hardware Modules Configuration'''. При использовании USB-стика порт будет называться <code>/dev/ttyUSBx</code>, где x — номер порта, нумерация с нуля.


Настраиваем репозиторий Node JS
Настройка:
<pre>
# Откройте файл конфигурации для редактированияː
curl -sL https://deb.nodesource.com/setup_12.x | bash -
#:<syntaxhighlight lang="bash">
</pre>
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
 
</syntaxhighlight>
Устанавливаем необходимые компоненты
# По умолчанию файл конфигурации выглядит так, в параметре '''port''' укажите порт, куда физически вставлен модуль:
<pre>
#:<syntaxhighlight lang="bash">
apt-get install -y nodejs git make g++ gcc
</pre>
 
''Копируем файлы из репозитория zigbee2mqtt''
<pre>
git clone https://github.com/Koenkk/zigbee2mqtt.git /mnt/data/root/zigbee2mqtt
</pre>
 
Настраиваем права
<pre>
chown -R root:root /mnt/data/root/zigbee2mqtt
</pre>
 
Заходим в директорию и запускаем установку
<pre>
cd /mnt/data/root/zigbee2mqtt
npm ci
</pre>
 
В процессе установки будет показано несколько предупреждений. Их можно игнорировать.
 
'''Оригинальная инструкция по установке zigbee2mqtt на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html официальном сайте zigbee2mqtt.io]'''
 
<!--T:16-->
Для автоматического запуска zigbee2mqtt необходимо создать сервис. Для этого зайдите в папку /etc/systemd/system/ и создайте файл zigbee2mqtt.service
 
Откройте файл и скопируйте в него следующий текстː
<pre>
[Unit]
Description=zigbee2mqtt
After=network.target
 
[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/mnt/data/root/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root
 
[Install]
WantedBy=multi-user.target
</pre>
 
И сохраните файл. После этого для активации сервиса следует ввести в консоль команду
<pre>
systemctl enable zigbee2mqtt.service
</pre>
<!--T:17-->
Полную инструкцию можно найти на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html сайте zigbee2mqtt].
 
== Конфигурация == <!--T:18-->
<!--T:19-->
После установки нужно настроить контроллер.
 
Если Вы используете модуль расширения [[WBE2R-R-ZIGBEE]],то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.
 
Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː
 
<pre>
homeassistant: false
homeassistant: false
permit_join: true
permit_join: false
mqtt:
mqtt:
   base_topic: zigbee2mqtt
   base_topic: zigbee2mqtt
   server: 'mqtt://localhost'
   server: 'mqtt://localhost'
serial:
serial:
   port: /dev/ttyMOD3
   port: /dev/ttyMOD4
advanced:
advanced:
   rtscts: false
   rtscts: false
   last_seen: epoch
   last_seen: epoch
</pre>
  pan_id: GENERATE
  network_key: GENERATE
</syntaxhighlight>
#: вместо GENERATE после первого запуска моста появятся значения, не изменяйте их.
# {{Wbincludes:Save nano}}
# Перезапустите сервис <code>zigbee2mqtt</code>:
#:<syntaxhighlight lang="bash">
systemctl restart zigbee2mqtt
</syntaxhighlight>
Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку '''Devices''' в стандартном веб-интерфейсе контроллера.


Полное описание настроек можно найти на [https://www.zigbee2mqtt.io/configuration/configuration.html сайте zigbee2mqtt].
=== Веб-интерфейс (Frontend) ===
Веб-интерфейс zigbee2mqtt потребляет ресурсы контроллера — не включайте его, если не используете: добавлять и удалять устройства можно через наш конвертер wb-zigbee2mqtt.


После изменения настроек введите команду
Если вам всё же нужен родной веб-интерфейс zigbee2mqtt, то его можно включить в файле настроек:
# Откройте файл <code>configuration.yaml</code> для редактированияː
#:<syntaxhighlight lang="bash">
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
</syntaxhighlight>
# Добавьте в него блок:
#:<syntaxhighlight lang="bash">
frontend:
  port: 8081
  host: 0.0.0.0
</syntaxhighlight>
# Сохраните и закройте файл.
# Перезапустите сервис <code>zigbee2mqtt</code>:
#:<syntaxhighlight lang="bash">
systemctl restart zigbee2mqtt
</syntaxhighlight>


<pre>
Веб-интерфейс моста zigbee2mqtt будет доступен по адресу http://wb-ip-address:PORT, например, если IP-адрес контроллера '''192.168.42.1''', а порт указан '''8081''', то веб-интерфейс будет доступен по адресу http://192.168.42.1:8081
service zigbee2mqtt restart
</pre>


== Запуск ==
=== Обновление ===
Для запуска, остановки и перезапуска сервиса используйте команды
Для обновления zigbee2mqtt на свежую версию просто обновите программное обеспечение контроллера по [[Wiren_Board_Software | инструкции]]. Будут сохранены все настройки и подключенные устройства.


<pre>
Если у вас старый адаптер [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module | WBE2R-R-ZIGBEE v.1]], выпущенный до января 2022 года, то новая версия работать не будет, в этом случае у вас есть три варианта:
service zigbee2mqtt start
* Прошить старый адаптер свежей прошивкой,  [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module#flashing | инструкция]].
service zigbee2mqtt stop
* Поставить пакет с версией, которая работает с этими адаптерами — это возможно сделать только на релизе wb-2207, в более свежих релизах на bullseye этого пакета нет:
service zigbee2mqtt restart
*:<syntaxhighlight lang="bash">
</pre>
apt install zigbee2mqtt-1.18.1
</syntaxhighlight>
* Заменить адаптер на [[WBE2R-R-ZIGBEE v.2 ZigBee Extension Module | WBE2R-R-ZIGBEE v.2]] или использовать [https://www.zigbee2mqtt.io/guide/adapters/ поддерживаемый USB-стик].


== Добавление устройств ==
== Конвертер wb-zigbee2mqtt ==
=== Описание ===
[[Image: wb-zigbee2mqtt new device in Devices.png |300px|thumb|right| Zigbee-устройство на вкладке Devices — в заголовке указан ''friendly_name'' ]]
Wb-zigbee2mqtt — конвертер данных zigbee2mqtt в топики виртуальных устройств, написан на движке правил [[wb-rules]] и устанавливается в папку с системными правилами wb-rules-system.


Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :
=== Принцип работы ===
Конвертер '''wb-zigbee2mqtt''' запрашивает у zigbee2mqtt список всех подключенных устройств и подписывается на их топики. При получении данных от физических устройств конвертер парсит json, создает виртуальное устройство и посылает в него полученную информацию.


<pre>
Так же конвертер создает виртуальное устройство ''zigbee2mqtt'' и передает в него логи, версию и состояние (online\offline) моста zigbee2mqtt. Можно включить и выключить режим добавления устройств. Также там расположена кнопка ''Update devices''. При нажатии на эту кнопку конвертер заново запрашивает у моста список добавленных устройств и, если они появились — подписывается на них.
permit_join: true
</pre>


Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода. После этого устройство должно передать информацию о себе на контроллер. Иногда требуется дополнительно нажимать на кнопку каждую секунду, что бы устройство не "уснуло". После успешного добавления устройство автоматически появится во вкладке Devices.
=== Установка ===


Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
wb-zigbee2mqtt ставится автоматически при установке пакета zigbee2mqtt, если этого не произошло, установите его командой:
<syntaxhighlight lang="bash">
apt update && apt install wb-zigbee2mqtt
</syntaxhighlight>


После этого в стандартном веб-интерфейсе контроллера на вкладке ''Devices'' появится устройство ''zigbee2mqtt''.


== Написание правил ==
=== Добавление устройств ===
[[Image: WebUI Add Zigbee Device.png |300px|thumb|right| Добавление устройства, сообщение ''Device '0x00158d0007013f71' is supported.'']]
[[Image: WebUI Add Zigbee Device Unsupported.png |300px|thumb|right| Неподдерживаемое устройство, сообщение ''Device '0x2c1165fffeabe0b8' not supported.'']]
Устройства можно добавлять по одному или все разом. Чтобы добавить новые устройства:
# Перейдите в [[Wiren Board Web Interface | стандартный веб-интерфейс контроллера]].
# Откройте вкладку '''Devices'''.
# Найдите там карточку устройства '''Zigbee2mqtt''' и проверьте статус в поле '''State''' — должно быть написано '''online'''. Если вы только, что установили zigbee2mqtt и указан статус ''offline'' — подождите пару минут.
# Включите переключатель '''Permit join'''.
# Следуйте инструкции к Zigbee-устройству: в основном требуется зажать на устройстве кнопку '''pair''' на несколько секунд и дождаться мигания индикатора на устростве.
# В процессе добавления устройства в карточке '''Zigbee2mqtt''' в поле Log по очереди будут появляться сообщения ''Starting interview on 0xN → Device 0xN is supported''. Последнее сообщение означает, что устройство успешно опрошено.
# Повторите шаги 5 и 6 для каждого Zigbee-устройства, которое у вас есть.
# Завершите добавление устройств, для этого выключите переключатель '''Permit join'''.
# Нажмите кнопку '''Update devices''', добавленные устройства будут доступны на вкладке '''Devices'''.


'''Zigbee2mqtt''' имеет свою '''[https://www.zigbee2mqtt.io/information/mqtt_topics_and_message_structure.html структуру MQTT топиков]''' , не подходящую под '''[https://github.com/wirenboard/homeui/blob/master/conventions.md MQTT конвенцию Wiren Board]'''. На данный момент идет разработка конвертера, который будет пересылать данные из топиков zigbee2mqtt в подходящие под конвенцию топики.  
Иногда, новые устройства не появляются на вкладке Devices — это может быть по причинам:
# Произошла ошибка в конвертере при разборе данных от zigbee2mqtt, в этом случае перезапустите движок правил:
#: <syntaxhighlight lang="bash">
systemctl restart wb-rules
</syntaxhighlight>
# Некоторые устройства не поддерживаются zigbee2mqtt, для таких устройств в сообщении будет указано ''Starting interview on 0xN → Device 0xN ... is NOT supported''. В этом случае убедитесь, что устройство есть в [https://www.zigbee2mqtt.io/supported-devices/ списке поддерживаемых] и у вас установлена свежая версия zigbee2mqtt.


Пока разработка не закончена есть несколько способов взаимодействия с добавленными в zigbee2mqtt устройствамиː
Ещё бывает так, что карточка устройства появилась, но пустая — это значит, что устройство добавлено, но данные пока не были получены. Если это датчик, то тут нужно немного подождать, а в случае с выключателем — выключить или включить его.


* Установить конвертер от стороннего разработчика ( На пример '''[https://github.com/avp-avp/zigbee2wb конвертер от пользователя avp-avp]''' )
=== Изменение friendly_name ===
friendly_name — это человекочитаемое имя устройства. Вы можете оставить значение по умолчанию, или настроить своё:
# Откройте файл конфигурации для редактированияː
#:<syntaxhighlight lang="bash">
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
</syntaxhighlight>
# Найдите в секции '''devices''' ваше устройство.
# Измените '''friendly_name'''.
# Сохраните файл настроек и перезапустите сервис:
#:<syntaxhighlight lang="bash">
systemctl restart zigbee2mqtt
</syntaxhighlight>
# В стандартном веб-интерфейсе контроллера на вкладке Devices должно появиться устройство с заданным именем.
# Удалите карточку устройства со старым именем с вкладки Devices, для этого нажмите на корзинку в заголовке.


* Использовать для автоматизации '''[https://wirenboard.com/wiki/index.php?title=Node-Red Node-Red]'''
Новое имя устройства должно соответствовать [https://www.zigbee2mqtt.io/guide/configuration/devices-groups.html#common-device-options этим требованиям] (плюс нельзя использовать косую черту <code>/</code>) и не должно быть одинаковым для нескольких устройств, а также соответствовать определённым правилам — так называемым соглашениям ([https://github.com/wirenboard/conventions/blob/main/README.md Wiren Board MQTT Conventions]).


* Cделать небольшое изменение в коде zigbee2mqtt, что бы получать данные в топики вида /devices/zigbee2mqtt/controls/../on
<gallery mode="packed" heights="150px" caption="Изменение friendly_name">
Image: friendly_name-old-device.png | Карточка устройства с ''friendly_name'' по умолчанию
Image: friendly_name-config.png | Изменение ''friendly_name'' в файле конфигурации
Image: friendly_name-new-device.png | Карточка устройства с новым ''friendly_name''
</gallery>


Про третий пункт подробнееː
=== Управление устройствами ===
Управление через конвертер wb-zigbee2mqtt пока не реализовано, но вы можете управлять устройствами [https://www.zigbee2mqtt.io/information/mqtt_topics_and_message_structure.html#zigbee2mqttfriendly_nameset стандартными инструментами zigbee2mqtt] через wb-rules, отправляя команды с помощью функции ''publish''.


# В файле '''/mnt/data/root/zigbee2mqtt/data/configuration.yaml''' параметр '''base_topic''' измените на '''/devices/zigbee2mqtt/controls''' как это показано на скриншоте ниже. Сохраните файл. [[Файл:Zigbee2.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/data/configuration.yaml]]
Пример включения и отключения реле с ''friendly_name'' равным ''0x00158d0001f3fc34'' в правилах [[wb-rules]]:
# В файле '''/mnt/data/root/zigbee2mqtt/lib/controller.js''' (311 строка) к параметру “'''resolvedEntity.name'''” добавьте '''+ “/on”''', как это показано на скриншоте ниже. Сохраните файл. (Это поможет получать данные от zigbee устройств в топики "/on") [[Файл:Zigbee1.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/lib/controller.js]]
<syntaxhighlight lang="js">
# Перезапустите zigbee2mqtt командой '''service zigbee2mqtt restart'''
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false);
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false);
</syntaxhighlight>


Вместо wb-rules вы можете использовать [[Node-RED]].
=== Удаление устройств ===
Чтобы удалить устройство:
# Убедитесь, что в карточке устройства с заголовком ''Zigbee2mqtt'' перключатель '''Permit join''' находится в положении ''OFF''.
# Разорвите связь устройства с координатором. Обычно для этого нужно зажать кнопку сопряжения на 5 секунд, смотрите документацию на устройство.
# Проследите, чтобы в карточке с заголовком ''Zigbee2mqt''t в поле '''Log''' появилось сообщение ''left_network''.
# Удалите карточку этого Zigbee-устройства из веб-интерфейса, для этого наведите на заголовок карточки курсор мыши и нажмите на корзинку.
# Подключитесь к контроллеру по [[SSH]] и перезапустите wb-rules — это перезапустит конвертер wb-zigbee2mqtt:
#:<syntaxhighlight lang="bash">
systemctl restart wb-rules
</syntaxhighlight>
<gallery mode="packed" heights="180px">
Image: WebUI Zigbee Device Left Network.png | Сообщение ''left_network''
Image: WebUI Zigbee Device Remove.png | Корзинка для удаления карточки Zigbee-устройства
</gallery>
=== Как переустановить с сохранением данных ===
В некоторых случаях может потребоваться переустановить конвертер с сохранением данных, например, если мост не стартует после обновления.
Инструкция:
# Перейдите в домашний каталог:
#:<syntaxhighlight lang="bash">
cd ~
</syntaxhighlight>
# Сохраните настройки:
#:<syntaxhighlight lang="bash">
cp -R /mnt/data/root/zigbee2mqtt/data data-backup
</syntaxhighlight>
# Удалите zigbee2mqtt командой:
#:<syntaxhighlight lang="bash">
apt purge zigbee2mqtt
</syntaxhighlight>
# Если остался каталог с node-modules — удалите его:
#:<syntaxhighlight lang="bash">
rm -r /mnt/data/root/zigbee2mqtt/node_modules
</syntaxhighlight>
# Заново поставьте zigbee2mqtt:
#:<syntaxhighlight lang="bash">
apt install zigbee2mqtt
</syntaxhighlight>
# Восстановите настройки из архива:
#:<syntaxhighlight lang="bash">
cp -R data-backup/* /mnt/data/root/zigbee2mqtt/data
</syntaxhighlight>
# Перезапустите сервис:
#:<syntaxhighlight lang="bash">
systemctl restart zigbee2mqtt
</syntaxhighlight>


После этих действий данные будут приходить в топики '''/devices/zigbee2mqtt/controls/../on''', где вместо ".." будет имя zigbee устройства. На пример "'''/devices/zigbee2mqtt/controls/0x00158d0002729348/on'''"
== Диагностика неисправностей  ==
Если вы столкнулись с проблемами в работе zigbee2mqtt, то прояснить ситуацию поможет статус сервиса и чтение подробных логов. Для выполнения команд подключитесь к контроллеру по [[SSH]].


Далее необходимо зайти в вкладку rules и в правилах создать виртуальный девайс с именем топика в который мы получаем данные (в нашем случае zigbee2mqtt) и с контролами для каждого zigbee устройства, что у Вас добавлено в zigbee2mqttː
Посмотреть текущий статус и последние несколько сообщений из лога можно командой:
<syntaxhighlight lang="console">
# systemctl status zigbee2mqtt
● zigbee2mqtt.service - zigbee2mqtt
  Loaded: loaded (/lib/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
  Active: activating (auto-restart) (Result: exit-code) since Fri 2022-05-13 10:06:04 +04; 3s ago
  Process: 25986 ExecStart=/usr/bin/npm start (code=exited, status=1/FAILURE)
Main PID: 25986 (code=exited, status=1/FAILURE)


<syntaxhighlight lang="js">
May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Main process exited, code=exited, status=1/FAILURE
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː  /devices/../controls
May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Unit entered failed state.
    title: "Zigbee Devices",
May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Failed with result 'exit-code'.
    cells: {
</syntaxhighlight>
        '0x00158d0002729348': { // zigbee кнопка
[[Image: zigbee2mqtt-wrong-start.png |300px|thumb|right| Пример проблем при запуске zigbee2mqtt командой ''npm start'' ]]
            type: "text",
[[Image: zigbee2mqtt-successful-start.png |300px|thumb|right| Пример успешного запуска zigbee2mqtt при выполнении команды ''npm start'' ]]
            value: ""
Часто бывает так, что из предыдущего шага мы видим наличие проблемы, но причина непонятна, в этом случае нужно смотреть логи:
        },
# Остановите сервис командой:
        '0x00158d0002389b55': { // zigbee датчик температуры и влажности
#:<syntaxhighlight lang="bash">
            type: "text",
systemctl stop zigbee2mqtt
            value: ""
</syntaxhighlight>
        },
# Перейдите в каталог с zigbee2mqtt:
        '0x00158d0001f3fc34': { // zigbee выключатель в подрозетник
#:<syntaxhighlight lang="bash">
            type: "text",
cd /mnt/data/root/zigbee2mqtt/
            value: ""
        },
    }
});
</syntaxhighlight>
</syntaxhighlight>
# Запустите zigbee2mqtt в ручном режиме с выводом всех сообщений в консоль командой <code>npm start</code>:
#:<syntaxhighlight lang="console" highlight="12">
# npm start


После сохранения все данные приходящие от указанных в правиле zigbee устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил.  
> zigbee2mqtt@1.18.1 start /mnt/data/root/zigbee2mqtt
> node index.js


<syntaxhighlight lang="js">
Zigbee2MQTT:info  2022-05-13 09:59:30: Logging to console and directory: '/mnt/data/root/zigbee2mqtt/data/log/2022-05-13.09-59-19' filename: log.txt
// Правило: При двойном нажатии на zigbee кнопку переключаем левую кнопку zigbee выключателя
Zigbee2MQTT:info  2022-05-13 09:59:30: Starting Zigbee2MQTT version 1.18.1 (commit #unknown)
defineRule("button_control", {
Zigbee2MQTT:info  2022-05-13 09:59:30: Starting zigbee-herdsman (0.13.71)
     whenChanged: "zigbee2mqtt/0x00158d0002729348",
Zigbee2MQTT:error 2022-05-13 09:59:39: Error while starting zigbee-herdsman
    then: function(newValue, devName, cellName) {
Zigbee2MQTT:error 2022-05-13 09:59:39: Failed to start zigbee
        JSON.parse(newValue, function(k, v) { // Парсим Json. Переменная "k" - ключ, переменная "v" - значение.
Zigbee2MQTT:error 2022-05-13 09:59:39: Exiting...
            if (k == 'click') {
Zigbee2MQTT:error 2022-05-13 09:59:39: Error: Error while opening serialport 'Error: Error: No such file or directory, cannot open /dev/ttyUSB01'
                if (v == 'double') { // если значение ключа "click" равно "double"
     at Znp.<anonymous> (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:136:32)
                    publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_left: "TOGGLE" }), 2, false); // переключаем левую кнопку zigbee выключателя.
    at Generator.next (<anonymous>)
                }
    at /mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:27:71
            }
    at new Promise (<anonymous>)
        })
    at __awaiter (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:23:12)
     }
    at SerialPort.<anonymous> (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:134:49)
});
    at SerialPort._error (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/stream/lib/index.js:198:14)
    at /mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/stream/lib/index.js:242:12
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! zigbee2mqtt@1.18.1 start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the zigbee2mqtt@1.18.1 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
 
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2022-05-13T05_59_39_596Z-debug.log
</syntaxhighlight>
#: здесь сразу видно, что мы в настройках неверно указали порт.
# После того, как вы нашли и устранили проблему, снова запустите сервис:
#:<syntaxhighlight lang="bash">
systemctl start zigbee2mqtt
</syntaxhighlight>
 
Если при выполнении <code>npm start</code> сервис запустился успешно, то остановить его можно нажатием клавиш <kbd>Ctrl</kbd>+<kbd>C</kbd>.


// Правило: Если влажность выше 50% - включаем правую кнопку zigbee выключателя (канальный вентилятор). Если ниже - выключаем.
Иногда может потребоваться отключить автозапуск сервиса, управлять автозапуском можно командами:
defineRule("temp_control", {
<syntaxhighlight lang="bash">
    whenChanged: "zigbee2mqtt/0x00158d0002389b55",
systemctl disable zigbee2mqtt
    then: function(newValue, devName, cellName) {
systemctl enable zigbee2mqtt
        JSON.parse(newValue, function(k, v) {
            if (k == 'humidity') {
                if (parseFloat(v) >= 50.0) {
                    publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "ON" }), 2, false);
                } else {
                    publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "OFF" }), 2, false);
                }
            }
        })
    }
});
</syntaxhighlight>
</syntaxhighlight>
== Полезные ссылки ==
* [https://www.zigbee2mqtt.io/ Документация zigbee2mqtt]
* [https://habr.com/ru/company/wirenboard/blog/713274/ Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED]
* [https://habr.com/ru/companies/wirenboard/articles/750640/ Подключаем Zigbee-устройства к контроллеру Wiren Board и пишем сценарии на wb-rules]
* [[zigbee2mqtt-src| Сборка zigbee2mqtt из исходников]]

Версия 18:46, 19 февраля 2024

Описание

Для использования Zigbee-устройств с контроллером Wiren Board понадобится:

  1. Модуль расширения WBE2R-R-ZIGBEE v.2 (WBE2R-R-ZIGBEE v.1) или любой USB Zigbee стик.
  2. Дополнительное ПО:

Инструкции по установке смотрите ниже на этой странице.

Копируйте команды из инструкции, вставляйте их в консоль контроллера с помощью клавиш Shift+Insert и запускайте клавишей Enter. В случае ошибок, внимательно читайте вывод, там будут инструкции и подсказки.

Установка и настройка zigbee2mqtt

Процесс установки

Версия пакета zigbee2mqtt в стабильном релизе может отставать от актуальной версии, которая доступна у автора. Самая свежая версия всегда доступна в тестовом релизе.

Мы рекомендуем устанавливать готовый пакет из нашего репозитория, их там два:

  • zigbee2mqtt — всегда свежая версия, рекомендуем ставить её.
  • zigbee2mqtt-1.18.1 — версия для старых адаптеров WBE2R-R-ZIGBEE v.1, выпущенных до января 2022 года. Таблица ревизий.

Для установки свежей версии, введите команду:

apt update && apt install zigbee2mqtt

Чтобы установить 1.18.1, выполните:

apt update && apt install zigbee2mqtt-1.18.1

Альтернативный способ установки — сборка из исходников по инструкции.

Дальше мост надо настроить, смотрите раздел Конфигурация.

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

systemctl disable zigbee2mqtt
systemctl enable zigbee2mqtt

Конфигурация

Если вы используете модуль расширения WBE2R-R-ZIGBEE, убедитесь, что правильно выставили модуль в SettingsConfigsHardware Modules Configuration. При использовании USB-стика порт будет называться /dev/ttyUSBx, где x — номер порта, нумерация с нуля.

Настройка:

  1. Откройте файл конфигурации для редактированияː
    nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
    
  2. По умолчанию файл конфигурации выглядит так, в параметре port укажите порт, куда физически вставлен модуль:
    homeassistant: false
    permit_join: false
    mqtt:
      base_topic: zigbee2mqtt
      server: 'mqtt://localhost'
    serial:
      port: /dev/ttyMOD4
    advanced:
      rtscts: false
      last_seen: epoch
      pan_id: GENERATE 
      network_key: GENERATE
    
    вместо GENERATE после первого запуска моста появятся значения, не изменяйте их.
  3. Нажмите Ctrl+S для сохранения изменений, Ctrl+X — для выхода из редактора.
  4. Перезапустите сервис zigbee2mqtt:
    systemctl restart zigbee2mqtt
    

Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку Devices в стандартном веб-интерфейсе контроллера.

Веб-интерфейс (Frontend)

Веб-интерфейс zigbee2mqtt потребляет ресурсы контроллера — не включайте его, если не используете: добавлять и удалять устройства можно через наш конвертер wb-zigbee2mqtt.

Если вам всё же нужен родной веб-интерфейс zigbee2mqtt, то его можно включить в файле настроек:

  1. Откройте файл configuration.yaml для редактированияː
    nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
    
  2. Добавьте в него блок:
    frontend:
      port: 8081
      host: 0.0.0.0
    
  3. Сохраните и закройте файл.
  4. Перезапустите сервис zigbee2mqtt:
    systemctl restart zigbee2mqtt
    

Веб-интерфейс моста zigbee2mqtt будет доступен по адресу http://wb-ip-address:PORT, например, если IP-адрес контроллера 192.168.42.1, а порт указан 8081, то веб-интерфейс будет доступен по адресу http://192.168.42.1:8081

Обновление

Для обновления zigbee2mqtt на свежую версию просто обновите программное обеспечение контроллера по инструкции. Будут сохранены все настройки и подключенные устройства.

Если у вас старый адаптер WBE2R-R-ZIGBEE v.1, выпущенный до января 2022 года, то новая версия работать не будет, в этом случае у вас есть три варианта:

  • Прошить старый адаптер свежей прошивкой, инструкция.
  • Поставить пакет с версией, которая работает с этими адаптерами — это возможно сделать только на релизе wb-2207, в более свежих релизах на bullseye этого пакета нет:
    apt install zigbee2mqtt-1.18.1
    
  • Заменить адаптер на WBE2R-R-ZIGBEE v.2 или использовать поддерживаемый USB-стик.

Конвертер wb-zigbee2mqtt

Описание

Zigbee-устройство на вкладке Devices — в заголовке указан friendly_name

Wb-zigbee2mqtt — конвертер данных zigbee2mqtt в топики виртуальных устройств, написан на движке правил wb-rules и устанавливается в папку с системными правилами wb-rules-system.

Принцип работы

Конвертер wb-zigbee2mqtt запрашивает у zigbee2mqtt список всех подключенных устройств и подписывается на их топики. При получении данных от физических устройств конвертер парсит json, создает виртуальное устройство и посылает в него полученную информацию.

Так же конвертер создает виртуальное устройство zigbee2mqtt и передает в него логи, версию и состояние (online\offline) моста zigbee2mqtt. Можно включить и выключить режим добавления устройств. Также там расположена кнопка Update devices. При нажатии на эту кнопку конвертер заново запрашивает у моста список добавленных устройств и, если они появились — подписывается на них.

Установка

wb-zigbee2mqtt ставится автоматически при установке пакета zigbee2mqtt, если этого не произошло, установите его командой:

apt update && apt install wb-zigbee2mqtt

После этого в стандартном веб-интерфейсе контроллера на вкладке Devices появится устройство zigbee2mqtt.

Добавление устройств

Добавление устройства, сообщение Device '0x00158d0007013f71' is supported.
Неподдерживаемое устройство, сообщение Device '0x2c1165fffeabe0b8' not supported.

Устройства можно добавлять по одному или все разом. Чтобы добавить новые устройства:

  1. Перейдите в стандартный веб-интерфейс контроллера.
  2. Откройте вкладку Devices.
  3. Найдите там карточку устройства Zigbee2mqtt и проверьте статус в поле State — должно быть написано online. Если вы только, что установили zigbee2mqtt и указан статус offline — подождите пару минут.
  4. Включите переключатель Permit join.
  5. Следуйте инструкции к Zigbee-устройству: в основном требуется зажать на устройстве кнопку pair на несколько секунд и дождаться мигания индикатора на устростве.
  6. В процессе добавления устройства в карточке Zigbee2mqtt в поле Log по очереди будут появляться сообщения Starting interview on 0xN → Device 0xN is supported. Последнее сообщение означает, что устройство успешно опрошено.
  7. Повторите шаги 5 и 6 для каждого Zigbee-устройства, которое у вас есть.
  8. Завершите добавление устройств, для этого выключите переключатель Permit join.
  9. Нажмите кнопку Update devices, добавленные устройства будут доступны на вкладке Devices.

Иногда, новые устройства не появляются на вкладке Devices — это может быть по причинам:

  1. Произошла ошибка в конвертере при разборе данных от zigbee2mqtt, в этом случае перезапустите движок правил:
    systemctl restart wb-rules
    
  2. Некоторые устройства не поддерживаются zigbee2mqtt, для таких устройств в сообщении будет указано Starting interview on 0xN → Device 0xN ... is NOT supported. В этом случае убедитесь, что устройство есть в списке поддерживаемых и у вас установлена свежая версия zigbee2mqtt.

Ещё бывает так, что карточка устройства появилась, но пустая — это значит, что устройство добавлено, но данные пока не были получены. Если это датчик, то тут нужно немного подождать, а в случае с выключателем — выключить или включить его.

Изменение friendly_name

friendly_name — это человекочитаемое имя устройства. Вы можете оставить значение по умолчанию, или настроить своё:

  1. Откройте файл конфигурации для редактированияː
    nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
    
  2. Найдите в секции devices ваше устройство.
  3. Измените friendly_name.
  4. Сохраните файл настроек и перезапустите сервис:
    systemctl restart zigbee2mqtt
    
  5. В стандартном веб-интерфейсе контроллера на вкладке Devices должно появиться устройство с заданным именем.
  6. Удалите карточку устройства со старым именем с вкладки Devices, для этого нажмите на корзинку в заголовке.

Новое имя устройства должно соответствовать этим требованиям (плюс нельзя использовать косую черту /) и не должно быть одинаковым для нескольких устройств, а также соответствовать определённым правилам — так называемым соглашениям (Wiren Board MQTT Conventions).

Управление устройствами

Управление через конвертер wb-zigbee2mqtt пока не реализовано, но вы можете управлять устройствами стандартными инструментами zigbee2mqtt через wb-rules, отправляя команды с помощью функции publish.

Пример включения и отключения реле с friendly_name равным 0x00158d0001f3fc34 в правилах wb-rules:

 publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false);
 publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false);

Вместо wb-rules вы можете использовать Node-RED.

Удаление устройств

Чтобы удалить устройство:

  1. Убедитесь, что в карточке устройства с заголовком Zigbee2mqtt перключатель Permit join находится в положении OFF.
  2. Разорвите связь устройства с координатором. Обычно для этого нужно зажать кнопку сопряжения на 5 секунд, смотрите документацию на устройство.
  3. Проследите, чтобы в карточке с заголовком Zigbee2mqtt в поле Log появилось сообщение left_network.
  4. Удалите карточку этого Zigbee-устройства из веб-интерфейса, для этого наведите на заголовок карточки курсор мыши и нажмите на корзинку.
  5. Подключитесь к контроллеру по SSH и перезапустите wb-rules — это перезапустит конвертер wb-zigbee2mqtt:
    systemctl restart wb-rules
    

Как переустановить с сохранением данных

В некоторых случаях может потребоваться переустановить конвертер с сохранением данных, например, если мост не стартует после обновления.

Инструкция:

  1. Перейдите в домашний каталог:
    cd ~
    
  2. Сохраните настройки:
    cp -R /mnt/data/root/zigbee2mqtt/data data-backup
    
  3. Удалите zigbee2mqtt командой:
    apt purge zigbee2mqtt
    
  4. Если остался каталог с node-modules — удалите его:
    rm -r /mnt/data/root/zigbee2mqtt/node_modules
    
  5. Заново поставьте zigbee2mqtt:
    apt install zigbee2mqtt
    
  6. Восстановите настройки из архива:
    cp -R data-backup/* /mnt/data/root/zigbee2mqtt/data
    
  7. Перезапустите сервис:
    systemctl restart zigbee2mqtt
    

Диагностика неисправностей

Если вы столкнулись с проблемами в работе zigbee2mqtt, то прояснить ситуацию поможет статус сервиса и чтение подробных логов. Для выполнения команд подключитесь к контроллеру по SSH.

Посмотреть текущий статус и последние несколько сообщений из лога можно командой:

# systemctl status zigbee2mqtt
● zigbee2mqtt.service - zigbee2mqtt
   Loaded: loaded (/lib/systemd/system/zigbee2mqtt.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Fri 2022-05-13 10:06:04 +04; 3s ago
  Process: 25986 ExecStart=/usr/bin/npm start (code=exited, status=1/FAILURE)
 Main PID: 25986 (code=exited, status=1/FAILURE)

May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Main process exited, code=exited, status=1/FAILURE
May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Unit entered failed state.
May 13 10:06:04 wirenboard-AYXIHFQ6 systemd[1]: zigbee2mqtt.service: Failed with result 'exit-code'.
Пример проблем при запуске zigbee2mqtt командой npm start
Пример успешного запуска zigbee2mqtt при выполнении команды npm start

Часто бывает так, что из предыдущего шага мы видим наличие проблемы, но причина непонятна, в этом случае нужно смотреть логи:

  1. Остановите сервис командой:
    systemctl stop zigbee2mqtt
    
  2. Перейдите в каталог с zigbee2mqtt:
    cd /mnt/data/root/zigbee2mqtt/
    
  3. Запустите zigbee2mqtt в ручном режиме с выводом всех сообщений в консоль командой npm start:
    # npm start
    
     > zigbee2mqtt@1.18.1 start /mnt/data/root/zigbee2mqtt
     > node index.js
    
    Zigbee2MQTT:info  2022-05-13 09:59:30: Logging to console and directory: '/mnt/data/root/zigbee2mqtt/data/log/2022-05-13.09-59-19' filename: log.txt
    Zigbee2MQTT:info  2022-05-13 09:59:30: Starting Zigbee2MQTT version 1.18.1 (commit #unknown)
    Zigbee2MQTT:info  2022-05-13 09:59:30: Starting zigbee-herdsman (0.13.71)
    Zigbee2MQTT:error 2022-05-13 09:59:39: Error while starting zigbee-herdsman
    Zigbee2MQTT:error 2022-05-13 09:59:39: Failed to start zigbee
    Zigbee2MQTT:error 2022-05-13 09:59:39: Exiting...
    Zigbee2MQTT:error 2022-05-13 09:59:39: Error: Error while opening serialport 'Error: Error: No such file or directory, cannot open /dev/ttyUSB01'
        at Znp.<anonymous> (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:136:32)
        at Generator.next (<anonymous>)
        at /mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:27:71
        at new Promise (<anonymous>)
        at __awaiter (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:23:12)
        at SerialPort.<anonymous> (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/dist/adapter/z-stack/znp/znp.js:134:49)
        at SerialPort._error (/mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/stream/lib/index.js:198:14)
        at /mnt/data/root/zigbee2mqtt/node_modules/zigbee-herdsman/node_modules/@serialport/stream/lib/index.js:242:12
    npm ERR! code ELIFECYCLE
    npm ERR! errno 1
    npm ERR! zigbee2mqtt@1.18.1 start: `node index.js`
    npm ERR! Exit status 1
    npm ERR! 
    npm ERR! Failed at the zigbee2mqtt@1.18.1 start script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /root/.npm/_logs/2022-05-13T05_59_39_596Z-debug.log
    
    здесь сразу видно, что мы в настройках неверно указали порт.
  4. После того, как вы нашли и устранили проблему, снова запустите сервис:
    systemctl start zigbee2mqtt
    

Если при выполнении npm start сервис запустился успешно, то остановить его можно нажатием клавиш Ctrl+C.

Иногда может потребоваться отключить автозапуск сервиса, управлять автозапуском можно командами:

systemctl disable zigbee2mqtt
systemctl enable zigbee2mqtt

Полезные ссылки