Это адаптация официальной инструкции с моими комментариями и дополнениями.
sudo apt install -y git make g++ gcc
sudo mkdir /opt/zigbee2mqtt && sudo chown -R ${USER}: /opt/zigbee2mqtt
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
cd /opt/zigbee2mqtt && npm ci
помимо предупреждений, которые в инструкции рекомендовано игнорировать, у меня он как-то по другому ругался и предложил выполнить npm audit fix
, что я и сделал
npm run build
Просто запускаем и все, больше ничего, ни вручную останавливать, ни что-то еще, делать не надо!
cd /opt/zigbee2mqtt && ./update.sh
Для использования донглов с Zigbee2MQTT их нужно прошить под Z-Stack:
Перед запуском необходимо сделать как минимум базовые настройки.
В конфигурации рекомендовано указывать USB-донгл по его идентификатору, т.к. он не меняется, в отличие от пути монтирования, которое может поменяться… да хоть от смены USB-порта!
Определить идентификатор можно, выполнив команду:
ls -l /dev/serial/by-id
В моем случае
Теперь можно создать начальную конфигурацию, скопировав ее из примера:
cp /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml
и открыть в редакторе
nano /opt/zigbee2mqtt/data/configuration.yaml
или просто создать файл конфигурации, не копируя пример, и вставить в него эти настройки, которые полностью соответствуют базовому набору, но дополнены важными на мой взгляд моментами, и отредактировать
В синтаксисе yaml крайне важно соблюдать отступы в иерархии!
homeassistant: false # Веб-интерфейс без пароля на стандартном порту 8080 # frontend: true # А так на порту 8081, если 8080 занят, и с паролем frontend: port: 8081 auth_token: H37hm6C4ntHCZscIfBMYiUK6gftV8Wpi mqtt: base_topic: zigbee2mqtt server: 'mqtt://localhost' user: my_user password: my_password serial: # Добавление донгла по пути монтирования, что не рекомендуется # port: /dev/ttyACM0 # Добавление по идентификатору port: /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6834563cdr39ec118e77e6600aac08d5-if00-port0 rtscts: false advanced: # Оставить GENERATE для автоматической генерации при первом запуске network_key: GENERATE pan_id: GENERATE ext_pan_id: GENERATE # Используемый канал; при смене придется добавлять все устройства заново channel: 25
Теперь можно запустить Zigbee2MQTT
npm start
Если все хорошо, останавливаем, нажав «Ctrl+C», и продолжаем настройку.
В дополнительные, но интересные настройки, я вы выделил перенос чувствительных данных и настроек устройств в отдельные файлы.
В первом случае, нужно вместо параметра указать «'!secret.yaml setting_name'»:
mqtt: base_topic: zigbee2mqtt server: '!secret.yaml server' user: '!secret.yaml user' password: '!secret.yaml password' advanced: network_key: '!secret.yaml network_key'
тогда, как сам файл «secret.yaml» должен выглядеть так:
network_key: - 231 - 10 - 110 - 5 - 87 - 99 - 48 - 0 - 78 - 144 - 101 - 195 - 15 - 6 - 140 - 199 server: mqtt://localhost user: my_user password: my_password
А во втором, в файле «configuration.yaml» должно быть так:
devices: devices.yaml
А в «devices.yaml»:
'0xXXXXXXXXXXXXXXXA': friendly_name: device1 '0xXXXXXXXXXXXXXXXB': friendly_name: device2
Для меня еще были полезны следующие настройки:
advanced: # Состояния доступности публикуются в виде текста, а не JSON-строки legacy_availability_payload: true # Публикация времени последнего отклика устройства в локальном часовом поясе last_seen: ISO_8601_local # Логи пишутся только в консоль, но не на диск, что важно для Raspberry, которая работает с SD-карты log_output: - console # Включение публикации состояний доступности availability: # Таймаут в минутах для устройств с внешним питанием active: timeout: 10 # Для устройств с батарейным питанием passive: timeout: 60 # Индивидуальные настройки для конкретных устройств devices: '0xXXXXXXXXXXXXXXXA': friendly_name: device1 # Публикация отключена availability: false '0xXXXXXXXXXXXXXXXB': friendly_name: device2 availability: # Таймаут 90 минут, а не 60, как для других timeout: 90
Для автоматического запуска Zigbee2MQTT нужно создать файл
sudo nano /etc/systemd/system/zigbee2mqtt.service
и вставить в него следующее, изменив пользователя «pi» на вашего
[Unit] Description=zigbee2mqtt After=network.target [Service] Environment=NODE_ENV=production ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always RestartSec=10s User=pi [Install] WantedBy=multi-user.target
Далее запустить и активировать:
sudo systemctl start zigbee2mqtt && sudo systemctl enable zigbee2mqtt.service
Профит!
Обсуждение