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

11 548 байт добавлено ,  2 месяца назад
(не показаны 152 промежуточные версии 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>


Настраиваем репозиторий Node JS
=== Конфигурация ===
<pre>
<div id="config">
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Если вы используете модуль расширения [[WBE2R-R-ZIGBEE]], убедитесь, что правильно выставили модуль в '''Settings''' → '''Configs''' → '''Hardware Modules Configuration'''. При использовании USB-стика порт будет называться <code>/dev/ttyUSBx</code>, где x — номер порта, нумерация с нуля.
</pre>


Устанавливаем необходимые компоненты
Настройка:
<pre>
# Откройте файл конфигурации для редактированияː
apt-get install -y nodejs git make g++ gcc
#:<syntaxhighlight lang="bash">
</pre>
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
</syntaxhighlight>
# По умолчанию файл конфигурации выглядит так, в параметре '''port''' укажите порт, куда физически вставлен модуль:
#:<syntaxhighlight lang="bash">
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
</syntaxhighlight>
#: вместо GENERATE после первого запуска моста появятся значения, не изменяйте их.
# {{Wbincludes:Save nano}}
# Перезапустите сервис <code>zigbee2mqtt</code>:
#:<syntaxhighlight lang="bash">
systemctl restart zigbee2mqtt
</syntaxhighlight>
Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку '''Devices''' в стандартном веб-интерфейсе контроллера.


''Копируем файлы из репозитория zigbee2mqtt''
=== Веб-интерфейс (Frontend) ===
<pre>
Веб-интерфейс zigbee2mqtt потребляет ресурсы контроллера — не включайте его, если не используете: добавлять и удалять устройства можно через наш конвертер wb-zigbee2mqtt.
git clone https://github.com/Koenkk/zigbee2mqtt.git /mnt/data/root/zigbee2mqtt
</pre>


Настраиваем права
Если вам всё же нужен родной веб-интерфейс zigbee2mqtt, то его можно включить в файле настроек:
<pre>
# Откройте файл <code>configuration.yaml</code> для редактированияː
chown -R root:root /mnt/data/root/zigbee2mqtt
#:<syntaxhighlight lang="bash">
</pre>
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>


Заходим в директорию и запускаем установку
Веб-интерфейс моста zigbee2mqtt будет доступен по адресу http://wb-ip-address:PORT, например, если IP-адрес контроллера '''192.168.42.1''', а порт указан '''8081''', то веб-интерфейс будет доступен по адресу http://192.168.42.1:8081
<pre>
cd /mnt/data/root/zigbee2mqtt
npm ci
</pre>


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


'''Оригинальная инструкция по установке zigbee2mqtt на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html официальном сайте zigbee2mqtt.io]'''
Если у вас старый адаптер [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module | WBE2R-R-ZIGBEE v.1]], выпущенный до января 2022 года, то новая версия работать не будет, в этом случае у вас есть три варианта:
* Прошить старый адаптер свежей прошивкой,  [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module#flashing | инструкция]].
* Поставить пакет с версией, которая работает с этими адаптерами — это возможно сделать только на релизе wb-2207, в более свежих релизах на bullseye этого пакета нет:
*:<syntaxhighlight lang="bash">
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-стик].


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


Откройте файл и скопируйте в него следующий текстː
=== Принцип работы ===
<pre>
Конвертер '''wb-zigbee2mqtt''' запрашивает у zigbee2mqtt список всех подключенных устройств и подписывается на их топики. При получении данных от физических устройств конвертер парсит json, создает виртуальное устройство и посылает в него полученную информацию.  
[Unit]
Description=zigbee2mqtt
After=network.target


[Service]
Так же конвертер создает виртуальное устройство ''zigbee2mqtt'' и передает в него логи, версию и состояние (online\offline) моста zigbee2mqtt. Можно включить и выключить режим добавления устройств. Также там расположена кнопка ''Update devices''. При нажатии на эту кнопку конвертер заново запрашивает у моста список добавленных устройств и, если они появились — подписывается на них.
ExecStart=/usr/bin/npm start
WorkingDirectory=/mnt/data/root/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root


[Install]
=== Установка ===
WantedBy=multi-user.target
</pre>


И сохраните файл. После этого для активации сервиса следует ввести в консоль команду
wb-zigbee2mqtt ставится автоматически при установке пакета zigbee2mqtt, если этого не произошло, установите его командой:
<pre>
<syntaxhighlight lang="bash">
systemctl enable zigbee2mqtt.service
apt update && apt install wb-zigbee2mqtt
</pre>  
</syntaxhighlight>
<!--T:17-->
Полную инструкцию можно найти на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html сайте zigbee2mqtt].


== Конфигурация == <!--T:18-->
После этого в стандартном веб-интерфейсе контроллера на вкладке ''Devices'' появится устройство ''zigbee2mqtt''.
<!--T:19-->
После установки нужно настроить контроллер.  


Если Вы используете модуль расширения [[WBE2R-R-ZIGBEE]],то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.
=== Добавление устройств ===
[[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'''.


Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː
Иногда, новые устройства не появляются на вкладке Devices — это может быть по причинам:
 
# Произошла ошибка в конвертере при разборе данных от zigbee2mqtt, в этом случае перезапустите движок правил:
<pre>
#: <syntaxhighlight lang="bash">
homeassistant: false
systemctl restart wb-rules
permit_join: true
</syntaxhighlight>
mqtt:
# Некоторые устройства не поддерживаются zigbee2mqtt, для таких устройств в сообщении будет указано ''Starting interview on 0xN → Device 0xN ... is NOT supported''. В этом случае убедитесь, что устройство есть в [https://www.zigbee2mqtt.io/supported-devices/ списке поддерживаемых] и у вас установлена свежая версия zigbee2mqtt.
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyMOD3
advanced:
  rtscts: false
  last_seen: epoch
</pre>


Полное описание настроек можно найти на [https://www.zigbee2mqtt.io/information/configuration.html сайте zigbee2mqtt].
Ещё бывает так, что карточка устройства появилась, но пустая — это значит, что устройство добавлено, но данные пока не были получены. Если это датчик, то тут нужно немного подождать, а в случае с выключателем — выключить или включить его.


После изменения настроек введите команду
=== Изменение 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, для этого нажмите на корзинку в заголовке.


<pre>
Новое имя устройства должно соответствовать [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]).
service zigbee2mqtt restart
</pre>


== Запуск ==
<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>


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


== Добавление устройств ==
Пример включения и отключения реле с ''friendly_name'' равным ''0x00158d0001f3fc34'' в правилах [[wb-rules]]:
<syntaxhighlight lang="js">
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false);
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false);
</syntaxhighlight>


Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :
Вместо wb-rules вы можете использовать [[Node-RED]].


<pre>
=== Удаление устройств ===
permit_join: true
Чтобы удалить устройство:
</pre>
# Убедитесь, что в карточке устройства с заголовком ''Zigbee2mqtt'' перключатель '''Permit join''' находится в положении ''OFF''.
# Разорвите связь устройства с координатором. Обычно для этого нужно зажать кнопку сопряжения на 5 секунд, смотрите документацию на устройство.
# Проследите, чтобы в карточке с заголовком ''Zigbee2mqt''t в поле '''Log''' появилось сообщение ''left_network''.
# Удалите карточку этого Zigbee-устройства из веб-интерфейса, для этого наведите на заголовок карточки курсор мыши и нажмите на корзинку.
# Подключитесь к контроллеру по [[SSH]] и перезапустите wb-rules — это перезапустит конвертер wb-zigbee2mqtt:
#:<syntaxhighlight lang="bash">
systemctl restart wb-rules
</syntaxhighlight>


Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода. После этого устройство должно передать информацию о себе на контроллер. Иногда требуется дополнительно нажимать на кнопку каждую секунду, что бы устройство не "уснуло". После успешного добавления устройство автоматически появится во вкладке Devices.
<gallery mode="packed" heights="180px">
Image: WebUI Zigbee Device Left Network.png | Сообщение ''left_network''
Image: WebUI Zigbee Device Remove.png | Корзинка для удаления карточки Zigbee-устройства
</gallery>


Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
=== Как переустановить с сохранением данных ===


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


'''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 в подходящие под конвенцию топики.
Инструкция:
# Перейдите в домашний каталог:
#:<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>


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


* Установить конвертер от стороннего разработчика ( На пример '''[https://github.com/avp-avp/zigbee2wb конвертер от пользователя avp-avp]''' )  
Посмотреть текущий статус и последние несколько сообщений из лога можно командой:
<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)


* Использовать для автоматизации '''[https://wirenboard.com/wiki/index.php?title=Node-Red Node-Red]'''
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'.
</syntaxhighlight>
[[Image: zigbee2mqtt-wrong-start.png |300px|thumb|right| Пример проблем при запуске zigbee2mqtt командой ''npm start'' ]]
[[Image: zigbee2mqtt-successful-start.png |300px|thumb|right| Пример успешного запуска zigbee2mqtt при выполнении команды ''npm start'' ]]
Часто бывает так, что из предыдущего шага мы видим наличие проблемы, но причина непонятна, в этом случае нужно смотреть логи:
# Остановите сервис командой:
#:<syntaxhighlight lang="bash">
systemctl stop zigbee2mqtt
</syntaxhighlight>
# Перейдите в каталог с zigbee2mqtt:
#:<syntaxhighlight lang="bash">
cd /mnt/data/root/zigbee2mqtt/
</syntaxhighlight>
# Запустите zigbee2mqtt в ручном режиме с выводом всех сообщений в консоль командой <code>npm start</code>:
#:<syntaxhighlight lang="console" highlight="12">
# npm start


* Cделать небольшое изменение в коде zigbee2mqtt, что бы получать данные в топики вида /devices/zigbee2mqtt/controls/../on
> 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.


# В файле '''/mnt/data/root/zigbee2mqtt/data/configuration.yaml''' параметр '''base_topic''' измените на '''/devices/zigbee2mqtt/controls''' как это показано на скриншоте ниже. Сохраните файл. [[Файл:Zigbee2.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/data/configuration.yaml]]
npm ERR! A complete log of this run can be found in:
# В файле '''/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]]
npm ERR!    /root/.npm/_logs/2022-05-13T05_59_39_596Z-debug.log
# Перезапустите zigbee2mqtt командой '''service zigbee2mqtt restart'''
</syntaxhighlight>
#: здесь сразу видно, что мы в настройках неверно указали порт.
# После того, как вы нашли и устранили проблему, снова запустите сервис:
#:<syntaxhighlight lang="bash">
systemctl start zigbee2mqtt
</syntaxhighlight>


После этих действий данные будут приходить в топики '''/devices/zigbee2mqtt/controls/../on''', где вместо ".." будет имя zigbee устройства. На пример "'''/devices/zigbee2mqtt/controls/0x00158d0002729348/on'''"
Если при выполнении <code>npm start</code> сервис запустился успешно, то остановить его можно нажатием клавиш <kbd>Ctrl</kbd>+<kbd>C</kbd>.


Далее необходимо зайти в вкладку rules и в правилах создать виртуальный девайс с именем топика в который мы получаем данные (в нашем случае zigbee2mqtt) и с контролами для каждого zigbee устройства, что у Вас добавлено в zigbee2mqttː
Иногда может потребоваться отключить автозапуск сервиса, управлять автозапуском можно командами:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="js">
systemctl disable zigbee2mqtt
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː  /devices/../controls
systemctl enable zigbee2mqtt
    title: "Zigbee Devices",
    cells: {
        '0x00158d0002729348': { // zigbee кнопка
            type: "text",
            value: "",
          readonly: false
        },
        '0x00158d0002389b55': { // zigbee датчик температуры и влажности
            type: "text",
            value: "",
          readonly: false
        },
        '0x00158d0001f3fc34': { // zigbee выключатель в подрозетник
            type: "text",
            value: "",
          readonly: false
        },
    }
});
</syntaxhighlight>
</syntaxhighlight>


После сохранения все данные приходящие от указанных в правиле zigbee устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил.
== Полезные ссылки ==
 
* [https://www.zigbee2mqtt.io/ Документация zigbee2mqtt]
<syntaxhighlight lang="js">
* [https://habr.com/ru/company/wirenboard/blog/713274/ Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED]
// Правило: При двойном нажатии на zigbee кнопку переключаем левую кнопку zigbee выключателя
* [https://habr.com/ru/companies/wirenboard/articles/750640/ Подключаем Zigbee-устройства к контроллеру Wiren Board и пишем сценарии на wb-rules]
defineRule("button_control", {
* [[zigbee2mqtt-src| Сборка zigbee2mqtt из исходников]]
    whenChanged: "zigbee2mqtt/0x00158d0002729348",
    then: function(newValue, devName, cellName) {
        JSON.parse(newValue, function(k, v) { // Парсим Json. Переменная "k" - ключ, переменная "v" - значение. 
            if (k == 'click') {
                if (v == 'double') { // если значение ключа "click" равно "double"
                    publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_left: "TOGGLE" }), 2, false); // переключаем левую кнопку zigbee выключателя.
                }
            }
        })
    }
});
 
// Правило: Если влажность выше 50% - включаем правую кнопку zigbee выключателя (канальный вентилятор). Если ниже - выключаем.
defineRule("temp_control", {
    whenChanged: "zigbee2mqtt/0x00158d0002389b55",
    then: function(newValue, devName, cellName) {
        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>