uDocs

Docker часть 7: Zigbee2MQTT

Настраиваем Zigbee2MQTT в Docker контейнере Home Assistant

Docker часть 7: Zigbee2MQTT

Zigbee — это беспроводной протокол, подобный WiFi, но разработанный специально для устройств IoT. Устройства соединяются в ячеистую сеть, где устройства с питанием от сети (например, лампочки и умные розетки) выступают в качестве роутеров для увеличения радиуса действия сети. Координатор Zigbee находится в центре сети Zigbee и обеспечивает взаимодействие с устройствами, не относящимися к Zigbee.

Home Assistant предлагает 2 интеграции Zigbee: встроенную ZHA и deCONZ, которая работает через надстройку. Другой популярной альтернативой является Zigbee2MQTT, который использует обнаружение MQTT Home Assistant для создания устройств и объектов в Home Assistant.

В этом посте будет обсуждаться установка Zigbee2MQTT, так как он использует контейнер Docker для координатора (мы уже установили брокера MQTT).

Обнаружение Zigbee координатора

В нашей конфигурации создания Docker нам нужно назначить координатор Zigbee, который будет подключен через USB, к контейнеру Docker.

Подключите координатор по USB и введите команду в терминале

ls -l /dev/serial/by-id/

Мы будем использовать этот уникальный путь по by-id в нашей конфигурации позже вместо типичного /dev/ttyUSB0, потому что всегда существует риск того, что устройство получит новый TTY, назначенный после перезагрузки, особенно с другими подключаемыми устройствами.

В нашем случае используется Sonoff Zigbee 3.0 usb Dongle E.

Перейдем в .env файл и добавим новую переменную ZIGBEE_ADAPTER_TTY

Установка Zigbee2MQTT контейнера

Расширяем наш docker-compose.yaml конфигом для контейнера Zigbee2MQTT.

docker-compose.yaml
version: '3.0'

services:
  portainer:         # часть 2
    [...]
  homeassistant:     # часть 3
    [...]
  hass-configurator: # часть 4
    [...]
  mariadb:           # часть 5
    [...]
  adminer:           # часть 5
    [...]
  mosquitto:         # часть 6
    [...]

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt
    restart: unless-stopped
    devices:
      - ${ZIGBEE_ADAPTER_TTY}:/dev/ttyACM0    
    ports:
      - "8020:8020"
    environment:
      - TZ=Europe/Moscow
    volumes:
      - ./zigbee2mqtt:/app/data
      - /run/udev:/run/udev:ro
    depends_on:
      - mosquitto

Мы пока не будем запускать наш контейнер, так как сначала мы хотим настроить нашу конфигурацию.

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

Создаем папку с конфигурацией

mkdir zigbee2mqtt

Создаем файл конфигурации и записываем в него данные

sudo nano zigbee2mqtt/configuration.yaml
zigbee2mqtt/configuration.yaml
# записываем в него
homeassistant: true

permit_join: false

mqtt:
  base_topic: zigbee2mqtt
  server: '!secret server'
  user: '!secret user'
  password: '!secret password'
  client_id: zigbee

serial:
  port: /dev/ttyACM0

frontend:
  port: 8020

Далее необходимо создать файл с секретами, в которых будет храниться наше соединение с MQTT

sudo nano zigbee2mqtt/secret.yaml
zigbee2mqtt/secret.yaml
# записываем в него. Не забудьте поменять IP и PASSWORD
server: "mqtt://<IP>:1883"
user: "homeassistant"
password: "<PASSWORD>"

Имея эту конфигурацию, мы можем запустить контейнер, используя docker compose up -d zigbee2mqtt.

Добавление Zigbee2MQTT в Home Assistant

Для удобства использования добавим Z2M в боковую колонку, так же как мы делали с Portainer, File Editor, Adminer.

Для этого откроем configuration.yaml и в блоке panel_iframe добавим новую секцию

configuration.yaml
panel_iframe:
  portainer:    # часть 2
    [...]
  configurator: # часть 4
    [...]
  adminer:      # часть 5
    [...]
  
  zigbee2mqtt:
    title: Zigbee2MQTT
    icon: mdi:zigbee
    url: "http://<ip>:8020"
    require_admin: true

Подключение устройств через Zigbee2MQTT

Теперь когда все настроено, давайте проверим все ли правильно работает. Для этого разрешаем все подключения и сопрягаем устройства.

Итоговая структура проекта

home-assistant
├── .env
├── docker-compose.yaml
├── fileeditor
├── homeassistant
├── mosquitto
├── portainer
└── zigbee2mqtt
    └── ...

Обсуждение

ПётрПётр
20 мая 2025

Вероятно, сетевой порт, если 8020 был занят

ports:

  – “{8020->8030}:8020”
ИльяИлья
19 апреля 2025

Добрый день, а что за порт вы меняли и как?

ВячеславВячеслав
16 марта 2025

Обновил прошивку Sonoff Zigbee, дописал в конфигурацию adapter: ember, поменял порт на малинке и Все заработало.

ВячеславВячеслав
15 марта 2025

Добрый вечер. Спасибо за подсказку. Контейнер удалось запустить. Но, судя по логу, контейнер перезапускается по watchdog.

2025-03-15 20:32:27 info: z2m: Starting zigbee-herdsman (3.2.7)

2025-03-15 20:32:28 info: zh:adapter:discovery: Matched adapter: {“path”:”/dev/ttyUSB0″,”manufacturer”:”ITead”,”serialNumber”:”58e9c4813114ef11842075b8bf9df066″,”pnpId”:”usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_58e9c4813114ef11842075b8bf9df066-if00-port0″,”vendorId”:”10c4″,”productId”:”ea60″} => zstack: path=/dev/ttyUSB0, score=4

2025-03-15 20:32:28 info: zh:zstack:znp: Opening SerialPort with {“path”:”/dev/ttyUSB0″,”baudRate”:115200,”rtscts”:false,”autoOpen”:false}

2025-03-15 20:32:28 info: zh:zstack:znp: Serialport opened

2025-03-15 20:32:28 info: zh:zstack:znp: Writing CC2530/CC2531 skip bootloader payload

2025-03-15 20:32:30 info: zh:zstack:znp: Skip bootloader for CC2652/CC1352

2025-03-15 20:32:48 error: z2m: Error while starting zigbee-herdsman

2025-03-15 20:32:48 error: z2m: Failed to start zigbee-herdsman

2025-03-15 20:32:48 error: z2m: Check https://www.zigbee2mqtt.io/guide/installation/20_zigbee2mqtt-fails-to-start_crashes-runtime.html for possible solutions

2025-03-15 20:32:48 error: z2m: Exiting…

2025-03-15 20:32:49 error: z2m: Error: Failed to connect to the adapter (Error: SRSP – SYS – ping after 6000ms)

at ZStackAdapter.start (/app/node_modules/.pnpm/zigbee-herdsman@3.2.7/node_modules/zigbee-herdsman/src/adapter/z-stack/adapter/zStackAdapter.ts:113:27)

at Controller.start (/app/node_modules/.pnpm/zigbee-herdsman@3.2.7/node_modules/zigbee-herdsman/src/controller/controller.ts:136:29)

at Zigbee.start (/app/lib/zigbee.ts:69:27)

at Controller.start (/app/lib/controller.ts:142:13)

at start (/app/index.js:161:5)

Using ‘/app/data’ as data directory

Starting Zigbee2MQTT without watchdog.

2025-03-15 20:33:00 info: z2m: Logging to console, file (filename: log.log)

2025-03-15 20:33:00 info: z2m: Starting Zigbee2MQTT version 2.1.3 (commit #ba337bd329aeb4ca17735c0cf09b31293c8cff06)

В чем может быть дело?

Alexander PushkarevAlexander Pushkarev
10 марта 2025

Что указано в секции devices? должно быть /dev/ttyACM0, а не ../../ttyACM0

ВячеславВячеслав
9 марта 2025

Не запускается контейнер zigbee2MQTT/ Portainer пишет : Failed starting container: error gathering device information while adding custom device “/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_58e9c4813114ef11842075b8bf9df066-if00-port0 -> ../../ttyACM0”: no such file or directory

Как будто не видит хаб.

SergeySergey
14 ноября 2024

Файлы configuration.yaml и secret.yaml должны быть созданы в директории zigbee2mqtt/data иначе плагин будет стучаться по дефолтному адресу localhost и не дойдет до mosquitto.

ИгорьИгорь
20 июня 2024

После перезагрузки подключенные устройства не отображаются в “Zigbee2MQTT – Устройства” В интеграции MQTT пишет “Этот объект больше не предоставляется интеграцией mqtt. Вы можете удалить его на вкладке “Настройки”, если он больше не будет использоваться.”

МихаилМихаил
31 мая 2024

Добрый день! Большое спасибо за столь подробную серию статей, но у меня, в процессе установки возникла следующая проблема: У меня не USB-устройство, а Xiaomi Gateway. Не определятся сервером по USB и не могу конфигурацию корректно указать. Может сталкивались с таким? Заренее спасибо!

СоусСоус
4 апреля 2024

Столкнулся с неприятным моментом, если отключить сетевой кабель от малины, зигби устройства перестают работать. Это не большая проблема, но если ты решил перезагрузить роутер и в этот момент у тебя срабатывают автоматизации, можно словить глюки из-за которых часть устройств работает, а часть нет. (надеюсь что именно перезагрузка роутера была тому виной).

Что бы сделать работу zigbee2mqtt не зависящей от наличия локального сетевого адреса, я использовал адрес 172.19.0.3, который показывается в portainer для контейнера mosquitto.

В этом случае указать localhost или прочие аналоги не получалось, zigbee2mqtt отказывался работать.

Так же в настройках интеграции MQTT в HA я указал localhost заместо локального адреса.