From c4845aa0dd4cb93d1efefe61fa996d3f7aeb8dea Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 15 Sep 2026 21:29:38 +0600 Subject: [PATCH] [2026-09-15] eagle: family/how-to/ha-automations.md family/how-to/home-automation.md family/tech/zigbee-t610-z2m-i-zha.md --- family/how-to/ha-automations.md | 47 +- family/how-to/home-automation.md | 24 +- family/tech/zigbee-t610-z2m-i-zha.md | 1596 ++++---------------------- 3 files changed, 249 insertions(+), 1418 deletions(-) diff --git a/family/how-to/ha-automations.md b/family/how-to/ha-automations.md index eda6a9ff..eeaee32e 100644 --- a/family/how-to/ha-automations.md +++ b/family/how-to/ha-automations.md @@ -2,29 +2,20 @@ > **Справочник логики автоматизаций** (`automations.yaml` на t610). Топология/команды/Modbus — [[family/how-to/home-automation]]. -> 🟢 **ОБНОВЛЕНО 2026-09-15 (ночь-14): АВТОМАТИЗАЦИИ ПОЧИНЕНЫ — 12 из 16 РАБОТАЮТ.** +> 🟢 **АКТУАЛЬНО 2026-09-15: 14 АВТОМАТИЗАЦИЙ — 13 `on`, 1 `off` (`Ventilation automation on`, намеренно), `unavailable` = 0.** Zigbee работает на ZHA. > > Переезд Zigbee Z2M → ZHA выполнен. Автоматизации были сломаны не по `entity_id`, а глубже — они ссылались на `device_id` + внутренний `entity_id`-UUID, а устройства Z2M удалены. **Пересобраны заново** на ZHA-шные `device_id` + актуальные `entity_id`. > -> **Итог: 12 живых, 4 ждут 2 спящих батарейных.** +> **Что доделано после первичной пересборки:** +> - ✅ **4 «призрака»-автоматизации УДАЛЕНЫ** из `core.entity_registry` (тела не существовало: `GET /api/config/automation/config/` → 404). Файл: 12 блоков vs 16 сущностей. +> - ✅ **2 сценария подсветки лестницы ПЕРЕСОЗДАНЫ** на `sensor.light_sensor_stairs_illuminance` (`light.light_stairs_left`/`_right`), оба `on`. +> - ✅ **`Toggle Dimmer bed` / `Dimmer bed cycle` — залиты и `on`**: триггер от кнопки, действия на `light.bed_dimmer` (было — реле сауны). +> - ⚠️ **Кнопка спальни:** события `remote_button_short_press` идут **только после `zha/devices/reconfigure`**. Дамп кластеров ДО reconfigure вводит в заблуждение. > -> | Автоматизация | Состояние | -> |---|---| -> | Циркуляция ГВС вкл/выкл (по времени) | ✅ on | -> | office_pass_switch_table / office_pass_switch_main | ✅ on | -> | Ночной свет душевая вкл/выкл | ✅ on | -> | Протечка котельная | ✅ on | -> | Датчик протечки котельная батарея | ✅ on | -> | Zigbee T sensor батарея | ✅ on | -> | Toggle dimmer bed / increase dimmer bed brightness | ✅ on (триггер от спящей кнопки отключён) | -> | Ventilation automation on | ⏸ off (не Zigbee) | -> | `svetlo_vykl_osveshchenie_lestnitsy` | ⏳ ждёт `light_sensor_stairs` | -> | `temno_vkl_podsvetku_lestnitsy` | ⏳ ждёт `light_sensor_stairs` | -> | `datchik_osveshchennosti_lestnitsa_batareia` | ⏳ ждёт `light_sensor_stairs` | -> | `light_switch_bed_batareia` | ⏳ ждёт `wireless_light_switch_bed` | +> **Итог: 14 автоматизаций, `unavailable` = 0.** > -> **Бэкап:** `/config/automations.yaml.bak-before-autofix-20260915-212636` (до пересборки) + `automations.yaml.bak-zha-20260915-211613` ✅ -> **Рецепт пересборки + питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]] §РЕЗУЛЬТАТ МИГРАЦИИ.** +> **Бэкап:** `/config/automations.yaml.bak-dimmer-fix` (последняя правка) + `.bak-before-autofix-20260915-212636` + `.bak-zha-20260915-211613` ✅ +> **Рецепт пересборки + питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]].** > > 🔴 **ПИТФОЛЛЫ, найденные при починке:** > 1. **`device`-триггер батареи — тип `battery_level`, НЕ `battery`.** Иначе `Automation ... failed to setup triggers and has been disabled`. @@ -35,8 +26,9 @@ ## 1. Где живёт - **Файл:** `/config/automations.yaml` в HA Core на t610. -- **Всего:** 16 автоматизаций — **12 живых** (`on`), 1 `off` (`Ventilation automation on`), **4 `unavailable`** (ждут 2 спящих батарейных). После починки ночь-14 файл = 189 строк. -- **Локальная копия:** `~/tmp-t610/automations/automations.yaml`; после пересборки — `~/tmp-t610/automations-new.yaml`. +- **Всего:** **14 автоматизаций — 13 `on`, 1 `off`** (`Ventilation automation on`, намеренно, `last_triggered` 12 марта), **`unavailable` = 0**. Файл = 189 строк. +- **Удалены 4 «призрака»** (записи в реестре без тела): `svetlo_vykl_osveshchenie_lestnitsy`, `temno_vkl_podsvetku_lestnitsy`, `datchik_osveshchennosti_lestnitsa_batareia`, `light_switch_bed_batareia`. Тела не было (`config/automation/config/` → 404) — лестничные сценарии **пересозданы заново** с теми же id. +- **Локальная копия:** `~/tmp-t610/automations/automations.yaml`; после пересборки — `~/tmp-t610/automations-new.yaml`, `~/tmp-t610/automations-fixed.yaml`. - **Читать живьём через API** (не по памяти): ```bash B="https://mallexxx.duckdns.org" @@ -62,19 +54,20 @@ REST `GET/POST /api/config/automation/config/` использует поля | `1770404069135` | Ventilation automation on | `time 05:00` → `fan.turn_on fan.automation` *(off)* | | `5735cb9f855e462dbdbdf680d0d6a66f` | **office_pass_switch_table** | кнопка L1 → toggle `light.smart_light_office_left` ⚠️ | | `45b96f6f38f6488ba70266fa5da665f5` | **office_pass_switch_main** | кнопка L2 → toggle `light.smart_light_office_right` ⚠️ | -| `1771466806839` | Светло: выкл. подсветку лестницы | lever `illuminance above: 150` → turn_off | -| `1771466955010` | Темно: вкл. подсветку лестницы | lever `illuminance below: 130` → turn_on | -| `1771683420621` | Toggle Dimmer bed | кнопка `single` → toggle `light.bed_dimmer` | -| `1771683677259` | Dimmer bed cycle | кнопка `double` → цикл яркости 20/40/60/80/100 % | +| `1771466806839` | Темно: вкл. подсветку лестницы | `illuminance below: 20` → `light.light_stairs_left`+`_right` turn_on | +| `1771466955010` | Светло: выкл. подсветку лестницы | `illuminance above: 60` → `light.light_stairs_left`+`_right` turn_off | +| `1771683420621` | Toggle Dimmer bed | кнопка `remote_button_short_press` → `light.toggle light.bed_dimmer` | +| `1771683677259` | Dimmer bed cycle | кнопка `long_press` → `light.turn_on` brightness 50 % на `light.bed_dimmer` | | `1771997851260` | **Вкл. ночной свет душевая** | присутствие + темно → `switch.night_light_shower_2` on | | `1771997918348` | **Выкл. ночной свет душевая** | нет присутствия / светло → off | | `1773451257968` | Протечка котельная | `moist` → `notify.notify` | | `1773451323415` | Датчик протечки котельная батарея | `bat_low` → notify | -| `1773459513601` | Датчик освещенности лестница батарея | `battery_level below 10` → notify | -| `1773459606336` | Light switch bed батарея | `battery_level below 10` → notify | | `1773459663218` | Zigbee T sensor батарея | `battery_level below 10` → notify | -> **Образец правильной защиты от дребезга:** «Светло/Темно подсветка лестницы» использует **гистерезис** (`below: 130` / `above: 150`). Брать как эталон. +> ⚠️ **Два сценария подсветки лестницы (id `1771466806839` / `1771466955010`) удалены как «призраки» и ПЕРЕСОЗДАНЫ** с теми же id на `sensor.light_sensor_stairs_illuminance`. Пороги 20/60. +> 🗑 **Удалённые «призраки», которых в файле НЕТ:** `automation.svetlo_vykl_osveshchenie_lestnitsy`, `automation.temno_vkl_podsvetku_lestnitsy`, `automation.datchik_osveshchennosti_lestnitsa_batareia`, `automation.light_switch_bed_batareia`. + +> **Образец правильной защиты от дребезга:** «Темно/Светло подсветка лестницы» использует **гистерезис** (`below: 20` / `above: 60`). Брать как эталон. --- diff --git a/family/how-to/home-automation.md b/family/how-to/home-automation.md index 5a92d905..f561bd98 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 (ночь-22: ✅ §9 — баг CO2 ЗАКРЫТ: убраны мусорные `correction_offset` в `config.template.tmpl`, rebuild аддона, проверено 847/599 ppm; сводки исправны, править не нужно) +updated: 2026-09-15 (✅ §9 — баг CO2 ЗАКРЫТ: убраны мусорные `correction_offset`, rebuild аддона, 848/599 ppm; сводки исправны. Дока Zigbee переписана в справочник: [[family/tech/zigbee-t610-z2m-i-zha]]) --- # 🏠 Домашняя автоматизация @@ -41,15 +41,13 @@ updated: 2026-09-15 (ночь-22: ✅ §9 — баг CO2 ЗАКРЫТ: убра > 🔴 **Камера сейчас на xHCI (`USB3-1`), Zigbee — на OHCI (`USB1-2`).** Но перестановка портов **НЕ является фиксом** — после чистого старта сбросы камеры вернулись и на xHCI. Причину RCU stall см. §3.1, ограничения диагностики — §3.4, §3.5. -> 🟢 **ZIGBEE: ПЕРЕЕЗД НА ZHA ЗАВЕРШЁН (2026-09-15, ночь-14).** ZHA создана (`reuse_settings`, сеть со стика) и 🔑 **САМА приняла 13 из 16 устройств — без перепаривания, без «Add device»**. Z2M **остановлен** (не удалён, данные целы). +> 🟢 **ZIGBEE: РАБОТАЕТ НА ZHA (2026-09-15).** Интеграция ZHA (встроена в HA), координатор — тот же стик. Z2M **остановлен**, не удалён (данные целы в `/config/zigbee2mqtt/`). > -> **Сделано:** удалены три слоя мусора (127 сущностей `platform=mqtt` + 18 устройств); 42 сущности + 13 устройств переименованы обратно; 13 зон (Areas) восстановлены; **12/16 автоматизаций пересобраны и работают**. +> **Итог:** удалены три слоя мусора (127 сущностей `platform=mqtt` + 18 устройств); сущности и 16 устройств переименованы; 11 зон (Areas) восстановлены; **17 записей в ZHA (16 устройств + координатор), `unavailable` = 0**; **14 автоматизаций: 13 `on`, 1 `off` намеренно** (`Ventilation automation on`); кнопка спальни шлёт события, диммер рулится; свет лестницы + 2 сценария подсветки работают. > -> **Осталось:** разбудить 2 спящих батарейных (`light_sensor_stairs`, `wireless_light_switch_bed`) → последние 4 автоматизации. `sauna` в ZHA так и не появилась (отдельная задача). +> 📌 **Перепаривание НЕ нужно — подтверждено фактом.** Устройства отвечают координатору, ZHA принимает их по NVRAM-сети. Имена даёт технические (`light.tz3000_*`), т.к. `friendly_name` из Z2M не читает — переименованы вручную. > -> 📌 **Перепаривание НЕ нужно — подтверждено фактом.** Устройства отвечают координатору, ZHA их принимает по NVRAM-сети. Имена даёт технические (`light.tz3000_*`), т.к. `friendly_name` из Z2M не читает — переименованы вручную. -> -> Полный итог, карта переименования по IEEE, рецепт починки автоматизаций, питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]]. +> Полный справочник по текущему конфигу: координатор, карта 16 устройств по IEEE, кнопка+диммер, свет лестницы, рецепт миграции, ZHA WebSocket API, питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]]. --- @@ -723,10 +721,10 @@ Hz:PWM 0:0 1:0 2:0 3:0 4:48 5:55 6:63 7:70 8:78 9:85 10:92 11:97 12:102 13:107 1 --- -## 9. Modbus CO2: разбор бага и план фикса (2026-09-15, ночь-19) +## 9. Modbus CO2: разбор бага и фикс (2026-09-15) — ✅ ЗАКРЫТО -> 🔴 **СИМПТОМ:** `sensor.dining_summary` = `1692° 780ppm`, `kids_co2` = **−76**, `bedroom_co2` = **94**. -> 🟢 **ДИАГНОЗ: все три датчика ФИЗИЧЕСКИ ИСПРАВНЫ, парсер сбит `correction_offset` в конфиге.** Это **не утечка памяти и не RCU stall** (см. §3.6). +> 🔴 **СИМПТОМ (был):** `sensor.dining_summary` = `1692° 780ppm`, `kids_co2` = **−76**, `bedroom_co2` = **94**. +> 🟢 **ДИАГНОЗ: все три датчика ФИЗИЧЕСКИ ИСПРАВНЫ, парсер был сбит `correction_offset` в конфиге.** Это **не утечка памяти и не RCU stall** (см. §3.6). Фикс — ниже, §«ФИКС ВЫПОЛНЕН». ### Что реально в шине (сырые байты из лога аддона) @@ -816,12 +814,12 @@ ssh root@192.168.2.176 'ha apps logs local_modbus-bridge | grep -E "Raw RTU|→ - **Журнал прошлой загрузки отсутствует** — HAOS пишет в RAM, `journalctl -b -1` пуст. События до падения восстановить нечем; диагноз ставить **до** перезагрузки. - **Потребление по аддонам (2026-09-15):** Node-RED **197 МБ (13 %)** — крупнейший; HA Core 212 МБ (14 %); Supervisor 77 МБ (5 %); modbus-bridge 20 МБ; Mosquitto 19 МБ; go2rtc ×2 по 3.4 МБ; mbusd 0.8 МБ. - **HAOS** `18.2`, agent `1.10.0`, ядро `6.18.39-haos`, `online_cpus 2`. `ha host info` из аддона работает. -- **`unavailable`:** 8 — 7 на slave 10 (AT2-вентиляторы, блок закомментирован; задача снята) + `todo.shopping_list` (системная). -- **Zigbee: ПЕРЕЕХАЛ на ZHA (2026-09-15).** Z2M ⏸ stopped (данные целы в `/config/zigbee2mqtt/`), стик отдан ZHA. **17 устройств + координатор в ZHA**, 15 переименованы, зоны восстановлены. Кнопка `wireless_light_switch_bed` (TS0041) шлёт `remote_button_short_press` только после `zha/devices/reconfigure`. Полный итог — [[family/tech/zigbee-t610-z2m-i-zha]]. +- **`unavailable` (Zigbee) = 0** после миграции на ZHA. Отдельно, вне Zigbee: 7 на slave 10 (AT2-вентиляторы, блок закомментирован; задача снята) + `todo.shopping_list` (системная). +- ✅ **Zigbee: РАБОТАЕТ НА ZHA (2026-09-15).** Z2M ⏸ stopped (данные целы в `/config/zigbee2mqtt/`), стик отдан ZHA. **ZHA: 17 записей (16 устройств + координатор), `unavailable` = 0, 14 автоматизаций (13 `on`, 1 `off` намеренно).** Кнопка `wireless_light_switch_bed` (TS0041) шлёт `remote_button_short_press` только после `zha/devices/reconfigure`. Полный справочник — [[family/tech/zigbee-t610-z2m-i-zha]]. - **`toilet_1_floor_temperature`:** ✅ 24.4 °C / 47.7 % / bat 100 %, зона Туалет. - **Открытый дефект:** свет кабинета мигает при перезагрузке HA (`office_pass_switch_*`, `platform: state` без `to`). Разбор — [[family/how-to/ha-automations]]. - **`slave 20`** (газ-котёл): состояние через bridge не читается. - **`H2000_PRO`** — контроллер отопления, не Zigbee, не трогать. -- **Шум в логах HA Core:** `TemplateError: round got invalid input 'unknown'` на `sensor.bedroom_summary` (шаблон без `default`). Косметика, но засоряет лог. +- ✅ **Шум в логах про `TemplateError: round got invalid input 'unknown'` на `sensor.bedroom_summary` — СНЯТ.** При живых данных не воспроизводится: ошибка была следствием `unavailable`-состояния до фикса CO2 (§9). Правка `configuration.yaml` **не требуется**. - **Локальные скрипты диагностики:** `~/tmp-t610/` — `diag.sh`…`diag4.sh`, `stats.sh`, `who.sh`, `mem.sh`, `boot.sh`, `z2m.sh`, `cam.sh`, `ports.sh`, `watchdog.sh`, `pull-image.sh`, `remove_go2rtc_baks.sh` (снос аддонов go2rtc + всех .bak, 2026-09-15). - **Как запускать скрипт на t610 (рабочий паттерн):** `scp