
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.
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
# записываем в него
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
# записываем в него. Не забудьте поменять 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
добавим новую секцию
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
└── ...
Почему-то после всех операций по инструкции так и не видит стик, в устройствах пусто и параллельно стик отвалился в ZHA, там теперь выходит ошибка проверки USB устройства — что я мог сделать не так?
После перезагрузки ОС отваливаются zigbee устройства! При повторном подключении устройства подхватывают прежние имена (в файле конфигурации Zigbee2MQTT данные об устройствах есть).
Здравствуйте, спасибо большое за серию статей. Все очень грамотно и четко.
И прошу помощи. В «НА» при открытии вкладки Zigbee2MQTT выдает ошибку: Не удается получить доступ к сайту.
Очень хороший материал. Немного краток, но все подробности есть в инете.
Захотел поднять HA в кубере. Но в процессе развертывания наткнулся на ваши статьи. И стало таааак лениво =) В итоге поднял быстренько в compose. Спасибо за труд.
З.Ы. оформление топ
Поправьте описание configuration.yaml
Должно быть.
mqtt:
server: ‘!secret.yaml server’
user: ‘!secret.yaml user’
password: ‘!secret.yaml password’
Столкнулся с неприятным моментом, если отключить сетевой кабель от малины, зигби устройства перестают работать. Это не большая проблема, но если ты решил перезагрузить роутер и в этот момент у тебя срабатывают автоматизации, можно словить глюки из-за которых часть устройств работает, а часть нет. (надеюсь что именно перезагрузка роутера была тому виной).
Что бы сделать работу zigbee2mqtt не зависящей от наличия локального сетевого адреса, я использовал адрес 172.19.0.3, который показывается в portainer для контейнера mosquitto.
В этом случае указать localhost или прочие аналоги не получалось, zigbee2mqtt отказывался работать.
Так же в настройках интеграции MQTT в HA я указал localhost заместо локального адреса.
Добрый день! Большое спасибо за столь подробную серию статей, но у меня, в процессе установки возникла следующая проблема: У меня не USB-устройство, а Xiaomi Gateway. Не определятся сервером по USB и не могу конфигурацию корректно указать. Может сталкивались с таким? Заренее спасибо!
После перезагрузки подключенные устройства не отображаются в «Zigbee2MQTT — Устройства» В интеграции MQTT пишет «Этот объект больше не предоставляется интеграцией mqtt. Вы можете удалить его на вкладке «Настройки», если он больше не будет использоваться.»
Файлы configuration.yaml и secret.yaml должны быть созданы в директории zigbee2mqtt/data иначе плагин будет стучаться по дефолтному адресу localhost и не дойдет до mosquitto.
Не запускается контейнер 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
Как будто не видит хаб.
Что указано в секции devices? должно быть `/dev/ttyACM0`, а не `../../ttyACM0`
Добрый вечер. Спасибо за подсказку. Контейнер удалось запустить. Но, судя по логу, контейнер перезапускается по 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)
В чем может быть дело?
Обновил прошивку Sonoff Zigbee, дописал в конфигурацию adapter: ember, поменял порт на малинке и Все заработало.