Главная страницаHome AssistantHome Assistant в Docker ContainerDocker часть 7: Zigbee2MQTT
Docker часть 7: Zigbee2MQTT

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
    └── ...

Список всех частей

Был ли полезен материал?

Мне очень важно получать обратную связь. Пожалуйста, оцените материал. Так я пойму в какую сторону его стоит изменить.

Комментарии
  • Александр
    Александр
    10.11.2023 21:29

    Почему-то после всех операций по инструкции так и не видит стик, в устройствах пусто и параллельно стик отвалился в ZHA, там теперь выходит ошибка проверки USB устройства — что я мог сделать не так?

  • Игорь
    Игорь
    28.12.2023 15:34

    После перезагрузки ОС отваливаются zigbee устройства! При повторном подключении устройства подхватывают прежние имена (в файле конфигурации Zigbee2MQTT данные об устройствах есть).

  • Rus
    Rus
    25.01.2024 20:58

    Здравствуйте, спасибо большое за серию статей. Все очень грамотно и четко.
    И прошу помощи. В «НА» при открытии вкладки Zigbee2MQTT выдает ошибку: Не удается получить доступ к сайту.

  • Роман
    Роман
    07.02.2024 21:44

    Очень хороший материал. Немного краток, но все подробности есть в инете.
    Захотел поднять HA в кубере. Но в процессе развертывания наткнулся на ваши статьи. И стало таааак лениво =) В итоге поднял быстренько в compose. Спасибо за труд.
    З.Ы. оформление топ

  • Roman
    Roman
    07.03.2024 12:28

    Поправьте описание configuration.yaml
    Должно быть.
    mqtt:
    server: ‘!secret.yaml server’
    user: ‘!secret.yaml user’
    password: ‘!secret.yaml password’

  • Соус
    Соус
    05.04.2024 01:34

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

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

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

  • Михаил
    Михаил
    31.05.2024 23:24

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

  • Игорь
    Игорь
    20.06.2024 16:28

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

  • Sergey
    Sergey
    14.11.2024 16:40

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

  • Вячеслав
    Вячеслав
    09.03.2025 19:32

    Не запускается контейнер 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

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

    • Alexander Pushkarev
      Alexander Pushkarev
      10.03.2025 14:05

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

      • Вячеслав
        Вячеслав
        15.03.2025 20:33

        Добрый вечер. Спасибо за подсказку. Контейнер удалось запустить. Но, судя по логу, контейнер перезапускается по 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)

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

  • Вячеслав
    Вячеслав
    16.03.2025 11:53

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

Оставить комментарий