Инструменты пользователя

Инструменты сайта


raspberry_pi:pi_4_model_b:raspberry_pi_os:zigbee2mqtt

Установка Zigbee2MQTT на Raspberry Pi OS

Это адаптация официальной инструкции с моими комментариями и дополнениями.

Установка

  1. устанавливаем зависимости

    sudo apt install -y git make g++ gcc
  2. создаем папку и меняем владельца на текущего пользователя

    sudo mkdir /opt/zigbee2mqtt && sudo chown -R ${USER}: /opt/zigbee2mqtt
  3. клонируем репозиторий

    git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
  4. переходим в папку и устанавливаем зависимости

    cd /opt/zigbee2mqtt && npm ci

    помимо предупреждений, которые в инструкции рекомендовано игнорировать, у меня он как-то по другому ругался и предложил выполнить npm audit fix, что я и сделал

  5. создаем… хм… или компилируем приложение

    npm run build

Обновление

Просто запускаем и все, больше ничего, ни вручную останавливать, ни что-то еще, делать не надо!

cd /opt/zigbee2mqtt && ./update.sh

Прошивка

Для использования донглов с Zigbee2MQTT их нужно прошить под Z-Stack:

Настройка

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

Базовая

В конфигурации рекомендовано указывать USB-донгл по его идентификатору, т.к. он не меняется, в отличие от пути монтирования, которое может поменяться… да хоть от смены USB-порта!

Определить идентификатор можно, выполнив команду:

ls -l /dev/serial/by-id

В моем случае

  • устройство смонтировано в «/dev/ttyUSB0»,
  • с id «usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6834563cdr39ec118e77e6600aac08d5-if00-port0».

Теперь можно создать начальную конфигурацию, скопировав ее из примера:

cp /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml

и открыть в редакторе

nano /opt/zigbee2mqtt/data/configuration.yaml

или просто создать файл конфигурации, не копируя пример, и вставить в него эти настройки, которые полностью соответствуют базовому набору, но дополнены важными на мой взгляд моментами, и отредактировать

:!: В синтаксисе yaml крайне важно соблюдать отступы в иерархии!

configuration.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» должен выглядеть так:

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»:

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

Профит! 8-)


Дисклеймер

  • Использование материалов данной базы знаний разрешено на условиях лицензии, указанной внизу каждой страницы! При использовании материалов активная гиперссылка на соответствующую страницу данной базы знаний обязательна!
  • Автор не несет и не может нести какую либо ответственность за последствия использования материалов, размещенных в данной базе знаний. Все материалы предоставляются по принципу «как есть». Используйте их исключительно на свой страх и риск.
  • Все высказывания, мысли или идеи автора, размещенные в материалах данной базе знаний, являются исключительно его личным субъективным мнением и могут не совпадать с мнением читателей!
  • При размещении ссылок в данной базе знаний на интернет-страницы третьих лиц автор не несет ответственности за их техническую функциональность (особенно отсутствие вирусов) и содержание! При обнаружении таких ссылок, можно и желательно сообщить о них в комментариях к соответствующей статье.

Обсуждение

Ваш комментарий:
J J M B R N G T X N B S​ Q Q K P
 
Последнее изменение: 2023/12/28 14:20 — Николай Солошин