diff --git a/family/how-to/home-automation.md b/family/how-to/home-automation.md index e74dd7ec..06f8a26b 100644 --- a/family/how-to/home-automation.md +++ b/family/how-to/home-automation.md @@ -2,7 +2,7 @@ title: "🏠 Домашняя автоматизация" aliases: [Умный дом, Home automation, HA, Zigbee, Modbus, вентиляция, t610, RCU stall, USB reset] tags: [family, how-to, smarthome] -updated: 2026-09-15 (ночь-10: Zigbee — Z2M остановлен, ZHA создана стратегией `reuse_settings`, сеть взята со стика, устройства отвечают; переезд 4/5) +updated: 2026-09-15 (ночь-11: Zigbee — переезд в ZHA НЕ состоялся, ZHA удалена прерванным откатом, Z2M работает; дом в исходном рабочем состоянии) --- # 🏠 Домашняя автоматизация @@ -41,7 +41,9 @@ updated: 2026-09-15 (ночь-10: Zigbee — Z2M остановлен, ZHA со > 🔴 **Камера сейчас на xHCI (`USB3-1`), Zigbee — на OHCI (`USB1-2`).** Но перестановка портов **НЕ является фиксом** — после чистого старта сбросы камеры вернулись и на xHCI. Причину RCU stall см. §3.1, ограничения диагностики — §3.4, §3.5. -> 🔄 **ZIGBEE: ИДЁТ ПЕРЕЕЗД Z2M → ZHA (2026-09-15 ночь).** `zigbee2mqtt` **остановлен** (`state=stopped`, не удалён), **ZHA создана и `loaded`** (`entry_id` `01M2JNE7J4EG6ZN08M06927SM0`, стратегия `reuse_settings` — сеть взята со стика, устройства отвечают без перепаривания). Детали, рецепт и питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]]. Пока Z2M выключен, Zigbee-сущности в HA (`light.smart_light_office_*` и др.) недоступны — это ожидаемо, не поломка. +> ✅ **ZIGBEE: РАБОТАЕТ НА Z2M (2026-09-15, финал).** Попытка переезда Z2M → ZHA **не состоялась**: ZHA была создана (`reuse_settings`, сеть взята со стика, устройства отвечали), но затем **удалена прерванным скриптом откатa**, а **Z2M запущен заново**. Сейчас: `zigbee2mqtt` **started**, 19 устройств в сети, имена на месте, 16 автоматизаций целы, `modbus-bridge` получает данные. **Потерь нет.** +> +> 📌 **Переезд в ZHA — НЕ терминальная задача.** После `reuse_settings` каждое устройство заводится руками в UI («Add device»), 6 батарейных — с кнопкой в руках; REST не отдаёт список устройств ZHA (только WebSocket). Детали, рецепт, разбор ошибок — [[family/tech/zigbee-t610-z2m-i-zha]]. --- diff --git a/family/tech/zigbee-t610-z2m-i-zha.md b/family/tech/zigbee-t610-z2m-i-zha.md index 1fef81c7..ca090385 100644 --- a/family/tech/zigbee-t610-z2m-i-zha.md +++ b/family/tech/zigbee-t610-z2m-i-zha.md @@ -21,7 +21,7 @@ related: - '[[family/plans/t610-backup-to-truenas]]' --- -# Zigbee на t610 — переезд Z2M → ZHA (В РАБОТЕ) +# Zigbee на t610 — переезд Z2M → ZHA (НЕ СОСТОЯЛСЯ, рецепт сохранён) > 🚦 **ИТОГОВОЕ СОСТОЯНИЕ (2026-09-15, ФИНАЛ):** переезд **НЕ состоялся**. ZHA была создана (`reuse_settings`, сеть взята со стика — техника подтверждена рабочей), но затем **удалена прерванным скриптом откатa**, а **Z2M запущен заново и работает**. Дом в исходном рабочем состоянии: 19 устройств, имена на месте, 16 автоматизаций целы, `modbus-bridge` получает данные. **Потерь данных нет.** > @@ -152,15 +152,17 @@ ZHA стартует на ТОМ ЖЕ стике ZHA их обнаруживает (уже в сети) — заново спаривать НЕ нужно ``` -**Порядок (статус на 2026-09-15 ночь-10):** +**Порядок (статус на 2026-09-15, ФИНАЛ — шаги 1-4 выполнены и затем ОТКАЧЕНЫ):** -1. ✅ **СДЕЛАНО — Полный snapshot HA.** Slug `ada4c8e5`, job `7d7aea7e536241e4af0ed5fc50cc83fb`, тип `full`, **123 МБ**, 2026-09-15 13:37 UTC. Второй, более ранний: `2880be7c` (13:35). Содержимое обоих: `homeassistant: true`, folders `share/ssl/media`, addons — все 7. -2. ✅ **СДЕЛАНО — скачаны `coordinator_backup.json` + `database.db` + `configuration.yaml` + `state.json`** на Mac, md5 сверены (см. §Бэкапы). -3. ✅ **СДЕЛАНО — Z2M остановлен** (`45df7312_zigbee2mqtt`, `stop`, **не удалён**). Проверено: `state=stopped`, стик свободен (`/dev/ttyACM0`, `crw-rw---- root:audio`). -4. ✅ **СДЕЛАНО — ZHA создана через config flow** (`entry_id` `01M2JNE7J4EG6ZN08M06927SM0`, `state=loaded`). Стратегия — **`reuse_settings`**: сеть взята со стика, файл backup НЕ заливался. -5. ⬜ **СЛЕДУЮЩИЙ ШАГ — интервью устройств.** ZHA их слышит (`Unknown device AddrModeAddress(NWK, 0x…)` — сеть работает, ключи совпали, но IEEE ещё не известен). HA → Настройки → Устройства и службы → ZHA → **«Добавить устройство»**. +1. ✅ **ВЫПОЛНЕНО — Полный snapshot HA.** Slug `ada4c8e5`, job `7d7aea7e536241e4af0ed5fc50cc83fb`, тип `full`, **123 МБ**, 2026-09-15 13:37 UTC. Второй, более ранний: `2880be7c` (13:35). Содержимое обоих: `homeassistant: true`, folders `share/ssl/media`, addons — все 7. **Бэкапы живы и остаются страховкой.** +2. ✅ **ВЫПОЛНЕНО — скачаны `coordinator_backup.json` + `database.db` + `configuration.yaml` + `state.json`** на Mac, md5 сверены (см. §Бэкапы). +3. ✅ **ВЫПОЛНЕНО — Z2M был остановлен** (`45df7312_zigbee2mqtt`, `stop`). **Сейчас снова запущен** (`state=started`). +4. ✅ **ВЫПОЛНЕНО — ZHA была создана** через config flow (`entry_id` `01M2JNE7J4EG6ZN08M06927SM0`, `state=loaded`, стратегия `reuse_settings`). **Сейчас УДАЛЕНА** прерванным `rollback.sh` — в списке config entries её нет. +5. ⬜ **НЕ ДОДЕЛАНО — интервью устройств.** Требует UI: HA → Настройки → Устройства и службы → ZHA → **«Добавить устройство»**. 6. ⬜ Батарейные `EndDevice` (6 шт.) спят — разбудить кнопкой. Это **не перепаривание**. -7. ⬜ Переназначить `modbus-bridge` (завязан на `switch.0xa4c138f8da8bc478`); задать 16 friendly names заново. +7. ⬜ Задать 16 friendly names заново; переназначить `modbus-bridge`; переписать ссылки в 16 автоматизациях. + +> 🔴 **Повтор возможен ТОЛЬКО как ручная операция в UI.** Агент может сделать шаги 1-4 (они отработаны, скрипты есть), но шаги 5-7 — за клавиатурой с кнопками в руках. Не начинать без готовности довести до конца. ### 🔑 Рабочий рецепт: создание ZHA через config flow (HA core API) @@ -304,14 +306,15 @@ unavailable: 8 — и НИ ОДНА не Zigbee: > ⚠️ **УРОК СЕССИИ (для будущих):** я трижды дал противоречащий ответ на один вопрос, потому что ухватился за пустой `devices: []` и объявил «перенос отменяется», не разобрав, что для ember это норма и что файл вообще не участвует. **Правильная формулировка для Alex — сразу факт: «сеть в стике, файл не нужен, переезд делается».** Alex читает ответ как решение, а не как рассуждение. -**Цена переезда (реальная, после выполнения):** -- 16 friendly names задать заново (ZHA их не читает из `database.db`) — ⬜ осталось -- Все автоматизации со ссылками на `switch.0xa4c138f8da8bc478` и подобными — переписать — ⬜ осталось -- `modbus-bridge` сломается и требует переназначения (relay slave 104) — ⬜ осталось -- Батарейные `EndDevice` спят — разбудить кнопкой (это НЕ перепаривание) — ⬜ осталось -- ✅ **Сеть, ключи и PAN — НЕ потеряны.** Устройства отвечают без спаривания. +**Цена переезда (реальная, если повторять):** +- 16 friendly names задать заново (ZHA их не читает из `database.db`) +- Все автоматизации со ссылками на `switch.0xa4c138f8da8bc478` и подобными — переписать +- `modbus-bridge` сломается, требует переназначения (relay slave 104) +- Батарейные `EndDevice` спят — разбудить кнопкой (это НЕ перепаривание) +- ✅ **Сеть, ключи и PAN — НЕ теряются.** Устройства отвечают без спаривания. > 📌 Формулировка: **вопрос не в возможностях ZHA, а в том, что переезд = сменить программу-управитель, а не перенести сеть.** Сеть остаётся в стике. +> 📌 И в том, что **эту работу нельзя делегировать агенту** — она требует рук на устройствах. --- @@ -365,6 +368,14 @@ state.json MD5 20bfb775cbab002e59d1be31a15db9e6 | `zha-devcount.sh`, `zha-raw.sh` | ⚠️ `404` — device_registry только по WebSocket | | `zha-corelog.sh` | ✅ `GET /core/logs` — доказательство, что устройства отвечают | | `ha-core-check.sh` | ✅ `GET /core/info` → `port: 80`, версия 2026.9.2 | +| `rollback.sh` | ⚠️ **УДАЛЯЕТ ZHA и стартует Z2M — ОПАСЕН, прерывался дважды** | +| `restore-z2m.sh` | ✅ `start` аддона Z2M + проверка `state` + лог | +| `check-final.sh` | ✅ итоговая проверка: unavailable, modbus-bridge, Z2M-публикации | +| `state-now.sh`, `diag2.sh`, `diag3.sh`, `zha-recreate-1.sh` | диагностика состояния | + +> 🔴 **ПИТФОЛЛ ПРЕРЫВАНИЯ (главный урок сессии):** `rollback.sh` был прерван на середине **дважды** — один раз успел выполнить `DELETE` config entry ZHA (снёс интеграцию), но не дошёл до `start` Z2M. Система оказалась в подвешенном состоянии. **Правило: скрипты, меняющие состояние, писать с проверкой состояния на входе и идемпотентно** — чтобы повторный запуск после прерывания доделывал, а не ломал. +> +> 🔴 **ПРИЧИНА ПРЕРЫВАНИЙ:** длинная ssh-команда ждёт апрува; если Alex пишет сообщение в чат вместо подтверждения — апрув истекает, команда убивается, **а уже отправленные на хост шаги остаются применёнными.** > ⚠️ **Правило:** скрипты писать на Mac → `scp` → выполнить. Не инлайнить `mosquitto_sub` с паролем в одну ssh-строку — `$` в пароле `mqtt1z3$` ломается в двойных кавычках. > ⚠️ **Проверять скрипт на диске через `od -c`/`grep`, а не глазами в чате** — фильтр секретов маскирует строку с токеном в выводе, но файл на диске целый. Ложная тревога «скрипт побит» уже случалась.