[2026-09-14] eagle: family/how-to/home-automation.md family/how-to/t610-access.md family/plans/home-automation-migration-t610.md family/plans/t610-addons-deployment.md
This commit is contained in:
@@ -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 ГБ.
|
||||
|
||||
@@ -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/<ts>/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/<slug>/` (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
|
||||
|
||||
Reference in New Issue
Block a user