diff --git a/family/how-to/home-automation.md b/family/how-to/home-automation.md index 3946be10..ed3f0102 100644 --- a/family/how-to/home-automation.md +++ b/family/how-to/home-automation.md @@ -7,7 +7,11 @@ 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]]. Карты Slave ID и регистров ниже **остаются в силе** — оборудование и адреса Modbus не меняются. +> ⚠️ **ПЕРЕНОС ИДЁТ (начат 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. +> +> Карты Slave ID и регистров ниже **остаются в силе** — оборудование и адреса Modbus не меняются. ## AT2 — калибровка PWM diff --git a/family/how-to/t610-access.md b/family/how-to/t610-access.md index 019420b8..fb9ae84b 100644 --- a/family/how-to/t610-access.md +++ b/family/how-to/t610-access.md @@ -192,7 +192,7 @@ ZONT (modbus-bridge): /dev/serial/by-path/pci-0000:00:12.0-usb-0:3:1.0-por > ✅ **Плюс аддонов:** старая проблема гонки udev ([[family/how-to/zont-modbus-bridge-udev-race-protection]]) на t610 **неактуальна** — Supervisor сам ждёт устройство при старте аддона, скрипты ожидания tty не нужны. -## Установленные аддоны (на 2026-09-13) +## Установленные аддоны (обновлено 2026-09-14) | Аддон | Slug | Версия | Состояние | Порты | |-------|------|--------|-----------|-------| @@ -200,9 +200,12 @@ ZONT (modbus-bridge): /dev/serial/by-path/pci-0000:00:12.0-usb-0:3:1.0-por | 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 | +| **Zigbee2MQTT** | `45df7312_zigbee2mqtt` | 2.14.1-1 | ✅ **started (16 устройств)** | ingress 8099 | | Samba share | `core_samba` | — | ⏸️ stopped (нужен пароль) | — | -Дополнительно подключён репозиторий **Zigbee2MQTT** (`45df7312`, `Home Assistant App: Zigbee2MQTT`). +Репозитории аддонов: официальный + **Zigbee2MQTT** (`https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`) + Local apps. + +> 📌 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» в меню больше нет. diff --git a/family/plans/home-automation-migration-t610.md b/family/plans/home-automation-migration-t610.md index 3f044e83..bba4adc3 100644 --- a/family/plans/home-automation-migration-t610.md +++ b/family/plans/home-automation-migration-t610.md @@ -19,9 +19,14 @@ related: --- # Перенос домашней автоматизации на HP t610 -> **Статус: В ПРОЦЕССЕ (Этап 1 — аддоны, ВЫПОЛНЕН. Этап 2a — USB подключены 2026-09-14, способ привязки CH340 РЕШЁН; следующий шаг — z2m/mbusd/modbus-bridge).** +> **Статус: В ПРОЦЕССЕ. Этап 1 (аддоны) ВЫПОЛНЕН. Этап 2 (USB + Zigbee) — ✅ z2m РАБОТАЕТ (16 устройств). Следующий шаг — mbusd + modbus-bridge (local add-ons), затем Этап 3 (перенос HA-конфига).** > Цель: убрать всю домашнюю автоматизацию с TrueNAS (он перегружен — 17/21 ГБ RAM) на выделенный HP t610, с бэкапом конфигов на TrueNAS и в git. > +> **Прогресс 2026-09-14 — Zigbee2MQTT ПЕРЕЕХАЛ И РАБОТАЕТ:** +> - ✅ **z2m-аддон `45df7312_zigbee2mqtt` v2.14.1-1 установлен и работает.** База (`database.db`) + `network_key`/`pan_id`/`ext_pan_id`/`channel: 11` перенесены с TrueNAS 1:1 → **16 устройств на месте, переспаривание не потребовалось.** Координатор EmberZNet 7.4.5, MQTT на `core-mosquitto`. Детали и питфоллы: [[family/plans/t610-addons-deployment]] §«z2m на t610 (ВЫПОЛНЕНО)». +> - ✅ **Логин `zont` добавлен в mosquitto** (тот же пароль, что на TrueNAS) — HA-интеграция и ZONT работают по старым креденшелам. +> - ⏭️ Следующий шаг: **mbusd** (CH340 порт 4) и **modbus-bridge** (CH340 порт 3, новый `HA_TOKEN`) как local add-ons → Этап 3 (перенос HA-конфига + `.storage/`). +> > **Прогресс 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 ГБ. diff --git a/family/plans/t610-addons-deployment.md b/family/plans/t610-addons-deployment.md index 846ce194..7a231443 100644 --- a/family/plans/t610-addons-deployment.md +++ b/family/plans/t610-addons-deployment.md @@ -16,7 +16,7 @@ related: --- # t610 — развёртывание через HA-аддоны -> **Статус: Этап 1 ВЫПОЛНЕН (2026-09-13). Этап 2 (USB) — РАЗБЛОКИРОВАН 2026-09-14: все 3 USB-устройства подключены, карта адресов зафиксирована, способ привязки РЕШЁН (by-path + `uart: true`). Следующий шаг — установка z2m-аддона (шаг 12).** +> **Статус: Этап 1 ВЫПОЛНЕН (2026-09-13). Этап 2 в работе: все 3 USB подключены (2026-09-14), привязка решена (by-path + `uart: true`), ✅ z2m-аддон УСТАНОВЛЕН И РАБОТАЕТ (16 устройств). Следующий шаг — local add-on mbusd (шаг 13).** > Родительский план: [[family/plans/home-automation-migration-t610]] (Шаг 3 в нём заменяется на этот документ). > Доступ к хосту, CLI и питфоллы: [[family/how-to/t610-access]]. @@ -47,15 +47,15 @@ related: | Сервис | Slug | Источник | Статус | |--------|------|----------|--------| -| Mosquitto broker (MQTT) | `core_mosquitto` | Official (core) | ✅ есть в сторе | -| Node-RED | `a0d7b954_nodered` | Community | ✅ есть в сторе | +| Mosquitto broker (MQTT) | `core_mosquitto` | Official (core) | ✅ установлен, `started` (1883/1884) | +| Node-RED | `a0d7b954_nodered` | Community | ✅ установлен, `started` (1880) | | 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 | +| Terminal & SSH | `core_ssh` | Official | ✅ **установлен и работает** | +| 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 | ### Про Zigbee2MQTT В официальном сторе z2m нет (есть только deCONZ `core_deconz` и `core_silabs_multiprotocol`). @@ -63,7 +63,7 @@ related: - **A. Community-репозиторий z2m** — у сообщества есть репо (`https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`), добавляется как app repository, дальше штатная установка. - **B. Local add-on** — свой Dockerfile в `/addons/zigbee2mqtt`. -**Решение: A (community repo)** — меньше ручной работы, поддерживается сообществом, обновления через UI. +**Решение: A (community repo)** — меньше ручной работы, поддерживается сообществом, обновления через UI. ✅ Реализовано 2026-09-14. ### Про mbusd и modbus-bridge В сторе нет и быть не может (кастомный код). Только **local add-ons**: @@ -71,7 +71,7 @@ related: /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`). +Local add-ons требуют **Advanced Mode** в профиле HA (Settings → Apps появляются только с ним) + репозиторий «Local apps» уже подключён (проверено: `addons_repositories` содержит `Local apps`). ## ✅ USB-устройства подключены (2026-09-14) — блокер снят @@ -87,12 +87,12 @@ Local add-ons требуют **Advanced Mode** в профиле HA (Settings ### 🔑 РЕШЕНИЕ: привязка по `by-path` вместо udev-алиасов -Проверено на живом t610 (2026-09-14): **udev-алиасы (`ttyZONT`/`ttyVent`) на HA OS не нужны и сделать их «как на TrueNAS» нельзя** — SSH-аддон это Alpine-контейнер, у него нет `/etc/udev/rules.d` и нет `udevadm`. Хостовый доступ = только debug-SSH 22222, который на t610 выключен и включается лишь флешкой с `authorized_keys` (по сети — никак: `ha host` без ssh-команд, Supervisor API `/host/services/ssh` → 403, роль аддона `manager`). +Проверено на живом t610 (2026-09-14): **udev-алиасы (`ttyZONT`/`ttyVent`) на HA OS не нужны и сделать их «как на TrueNAS» нельзя** — SSH-аддон это Alpine-контейнер, у него нет `/etc/udev/rules.d` и нет `udevadm`. Хостовый доступ = только debug-SSH 22222, который на t610 выключен и включается лишь флешкой с ключом в разделе `CONFIG` (по сети — никак: `ha host` без ssh-команд, Supervisor API `/host/services/ssh` → 403, роль аддона `manager`). **Рабочая схема — штатный механизм Supervisor: `uart: true`.** - В `config.yaml` (или `config.json`) аддона флаг **`uart: true`** даёт контейнеру доступ ко **всем** serial-устройствам хоста — вместе с симлинками `/dev/serial/by-id/` **и** `/dev/serial/by-path/`. -- Подтверждено: `core_ssh` имеет `uart: true` → из него виден весь `/dev/serial/by-path/` (см. таблицу выше). z2m-аддон тоже имеет `uart: true`. +- Подтверждено: `core_ssh` имеет `uart: true` → из него виден весь `/dev/serial/by-path/`. z2m-аддон тоже имеет `uart: true`. - **`devices:` в конфиг аддона прописывать НЕ надо** — при `uart: true` проброс serial автоматический. **Как прописывать путь в конфиге сервиса:** @@ -111,10 +111,36 @@ Vent → /dev/serial/by-path/pci-0000:00:12.0-usb-0:4:1.0-port0 > ⚠️ **by-path привязан к физическому порту.** CH340 #1 обязан остаться в порту 3, CH340 #2 — в порту 4. Если поменять — пути поедут. Порты зафиксированы (проверено). -**Порядок работы:** -1. Установить z2m-аддон (by-id/by-path уникальны для Zigbee) → настроить serial → перенести `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` (новый!). +### ✅ z2m на t610 — ВЫПОЛНЕНО (2026-09-14) + +**Что сделано:** +1. **Бэкап с TrueNAS** → Mac `~/tmp-t610/z2m-backup-20260914/` (`database.db`, `configuration.yaml`, `state.json`, `coordinator_backup.json`). Источник на TrueNAS: `/mnt/RED_2TB/docker/zigbee2mqtt/`. +2. Установлен аддон `45df7312_zigbee2mqtt` v**2.14.1-1** (community repo). Манифест содержит **`uart: true`** → доступ ко всем serial, `devices:` не нужен. +3. **Mosquitto**: добавлен логин `zont` (тот же пароль, что на TrueNAS) через Supervisor API → `POST /addons/core_mosquitto/options` → `ha apps restart core_mosquitto`. Нужен, чтобы HA-интеграция и ZONT продолжили работать по старым креденшелам. +4. **Опции z2m** (Supervisor API `POST /addons/45df7312_zigbee2mqtt/options`): +```json +serial: { "port": "/dev/serial/by-id/usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00", + "adapter": "ember", "baudrate": 115200, "rtscts": false } +mqtt: { "server": "mqtt://core-mosquitto:1883", "user": "zont", "password": "<как на TrueNAS>" } +``` +5. **База перенесена 1:1.** ⚠️ `data_path` аддона = **`/config/zigbee2mqtt`** — внутри HA-конфига, НЕ `/addon_configs/...`. Создана `/config/zigbee2mqtt/`, залиты `database.db` + `configuration.yaml` (тот же `network_key`/`pan_id`/`ext_pan_id`/`channel: 11`, но serial → by-id, MQTT → core-mosquitto). +6. `ha apps start 45df7312_zigbee2mqtt` → **работает.** + +**Лог подтверждает успех** (`/config/zigbee2mqtt/log//log.log`): +``` +zh:ember: [INIT TC] Adapter network matches config. +z2m: Coordinator firmware: EmberZNet 7.4.5 [GA], EZSP 13 +z2m: Currently 16 devices are joined. +z2m: Connected to MQTT server +``` +✅ **16 устройств на месте, переспаривание НЕ потребовалось.** (Tuya: модули реле, диммеры, розетки, датчики t°/влажности, протечки, радар присутствия, светильник.) + +**Питфоллы z2m-переноса:** +- **Пароль MQTT содержит `$`** (`mqtt1z3$`) → при передаче через `sed`/интерполяцию в шелле ломается экранирование, скрипт падает с `unmatched '|'`. Надёжный путь: файл `configuration.yaml` готовить **локально**, заливать копированием файла, значения с `$` не подставлять в bash-строки. Для Supervisor API — JSON собирать через `jq`, а не конкатенацией. +- Supervisor API требует **полный** набор опций (схема валидирует все ключи) — брать текущие и менять нужное. +- Пароль в выводе `ha`/API маскируется как `***` — это нормально, значение применяется. +- `uart: true` = автоматический проброс всех serial (by-id + by-path). `devices:` в конфиг аддона прописывать не надо. +- В SSH-аддоне **нет python3**, и он неустойчив к сложному экранированию строк — готовые конфиги заливать файлом, а не генерировать на хосте. ## План по шагам @@ -151,7 +177,7 @@ ha apps restart "$SLUG" 9. [x] Пути определены (`ls /dev/serial/by-id/`, `by-path`, sysfs) — подробная карта: [[family/how-to/t610-access]] §USB 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. [ ] Установить z2m-аддон, указать serial-порт (`usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00` или by-path `pci-0000:04:00.0-usb-0:1:1.0`), перенести `database.db` + `network_key` + `pan_id` (1:1, иначе переспаривание!) +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` (сгенерировать новый!) @@ -180,13 +206,14 @@ 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. -- [ ] Community-repo z2m: проверить, что он совместим с HA OS 18.2 / Core 2026.9.x +- [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) -- [ ] Куда переносить данные 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/t610-access]] — доступ к хосту, CLI, карта USB, питфоллы - [[family/how-to/zont-modbus-bridge-udev-race-protection]] — старая проблема гонки udev (на аддонах неактуальна) - [[family/how-to/truenas-infrastructure]] — текущий docker-стек TrueNAS