[2026-09-14] eagle: family/plans/t610-addons-deployment.md

This commit is contained in:
Alexey Martemyanov
2026-09-14 10:48:52 +06:00
parent 44e34d0d21
commit c9674de1f1
+49 -24
View File
@@ -16,7 +16,7 @@ related:
---
# t610 — развёртывание через HA-аддоны
> **Статус (2026-09-14): Этап 1 ✅. Этап 2 ✅ ПОЛНОСТЬЮ. Этап 3 — в работе (разведка + решения приняты, ждём от Alex имена Zigbee-устройств).** Сервисы: z2m (**17 устройств** — добавлено NEO NAS-WR01B), mbusd (502), modbus-bridge (MQTT + HA-опрос), MQTT-интеграция в HA. Разведка конфига TrueNAS выполнена.
> **Статус (2026-09-14): Этап 1 ✅. Этап 2 ✅ ПОЛНОСТЬЮ. Этап 3 — решения приняты, имена Zigbee согласованы; ждём решения по одному устройству (`Mini Smart Switch 1`) и приступаем к переносу.** Сервисы: z2m (**17 устройств** — добавлено NEO NAS-WR01B), mbusd (502), modbus-bridge (MQTT + HA-опрос), MQTT-интеграция в HA. Разведка конфига TrueNAS выполнена, эталон имён найден.
> Родительский план: [[family/plans/home-automation-migration-t610]] (Шаг 3 в нём заменяется на этот документ).
> Доступ к хосту, CLI и питфоллы: [[family/how-to/t610-access]].
@@ -356,36 +356,60 @@ timeout 10 mosquitto_sub -h core-mosquitto -p 1883 -u zont -P "$MPW" \
⚠️ **`ha apps logs <slug>` тяжёлый** — не гонять его в цикле ожидания («висит» минутами). Ждать готовности интервью по `database.db`/`state.json`.
Подробнее: [[family/how-to/t610-access]] §USB → «Спаривание нового Zigbee-устройства».
#### ⏳ Список 17 устройств — ждём имена от Alex
#### ✅ Имена 17 устройств — СОГЛАСОВАНЫ 2026-09-14 (латиница snake_case, единый формат)
Alex физически знает, где какое устройство. Запрос отправлен 2026-09-14. Пока имена не даны, `friendly_name` не трогаем.
**Источник эталона — НЕ выдумка:** на **TrueNAS в z2m `friendly_name` уже были человеческими** (файл `/mnt/RED_2TB/docker/zigbee2mqtt/configuration.yaml`, сохранился в бэкапе `~/tmp-t610/z2m-backup-20260914/configuration.yaml`). Дополнительно человеческие имена есть в **`core.device_registry` TrueNAS** и в **дашборде `lovelace.home_plan`** (он ссылается на `switch.sauna`, `light.smart_light_office_left`, `binary_sensor.shower_2_presence_sensor_presence` и т.п.).
| # | IEEE | Что это (по данным) |
|---|---|---|
| 1 | `0xa4c13862d39377e6` | датчик t°/влажности + батарея |
| 2 | `0xa4c1383d5fcaa063` | датчик протечки (Zbeacon) |
| 3 | `0xa4c138dc6d856eca` | радар присутствия mmWave (`_TZE200_crq3r3la`) |
| 4 | `0xa4c138c4a94a6a31` | радар присутствия 2-й (`_TZE204_qasjif9e`) |
| 5 | `0xa4c138f8da8bc478` | розетка с измерением P/V/I/E (`_TZ3000_gjnozsaz`) |
| 6 | `0xa4c138eb6fbe9d19` | **NEO NAS-WR01B — розетка греющего кабеля (новая)** |
| 7 | `0xa4c13873b5c1575b` | реле 2 канала L1/L2 (`_TZ3000_5gey1ohx`) |
| 8 | `0xa4c13807b64c7fd4` | реле 3 канала (`_TZ3000_odzoiovu`) |
| 9 | `0xa4c1381186ed1a32` | выключатель 2-кл (`_TZ3000_0e6uvexf`) |
| 10 | `0xa4c138cefeee19fd` | светильник 2 канала L1/L2 (`_TZ3000_kvwrdf47`) |
| 11 | `0xa4c13882a4b42db0` | светильник RGB с эффектами (`_TZ3000_ooc8illt`) |
| 12 | `0xa4c1386d40ddb67b` | датчик освещённости (`_TZ3000_hy6ncvmw`) |
| 13 | `0xa4c1386d0839706a` | реле (`_TZ3000_5gey1ohx`) |
| 14 | `0xa4c1384fbe0b3a6b` | устройство (`_TZ3210_nhqka112`) |
| 15 | `0xa4c138b0f9e674a5` | устройство (`_TZ3000_kccru4oi`) |
| 16 | `0xcc86ecfffe1347fd` | реле Moes (`_TZ3000_3a9beq8a`) |
| 17 | `0x84fd27fffed9e137` | реле Moes (`_TZ3000_3a9beq8a`) |
**Что произошло (моя ошибка при переносе):** на t610 залит `configuration.yaml` z2m **без секции `devices:`** → z2m при старте сам дописал `devices:` с `friendly_name` = IEEE для всех 17 устройств. Т.е. hex-имена на t610 — артефакт переноса, а не исходное состояние.
**Итоговая таблица (латиница, исправлены опечатки вроде `Presense`→`presence`):**
| # | IEEE | Было (TrueNAS) | **Стало (согласовано)** | Роль |
|---|---|---|---|---|
| 1 | `0xa4c13862d39377e6` | hex | `kabinet_temperature_sensor` | датчик t°/влажности (в кабинете, временно) |
| 2 | `0xa4c138f8da8bc478` | Насос обратки | `obratka_pump` | розетка с измерением P/V/I/E |
| 3 | `0xcc86ecfffe1347fd` | Mini Smart Switch 1 | ⏳ `unused_wall_switch` **или удалить** | реле, **нигде не используется, `unavailable`, нет зоны** |
| 4 | `0x84fd27fffed9e137` | Zigbee Mini Switch 2 | `shower_night_light` | зона Душевая; автоматизации «Вкл./Выкл. ночной свет душевая» |
| 5 | `0xa4c1386d40ddb67b` | Light Sensor Stairs | `stairs_light_sensor` | датчик освещённости |
| 6 | `0xa4c138dc6d856eca` | Presense Sensor 1 | `presence_sensor_1` | радар присутствия mmWave |
| 7 | `0xa4c1381186ed1a32` | Smart light Office | `office_smart_light` | выключатель 2-кл |
| 8 | `0xa4c13873b5c1575b` | Light switch Table Office | `office_table_light_switch` | реле 2 канала L1/L2 |
| 9 | `0xa4c13807b64c7fd4` | Kitchen hood | `kitchen_hood` | реле 3 канала (вытяжка) |
| 10 | `0xa4c138cefeee19fd` | Zigbee dimmer 2ch | `zigbee_dimmer_2ch` | светильник 2 канала |
| 11 | `0xa4c1386d0839706a` | Smart Light Stairs | `stairs_smart_light` | реле |
| 12 | `0xa4c1384fbe0b3a6b` | Sauna | `sauna` | розетка без мониторинга |
| 13 | `0xa4c138b0f9e674a5` | Wireless light switch bed | `bed_wireless_light_switch` | беспроводной выключатель |
| 14 | `0xa4c13882a4b42db0` | Dimmer bed | `bed_dimmer` | диммер 1 канал |
| 15 | `0xa4c138c4a94a6a31` | Shower 2 presence sensor | `shower_2_presence_sensor` | радар присутствия 2-й |
| 16 | `0xa4c1383d5fcaa063` | hex | `boiler_water_leak` | датчик протечки, зона **Котельная** |
| 17 | `0xa4c138eb6fbe9d19` | — (новая) | `heating_cable_plug` | NEO NAS-WR01B, розетка греющего кабеля |
**Зоны (11, из `core.area_registry` TrueNAS):** Гостиная `living_room`, Кухня `kitchen`, Спальня `bedroom`, Детская `detskaia`, Кабинет `kabinet`, Ванная `vannaia`, Душевая `dushevaia`, Туалет `tualet`, Северная `severnaia`, Котельная `kotelnaia`, Лестница `lestnitsa`. Этажи: 1, 2.
**Модели (из `database.db`, JSON-lines — НЕ sqlite):** `modelID` пуст, но `manufName` даёт модель Tuya: `_TZ3000_akqdg6g7`, `_TZ3000_gjnozsaz`, `_TZ3000_3a9beq8a`, `_TZ3000_hy6ncvmw`, `_TZE200_crq3r3la`, `_TZ3000_0e6uvexf`, `_TZ3000_5gey1ohx`, `_TZ3000_odzoiovu`, `_TZ3000_kvwrdf47`, `_TZ3210_nhqka112`, `_TZ3000_kccru4oi`, `_TZ3000_ooc8illt`, `_TZE204_qasjif9e`, `Zbeacon` (протечка).
> 📌 **Питфолл:** база z2m `database.db` — это **JSON Lines** (объект на строку), НЕ SQLite. `sqlite3 database.db` → `file is not a database`. Читать: `jq -r 'select(.type!="Coordinator") | [.ieeeAddr,.type,.manufName] | @tsv' z2m-live.db`.
> Также в SSH-аддоне **нет `sqlite3`** — базу копировать на Mac (`scp` → `/Users/admin/tmp-t610/z2m-live.db`).
**Предлагаемая схема имён (на согласование с Alex):** `room_device` в латинице snake_case (напр. `dining_co2`, `kids_motion`, `bedroom_temp`) — кириллица в `entity_id` нежелательна. **Ждём подтверждения схемы от Alex перед переименованием.**
#### ℹ️ Как читать «человеческие имена» в HA (важно для будущих сессий)
**Имена устройств НЕ лежат в реестрах HA** — их надо искать в трёх местах:
1. **z2m** `/config/zigbee2mqtt/configuration.yaml` → секция `devices:``friendly_name`.
2. **HA `core.device_registry`**`data.devices[].name``name_by_user`), связь через `identifiers: [["mqtt","zigbee2mqtt_0x..."]]`.
3. **Дашборд `lovelace.home_plan`**`entity` в `picture-elements` (самый надёжный источник рабочей схемы имён).
Поля сущностей: `original_name` = **имя параметра** («Температура», «Влага») — НЕ имя устройства; `name`/`name_by_user` часто `null`. **Вывод: `original_name` для определения устройства бесполезен** — все 16 датчиков t° будут «Температура».
**Пифолл поиска:** если автоматизация ссылается на устройство, искать надо по `device_id`, а не `entity_id` — в `automations.yaml` триггеры вида `type: battery_level / device_id: ...` не содержат имени устройства. Связь: `device_id``core.device_registry``identifiers` → IEEE.
**Инвентарь `configuration.yaml` TrueNAS (30КБ):** секции — `default_config`, `http`, `logger`, `modbus` (17: шина вентиляции — заслонки intake/exhaust, AT2), `input_number`, `input_boolean`, `template` (summary-сенсоры `dining_summary`, `kids_summary`, `bedroom_summary`, `at2_1_summary`), `frontend` (темы), `automation/script/scene: !include`. **Секции `mqtt:` в конфиге НЕТ.** Датчики `sensor.dining_*`/`kids_*`/`bedroom_*` (`platform: mqtt`) — это **Modbus RTU Sniffer** (шина вентиляции), НЕ Zigbee, и уже названы правильно.
**Автоматизации TrueNAS (`automations.yaml`, 15 шт.):** Выключить/Включить циркуляцию ГВС, Ventilation automation on, office_pass_switch_table/main, Светло/Темно подсветку лестницы, Toggle/Cycle Dimmer bed, Вкл./Выкл. ночной свет душевая, Протечка котельная, Датчик протечки котельная батарея, Датчик освещённости лестница батарея, Light switch bed батарея, Zigbee T sensor батарея.
**Дашборд `home_plan` использует hex, который надо будет заменить после переименования:**
- `binary_sensor.0xa4c1383d5fcaa063_water_leak``boiler_water_leak`
- `switch.0xa4c138f8da8bc478``obratka_pump`
- `switch.vvod_vody_greiushchii_kabel`**`heating_cable_plug`** (старая Tuya-розетка → новая Zigbee)
### Этап 4 — проверка и отключение TrueNAS
18. [ ] Чек-лист из родительского плана §6
@@ -414,7 +438,8 @@ Alex физически знает, где какое устройство. За
- [x]**РЕШЕНО 2026-09-14 — `custom_components` не переносим.** HACS (репо пусто) и `tuya_local` (нет config entry) не нужны; `localtuya` обслуживал единственную Tuya-розетку, которую Alex заменил на Zigbee → тоже снят.
- [x]**РЕШЕНО 2026-09-14 — история БД не переносится** (новая с нуля) и **реестры `.storage` — замена** (вариант B).
- [x]**ВЫПОЛНЕНО 2026-09-14 — Zigbee-розетка NEO NAS-WR01B (`0xa4c138eb6fbe9d19`) добавлена** через permit_join (MQTT). z2m = 17 устройств.
- [ ] **ЖДЁМ Alex: имена для 17 Zigbee-устройств** — чтобы убрать hex из `friendly_name`/`entity_id` (см. §«Список 17 устройств»).
- [x] **СОГЛАСОВАНЫ 2026-09-14 — имена 17 Zigbee-устройств** (латиница snake_case, единый формат). Эталон найден: человеческие `friendly_name` были на **TrueNAS в z2m** и в `core.device_registry`/дашборде. См. §«Имена 17 устройств».
- [ ]**ЖДЁМ Alex — решение по `Mini Smart Switch 1` (`0xcc86ecfffe1347fd`):** нигде не используется, нет зоны, состояние `unavailable`. Варианты: имя `unused_wall_switch` либо удалить из z2m (unpair).
- [ ] Камера (§8 родительского плана) — не аддон, разбираться отдельно
## Связанные заметки