Files
obsidian-vault/family/plans/t610-addons-deployment.md
T

13 KiB
Raw Blame History

title, status, tags, created, updated, related
title status tags created updated related
t610 — развёртывание через HA-аддоны in-progress
family
plan
homeautomation
t610
haos
addons
2026-09-13 2026-09-14
family/plans/home-automation-migration-t610
family/how-to/home-automation

t610 — развёртывание через HA-аддоны

Статус: Этап 1 ВЫПОЛНЕН (2026-09-13). Этап 2 (USB) — РАЗБЛОКИРОВАН 2026-09-14: все 3 USB-устройства подключены, карта адресов зафиксирована. Идёт настройка аддонов z2m/mbusd/modbus-bridge. Родительский план: family/plans/home-automation-migration-t610 (Шаг 3 в нём заменяется на этот документ). Доступ к хосту, CLI и питфоллы: family/how-to/t610-access.

Контекст: почему аддоны, а не docker-compose 1:1

Изначально в родительском плане (Шаг 3, Вариант B) предполагалось перенести docker-compose.yml с TrueNAS 1:1. При проверке живого t610 выяснилось:

  • HA OS 18.2 внутри использует host docker 29.6.2 (overlayfs, journald) — docker есть, ha docker info подтверждает.
  • Но из SSH-аддона docker CLI не виден — аддон живёт в своём контейнере. Доступ к host docker только через Supervisor (ha docker) или через Portainer-аддон.
  • Поэтому штатный и наименее хрупкий путь — аддоны.

Решение Alex (2026-09-13): «Делай всё аддонами».

Состав аддонов

Сервис Slug Источник Статус
Mosquitto broker (MQTT) core_mosquitto Official (core) есть в сторе
Node-RED a0d7b954_nodered Community есть в сторе
Advanced SSH & Web Terminal a0d7b954_ssh Community есть в сторе (запасной путь)
Terminal & SSH core_ssh Official уже установлен и работает
Samba share (для доступа к файлам) core_samba Official есть в сторе
File editor core_configurator Official есть в сторе
Zigbee2MQTT ⚠️ В сторе НЕТ надо local add-on / community repo
mbusd ⚠️ В сторе НЕТ надо local add-on
modbus-bridge ⚠️ В сторе НЕТ (локальная сборка) надо local add-on

Про Zigbee2MQTT

В официальном сторе z2m нет (есть только deCONZ core_deconz и core_silabs_multiprotocol). Варианты:

  • A. Community-репозиторий z2m — у сообщества есть репо (https://github.com/zigbee2mqtt/hassio-zigbee2mqtt), добавляется как app repository, дальше штатная установка.
  • B. Local add-on — свой Dockerfile в /addons/zigbee2mqtt.

Решение: A (community repo) — меньше ручной работы, поддерживается сообществом, обновления через UI.

Про mbusd и modbus-bridge

В сторе нет и быть не может (кастомный код). Только local add-ons:

/addons/mbusd/          → Dockerfile + config
/addons/modbus-bridge/  → Dockerfile + modbus_ha_bridge.py + config.yml

Local add-ons требуют Advanced Mode в профиле HA (Settings → Add-ons появляются только с ним) + репозиторий «Local apps» уже подключён (проверено: addons_repositories содержит Local apps).

USB-устройства подключены (2026-09-14) — блокер снят

Все 3 устройства воткнуты и видны (карта by-id/by-path: family/how-to/t610-access §USB).

/dev/ttyUSB0 → CH340 #1  by-path: pci-0000:00:12.0-usb-0:3:1.0-port0  (порт 3)
/dev/ttyUSB1 → CH340 #2  by-path: pci-0000:00:12.0-usb-0:4:1.0-port0  (порт 4)
/dev/ttyACM0 → Zigbee Inswift ZBP-MG21  by-id: usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00

⚠️ Два CH340 неразличимы по by-id (у обоих 1a86:7523, serial отсутствует) → привязка только по by-path / адресу шины, как на TrueNAS udev-правилами. Для аддонов надо решить, как пробрасывать (открытый вопрос ниже).

Порядок работы:

  1. Установить z2m-аддон (by-id уникален → безопасно), перенести database.db + network_key + pan_id.
  2. Собрать local add-on mbusd (порт 502, CH340 #2 / порт 4).
  3. Собрать local add-on modbus-bridge (CH340 #1 / порт 3), перенести modbus_ha_bridge.py + config.yml, env HA_TOKEN (новый!).

План по шагам

Этап 1 — базовые аддона (не требуют USB) — ВЫПОЛНЕНО 2026-09-13

  1. Advanced Mode — не понадобился для CLI (всё сделано через ha apps), понадобится позже для local add-ons
  2. Mosquitto broker (core_mosquitto v7.1.1) — установлен, started, порты 1883 (MQTT) + 1884 (WS) открыты, discovery отправлен в HA автоматически
  3. Node-RED (a0d7b954_nodered v22.0.6) — установлен, started, порт 1880 открыт, уже подключился к HA (Connected to http://supervisor/core)
  4. Samba share (core_samba) — установлен, но stopped: требует задать password (по умолчанию null) → логин homeassistant. Задать в UI: Settings → Apps → Samba → Configuration
  5. File editor (core_configurator) — установлен, started
  6. Репозиторий Zigbee2MQTT добавлен: ha store add https://github.com/zigbee2mqtt/hassio-zigbee2mqtt → появился как Home Assistant App: Zigbee2MQTT (slug 45df7312)
  7. HA MQTT-интеграция на core-mosquitto — проверить/настроить после переноса конфига

Питфоллы, выявленные при установке:

  • ha apps НЕ имеет команды для изменения опций (только install/start/stop/restart/logs/info/update/uninstall). Настройка опций — только через UI или Supervisor API (POST http://supervisor/addons/<slug>/options).
  • Node-RED по умолчанию ssl: true → падает при старте без сертификата (init-nginx: command exited 1, state: error). Фикс: ssl: false через API (см. ниже).
  • API требует полный набор опций (схема валидирует все ключи) — нельзя послать только {"ssl": false}, будет Missing option 'certfile'. Надо взять текущие опции и поменять нужное.
  • В SSH-аддоне нет python3 (только bash/curl/jq/ha). Скрипты для t610 писать на bash+jq.
  • ha store add <url> (не ha store repositories add).

Рабочий рецепт смены опций аддона (bash+jq через SSH-аддон):

SLUG="a0d7b954_nodered"
API="http://supervisor/addons/${SLUG}"
AUTH="Authorization: Bearer ${SUPERVISOR_TOKEN}"
curl -s -H "${AUTH}" "${API}/info" | jq '.data.options | .ssl = false' > /tmp/o.json
jq -n --slurpfile o /tmp/o.json '{options: $o[0]}' > /tmp/post.json
curl -s -X POST -H "${AUTH}" -H "Content-Type: application/json" -d @/tmp/post.json "${API}/options"
ha apps restart "$SLUG"

Скрипты лежат локально: ~/tmp-t610/nr_set_ssl.sh.

Этап 2 — USB-устройства (все подключены 2026-09-14) 🟡 В РАБОТЕ

  1. Alex втыкает 3 USB в t610 — ВЫПОЛНЕНО 2026-09-14. Порты зафиксированы: CH340 #1 → USB1 порт 3, CH340 #2 → USB1 порт 4, Zigbee → USB3 порт 1. Устройства из портов не вынимать!
  2. Пути определены (ls /dev/serial/by-id/, by-path, sysfs) — подробная карта: family/how-to/t610-access §USB
  3. Карта составлена: ttyUSB0 = CH340 #1 (ZONT), ttyUSB1 = CH340 #2 (Vent), ttyACM0 = Zigbee
  4. ⚠️ РЕШИТЬ СПОСОБ ПРИВЯЗКИ ДЛЯ АДДОНОВ — оба CH340 имеют ОДИНАКОВЫЙ by-id → проброс по by-id сломается. Проверить, принимает ли Supervisor в devices: путь by-path; иначе — фиксированные порты или local add-on с udev. Это текущий блокер.
  5. Установить z2m-аддон, указать serial-порт (usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00), перенести database.db + network_key + pan_id (1:1, иначе переспаривание!)
  6. Собрать local add-on mbusd (/addons/mbusd), порт 502, устройство = CH340 #2 / порт 4 (by-path pci-0000:00:12.0-usb-0:4:1.0-port0)
  7. Собрать local add-on modbus-bridge (/addons/modbus-bridge), перенести modbus_ha_bridge.py + config.yml, устройство = CH340 #1 / порт 3 (by-path pci-0000:00:12.0-usb-0:3:1.0-port0), env HA_TOKEN (сгенерировать новый!)

Этап 3 — перенос HA-конфига

  1. Перенести configuration.yaml, automations.yaml, scripts.yaml, secrets.yaml, www/
  2. Перенести .storage/ (критично: core.entity_registry, lovelace.home_plan) — см. родительский план §5.6
  3. Поправить modbus.host127.0.0.1 (mbusd теперь локальный)

Этап 4 — проверка и отключение TrueNAS

  1. Чек-лист из родительского плана §6
  2. Caddy upstream → t610; GPON-редирект → t610
  3. Остановить + отключить автозапуск на TrueNAS (§7)

Отличия от родительского плана (что меняется)

Было (родительский план) Стало (этот план)
docker-compose 1:1 на HA OS HA-аддоны
udev-алиасы 99-tty-alias.rules на t610 не нужно — аддоны пробрасывают /dev/serial/by-id/... напрямую через свою конфигурацию
Скрипт ожидания tty + systemd не нужно — Supervisor сам ждёт устройство при старте аддона
Ручной docker compose up ha apps start <slug> / UI
Пути /mnt/data/... /addon_configs/<slug>/ и /share, /config

Плюс: проблема udev-гонки на t610 снимается — Supervisor управляет зависимостями и пробросом устройств. Это была самая опасная часть старого плана.

Открытые вопросы

  • ⚠️ ТЕКУЩИЙ БЛОКЕР — способ привязки CH340 в аддонах: оба CH340 = 1a86:7523 без серийника → by-id идентичен. Проверить, принимает ли Supervisor в devices: путь /dev/serial/by-path/...; если нет — фиксированные порты (уже зафиксированы физически) или local add-on со своим udev-симлинком.
  • Community-repo z2m: проверить, что он совместим с HA OS 18.2 / Core 2026.9.x
  • mbusd/modbus-bridge как local add-on: синтаксис devices: в config.yaml аддона (Supervisor, не compose)
  • Куда переносить данные z2m: /addon_configs/<slug>/ (HA OS 12+ путь для app-конфигов)
  • Камера (§8 родительского плана) — не аддон, разбираться отдельно

Связанные заметки