Как подключить координатор для управления IoT устройствами?
Цель и необходимость
Когда начал заниматься темой «умного дома», то для себя составил требования к выбираемой технологии (взаимодействие с IoT устройствами):
Энергоэффективность.
Стабильность и зрелость технологии.
Дешевые и взаимозаменяемые устройства.
По всем этим критериям на тот момент победу одержала технология Zigbee. Были и недостатки в виде несовместимости некоторых устройств, производители которых используют свои закрытые прошивки и при этом указывают «Zigbee». Также есть ограничение по скорости, поэтому не рекомендуется передавать потокового видео, например. Для меня это были не проблемы, поэтому пошел в выбранную сторону. В этой статье буду описывать как я настроил работу координатора Zigbee, который занимает центральное место в сети IoT устройств. Концептуальная схема выглядит так:
Покупка координатора
Для себя взял координатор SONOFF Zigbee 3.0 USB Dongle Plus ZBDongle-P.
Установка координатора в Proxmox
Подключаем в USB разъем, устройство в Proxmox добавляем к VM по аналогии c видеокартой.
Заходим в VM и проверяем (должен быть похожий вывод):
$ ls -l /dev/serial/by-id/
lrwxrwxrwx 1 root root 13 Jun 11 07:36 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_baf0b5bdd7e7ed11b34cd6770b2af5ab-if00-port0 -> ../../ttyUSB0
docker-compose
Создаем папки и необходимые файлы:
mkdir -p {config_mosquitto,config_zigbee2mqtt/zigbee2mqtt/data,config_mosquitto/config}
sudo touch {docker-compose.yml,config_zigbee2mqtt/zigbee2mqtt/data/configuration.yaml,config_mosquitto/config/mosquitto.conf,config_mosquitto/config/mqttuser}
Редактируем sudo nano config_mosquitto/config/mosquitto.conf
:
# Listen on port 1883 on all IPv4 interfaces
listener 1883
socket_domain ipv4
# save the in-memory database to disk
persistence true
persistence_location /mosquitto/data/
# Log to stderr and logfile
log_dest stderr
log_dest file /mosquitto/log/mosquitto.log
# Require authentication
allow_anonymous false
password_file /mosquitto/config/mqttuser
Редактируем через nano docker-compose.yaml
:
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:latest
restart: unless-stopped
ports:
- "1883:1883/tcp"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config_mosquitto/config:/mosquitto/config
- ./config_mosquitto/data:/mosquitto/data
- ./config_mosquitto/log:/mosquitto/log
depends_on:
- zigbee2mqtt
network_mode: host
stdin_open: true
tty: true
zigbee2mqtt:
container_name: zigbee2mqtt
image: ghcr.io/koenkk/zigbee2mqtt
restart: unless-stopped
ports:
- "8099:8099/tcp"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config_zigbee2mqtt/zigbee2mqtt/data:/app/data
- /run/udev:/run/udev:ro
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_baf0b5bdd7e7ed11b34cd6770b2af5ab-if00-port0:/dev/ttyACM0
network_mode: host
Секцию devices
подменяем на свои значения. Запускаем docker-compose
.
После запуска контейнеров видим ошибки невозможности открыть файл конфигурации /mosquitto/config/
:
$ docker-compose logs mosquitto
mosquitto | 1749989865: Error: Unable to open config file /mosquitto/config/mosquitto.conf.
Создаем пользователя (запоминаем username
и passsword
):
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/mqttuser <your_user>
Перезапускаем контейнер: docker-compose restart mosquitto
. Идем в UI Homeassistant и добавляем интеграцию MQTT:
Прописываем пользователя, которого создали для mosquitto
. Интеграция должна создаться успешно.
Редактируем nano config_zigbee2mqtt/zigbee2mqtt/data/configuration.yaml
frontend:
enabled: true
port: 8099
url: http://<IP>:8099
mqtt:
base_topic: zigbee2mqtt
server: mqtt://<IP>
user: <your_user>
password: <your_password>
client_id: zigbee
keepalive: 60
reject_unauthorized: true
version: 4
serial:
port: /dev/ttyACM0
adapter: zstack
devices: devices.yaml
groups: groups.yaml
device_options: {}
version: 4
Перезагружаем контейнер: docker-compose logs zigbee2mqtt
. Переходим по адресу http://<IP>:8099
. Должны увидеть:
При необходимости добавляем ссылку на
http://<IP>:8099
в UI Homeassistant.
Пока тут нет устройств, но мы теперь можем их подключить :)
Итог
Теперь у нас есть мощные инструменты добавления IoT устройств и создания автоматизаций с ними, но об этом в следующих статьях.
Ссылки: