[2026-09-14] eagle: family/how-to/home-automation.md family/how-to/t610-access.md family/plans/t610-addons-deployment.md
This commit is contained in:
@@ -9,7 +9,7 @@ related: ["[[family/how-to/router-bishkek-asus]]", "[[family/plans/home-automati
|
||||
|
||||
> ⚠️ **ПЕРЕНОС ИДЁТ (начат 2026-09-12):** весь стек домашней автоматизации (HA, zigbee2mqtt, nodered, mosquitto, mbusd, modbus-bridge) переносится с TrueNAS на **HP t610** (HA OS). План со всеми путями/шагами и прогрессом: [[family/plans/home-automation-migration-t610]], детали развёртывания: [[family/plans/t610-addons-deployment]].
|
||||
>
|
||||
> **Статус на 2026-09-14:** ✅ на t610 уже работают HA Core, mosquitto (логин `zont`), Node-RED и **zigbee2mqtt (16 Zigbee-устройств, база перенесена 1:1)**. ⏳ Осталось: mbusd (шина вентиляции) и modbus-bridge (снифф 485-датчиков для ZONT) — пока живут на TrueNAS. **ZONT ещё НЕ перенаправлен** на MQTT t610 — редирект GPON-роутера и `modbus.host` в HA-конфиге пока смотрят на TrueNAS.
|
||||
> **Статус на 2026-09-14:** ✅ на t610 работают HA Core, mosquitto (логин `zont`), Node-RED, **zigbee2mqtt (16 Zigbee-устройств, база перенесена 1:1)**, **mbusd (порт 502, шина вентиляции)** и **modbus-bridge (снифф 485-датчиков, ждёт `ha_token`+MQTT-пароль)**. ⏳ Осталось: Этап 3 — перенос HA-конфига (`configuration.yaml`, `.storage/core.entity_registry` и т.д.), затем Этап 4 — переключение трафика. **ZONT ещё НЕ перенаправлен** на MQTT t610 — редирект GPON-роутера и `modbus.host` в HA-конфиге пока смотрят на TrueNAS. Подробности: [[family/plans/t610-addons-deployment]].
|
||||
>
|
||||
> Карты Slave ID и регистров ниже **остаются в силе** — оборудование и адреса Modbus не меняются.
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
> План переноса: [[family/plans/home-automation-migration-t610]]
|
||||
> Развёртывание сервисов: [[family/plans/t610-addons-deployment]]
|
||||
|
||||
> 🟡 **Состояние на 2026-09-14:** z2m, mbusd, modbus-bridge развёрнуты аддонами (см. §«Установленные аддоны»). **Незакрытый пункт:** modbus-bridge ждёт `ha_token` (long-lived token из HA UI) + `mqtt_password` — без них `MQTT connection failed code 5` и HA poller выключен. Далее — Этап 3 (перенос HA-конфига).
|
||||
|
||||
## Основное
|
||||
|
||||
| Параметр | Значение |
|
||||
@@ -201,10 +203,50 @@ ZONT (modbus-bridge): /dev/serial/by-path/pci-0000:00:12.0-usb-0:3:1.0-por
|
||||
| Node-RED | `a0d7b954_nodered` | 22.0.6 | ✅ started | 1880 |
|
||||
| File editor | `core_configurator` | — | ✅ started | web UI |
|
||||
| **Zigbee2MQTT** | `45df7312_zigbee2mqtt` | 2.14.1-1 | ✅ **started (16 устройств)** | ingress 8099 |
|
||||
| **mbusd** | `local_mbusd` | 1.0.0 | ✅ **started** | 502 (Modbus TCP) |
|
||||
| **modbus-bridge** | `local_modbus-bridge` | 1.0.0 | ✅ started — ⏳ ждёт `ha_token`/`mqtt_password` | sniffer шины ZONT |
|
||||
| Samba share | `core_samba` | — | ⏸️ stopped (нужен пароль) | — |
|
||||
|
||||
Репозитории аддонов: официальный + **Zigbee2MQTT** (`https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`) + Local apps.
|
||||
|
||||
## Как собрать local add-on на HA OS (рецепт + питфоллы, 2026-09-14)
|
||||
|
||||
Local add-ons (`/addons/<slug>/`) нужны, когда сервиса нет в сторе и нет community-репо.
|
||||
Собраны так: **mbusd** (`local_mbusd`) и **modbus-bridge** (`local_modbus-bridge`).
|
||||
Готовые исходники лежат и на t610 (`/addons/…`), и локально на Mac (`~/tmp-t610/addons/…`).
|
||||
|
||||
**Минимальная структура аддона:**
|
||||
```
|
||||
/addons/<slug>/
|
||||
config.yaml ← манифест Supervisor (name, version, slug, arch, options, schema, uart, …)
|
||||
Dockerfile
|
||||
run.sh ← читает /data/options.json, готовит конфиг сервиса, exec сервиса
|
||||
build.yaml ← ТОЛЬКО если базовый образ задаётся через ${BUILD_FROM} (см. питфолл 1)
|
||||
```
|
||||
|
||||
**Жизненный цикл:**
|
||||
```bash
|
||||
ha store reload # Supervisor подхватывает /addons/* → local_<slug> в сторе
|
||||
ha apps install local_<slug> # собирает образ (docker buildx) и ставит
|
||||
ha apps start local_<slug>
|
||||
ha apps logs local_<slug>
|
||||
# при правке Dockerfile/манифеста:
|
||||
ha apps uninstall local_<slug> && ha store reload && ha apps install local_<slug>
|
||||
```
|
||||
Настройка опций после установки — через UI или Supervisor API (`POST http://supervisor/addons/<slug>/options`, полный набор опций).
|
||||
Диагностика провала сборки: **`ha supervisor logs | tail -60`** — там полный вывод docker build.
|
||||
|
||||
**⚠️ Питфоллы (все ловились на живом t610):**
|
||||
1. **`${BUILD_FROM}` пустой** → `base name (${BUILD_FROM}) should not be blank`. Либо добавить `build.yaml` c `build_from: {amd64: <image>, aarch64: <image>}`, либо **взять готовый образ напрямую** (`FROM 3cky/mbusd:latest`) — тогда `build.yaml` не нужен.
|
||||
2. **Supervisor рекурсивно парсит ВСЕ `*.yml`/`*.yaml` в папке аддона** как манифесты → служебный шаблон конфига даёт `Invalid app config!` и ломает загрузку. Фикс: держать шаблон с расширением **`.tmpl`** (например `data/config.template.tmpl`), переименовывать в `.yml` только внутри контейнера при сборке.
|
||||
3. **`ENTRYPOINT` базового образа перебивает `CMD`** → контейнер запускал бинарь напрямую, минуя `run.sh` (`mbusd: can't read config file /etc/mbusd.conf`). Фикс: в Dockerfile явно **`ENTRYPOINT []`** + `CMD ["/bin/bash","/run.sh"]`.
|
||||
4. **Пакета может не быть в репозиториях Alpine** (`apk add mbusd` → `no such package`) — тогда только готовый образ из Docker Hub или сборка из исходников.
|
||||
5. **Сборка идёт через `docker buildx` на хосте**, тянет базовый образ из интернета, занимает несколько минут.
|
||||
6. **`uart: true`** в манифесте обязателен для доступа к `/dev/serial/by-path/…` (иначе аддон не увидит CH340/Zigbee). Для modbus-bridge дополнительно `host_network: true`.
|
||||
7. В HA UI local add-ons требуют **Advanced Mode** в профиле (Settings → Apps).
|
||||
|
||||
> 📌 `<slug>` в URL аддона = `local_<имя папки>`. Опции из UI кладутся в `/data/options.json` внутри контейнера — читать через `jq`.
|
||||
|
||||
> 📌 z2m: `data_path` = **`/config/zigbee2mqtt`** (внутри HA-конфига, НЕ `/addon_configs/`). Там `database.db`, `configuration.yaml`, `coordinator_backup.json`, `log/`. Данные перенесены 1:1 с TrueNAS — подробности и питфоллы: [[family/plans/t610-addons-deployment]] §«z2m на t610 (ВЫПОЛНЕНО)».
|
||||
|
||||
> 📌 В HA 2026.x аддоны в UI называются **Settings → Apps** (не «Add-ons»). Пункта «Add-ons» в меню больше нет.
|
||||
|
||||
@@ -16,7 +16,7 @@ related:
|
||||
---
|
||||
# t610 — развёртывание через HA-аддоны
|
||||
|
||||
> **Статус: Этап 1 ВЫПОЛНЕН (2026-09-13). Этап 2 в работе: все 3 USB подключены (2026-09-14), привязка решена (by-path + `uart: true`), ✅ z2m-аддон УСТАНОВЛЕН И РАБОТАЕТ (16 устройств). Следующий шаг — local add-on mbusd (шаг 13).**
|
||||
> **Статус (2026-09-14): Этап 1 ✅. Этап 2 ✅ (все 3 USB подключены, привязка by-path + `uart: true`, z2m работает — 16 устройств, mbusd работает — порт 502, modbus-bridge собран и запущен, ⏳ ждёт `HA_TOKEN` + MQTT-пароль). Следующий шаг — вписать `ha_token`/`mqtt_password` в modbus-bridge, затем Этап 3 (перенос HA-конфига).**
|
||||
> Родительский план: [[family/plans/home-automation-migration-t610]] (Шаг 3 в нём заменяется на этот документ).
|
||||
> Доступ к хосту, CLI и питфоллы: [[family/how-to/t610-access]].
|
||||
|
||||
@@ -54,8 +54,8 @@ related:
|
||||
| Samba share (для доступа к файлам) | `core_samba` | Official | ⏸️ установлен, `stopped` (нужен `password`) |
|
||||
| File editor | `core_configurator` | Official | ✅ установлен, `started` |
|
||||
| **Zigbee2MQTT** | `45df7312_zigbee2mqtt` | Community repo | ✅ **установлен, работает — 16 устройств** |
|
||||
| **mbusd** | — | ⚠️ **нет в сторе** | ❌ local add-on |
|
||||
| **modbus-bridge** | — | ⚠️ **нет в сторе** (локальная сборка) | ❌ local add-on |
|
||||
| **mbusd** | `local_mbusd` | Local add-on (`/addons/mbusd`) | ✅ **установлен, работает — порт 502** |
|
||||
| **modbus-bridge** | `local_modbus-bridge` | Local add-on (`/addons/modbus-bridge`) | ✅ установлен, запущен — ⏳ ждёт `HA_TOKEN` + MQTT-пароль |
|
||||
|
||||
### Про Zigbee2MQTT
|
||||
В официальном сторе z2m нет (есть только deCONZ `core_deconz` и `core_silabs_multiprotocol`).
|
||||
@@ -178,8 +178,40 @@ ha apps restart "$SLUG"
|
||||
10. [x] Карта составлена: ttyUSB0 = CH340 #1 (ZONT), ttyUSB1 = CH340 #2 (Vent), ttyACM0 = Zigbee
|
||||
11. [x] **СПОСОБ ПРИВЯЗКИ РЕШЁН 2026-09-14** — привязка по **`by-path`**, никаких udev-алиасов. Механизм: флаг `uart: true` в манифесте аддона даёт доступ ко **всем** serial включая `/dev/serial/by-path/` (проверено на живом t610: `core_ssh` uart:true видит все by-path; z2m тоже uart:true). `devices:` прописывать не надо. Подробности: [[family/how-to/t610-access]] §USB. **Блокер снят.**
|
||||
12. [x] ✅ **z2m-аддон УСТАНОВЛЕН И РАБОТАЕТ (2026-09-14)** — аддон `45df7312_zigbee2mqtt` v2.14.1-1, serial по by-id, база перенесена 1:1, **16 устройств на месте, переспаривание не потребовалось.** Подробности — §«z2m на t610 (ВЫПОЛНЕНО)» выше.
|
||||
13. [ ] Собрать local add-on **mbusd** (`/addons/mbusd`), порт 502, устройство = CH340 #2 / порт 4 (by-path `pci-0000:00:12.0-usb-0:4:1.0-port0`)
|
||||
14. [ ] Собрать 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` (сгенерировать новый!)
|
||||
13. [x] ✅ **mbusd local add-on СОБРАН И РАБОТАЕТ (2026-09-14)** — slug `local_mbusd`, порт **502 открыт** (проверено `nc` с Mac), устройство by-path CH340 #2 (порт 4). Подробности — §«Local add-ons mbusd / modbus-bridge» ниже.
|
||||
14. [x] ✅ **modbus-bridge local add-on СОБРАН И ЗАПУЩЕН (2026-09-14)** — slug `local_modbus-bridge`, устройство by-path CH340 #1 (порт 3), конфиг валиден, sniffer работает. ⏳ **Ждёт `HA_TOKEN` + MQTT-пароль** (без них MQTT code 5 = not authorized, HA poller выключен).
|
||||
|
||||
### ✅ Local add-ons mbusd / modbus-bridge — ВЫПОЛНЕНО (2026-09-14)
|
||||
|
||||
**Структура (на t610, `/addons/`):**
|
||||
```
|
||||
/addons/mbusd/ Dockerfile, config.yaml, run.sh
|
||||
/addons/modbus-bridge/ Dockerfile, config.yaml, run.sh,
|
||||
modbus_ha_bridge.py, data/config.template.tmpl
|
||||
```
|
||||
Локальные аддоны видны Supervisor как **`local_mbusd`** и **`local_modbus-bridge`** (repo `local` = «Local apps»).
|
||||
|
||||
**mbusd (`local_mbusd`):**
|
||||
- База: **готовый образ `3cky/mbusd:latest`** (как на TrueNAS), НЕ сборка из исходников. В манифесте `uart: true`, порт `502/tcp`.
|
||||
- `run.sh` генерирует `/etc/mbusd/mbusd.conf` из опций (`/data/options.json` через `jq`) и запускает `mbusd -d -L - -c`.
|
||||
- Опции: `device` = `/dev/serial/by-path/pci-0000:00:12.0-usb-0:4:1.0-port0`, speed 9600, mode 8n1, trx_control `addc`.
|
||||
- ✅ Порт 502 слушается (`nc -z 192.168.2.176 502` → OK).
|
||||
|
||||
**modbus-bridge (`local_modbus-bridge`):**
|
||||
- База: `python:3.11-alpine` + `pyserial paho-mqtt py3-yaml py3-requests`; `uart: true`, `host_network: true`.
|
||||
- `run.sh`: из `/data/options.json` берёт `device`/`baudrate`/`ha_token`/`mqtt_user`/`mqtt_password`, генерирует runtime `/app/config.yml` из шаблона (`ha.url` → `http://supervisor/core`, `mqtt.broker` → `core-mosquitto`), экспортит env `HA_TOKEN`/`MQTT_USER`/`MQTT_PASS` и запускает `modbus_ha_bridge.py`.
|
||||
- Опции: `device` = `/dev/serial/by-path/pci-0000:00:12.0-usb-0:3:1.0-port0`, baudrate 9600.
|
||||
- ✅ Конфиг валиден, serial открыт, sniffer работает. ⏳ Нужны `ha_token` и `mqtt_password`.
|
||||
|
||||
**Питфоллы local add-ons (HA OS 18.2) — важные:**
|
||||
- **`${BUILD_FROM}` в Dockerfile пустой**, если нет `build.yaml` с базовыми образами по arch. Решения: (a) добавить `build.yaml` c `build_from: {amd64: ..., aarch64: ...}`, либо (b) **взять готовый образ напрямую** (`FROM 3cky/mbusd:latest`) — тогда `build.yaml` не нужен.
|
||||
- **Supervisor парсит все `*.yml`/`*.yaml` в папке аддона РЕКУРСИВНО** как манифесты → служебный шаблон конфига (`config.template.yml`) вызывает `Invalid app config!`. Фикс: переименовать в **`.tmpl`** (не `.yml`).
|
||||
- **`ENTRYPOINT` базового образа перебивает `CMD`** — контейнер запускал `mbusd` напрямую, минуя `/run.sh` → `can't read config file /etc/mbusd.conf`. Фикс: в Dockerfile `ENTRYPOINT []` + `CMD ["/bin/bash","/run.sh"]`.
|
||||
- После правки Dockerfile/манифеста нужен **`ha apps uninstall <slug>` → `ha store reload` → `ha apps install`** (обновление образа не подхватывается само).
|
||||
- **Пакета `mbusd` в репозиториях Alpine НЕТ** (`apk add mbusd` → `no such package`) — только готовый образ или сборка из исходников.
|
||||
- Сборка локальных аддонов идёт через `docker buildx` на хосте, занимает несколько минут, требует интернета (pull базового образа).
|
||||
|
||||
**Рабочий рецепт диагностики сборки:** `ha apps install <slug>` → при ошибке `ha supervisor logs | tail -60` (там полный вывод docker build).
|
||||
|
||||
### Этап 3 — перенос HA-конфига
|
||||
15. [ ] Перенести `configuration.yaml`, `automations.yaml`, `scripts.yaml`, `secrets.yaml`, `www/`
|
||||
@@ -208,7 +240,8 @@ ha apps restart "$SLUG"
|
||||
- [x] ✅ **РЕШЕНО 2026-09-14 — способ привязки CH340 в аддонах:** привязка по `/dev/serial/by-path/...`; механизм Supervisor — флаг `uart: true` в манифесте аддона (доступ ко всем serial автоматически, `devices:` не нужен). Проверено на живом t610. Детали: [[family/how-to/t610-access]] §USB.
|
||||
- [x] ✅ **РЕШЕНО 2026-09-14 — куда переносить данные z2m:** `data_path` аддона = **`/config/zigbee2mqtt`** (внутри HA-конфига), НЕ `/addon_configs/`. Туда залиты `database.db` и `configuration.yaml`.
|
||||
- [x] ✅ **Проверено 2026-09-14 — совместимость community-repo z2m с HA OS 18.2 / Core 2026.9.2:** работает (v2.14.1-1, координатор EmberZNet 7.4.5, 16 устройств).
|
||||
- [ ] mbusd/modbus-bridge как local add-on: их собственный `config.yaml` — **в манифесте тоже нужен `uart: true`**, чтобы увидеть by-path (тот же механизм, что у z2m и core_ssh)
|
||||
- [x] ✅ **РЕШЕНО 2026-09-14 — `uart: true` для local add-ons:** подтверждено на mbusd/modbus-bridge — в их манифестах `uart: true`, by-path виден, устройства открываются (mbusd порт 502, bridge sniffer на шине ZONT). Тот же механизм, что у z2m и core_ssh.
|
||||
- [ ] modbus-bridge: вписать `ha_token` (long-lived token из HA UI) и `mqtt_password` → убрать `MQTT connection failed code 5` и включить HA poller. Единственный незакрытый пункт Этапа 2.
|
||||
- [ ] Камера (§8 родительского плана) — не аддон, разбираться отдельно
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
Reference in New Issue
Block a user