diff --git a/family/plans/t610-addons-deployment.md b/family/plans/t610-addons-deployment.md index 34cdcd16..13ce0d6b 100644 --- a/family/plans/t610-addons-deployment.md +++ b/family/plans/t610-addons-deployment.md @@ -16,7 +16,7 @@ related: --- # t610 — развёртывание через HA-аддоны -> **Статус (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 выполнена, эталон имён найден. +> **Статус (2026-09-14): Этап 1 ✅. Этап 2 ✅ ПОЛНОСТЬЮ. Этап 3 🚧 В РАБОТЕ — решения приняты, комплект файлов собран, бэкапы сделаны. Удалено мёртвое `Mini Smart Switch 1`, добавлена новая Zigbee-розетка (17→16 устройств), имена согласованы. Следующий шаг — stop HA → залив реестров.** Сервисы: z2m (16 устройств), mbusd (502), modbus-bridge (MQTT + HA-опрос), MQTT-интеграция в HA. > Родительский план: [[family/plans/home-automation-migration-t610]] (Шаг 3 в нём заменяется на этот документ). > Доступ к хосту, CLI и питфоллы: [[family/how-to/t610-access]]. @@ -298,19 +298,69 @@ curl -s -X POST -H "Authorization: Bearer $T" -H "Content-Type: application/json **Итог: папка `custom_components/` не переносится вообще.** Никаких HACS-компонентов в системе нет. -#### Порядок работ Этапа 3 (важно — не перепутать) +#### 🔑 КЛЮЧЕВОЕ ОТКРЫТИЕ (2026-09-14): имена сущностей в HA уже ЧЕЛОВЕЧЕСКИЕ -1. **Бэкап** текущего `/config` t610 → Mac (`~/tmp-t610/config-t610-backup-<дата>/`) -2. **Бэкап** нужного с TrueNAS → Mac -3. `ha core stop` (иначе HA перезапишет `.storage` при выходе) -4. Перенести реестры `.storage` (замена, выборочно по списку выше) -5. Перенести `configuration.yaml` + правка `modbus.host` → `127.0.0.1` -6. Перенести `automations.yaml`, `scripts.yaml`, `secrets.yaml`, `www/` -7. `custom_components/` — **НЕ переносим** (решено) → шаг пропускается -8. Старт HA, проверка: конфиг валиден, сущности на месте, автоматизации, дашборд `home_plan` -9. **ТОЛЬКО ПОСЛЕ этого** — правка `friendly_name` в z2m + чистка `entity_id` в HA +**Разбор реестра TrueNAS (`core.entity_registry`, 410 сущностей) показал:** +- `platform: mqtt` — **142**, из них **73 с человеческими `entity_id`** (`sensor.dining_temperature_2`, `switch.kitchen_hood_l1`, `light.zigbee_dimmer_2ch_l1`, `button.nasos_obratki_identify`, `sensor.shower_2_presence_sensor_target_distance` …) и **69 hex**. +- **Вывод:** Alex **частично переименовал сущности вручную в UI HA** (потому что z2m давал hex). Т.е. «hex в HA» — только у тех, что не переименованы. -> ⚠️ Порядок шагов 4 → 9 критичен: если переименовать z2m до переноса реестров, работа пропадёт (HA перезапишет реестр). +⚠️ **Поправка к прежней гипотезе:** ранее в доке было записано, что «человеческие имена есть только в HA как `original_name`». Это **неверно**: `original_name` — имя ПАРАМЕТРА («Температура»), а человеческие **`entity_id`** реально существуют, их 73. Именно они — эталон. + +**Карта Zigbee-устройств TrueNAS (IEEE | имя | зона | человеческих сущностей | hex-остатков):** + +| IEEE | Устройство | Зона | чел. | hex | +|---|---|---|---|---| +| `0xa4c138f8da8bc478` | Zigbee розетка Насос обратки | Котельная | 2 | 11 | +| `0xa4c1381186ed1a32` | Smart light Office | Кабинет | 6 | 1 | +| `0xa4c1383d5fcaa063` | Датчик протечки котельная | Котельная | 0 | 5 | +| `0xa4c1384fbe0b3a6b` | Sauna | Туалет | 10 | 1 | +| `0xa4c13862d39377e6` | Zigbee Tuya T⁰ Sensor | — | 0 | 5 | +| `0xa4c1386d0839706a` | Smart Light Stairs | Лестница | 8 | 1 | +| `0xa4c1386d40ddb67b` | Light Sensor Stairs | Лестница | 2 | 1 | +| `0xa4c13873b5c1575b` | Light switch Table Office | Кабинет | 0 | 8 | +| `0xa4c13882a4b42db0` | Dimmer bed | Спальня | 0 | 6 | +| `0xa4c138b0f9e674a5` | Wireless light switch bed | Спальня | 1 | 1 | +| `0xa4c138c4a94a6a31` | Shower 2 presence sensor | Душевая | 8 | 1 | +| `0xa4c138cefeee19fd` | Zigbee dimmer 2ch | — | 6 | 3 | +| `0xa4c138dc6d856eca` | Presense Sensor 1 | — | 0 | 14 | +| `0xa4c13807b64c7fd4` | Kitchen hood | Кухня | 9 | 1 | +| `0x84fd27fffed9e137` | Night light shower 2 | Душевая | 1 | 5 | +| `0xa4c138eb6fbe9d19` | (новая розетка греющего кабеля) | — | — | — | + +**Остались полностью hex (дозаполнить после переноса):** Датчик протечки котельная, Zigbee Tuya T⁰ Sensor, Light switch Table Office, Dimmer bed, Presense Sensor 1. + +#### 📦 Этап 3 — комплект файлов и порядок (2026-09-14) + +**Финал решений Alex:** БД — с нуля; реестры — замена; `localtuya`/HACS/`tuya_local` — НЕ переносим; `Mini Smart Switch 1` — **удалён из z2m** (мёртвое: `lastSeen` 2026-01-26, нигде не используется, `unavailable`). + +**Staged-комплект:** `~/tmp-t610/stage3/out/` +- конфиги: `configuration.yaml` (правки: `modbus.host` → `127.0.0.1`; убрана строка `localtuya: debug`), `automations.yaml`, `scripts.yaml`, `scenes.yaml`, `secrets.yaml` +- `.storage/`: `core.entity_registry`, `core.device_registry`, `core.area_registry`, `core.floor_registry`, `core.restore_state`, `lovelace.home_plan`, `lovelace_dashboards`, `lovelace_resources`, `person`, `zone`, `core.logger`, `homeassistant.exposed_entities` +- `www/`: `card-mod.js`, `floorplan/floor1_ha.svg`, `floorplan/floor2_ha.svg` + +**НЕ переносим (локальное t610):** `core.uuid`, `auth*`, `http*`, `onboarding`, `core.config`, **`core.config_entries`** (⚠️ иначе потеряем MQTT-интеграцию t610!), `core.analytics`, `frontend.*`, `hacs.*`, `repairs.*`. + +**Правка дашборда:** в `lovelace.home_plan` ссылка `switch.vvod_vody_greiushchii_kabel` → `switch.heating_cable_plug` (скрипт `~/tmp-t610/fix_dashboard.py`, заменено 1 вхождение). + +**Порядок работ:** +1. ✅ Бэкап `/config` t610 → `~/tmp-t610/backups/config-t610-20260914-115034.tar.gz` +2. ✅ Бэкап TrueNAS → `~/tmp-t610/backups/truenas-ha-backup-20260913-215043.tar.gz` (`auth`/`http`/`auth_provider` не читаются — root-only, и не нужны) +3. `ha core stop` на t610 +4. Залить реестры `.storage` (выборочно по списку) +5. Залить конфиги + `www/` +6. `ha core check` → `ha core start` +7. Проверка: сущности, зоны, автоматизации, дашборд +8. **ТОЛЬКО ПОСЛЕ** — `friendly_name` в z2m = человеческие имена (эталон из реестра) + чистка hex-остатков в HA + +> ⚠️ Порядок 4 → 8 критичен: переименование z2m до переноса реестров пропадёт. + +**Питфоллы, найденные в этой сессии:** +- **`ha apps logs ` тяжёлый** — не гонять в цикле ожидания («висит» минутами). Ждать готовности по `database.db`/`state.json`. +- **`mosquitto_pub/sub` в аддоне без `--pwfile`** — только `-u`/`-P`. Пароль с `$` → брать из опций: `ha apps info --raw-json | jq -r '.data.options.mqtt.password' > /tmp/pw; MPW=$(cat /tmp/pw); rm /tmp/pw`. +- **Удаление устройства z2m:** `mosquitto_pub ... -t 'zigbee2mqtt/bridge/request/device/remove' -m '{"id":"0x...","force":true}'` (force для недоступных) → `{"status":"ok"}`; z2m сам убирает из `database.db` и `devices:`. +- **Токен HA маскируется** при подстановке в bash-переменную → через файл + `jq --arg`. +- **`http://supervisor/core` даёт 401** с пользовательским токеном (ждёт `SUPERVISOR_TOKEN`) → адрес `http://192.168.2.176:80`. +- **Кавычки в inline ssh-командах с кириллицей ломаются** → писать скрипт файлом, `scp`, запускать. #### ✅ Zigbee `friendly_name` — корень generic-имён (разведка 2026-09-14)