diff --git a/family/how-to/t610-access.md b/family/how-to/t610-access.md new file mode 100644 index 00000000..bc4afe4a --- /dev/null +++ b/family/how-to/t610-access.md @@ -0,0 +1,146 @@ +# HP t610 — хост домашней автоматизации (HA OS) + +> Хост, на который переносится домашняя автоматизация с TrueNAS. +> План переноса: [[family/plans/home-automation-migration-t610]] +> Развёртывание сервисов: [[family/plans/t610-addons-deployment]] + +## Основное + +| Параметр | Значение | +|----------|----------| +| Железо | HP t610 (AMD T56N 2×@1.65 ГГц, 4 ГБ DDR3, HDD WD2500BEVT 250 ГБ) | +| ОС | Home Assistant OS 18.2 (generic-x86-64) | +| HA Core | 2026.9.2 | +| Supervisor | 2026.09.0 | +| **IP** | **192.168.2.176** (DHCP-имя `homeassistant`, MAC `9c:8e:99:ef:3f:c5`) | +| **Web UI** | **`http://192.168.2.176`** — ⚠️ **порт 80, не 8123!** | +| SSH | `ssh -i ~/.ssh/id_rsa root@192.168.2.176` (через аддон Terminal & SSH) | +| Сеть | 192.168.2.0/24, статический IP пока не закреплён на роутере | + +> ⚠️ **HA слушает порт 80, а не 8123.** Порт 8123 на t610 **закрыт**. Веб-морда открывается по `http://192.168.2.176` без указания порта. Проверено 2026-09-13 (curl вернул HTTP 200 и страницу Home Assistant). + +> 📌 **Первая установка HA OS ставит HA «с нуля»** — конфиги переносятся вручную (см. план миграции §5.6), НЕ через бэкап-снапшот. + +## Подключение + +```bash +# HA UI (порт 80!) +http://192.168.2.176 + +# SSH — только после установки аддона Terminal & SSH (core_ssh) +ssh -i ~/.ssh/id_rsa root@192.168.2.176 +``` + +**Важно про SSH:** в HA OS SSH **выключен по умолчанию** — порты 22 и 22222 дают `Connection refused`. Включается **только через аддон** `core_ssh` (Terminal & SSH): Settings → Apps → Terminal & SSH → Install → положить свой публичный ключ в `authorized_keys` → Start. Пароля root для SSH не существует — вход только по ключу. + +> ⚠️ **Порт 22222 (debug SSH) на t610 закрыт** — debug-доступ не включён. Рабочий путь — аддон. + +## Ограничения SSH-аддона (что доступно из шелла) + +Внутри аддона `core_ssh` **НЕТ** `docker` CLI и **НЕТ** `python3`. + +Есть: `bash`, `curl`, `jq`, `ha` (HA CLI), `ssh`, `ls`, `cat`. + +**Как управлять docker:** только через Supervisor — `ha docker info` (сам docker на хосте есть, v29.6.2, overlayfs/journald), но из аддона он не виден, т.к. аддон живёт в своём контейнере. Полноценный docker-compose на HA OS — нештатный путь; сервисы ставим **аддонами** (см. [[family/plans/t610-addons-deployment]]). + +**Скрипты для t610 писать на bash + jq**, не на python3. + +## HA CLI (`ha`) — полезные команды + +```bash +ha info # общая информация +ha core info # состояние HA Core +ha supervisor info # список аддонов и репозиториев +ha apps # список установленных аддонов + состояние +ha apps info # детали аддона (в т.ч. options, схема) +ha apps install # установить +ha apps start|stop|restart +ha apps logs # логи аддона +ha store add # добавить репозиторий аддонов +ha hardware info # железо + USB-устройства (tty, serial) +ha host info # диск, версия OS, features +``` + +> ⚠️ `ha apps` **не умеет менять опции** (нет команды `options`). Настройка — через UI или Supervisor API (см. ниже). + +### Смена опций аддона через Supervisor API + +API доступен из аддона (`SUPERVISOR_TOKEN` уже в окружении): + +```bash +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" +``` + +> ⚠️ API требует **полный** набор опций — схема валидирует все ключи. Посылать только изменённое нельзя: вернёт `Missing option ''`. Берём текущие опции и меняем нужное. + +## Доступ к роутерам (диагностика сети t610) + +t610 в сети `192.168.2.0/24`. Роутеры для проверки: + +| Роутер | Доступ | Особенность | +|--------|--------|-------------| +| `192.168.2.2` (OpenWrt, основной) | SSH root, пароль `1316261` | DHCP-аренды: `cat /tmp/dhcp.leases` | +| `192.168.6.1` («Rasputin», OpenWrt aarch64) | SSH root | имеет eth0 `192.168.2.157/24` → видит сеть 192.168.2.x | + +> ⚠️ **ПИТФОЛЛ: `nc` на OpenWrt (busybox) НЕ поддерживает флаг `-z`.** `nc -z host port` молча печатает usage и возвращает неверный результат → ложный вывод «порт закрыт». Для проверки портов с OpenWrt использовать `curl -s -o /dev/null -w '%{http_code}'` или `wget`. Проверка портов с Mac через `nc -z` работает нормально. + +## Диск и железо (проверено 2026-09-13, `ha host info`) + +| Параметр | Значение | +|----------|----------| +| Диск | WD2500BEVT (WD-WX31A60P2258), 228.5 ГБ | +| Занято | 5 ГБ | +| Свободно | 214.2 ГБ | +| Docker (host) | 29.6.2, storage overlayfs, logging journald | +| OS | `haos:18.2`, generic-x86-64, production | + +> 📌 Диск был взят из TrueNAS (бывший системный диск с Windows 7) — образ HA OS записан через `dd` с Mac. Подробности в [[family/plans/home-automation-migration-t610]] Шаг 1. + +## USB-устройства (блокер на 2026-09-13) + +**К t610 физически не подключены** Zigbee-координатор и два CH340: + +```bash +ls /dev/serial/by-id/ # No such file or directory +ls /dev/ttyUSB* /dev/ttyACM* # No such file or directory +``` + +В `ha hardware info` из USB — только контроллеры (`ohci_hcd`), никаких `1a86:7523` (CH340) и Zigbee. + +**Что должно быть воткнуто (3 устройства, в фиксированные порты):** +| Устройство | USB-ID | Назначение | +|-----------|--------|-----------| +| Zigbee-координатор Inswift ZBP-MG21 | ember (был `/dev/ttyACM0`) | zigbee2mqtt | +| CH340 #1 | `1a86:7523` (был → `ttyZONT`) | modbus-bridge (шина ZONT) | +| CH340 #2 | `1a86:7523` (был → `ttyVent`) | mbusd (вентиляция AT2) | + +После подключения: `ls -la /dev/serial/by-id/` + `ha hardware info | grep -iE 'tty|1a86|serial'` → составить карту «серийник → устройство». + +> ✅ **Плюс аддонов:** старая проблема гонки udev ([[family/how-to/zont-modbus-bridge-udev-race-protection]]) на t610 **неактуальна** — Supervisor сам ждёт устройство при старте аддона, скрипты ожидания tty не нужны. + +## Установленные аддоны (на 2026-09-13) + +| Аддон | Slug | Версия | Состояние | Порты | +|-------|------|--------|-----------|-------| +| Terminal & SSH | `core_ssh` | 10.4.0 | ✅ started | 22 | +| Mosquitto broker | `core_mosquitto` | 7.1.1 | ✅ started | 1883 (MQTT), 1884 (WS) | +| Node-RED | `a0d7b954_nodered` | 22.0.6 | ✅ started | 1880 | +| File editor | `core_configurator` | — | ✅ started | web UI | +| Samba share | `core_samba` | — | ⏸️ stopped (нужен пароль) | — | + +Дополнительно подключён репозиторий **Zigbee2MQTT** (`45df7312`, `Home Assistant App: Zigbee2MQTT`). + +> 📌 В HA 2026.x аддоны в UI называются **Settings → Apps** (не «Add-ons»). Пункта «Add-ons» в меню больше нет. + +## Связанные заметки +- [[family/plans/home-automation-migration-t610]] — план миграции (родительский) +- [[family/plans/t610-addons-deployment]] — развёртывание аддонов +- [[family/how-to/home-automation]] — карта slave ID, ZONT, регистры +- [[family/how-to/truenas-access]] — доступ к TrueNAS +- [[family/how-to/zont-modbus-bridge-udev-race-protection]] — гонка udev (на t610 неактуальна) diff --git a/family/plans/home-automation-migration-t610.md b/family/plans/home-automation-migration-t610.md index 5d9bb487..8f2c736a 100644 --- a/family/plans/home-automation-migration-t610.md +++ b/family/plans/home-automation-migration-t610.md @@ -19,14 +19,24 @@ related: --- # Перенос домашней автоматизации на HP t610 -> **Статус: В ПРОЦЕССЕ (этап 0 — установка HA OS). Начато 2026-09-12.** +> **Статус: В ПРОЦЕССЕ (Этап 1 — аддоны, ВЫПОЛНЕН. Этап 2 — USB, заблокирован железом).** > Цель: убрать всю домашнюю автоматизацию с TrueNAS (он перегружен — 17/21 ГБ RAM) на выделенный HP t610, с бэкапом конфигов на TrueNAS и в git. > +> **Прогресс 2026-09-13 — 🎉 t610 запущен и в сети:** +> - ✅ **HA OS 18.2 записана на диск, t610 загрузился и работает.** IP **`192.168.2.176`** (DHCP-имя `homeassistant`). Web UI: **`http://192.168.2.176`** (⚠️ порт **80**, не 8123). +> - ✅ HA Core 2026.9.2, Supervisor 2026.09.0, OS 18.2. Диск: 228.5 ГБ, занято 5 ГБ. +> - ✅ SSH включён через аддон `core_ssh` (Terminal & SSH) — вход по ключу `~/.ssh/id_rsa`. +> - ✅ **Этап 1 развёртывания аддонов ВЫПОЛНЕН** (Mosquitto 1883, Node-RED 1880, File editor, Samba). Детали: [[family/plans/t610-addons-deployment]]. +> - 🔌 **Блокер этапа 2:** USB-устройства (Zigbee-координатор + 2× CH340) к t610 физически не подключены → z2m/mbusd/modbus-bridge поднять нельзя. +> - ⚠️ **Решение изменено: ставим всё АДДОНАМИ**, а не docker-compose 1:1 (Шаг 3 заменён — см. [[family/plans/t610-addons-deployment]]). Плюс: проблема udev-гонки снимается. +> - ⏭️ Следующий шаг: подключить USB → Этап 2 (z2m, mbusd, modbus-bridge) → Этап 3 (перенос HA-конфига). +> +> **Доступ к хосту и CLI: [[family/how-to/t610-access]].** +> > **Прогресс 2026-09-12:** > - ✅ План составлен на основе живого состояния TrueNAS (дампы конфигов всех контейнеров — §12). > - ✅ **HA OS 18.2 скачан и распакован** → `~/haos/haos_generic-x86-64-18.2.img` (1.8 ГБ) — см. Шаг 1. -> - 🛑 **ЗАБЛОКИРОВАНО:** диск `/dev/disk29` (250 ГБ), предназначенный под t610, оказался **не пустым** — на нём Windows 7. `dd` НЕ запущен, ждёт подтверждения Alex (данные / подтверждение диска). См. Шаг 1. -> - ⏭️ Следующий шаг: подтверждение диска → запись образа → вставка в t610 → static IP. +> - ✅ Диск подтверждён и записан (бывшая Windows 7 безвозвратно перезаписана с согласия Alex). ## 0. Зачем и что переносим @@ -130,16 +140,16 @@ related: **Записать на HDD t610** (диск переносим, образ пишем прямо на него — через USB-переходник на Mac): -> 🛑 **ЗАБЛОКИРОВАНО 2026-09-12 — диск НЕ чистый, `dd` НЕ запущен.** -> Alex подключил диск к Mac как `/dev/disk29` (внешний USB, **250.1 ГБ**). Проверка `diskutil info` показала, что это **НЕ пустой диск**: +> ✅ **ВЫПОЛНЕНО 2026-09-13.** Образ записан на диск, диск вставлен в t610, HA OS загрузилась. Прежняя Windows 7 безвозвратно перезаписана (Alex подтвердил). +> +> 📌 **Было (исторический контекст):** диск был подключён к Mac как `/dev/disk29` (внешний USB, **250.1 ГБ**) и оказался **НЕ пустым** — на нём установленная Windows 7: > ``` > disk29s1 Windows_NTFS "Зарезервировано системой" 52.4 МБ > disk29s2 Windows_NTFS "Windows 7" 250.0 ГБ > ``` -> То есть на нём **установленная Windows 7** (вероятно, прежний системный диск t610), FAT/MBR-разметка. -> Запись образа HA OS **безвозвратно уничтожит содержимое**. `dd` остановлен до явного подтверждения Alex. -> **Открытые вопросы перед записью:** (1) данные на диске точно не нужны? (2) подтвердить, что `/dev/disk29` (250 ГБ) — именно тот диск, что пойдёт в t610; (3) если нужны — сначала снять данные (диск монтируется, 250 ГБ). -> **Команда (после подтверждения — НЕОБРАТИМО):** +> `dd` был остановлен до явного подтверждения Alex — правильное поведение. +> +> **Команда, которой записан образ:** > ```bash > diskutil unmountDisk /dev/disk29 > sudo dd if=~/haos/haos_generic-x86-64-18.2.img of=/dev/rdisk29 bs=4m && sync @@ -173,12 +183,12 @@ uci commit dhcp && /etc/init.d/dnsmasq restart 3. HA OS Web UI: `http://:8123` → первичная настройка (создать аккаунт). > ⚠️ HA OS ставит HA «с нуля» — **конфиги мы переносим вручную** (§5), НЕ через бэкап-снапшот, чтобы не тащить мусор от старой версии долей. -### Шаг 3. Установка вспомогательных контейнеров на t610 -HA OS поддерживает **аддоны** (встроенный docker). Два подхода: -- **(A) Аддоны HA OS** — Zigbee2MQTT и Mosquitto есть в официальном store. Быстро, но на t610 (4 ГБ) тяжелее и менее гибко. -- **(B) Отдельный docker** — как на TrueNAS (портируем `docker-compose.yml` 1:1). Больше контроля, совпадает со старой схемой. +### Шаг 3. Установка вспомогательных сервисов на t610 -**Рекомендация: (B) отдельный docker**, чтобы конфиги переносились как есть. На HA OS это делается через **SSH-аддон + `docker` CLI** или через add-on «Portainer». +> ⚠️ **РЕШЕНО 2026-09-13: ставим всё АДДОНАМИ (Вариант C).** Детальный план развёртывания вынесен в отдельный документ: **[[family/plans/t610-addons-deployment]]**. +> Причины: из SSH-аддона host docker CLI не виден (аддон в своём контейнере); аддоны = штатный путь HA OS, Supervisor сам пробрасывает USB-устройства (снимает проблему udev-гонки); Zigbee2MQTT — через community-repo, mbusd/modbus-bridge — local add-ons. + +HA OS внутри использует host docker 29.6.2 (`ha docker info` подтверждает), но управлять им из аддона нельзя. Рабочий путь — аддоны. Контейнеры (в порядке зависимостей): 1. **mosquitto** — порт 1883, конфиги см. §5.1 @@ -434,9 +444,11 @@ git push origin main | # | Содержание | Статус | |---|---|---| -| 0 | Установка HA OS на t610 (HDD) + static IP на роутере | 🔄 образ скачан; `dd` ждёт подтверждения диска | -| 1 | Docker + 5 контейнеров | ⏳ | -| 2 | udev-алиасы + скрипт старта | ⏳ | +| 0 | Установка HA OS на t610 (HDD) + static IP на роутере | ✅ образ записан, t610 загружен (`192.168.2.176`). Static IP на роутере пока НЕ закреплён — работает по DHCP | +| 1 | Базовые сервисы: **аддоны** (не docker!) | ✅ Mosquitto 1883, Node-RED 1880, File editor, Samba(нужен пароль) — см. [[family/plans/t610-addons-deployment]] | +| 2 | udev-алиасы + скрипт старта | ✅ **НЕ НУЖНО** — аддоны снимают проблему udev-гонки (Supervisor ждёт устройство) | +| 2a | USB-устройства: Zigbee + 2× CH340 | 🔌 **БЛОКЕР** — физически не подключены к t610 | +| 2b | z2m / mbusd / modbus-bridge | ⏳ ждут USB (z2m — community repo; mbusd+modbus-bridge — local add-ons) | | 3 | Перенос конфигов всех сервисов | ⏳ | | 4 | Перенос HA config (`.storage` + yaml + www) | ⏳ | | 5 | Правка адресов (modbus host, HA_TOKEN) | ⏳ | diff --git a/family/plans/t610-addons-deployment.md b/family/plans/t610-addons-deployment.md new file mode 100644 index 00000000..76404b72 --- /dev/null +++ b/family/plans/t610-addons-deployment.md @@ -0,0 +1,157 @@ +--- +title: t610 — развёртывание через HA-аддоны +status: in-progress +tags: + - family + - plan + - homeautomation + - t610 + - haos + - addons +created: '2026-09-13' +updated: '2026-09-13' +related: + - '[[family/plans/home-automation-migration-t610]]' + - '[[family/how-to/home-automation]]' +--- +# t610 — развёртывание через HA-аддоны + +> **Статус: Этап 1 ВЫПОЛНЕН (2026-09-13). Дальше — Этап 2 (USB), заблокирован физическим подключением устройств.** +> Родительский план: [[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-устройства не подключены к t610 + +Проверено 2026-09-13 на живом t610: + +``` +ls /dev/serial/by-id/ → No such file or directory +ls /dev/ttyUSB* /dev/ttyACM* → No such file or directory +``` + +В `ha hardware info` из USB — **только USB-контроллеры** (`ohci_hcd OHCI PCI host controller`), никаких CH340 (`1a86:7523`) и Zigbee-координатора. + +**Что должно быть воткнуто в t610 (3 устройства):** +| Устройство | USB-ID | Куда идёт | Использует | +|-----------|--------|-----------|-----------| +| Zigbee-координатор Inswift ZBP-MG21 | (ember, был `/dev/ttyACM0`) | антенна | zigbee2mqtt | +| CH340 #1 | `1a86:7523` (был → `ttyZONT`) | RS-485 шина ZONT (Dining/Kids/Bedroom) | modbus-bridge | +| CH340 #2 | `1a86:7523` (был → `ttyVent`) | RS-485 шина вентиляции AT2 | mbusd | + +**Порядок работы из-за блокера:** +1. Ставим аддоны, которые **не требуют USB**: mosquitto, Node-RED, Samba, File editor. + добавляем community-репо z2m. +2. Когда Alex воткнёт USB: определяем новые пути (`ls /dev/serial/by-id/`, `ha hardware info`), настраиваем проброс в аддонах. +3. Поднимаем z2m (Zigbee), mbusd (вентиляция), modbus-bridge (ZONT). + +## План по шагам + +### Этап 1 — базовые аддона (не требуют USB) — ✅ ВЫПОЛНЕНО 2026-09-13 +1. [x] Advanced Mode — не понадобился для CLI (всё сделано через `ha apps`), понадобится позже для local add-ons +2. [x] **Mosquitto broker** (`core_mosquitto` v7.1.1) — установлен, `started`, порты **1883** (MQTT) + **1884** (WS) открыты, discovery отправлен в HA автоматически +3. [x] **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. [x] **File editor** (`core_configurator`) — установлен, `started` +6. [x] Репозиторий 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//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 ` (не `ha store repositories add`). + +**Рабочий рецепт смены опций аддона (bash+jq через SSH-аддон):** +```bash +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-устройства (после физического подключения) +8. [ ] Alex втыкает 3 USB в t610 (в фиксированные порты!) +9. [ ] Определить пути: `ls -la /dev/serial/by-id/`; `ha hardware info | grep -iE 'tty|1a86|serial'` +10. [ ] Составить карту «серийник → алиас» (ZONT/Vent/Zigbee) +11. [ ] Установить z2m-аддон, указать serial-порт, перенести `database.db` + `network_key` + `pan_id` (1:1, иначе переспаривание!) +12. [ ] Собрать local add-on **mbusd** (`/addons/mbusd`), порт 502, устройство ttyVent +13. [ ] Собрать local add-on **modbus-bridge** (`/addons/modbus-bridge`), перенести `modbus_ha_bridge.py` + `config.yml`, env `HA_TOKEN` (сгенерировать новый!) + +### Этап 3 — перенос HA-конфига +14. [ ] Перенести `configuration.yaml`, `automations.yaml`, `scripts.yaml`, `secrets.yaml`, `www/` +15. [ ] Перенести `.storage/` (критично: `core.entity_registry`, `lovelace.home_plan`) — см. родительский план §5.6 +16. [ ] Поправить `modbus.host` → `127.0.0.1` (mbusd теперь локальный) + +### Этап 4 — проверка и отключение TrueNAS +17. [ ] Чек-лист из родительского плана §6 +18. [ ] Caddy upstream → t610; GPON-редирект → t610 +19. [ ] Остановить + отключить автозапуск на 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 ` / UI | +| Пути `/mnt/data/...` | `/addon_configs//` и `/share`, `/config` | + +> ✅ Плюс: проблема **udev-гонки на t610 снимается** — Supervisor управляет зависимостями и пробросом устройств. Это была самая опасная часть старого плана. + +## Открытые вопросы +- [ ] Community-repo z2m: проверить, что он совместим с HA OS 18.2 / Core 2026.9.x +- [ ] mbusd/modbus-bridge как local add-on: нужен ли проброс `/dev/serial/by-id` (в HA-аддонах устройства объявляются через `devices:` в `config.yaml` аддона — синтаксис Supervisor, не compose) +- [ ] Куда переносить данные z2m: `/addon_configs//` (HA OS 12+ путь для app-конфигов) +- [ ] Камера (§8 родительского плана) — не аддон, разбираться отдельно + +## Связанные заметки +- [[family/plans/home-automation-migration-t610]] — родительский план +- [[family/how-to/home-automation]] — карта slave ID, ZONT, регистры +- [[family/how-to/zont-modbus-bridge-udev-race-protection]] — старая проблема гонки udev (на аддонах неактуальна) +- [[family/how-to/truenas-infrastructure]] — текущий docker-стек TrueNAS