Zigbee: различия между версиями
(не показано 68 промежуточных версий 6 участников) | |||
Строка 2: | Строка 2: | ||
== Описание == | == Описание == | ||
Для использования Zigbee-устройств с контроллером Wiren Board понадобится: | Для использования Zigbee-устройств с контроллером Wiren Board понадобится: | ||
# Модуль расширения [[ | # Модуль расширения [[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 стик. | ||
# Дополнительное ПО: | # Дополнительное ПО: | ||
#* zigbee2mqtt — мост, с помощью которого можно управлять Zigbee-устройствами через [[MQTT]]. | #* zigbee2mqtt — мост, с помощью которого можно управлять Zigbee-устройствами через [[MQTT]], [https://www.zigbee2mqtt.io/supported-devices/ поддерживаемые устройства]. | ||
#* wb-zigbee2mqtt — конвертер данных из топиков zigbee2mqtt в [https://github.com/wirenboard/conventions/ Wiren Board MQTT Conventions]. | #* wb-zigbee2mqtt — конвертер данных из топиков zigbee2mqtt в [https://github.com/wirenboard/conventions/ Wiren Board MQTT Conventions]. | ||
Строка 14: | Строка 14: | ||
=== Процесс установки === | === Процесс установки === | ||
Версия пакета zigbee2mqtt в стабильном релизе может отставать от актуальной версии, которая доступна у автора. Самая свежая версия всегда доступна в [[testing | тестовом релизе]]. | Версия пакета zigbee2mqtt в стабильном релизе может отставать от актуальной версии, которая доступна у автора. Самая свежая версия всегда доступна в [[testing | тестовом релизе]]. | ||
Мы рекомендуем устанавливать готовый пакет из нашего репозитория, их там два: | Мы рекомендуем устанавливать готовый пакет из нашего репозитория, их там два: | ||
* zigbee2mqtt — всегда свежая версия, рекомендуем ставить её. | * zigbee2mqtt — всегда свежая версия, рекомендуем ставить её. | ||
* zigbee2mqtt-1.18.1 — версия для старых адаптеров | * zigbee2mqtt-1.18.1 — версия для старых адаптеров WBE2R-R-ZIGBEE v.1, выпущенных до января 2022 года. [[WBE2R-R-ZIGBEE v.1 ZigBee Extension Module#revisions |Таблица ревизий]]. | ||
Для установки свежей версии, введите команду: | Для установки свежей версии, введите команду: | ||
Строка 26: | Строка 24: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Чтобы установить 1.18.1, выполните: | |||
:<syntaxhighlight lang="bash"> | :<syntaxhighlight lang="bash"> | ||
apt update && apt install zigbee2mqtt-1.18.1 | apt update && apt install zigbee2mqtt-1.18.1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Альтернативный способ установки — сборка из исходников по [[Zigbee2mqtt-src | инструкции]]. | Альтернативный способ установки — сборка из исходников по [[Zigbee2mqtt-src | инструкции]]. | ||
Дальше мост надо настроить, смотрите раздел Конфигурация. | |||
После установки пакета сервис zigbee2mqtt будет запускаться автоматически при старте контроллера, вы можете отключать и включать автозапуск командами: | После установки пакета сервис zigbee2mqtt будет запускаться автоматически при старте контроллера, вы можете отключать и включать автозапуск командами: | ||
Строка 38: | Строка 38: | ||
systemctl enable zigbee2mqtt | systemctl enable zigbee2mqtt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Конфигурация === | === Конфигурация === | ||
<div id="config"> | <div id="config"> | ||
Если вы используете модуль расширения [[WBE2R-R-ZIGBEE]], убедитесь, что правильно выставили модуль в '''Settings''' → '''Configs''' → '''Hardware Modules Configuration'''. При использовании USB-стика | Если вы используете модуль расширения [[WBE2R-R-ZIGBEE]], убедитесь, что правильно выставили модуль в '''Settings''' → '''Configs''' → '''Hardware Modules Configuration'''. При использовании USB-стика порт будет называться <code>/dev/ttyUSBx</code>, где x — номер порта, нумерация с нуля. | ||
Настройка: | Настройка: | ||
# Откройте файл конфигурации для редактированияː | # Откройте файл конфигурации для редактированияː | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# | # По умолчанию файл конфигурации выглядит так, в параметре '''port''' укажите порт, куда физически вставлен модуль. Если порт уже указан и он верен, не изменяйте файл: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
homeassistant: false | homeassistant: false | ||
Строка 71: | Строка 56: | ||
server: 'mqtt://localhost' | server: 'mqtt://localhost' | ||
serial: | serial: | ||
port: /dev/ | port: /dev/ttyMOD4 | ||
advanced: | advanced: | ||
rtscts: false | rtscts: false | ||
last_seen: epoch | last_seen: epoch | ||
pan_id: GENERATE | |||
network_key: GENERATE | |||
</syntaxhighlight> | </syntaxhighlight> | ||
#: | #: вместо GENERATE после первого запуска моста появятся значения, '''не изменяйте''' их. Если изменяете - то откорректируйте/удалите бэкап. | ||
# | # {{Wbincludes:Save nano}} | ||
# Перезапустите сервис <code>zigbee2mqtt</code>: | # Перезапустите сервис <code>zigbee2mqtt</code>: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl restart zigbee2mqtt | systemctl restart zigbee2mqtt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку '''Devices''' в стандартном веб-интерфейсе контроллера. | Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку '''Devices''' в стандартном веб-интерфейсе контроллера. | ||
=== Веб-интерфейс (Frontend) === | === Веб-интерфейс (Frontend) === | ||
Строка 100: | Строка 77: | ||
# Откройте файл <code>configuration.yaml</code> для редактированияː | # Откройте файл <code>configuration.yaml</code> для редактированияː | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# Добавьте в него блок: | # Добавьте в него блок: | ||
Строка 116: | Строка 93: | ||
Веб-интерфейс моста zigbee2mqtt будет доступен по адресу http://wb-ip-address:PORT, например, если IP-адрес контроллера '''192.168.42.1''', а порт указан '''8081''', то веб-интерфейс будет доступен по адресу http://192.168.42.1:8081 | Веб-интерфейс моста zigbee2mqtt будет доступен по адресу http://wb-ip-address:PORT, например, если IP-адрес контроллера '''192.168.42.1''', а порт указан '''8081''', то веб-интерфейс будет доступен по адресу http://192.168.42.1:8081 | ||
== | === Обновление === | ||
Для обновления zigbee2mqtt на свежую версию просто обновите программное обеспечение контроллера по [[Wiren_Board_Software | инструкции]]. Будут сохранены все настройки и подключенные устройства. | |||
Если у вас старый адаптер [[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-стик]. | |||
== Конвертер 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. | Wb-zigbee2mqtt — конвертер данных zigbee2mqtt в топики виртуальных устройств, написан на движке правил [[wb-rules]] и устанавливается в папку с системными правилами wb-rules-system. | ||
=== Принцип работы === | === Принцип работы === | ||
Конвертер wb-zigbee2mqtt запрашивает у zigbee2mqtt список всех подключенных устройств и подписывается на их топики. При получении данных от физических устройств конвертер парсит json, создает виртуальное устройство и посылает в него полученную информацию. | Конвертер '''wb-zigbee2mqtt''' запрашивает у zigbee2mqtt список всех подключенных устройств и подписывается на их топики. При получении данных от физических устройств конвертер парсит json, создает виртуальное устройство и посылает в него полученную информацию. | ||
Так же конвертер создает виртуальное устройство | Так же конвертер создает виртуальное устройство ''zigbee2mqtt'' и передает в него логи, версию и состояние (online\offline) моста zigbee2mqtt. Можно включить и выключить режим добавления устройств. Также там расположена кнопка ''Update devices''. При нажатии на эту кнопку конвертер заново запрашивает у моста список добавленных устройств и, если они появились — подписывается на них. | ||
=== Установка === | === Установка === | ||
wb-zigbee2mqtt ставится автоматически при установке пакета zigbee2mqtt, если этого не произошло, установите его командой: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
apt update && apt install wb-zigbee2mqtt | apt update && apt install wb-zigbee2mqtt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После этого в веб- | После этого в стандартном веб-интерфейсе контроллера на вкладке ''Devices'' появится устройство ''zigbee2mqtt''. | ||
=== Добавление устройств === | === Добавление устройств === | ||
[[Image: WebUI Add Zigbee Device.png |300px|thumb|right| Добавление устройства, сообщение '' | [[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'''. | # Откройте вкладку '''Devices'''. | ||
# Найдите там карточку устройства '''Zigbee2mqtt''' и проверьте статус в поле '''State''' — должно быть написано '''online'''. | # Найдите там карточку устройства '''Zigbee2mqtt''' и проверьте статус в поле '''State''' — должно быть написано '''online'''. Если вы только, что установили zigbee2mqtt и указан статус ''offline'' — подождите пару минут. | ||
# Включите переключатель '''Permit join'''. | # Включите переключатель '''Permit join'''. | ||
# Следуйте инструкции к Zigbee-устройству: в основном требуется зажать на устройстве кнопку '''pair''' на несколько секунд и дождаться | # Следуйте инструкции к Zigbee-устройству: в основном требуется зажать на устройстве кнопку '''pair''' на несколько секунд и дождаться мигания индикатора на устройстве. | ||
# В процессе добавления устройства в карточке '''Zigbee2mqtt''' в поле Log по очереди будут появляться сообщения '' | # В процессе добавления устройства в карточке '''Zigbee2mqtt''' в поле Log по очереди будут появляться сообщения ''Starting interview on 0xN → Device 0xN is supported''. Последнее сообщение означает, что устройство успешно опрошено. | ||
# Повторите шаги 5 и 6 для каждого Zigbee-устройства, которое у вас есть. | # Повторите шаги 5 и 6 для каждого Zigbee-устройства, которое у вас есть. | ||
# Завершите добавление устройств, для этого выключите переключатель '''Permit join'''. | # Завершите добавление устройств, для этого выключите переключатель '''Permit join'''. | ||
# Нажмите кнопку '''Update devices'''. | # Нажмите кнопку '''Update devices''', добавленные устройства будут доступны на вкладке '''Devices'''. | ||
Иногда, новые устройства не появляются на вкладке 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. | |||
Ещё бывает так, что карточка устройства появилась, но пустая — это значит, что устройство добавлено, но данные пока не были получены. Если это датчик, то тут нужно немного подождать, а в случае с выключателем — выключить или включить его. | |||
=== Изменение 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://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]). | |||
<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''. | ||
Пример | Пример включения и отключения реле с ''friendly_name'' равным ''0x00158d0001f3fc34'' в правилах [[wb-rules]]: | ||
<syntaxhighlight lang="js"> | <syntaxhighlight lang="js"> | ||
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false); | publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false); | ||
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false); | publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Вместо wb-rules вы можете использовать [[Node-RED]]. | |||
=== Удаление устройств === | === Удаление устройств === | ||
Чтобы удалить устройство | Чтобы удалить устройство: | ||
# | # Убедитесь, что в карточке устройства с заголовком ''Zigbee2mqtt'' перключатель '''Permit join''' находится в положении ''OFF''. | ||
# | # Разорвите связь устройства с координатором. Обычно для этого нужно зажать кнопку сопряжения на 5 секунд, смотрите документацию на устройство. | ||
# | # Проследите, чтобы в карточке с заголовком ''Zigbee2mqt''t в поле '''Log''' появилось сообщение ''left_network''. | ||
# | # Удалите карточку этого Zigbee-устройства из веб-интерфейса, для этого наведите на заголовок карточки курсор мыши и нажмите на корзинку. | ||
# Подключитесь к контроллеру по [[SSH]] и перезапустите wb-rules — это перезапустит конвертер wb-zigbee2mqtt: | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
systemctl restart wb-rules | systemctl restart wb-rules | ||
Строка 174: | Строка 193: | ||
<gallery mode="packed" heights="180px"> | <gallery mode="packed" heights="180px"> | ||
Image: WebUI Zigbee Device Left Network.png | Сообщение ''left_network'' | Image: WebUI Zigbee Device Left Network.png | Сообщение ''left_network'' | ||
Image: WebUI Zigbee Device Remove.png | Корзинка для удаления Zigbee-устройства | Image: WebUI Zigbee Device Remove.png | Корзинка для удаления карточки Zigbee-устройства | ||
</gallery> | </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> | |||
== Диагностика неисправностей == | |||
Если вы столкнулись с проблемами в работе zigbee2mqtt, то прояснить ситуацию поможет статус сервиса и чтение подробных логов. Для выполнения команд подключитесь к контроллеру по [[SSH]]. | |||
Посмотреть текущий статус и последние несколько сообщений из лога можно командой: | |||
<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) | |||
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 | |||
> 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 | |||
</syntaxhighlight> | |||
#: здесь сразу видно, что мы в настройках неверно указали порт. | |||
# После того, как вы нашли и устранили проблему, снова запустите сервис: | |||
#:<syntaxhighlight lang="bash"> | |||
systemctl start zigbee2mqtt | |||
</syntaxhighlight> | |||
Если при выполнении <code>npm start</code> сервис запустился успешно, то остановить его можно нажатием клавиш <kbd>Ctrl</kbd>+<kbd>C</kbd>. | |||
Иногда может потребоваться отключить автозапуск сервиса, управлять автозапуском можно командами: | |||
<syntaxhighlight lang="bash"> | |||
systemctl disable zigbee2mqtt | |||
systemctl enable zigbee2mqtt | |||
</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 из исходников]] |
Текущая версия на 14:19, 26 июня 2024
Описание
Для использования Zigbee-устройств с контроллером Wiren Board понадобится:
- Модуль расширения WBE2R-R-ZIGBEE v.2 (WBE2R-R-ZIGBEE v.1) или любой USB Zigbee стик.
- Дополнительное ПО:
- zigbee2mqtt — мост, с помощью которого можно управлять Zigbee-устройствами через MQTT, поддерживаемые устройства.
- wb-zigbee2mqtt — конвертер данных из топиков zigbee2mqtt в Wiren Board MQTT Conventions.
Инструкции по установке смотрите ниже на этой странице.
Копируйте команды из инструкции, вставляйте их в консоль контроллера с помощью клавиш 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, убедитесь, что правильно выставили модуль в Settings → Configs → Hardware Modules Configuration. При использовании USB-стика порт будет называться /dev/ttyUSBx
, где x — номер порта, нумерация с нуля.
Настройка:
- Откройте файл конфигурации для редактированияː
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
- По умолчанию файл конфигурации выглядит так, в параметре 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 после первого запуска моста появятся значения, не изменяйте их. Если изменяете - то откорректируйте/удалите бэкап.
- Нажмите Ctrl+S для сохранения изменений, Ctrl+X — для выхода из редактора.
- Перезапустите сервис
zigbee2mqtt
:systemctl restart zigbee2mqtt
Теперь вы можете установить конвертер wb-zigbee2mqtt и Zigbee-устройства будут добавлены на вкладку Devices в стандартном веб-интерфейсе контроллера.
Веб-интерфейс (Frontend)
Веб-интерфейс zigbee2mqtt потребляет ресурсы контроллера — не включайте его, если не используете: добавлять и удалять устройства можно через наш конвертер wb-zigbee2mqtt.
Если вам всё же нужен родной веб-интерфейс zigbee2mqtt, то его можно включить в файле настроек:
- Откройте файл
configuration.yaml
для редактированияːnano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
- Добавьте в него блок:
frontend: port: 8081 host: 0.0.0.0
- Сохраните и закройте файл.
- Перезапустите сервис
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
Описание
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.
Добавление устройств
Устройства можно добавлять по одному или все разом. Чтобы добавить новые устройства:
- Перейдите в стандартный веб-интерфейс контроллера.
- Откройте вкладку 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.
Иногда, новые устройства не появляются на вкладке Devices — это может быть по причинам:
- Произошла ошибка в конвертере при разборе данных от zigbee2mqtt, в этом случае перезапустите движок правил:
systemctl restart wb-rules
- Некоторые устройства не поддерживаются zigbee2mqtt, для таких устройств в сообщении будет указано Starting interview on 0xN → Device 0xN ... is NOT supported. В этом случае убедитесь, что устройство есть в списке поддерживаемых и у вас установлена свежая версия zigbee2mqtt.
Ещё бывает так, что карточка устройства появилась, но пустая — это значит, что устройство добавлено, но данные пока не были получены. Если это датчик, то тут нужно немного подождать, а в случае с выключателем — выключить или включить его.
Изменение friendly_name
friendly_name — это человекочитаемое имя устройства. Вы можете оставить значение по умолчанию, или настроить своё:
- Откройте файл конфигурации для редактированияː
nano /mnt/data/root/zigbee2mqtt/data/configuration.yaml
- Найдите в секции devices ваше устройство.
- Измените friendly_name.
- Сохраните файл настроек и перезапустите сервис:
systemctl restart zigbee2mqtt
- В стандартном веб-интерфейсе контроллера на вкладке Devices должно появиться устройство с заданным именем.
- Удалите карточку устройства со старым именем с вкладки Devices, для этого нажмите на корзинку в заголовке.
Новое имя устройства должно соответствовать этим требованиям (плюс нельзя использовать косую черту /
) и не должно быть одинаковым для нескольких устройств, а также соответствовать определённым правилам — так называемым соглашениям (Wiren Board MQTT Conventions).
- Изменение friendly_name
Управление устройствами
Управление через конвертер 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.
Удаление устройств
Чтобы удалить устройство:
- Убедитесь, что в карточке устройства с заголовком Zigbee2mqtt перключатель Permit join находится в положении OFF.
- Разорвите связь устройства с координатором. Обычно для этого нужно зажать кнопку сопряжения на 5 секунд, смотрите документацию на устройство.
- Проследите, чтобы в карточке с заголовком Zigbee2mqtt в поле Log появилось сообщение left_network.
- Удалите карточку этого Zigbee-устройства из веб-интерфейса, для этого наведите на заголовок карточки курсор мыши и нажмите на корзинку.
- Подключитесь к контроллеру по SSH и перезапустите wb-rules — это перезапустит конвертер wb-zigbee2mqtt:
systemctl restart wb-rules
Как переустановить с сохранением данных
В некоторых случаях может потребоваться переустановить конвертер с сохранением данных, например, если мост не стартует после обновления.
Инструкция:
- Перейдите в домашний каталог:
cd ~
- Сохраните настройки:
cp -R /mnt/data/root/zigbee2mqtt/data data-backup
- Удалите zigbee2mqtt командой:
apt purge zigbee2mqtt
- Если остался каталог с node-modules — удалите его:
rm -r /mnt/data/root/zigbee2mqtt/node_modules
- Заново поставьте zigbee2mqtt:
apt install zigbee2mqtt
- Восстановите настройки из архива:
cp -R data-backup/* /mnt/data/root/zigbee2mqtt/data
- Перезапустите сервис:
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'.
Часто бывает так, что из предыдущего шага мы видим наличие проблемы, но причина непонятна, в этом случае нужно смотреть логи:
- Остановите сервис командой:
systemctl stop zigbee2mqtt
- Перейдите в каталог с zigbee2mqtt:
cd /mnt/data/root/zigbee2mqtt/
- Запустите 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
- здесь сразу видно, что мы в настройках неверно указали порт.
- После того, как вы нашли и устранили проблему, снова запустите сервис:
systemctl start zigbee2mqtt
Если при выполнении npm start
сервис запустился успешно, то остановить его можно нажатием клавиш Ctrl+C.
Иногда может потребоваться отключить автозапуск сервиса, управлять автозапуском можно командами:
systemctl disable zigbee2mqtt
systemctl enable zigbee2mqtt