73. Home Assistant: Zigbee2MQTT и MQTT брокер в LXC контейнерах
В этой статье займёмся оптимизацией работы дополнений Zigbee2MQTT и MQTT брокера, используя LXC контейнеры в Proxmox.
Вспомним архитектуру работы зигби:
Зигби устройство - координатор - дополнение Zigbee2MQTT - MQTT брокер - интеграция MQTT в Home Assistant.
И будем идти из конца в начало.
Установка MQTT брокера
Home Assistant уже есть, запустить на нём интеграцию дело трёх секунд, но она должна куда-то подключаться. Поэтому первым делом установим и настроим LXC контейнер с MQTT брокером.
Для этого в консоли Proxmox запускаем следующий скрипт:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/mqtt.sh)"
Он позволяет создать контейнер основанный на системе Debian внутри, с 512 Мб оперативной памяти, диском на 2ГБ и одним процессором с одним ядром.
После того как контейнер создан и запущен, все команды выполняются уже в его консоли.
Чтобы узнать айпи и мак адреса нового LXC, выполним
ip a
и сделаем необходимую привязку на DHCP сервере.
Теперь запустим команду для создания пользователя MQTT и пароля к нему, чтобы подключаться по сети:
mosquitto_passwd -c /etc/mosquitto/passwd user
Где вместо слова user указываем любое желаемое имя пользователя (на английском конечно же). Затем система запросит дважды (для верности) указать пароль к этому пользователю. Тоже придумываем что угодно своё.
Дадим только что созданному пользователю права на обращение к файлу с его паролем, запустив команду:
chown mosquitto:mosquitto /etc/mosquitto/passwd
Ну и в завершение перезапускаем брокер:
systemctl restart mosquitto
На этом настройка завершена.
И можно проверить что брокер работает, подключившись к нему на порт 1883 с помощью уже упомянутого ранее на этом сайте MQTT Explorer.
Обновления.
Поэтому открываем планировщик задач crontab -e и добавляем:
* * * * * apt update -y && apt dist-upgrade -y && apt autoremove -y && apt autoclean -y
Формат записей crontab выглядит следующим образом:
"минуты" "часы" "день месяца" "месяц" "день недели" "команда".
Так что вместо звёздочек выбираем для себя оптимальное время проверки обновлений. Чаще чем раз в сутки делать это явно не нужно.
Не рекомендуется проверять и ставить компоненты во время других запланированных действий: бэкап системы, выключение и т.д..
Теперь можно перейти к созданию второго контейнера.
Установка Zigbee2MQTT
Для установки контейнера можно воспользоваться скриптом:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/zigbee2mqtt.sh)"
инструкция актуальна для Zigbee2MQTT ниже версии 2.0
Он позволяет создать контейнер основанный на системе Debian внутри, с 1 ГБ оперативной памяти, диском на 4ГБ и одним процессором с двумя ядрами.
После того как контейнер создан и запущен, все команды выполняются уже в его консоли.
Сначала так же выполним
ip a
чтобы узнать айпи и мак адреса нового контейнера и сделать необходимую привязку на DHCP сервере.
Перед запуском з2м необходимо настроить. Те, кто использует юсб координатор, могут выяснить его адрес в системе, запустив команду:
ls -l /dev/serial/by-id
ответ системы будет примерно таким:
lrwxrwxrwx 1 root root 13 Jun 19 17:30 usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB0
Далее описание для новой и чистой установки з2м с сетевым координатором. Если необходимо перенести текущую конфигурацию из ХА в контейнер, то лучше сразу перейти к следующей части.
Теперь необходимо настроить файл конфигурации с помощью:
nano /opt/zigbee2mqtt/data/configuration.yaml
Пример файла конфигурации:
frontend:
port: 9442
homeassistant: true
permit_join: false
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://5.6.7.8:1883'
user: usr
password: pwd
keepalive: 60
reject_unauthorized: true
version: 4
serial:
port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
#adapter: deconz #(uncomment for ConBee II)
#adapter: ezsp #(uncomment for ITead Sonoff Zigbee 3.0 USB Dongle Plus V2 model "ZBDongle-E versionadvanced:
pan_id: GENERATE
network_key: GENERATE
channel: 20
Порт в разделе frontend - это веб интерфейс, к которому можно будет подключиться для управления устройствами.
Раздел mqtt содержит информацию о подключении к ранее созданному брокеру. Необходимо подставить свои значения в строках server, user и password.
В разделе serial указываем данные координатора.
Если используется координатор с подключением по LAN, то строка port будет выглядеть примерно так:
port: tcp://1.2.3.4:6638
айпи адрес координатора и порт для подключения к нему.
После сохранения файла настроек осталось только запустить Zigbee2MQTT командой
cd /opt/zigbee2mqtt && npm start
Убедиться что всё работает можно зайдя через браузер на айпи этого контейнера и и порт указанный в настройках.
Это была базовая конфигурация и запуск с нуля.
Ниже рассмотрим пример когда нужно перенести работающую конфигурацию Zigbee2MQTT из Home Assistant.
Копирование текущей конфигурации
Для начала скопируем из ХА на компьютер файлы текущей конфигурации Z2M. Они находятся в директории дополнения, по умолчанию - /homeassistant/zigbee2mqtt или любой другой, если в настройках было изменено дефолтное имя.
Файлы которые понадобятся:
configuration.yaml
coordinator_backup.json
database.db
state.json
Все они, за исключением configuration.yaml останутся без изменения и будут скопированы в /opt/zigbee2mqtt/data/. Основной же конфиг файл необходимо будет совместить с примером выше.
КРАЙНЕ ВАЖНО!!!
Если в вашей текущей конфигурации Z2M есть устройства с именами на кириллице, то в файле необходимо будет заменить их все на транслит!
Слева пример файла из Z2M внутри ХА. Справа он же после обработки и совмещения с примером для работы в контейнере
Если в ХА и других системах внутри сети используется самоподписанный сертификат, то чтобы иметь возможно открыть интерфейс Z2M из ХА, в новый контейнер надо так же скопировать файлы сертификата. После чего, добавить их в раздел frontend конфигурационного файла:
frontend:
port: 9442
ssl_cert: /etc/ssl/certs/fullchain.pem
ssl_key: /etc/ssl/private/privkey.pem
После сохранения файла настроек осталось только запустить Zigbee2MQTT командой
cd /opt/zigbee2mqtt && npm start
Если всё запустилось без ошибок, можно зайти на адрес контейнера через браузер, не забыв указать номер порта из настроек для соединения по протоколу HTTP. Если же был применён самоподписанный сертификат, то протокол меняем на HTTPS, а номер порта оставляем без изменений.
И только теперь, в веб интерфейсе Z2M, переименовываем устройства обратно с транслит имён на кириллические.
И уже после того как всё "причёсано", красиво и работает, открываем интеграцию MQTT в ХА и настраиваем в ней подключение к новому брокеру. Это сведёт к минимуму процент ошибочных записей устройств внутри ХА.
Настройка обновлений.
Пакет Zigbee2MQTT установлен с помощью npm (Node.js Package Manager), и поэтому не будет обновляться от стандартных команд обновления пакетов.
Поэтому, формат команды будет такой:
Получаем номер установленной версии в системе, и получаем номер версии в репозитории в интернете. Сравниваем их. Если номера не равны, то происходит установка пакета из репозитория с последующей перезагрузкой службы зигби2мктт.
Вдобавок не будем отказываться от стандартных системных обновлений.
Поэтому открываем планировщик задач crontab -e и добавляем:
* * * * * apt update -y && apt dist-upgrade -y && apt autoremove -y && apt autoclean -y && cd /opt/zigbee2mqtt && CURRENT_VERSION=$(npm list --depth=0 | grep zigbee2mqtt | awk -F@ '{print $2}') && LATEST_VERSION=$(npm show zigbee2mqtt version) && [ "$CURRENT_VERSION" != "$LATEST_VERSION" ] && systemctl stop zigbee2mqtt && git pull && npm ci && npm run build && systemctl start zigbee2mqtt
Формат записей crontab выглядит следующим образом:
"минуты" "часы" "день месяца" "месяц" "день недели" "команда".
Так что вместо звёздочек выбираем для себя оптимальное время проверки обновлений. Чаще чем раз в сутки делать это явно не нужно.
Не рекомендуется проверять и ставить компоненты во время других запланированных действий: бэкап системы, выключение и т.д..
Использование.
Ну и финальный штрих - добавление интерфейса Zigbee2MQTT в Home Assistant.
Как же это можно сделать?
Ведь если подумать, то интерфейс з2м это просто сайт... а в ХА есть карточка открытия сайтов...
Вот это полезно)
ОтветитьУдалить