[2026-09-15] eagle: family/how-to/ha-automations.md family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md

This commit is contained in:
Alexey Martemyanov
2026-09-15 22:56:12 +06:00
parent ddba016d43
commit b954d3e289
2 changed files with 304 additions and 134 deletions
+93 -10
View File
@@ -2,7 +2,12 @@
> **Справочник логики автоматизаций** (`automations.yaml` на t610). Топология/команды/Modbus — [[family/how-to/home-automation]].
> 🟢 **АКТУАЛЬНО 2026-09-15: 14 АВТОМАТИЗАЦИЙ — 13 `on`, 1 `off` (`Ventilation automation on`, намеренно), `unavailable` = 0.** Zigbee работает на ZHA.
> 🟢 **АКТУАЛЬНО 2026-09-15 (поздний вечер): 26 АВТОМАТИЗАЦИЙ — 25 `on`, 1 `off` (`Ventilation automation on`, намеренно), `unavailable` = 0.** Zigbee работает на ZHA.
>
> **➕ Добавлено в этот вечер: 12 автоматизаций контроля батарей** (id `8800000000000`…`8800000000011`, все `on`). Порог **20 %**, выдержка **2 ч**, двойной канал: `persistent_notification` + push `notify.mobile_app_sm_s931b`; при возврате заряда уведомление гасится (`notification_id: bat_<slug>`). Детали — §5.
> ⛔ **Удалены 2 прежние батарейные** (`1773451323415`, `1773459663218`) — были с порогом 10 и без push. Их осиротевшие записи в реестре вычищены (питфолл §5.1).
> 🔄 **Переименованы** ссылки после единообразия ID: `light.night_light_shower_2` → `light.dushevaia_night_light`, `sensor.tz3000_akqdg6g7_ts0201_batareia` → `sensor.kabinet_temperature_battery`.
> 📄 Полный отчёт о работах: [[family/plans/t610-zigbee-ids-battery-freshsensors-modbus]].
>
> Переезд Zigbee Z2M → ZHA выполнен. Автоматизации были сломаны не по `entity_id`, а глубже — они ссылались на `device_id` + внутренний `entity_id`-UUID, а устройства Z2M удалены. **Пересобраны заново** на ZHA-шные `device_id` + актуальные `entity_id`.
>
@@ -12,7 +17,7 @@
> - ✅ **`Toggle Dimmer bed` / `Dimmer bed cycle` — залиты и `on`**: триггер от кнопки, действия на `light.bed_dimmer` (было — реле сауны).
> - ⚠️ **Кнопка спальни:** события `remote_button_short_press` идут **только после `zha/devices/reconfigure`**. Дамп кластеров ДО reconfigure вводит в заблуждение.
>
> **Итог: 14 автоматизаций, `unavailable` = 0.**
> **Итог на 2026-09-15 (поздний вечер): 26 автоматизаций, `unavailable` = 0.**
>
> **Бэкап:** `/config/automations.yaml.bak-dimmer-fix` (последняя правка) + `.bak-before-autofix-20260915-212636` + `.bak-zha-20260915-211613` ✅
> **Рецепт пересборки + питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]].**
@@ -26,7 +31,8 @@
## 1. Где живёт
- **Файл:** `/config/automations.yaml` в HA Core на t610.
- **Всего:** **14 автоматизаций — 13 `on`, 1 `off`** (`Ventilation automation on`, намеренно, `last_triggered` 12 марта), **`unavailable` = 0**. Файл = 189 строк.
- **Всего:** **26 автоматизаций — 25 `on`, 1 `off`** (`Ventilation automation on`, намеренно, `last_triggered` 12 марта), **`unavailable` = 0**. Файл = 228 строк.
- **Бэкапы перед правками 2026-09-15 (поздний вечер):** `/config/automations.yaml.bak-preids-20260915-223427`; рабочая копия — `~/tmp-t610/autfix-20260915-223427/automations.yaml` (плюс `.pre-bat` — до добавления батарейных).
- **Удалены 4 «призрака»** (записи в реестре без тела): `svetlo_vykl_osveshchenie_lestnitsy`, `temno_vkl_podsvetku_lestnitsy`, `datchik_osveshchennosti_lestnitsa_batareia`, `light_switch_bed_batareia`. Тела не было (`config/automation/config/<id>` → 404) — лестничные сценарии **пересозданы заново** с теми же id.
- **Локальная копия:** `~/tmp-t610/automations/automations.yaml`; после пересборки — `~/tmp-t610/automations-new.yaml`, `~/tmp-t610/automations-fixed.yaml`.
- **Читать живьём через API** (не по памяти):
@@ -58,11 +64,13 @@ REST `GET/POST /api/config/automation/config/<id>` использует поля
| `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 |
| `1771997851260` | **Вкл. ночной свет душевая** | присутствие + темно → `light.dushevaia_night_light` on |
| `1771997918348` | **Выкл. ночной свет душевая** | нет присутствия / светло → off |
| `1773451257968` | Протечка котельная | `moist` → `notify.notify` |
| `1773451323415` | Датчик протечки котельная батарея | `bat_low` → notify |
| `1773459663218` | Zigbee T sensor батарея | `battery_level below 10` → notify |
| `8800000000000`…`8800000000011` | **Батарея: 12 шт.** | см. §6 |
> 🔄 **Переименовано 2026-09-15:** ссылки на `light.night_light_shower_2` → `light.dushevaia_night_light` (id `1771997851260`, `1771997918348`).
> ⛔ **Удалены из карты:** `1773451323415` «Датчик протечки котельная батарея» и `1773459663218` «Zigbee T sensor батарея» — заменены 12 единообразными (§6). Тела удалены, осиротевшие записи реестра вычищены.
> ⚠️ **Два сценария подсветки лестницы (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`.
@@ -101,10 +109,9 @@ REST `GET/POST /api/config/automation/config/<id>` использует поля
- `sensor.shower_2_presence_sensor_illuminance` — освещённость, lx
- `binary_sensor.shower_2_presence_sensor_presence` — занятость
- `switch.night_light_shower_2` — **само реле** (его дёргает автоматизация)
- `light.night_light_shower_2` — хелпер `switch_as_x` поверх того же реле
- `light.dushevaia_night_light` — **само реле** (его дёргает автоматизация; бывш. `light.night_light_shower_2`)
> ⚠️ **Две сущности = одно реле.** Управлять надо `switch.` — той, к которой привязана автоматика, иначе состояние «расходится» в UI.
> 📌 **2026-09-15:** хелпер `switch.night_light_shower_2` (`switch_as_x`) снесён при переезде на ZHA. Осталась одна сущность — `light.dushevaia_night_light`. Автоматизации ссылаются именно на неё.
**Автоматизации:**
@@ -122,7 +129,83 @@ REST `GET/POST /api/config/automation/config/<id>` использует поля
---
## 5. Диагностика
## 5. 🔋 Контроль батарей — 12 автоматизаций (2026-09-15)
**Единый шаблон**, id `8800000000000`…`8800000000011`:
```yaml
- id: '8800000000000'
alias: 'Батарея: <место>'
description: 'Контроль заряда Zigbee-датчика. Порог 20%, выдержка 2ч.'
triggers:
- trigger: numeric_state
entity_id: sensor.<device>_battery
below: 20
for: '02:00:00'
id: low
- trigger: numeric_state
entity_id: sensor.<device>_battery
above: 20
id: ok
conditions: []
actions:
- choose:
- conditions: [{condition: trigger, id: low}]
sequence:
- action: persistent_notification.create
data:
title: '🔋 Батарея разряжена'
message: '<место> — заряд {{ states(''sensor.<device>_battery'') }}%. Замените батарейку.'
notification_id: bat_<slug>
- action: notify.mobile_app_sm_s931b
data:
title: '🔋 Батарея разряжена'
message: '<место> — заряд {{ states(''sensor.<device>_battery'') }}%. Замените батарейку.'
- conditions: [{condition: trigger, id: ok}]
sequence:
- action: persistent_notification.dismiss
data: {notification_id: bat_<slug>}
mode: single
```
| id | Место | Сущность заряда |
|---|---|---|
| `8800000000000` | Туалет 1 этаж (тёплый пол) | `sensor.toilet_1_floor_temperature_battery` |
| `8800000000001` | Лестница (освещённость) | `sensor.light_sensor_stairs_battery` |
| `8800000000002` | Душевая (тёплый пол) | `sensor.dushevaia_floor_temperature_battery` |
| `8800000000003` | Котельная (протечка) | `sensor.boiler_water_leak_battery` |
| `8800000000004` | Кабинет (температура) | `sensor.kabinet_temperature_battery` |
| `8800000000005` | Гостиная (тёплый пол) | `sensor.living_room_floor_temperature_battery` |
| `8800000000006` | Серая (тёплый пол) | `sensor.severnaia_floor_temperature_battery` |
| `8800000000007` | Кабинет (тёплый пол) | `sensor.kabinet_floor_temperature_battery` |
| `8800000000008` | Кухня (тёплый пол) | `sensor.kitchen_floor_temperature_battery` |
| `8800000000009` | Ванная (тёплый пол) | `sensor.vannaia_floor_temperature_battery` |
| `8800000000010` | Прихожая (тёплый пол) | `sensor.prikhozhaia_floor_temperature_battery` |
| `8800000000011` | Спальня (кнопка) | `sensor.wireless_light_switch_bed_battery` |
### 5.1. 🔴 Питфоллы
1. **Выдержка `for: '02:00:00'` обязательна.** Батарейные TS0201 под нагрузкой дают кратковременные просадки — без выдержки прилетают ложные алерты.
2. **Двойной канал.** `persistent_notification` = видно в UI; `notify.mobile_app_sm_s931b` = push на телефон. Alex: «Видимо persistent с пушом на тел».
3. **Второй триггер `ok` (`above: 20`) гасит уведомление** через `notification_id` — иначе алерт висит вечно. Для этого у `persistent_notification.create` обязателен `notification_id: bat_<slug>`.
4. 🔴 **Сирота-автоматизация: `unavailable` при чистом YAML.** Тело удалено из `automations.yaml`, запись в реестре осталась. Удаление:
```python
# Если config/entity_registry/remove падает с id_reuse:
# "Identifier values have to increase"
{"type":"config/entity_registry/update","entity_id": E, "disabled_by": "user"} # сначала
{"type":"config/entity_registry/remove","entity_id": E} # потом
```
Реальный случай: после удаления тел `1773451323415` / `1773459663218` обе сущности остались `unavailable`.
5. ⚠️ **`sensor.wireless_light_switch_bed_battery` = `unknown`** — кнопка спальни спит. Автоматизация создана, но триггера не будет, пока датчик не проснётся (лечится нажатием кнопки).
6. ⚠️ **Проверять имена сущностей после переименований:** в ZHA домен бывает `_batareia`, но `trigger: battery_level` (не `battery`).
**Скрипты:** `~/tmp-t610/add_battery_autos.py` (генератор), `~/tmp-t610/rm_orphans.py`, `rm_orphan2.py`, `rm_orphan3.py`.
> 📄 Полный отчёт о работах: [[family/plans/t610-zigbee-ids-battery-freshsensors-modbus]]
---
## 6. Диагностика
```bash
# История значения (доказательство дребезга)