[2026-09-16] eagle: family/how-to/ha-automations.md family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md family/tech/zigbee-t610-z2m-i-zha.md

This commit is contained in:
Alexey Martemyanov
2026-09-16 20:02:26 +06:00
parent 60ed15963a
commit 0e0ac2199d
3 changed files with 65 additions and 12 deletions
+36 -7
View File
@@ -6,9 +6,9 @@
>
> **Состав:** 12 контроля батарей (§5) + 2 циркуляция ГВС + 2 свет кабинета (§2.2, §3) + 2 подсветка лестницы + 2 ночной свет душевой (§4.1–§4.3) + 2 диммер спальни + 1 протечка котельная + 1 вентиляция + **1 греющий кабель ввода воды (§7)**.
>
> 🗓 **Сессия 2026-09-16 (день):** починены два дефекта автоматизаций кабинета — мёртвые `entity_id` в триггерах (§2.2) и потерянная защита `not_from` (§3). В душевой: задержка 2 с на ветку по освещённости (§4.1), затем `fading_time` 10→2 с + задержка 10 с в сценарии ВЫКЛ (§4.2). Все правки верифицированы живым прогоном на железе **и реальным рестартом HA**.
> 🗓 **Сессия 2026-09-16 (день):** починены два дефекта автоматизаций кабинета — мёртвые `entity_id` в триггерах (§2.2) и потерянная защита `not_from` (§3). В душевой: задержка на ветку по освещённости (§4.1), `fading_time` 10→2 с + задержка 10 с в сценарии ВЫКЛ (§4.2), затем тюнинг задержки ВКЛ `2 → 3 → 5 с` по замеру окна отпускания радара (§4.3). Все правки верифицированы живым прогоном на железе **и реальным рестартом HA**.
>
> 🔴 **ОТКРЫТО (см. §4.3):** ложные включения ночного света душевой при выходе — окно `fading_time` + feedback loop через собственную лампу при совпадающих порогах ВКЛ/ВЫКЛ (`6`/`6`). Фиксы (устойчивое присутствие, гистерезис `< 4` / `> 10`) **предложены, но отклонены Alex** — пороги не менять без явной команды.
> 🟡 **ОСТАЁТСЯ ОТКРЫТЫМ — только один вопрос (§4.4):** feedback loop через собственную лампу (пороги ВКЛ/ВЫКЛ совпадают: `6`/`6`, мёртвая зона нулевая → дребезг `2–4` ↔ `1112`). Гистерезис `< 4` / `> 10` **предложен, но отклонён Alex** — пороги не менять без явной команды. Ложные включения при выходе **закрыты** задержкой 5 с (§4.3), ждут подтверждения на практике.
>
> **Ключевые факты:**
> - 🔴 **ЗАЩИТА ТРИГГЕРА ОБЯЗАТЕЛЬНА для `platform: state` на реле/кнопках:** `not_from: [unavailable, unknown]`. Без неё автоматизация срабатывает при старте HA (`unavailable → on`) и дёргает действие. Реальный случай 2026-09-16 — мигание света в кабинете. **При пересборке автоматизаций это поле теряется молча** (§3).
@@ -113,7 +113,7 @@ action:
| `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` | **Вкл. ночной свет душевая** | `occupied` (`id: presence` — мгновенно) / `illuminance below: 6` (`id: lux` → `delay 2 s` → проверка присутствия) → `light.dushevaia_night_light` on. См. §4.1 |
| `1771997851260` | **Вкл. ночной свет душевая** | `occupied` (`id: presence` — мгновенно) / `illuminance below: 6` (`id: lux` → `delay 5 s` → проверка присутствия) → `light.dushevaia_night_light` on. См. §4.1, §4.3 |
| `1771997918348` | **Выкл. ночной свет душевая** | `not_occupied` (`id: left` → `wait_for_trigger` 10 с → гасить, если присутствие не вернулось) / `illuminance above: 6` (`id: bright` → сразу) → off. `mode: restart`. См. §4.2 |
| `1773451257968` | Протечка котельная | `moist` → `notify.notify` |
| `8800000000000`…`8800000000011` | **Батарея: 12 шт.** | см. §6 |
@@ -322,7 +322,34 @@ mode: restart
> ⚠️ **Не тронуто по указанию Alex:** пороги освещённости остались `below: 6` / `above: 6` (нулевая мёртвая зона → возможен дребезг 2↔12 lx). Гистерезис `< 4` / `> 10` предлагался, но правка отклонена — не менять без явной команды.
### 4.1. ✅ Задержка 2 с на ветке освещённости (2026-09-16, шаг 1)
### 4.3. 🔧 Тюнинг задержки ВКЛ: 2 → 3 → 5 с (2026-09-16)
**Симптом:** вышел из душевой, выключил свет — подсветка зажигалась через ~3 с, хотя не должна.
**Замер беговой дорожки (реальные логи, цикл `13:58`):**
| Время | Событие |
|---|---|
| `13:58:02.16` | lux → `12` (включил свет) → сработал сценарий ВЫКЛ (`bright`) |
| `13:58:03.76` | presence → `on` (в душевой) |
| `13:58:10.54` | lux → `1` (**выключил свет**) → **триггер ВКЛ по `lux`** |
| `13:58:13.67` | LIGHT → `on` (задержка 3 с + Zigbee) |
| `13:58:13.73` | presence → `off` (+0.06 с после включения света) |
**Первопричина:** при `fading_time = 2 с` радар отпускает присутствие **через ~3.2 с после выключения света**. Триггер `lux` срабатывает в момент выключения; задержка 3 с заканчивалась в `13:58:13.54`, а presence сбрасывался в `13:58:13.73` — **на 0.19 с позже проверки**. Проверка `is_occupied` проходила → свет включался. Задержка обязана быть **больше окна отпускания радара**.
**Фикс:** `delay` в ветке `lux`: `2 → 3 → 5 с`. При 5 с проверка ловится на `off` с запасом 1.8 с.
> 🔴 **Правило: задержка проверки присутствия в ветке `lux` должна быть больше `fading_time` + запас.** Измеренное окно «выключил свет → presence off» = **3.2 с** при `fading_time = 2 с`. Формула для подбора: `delay > окно отпускания`.
> ⚠️ **Надёжная альтернатива фиксированной задержке** (если 5 с снова не хватит): `wait_for_trigger` на `presence → off` + `continue_on_timeout: true` + `{{ wait.completed }}` — тогда проверка идёт **после** отпускания радара, независимо от `fading_time`. Предложено Alex, ждёт решения.
**Верификация:** конфиг прочитан обратно (`delay.seconds: 5`), reload выполнен, автоматизация `on`, `unavailable` = 0, `fading_time` = 2.0.
**Бэкапы:** `.bak-shower-delay3-20260916-205557`, `.bak-shower-delay5-20260916-205953`.
**Скрипты:** `~/tmp-t610/fix_shower_delay3.sh`, `fix_shower_delay5.sh`, диагностика — `check_shower_timing.sh`.
### 4.1. ✅ Задержка на ветке освещённости (2026-09-16) — история: 2 с → 3 с → 5 с
> **Итоговое состояние — `delay: 5 s`** (см. §4.3 с замером). Ниже — исходная реализация и её развитие.
**Задача (Alex):** «в триггере ночного света по изменению освещённости добавить задержку в пару секунд на проверку присутствия (освещённость упала → sleep 2 → присутствие == true → включить)». **Только на триггер по свету** — по присутствию включать мгновенно.
@@ -385,7 +412,7 @@ mode: single
---
## 4.3. 🔴 ОТКРЫТО: ложные включения при выходе (feedback loop, 2026-09-16)
## 4.4. 📋 Разбор: ложные включения при выходе (feedback loop, 2026-09-16)
**Симптом (Alex):** «выхожу, выключаю свет, через 2 секунды включается подсветка хоть и не должна».
@@ -403,10 +430,12 @@ mode: single
| `06:16:41.04` | 3 | ↓ → триггер `lux` → `06:16:43` **on** |
| `06:17:04.17` | — | presence → `off` (радар отпустил) |
**Две независимые причины:**
**Две независимые причины — статус на конец 2026-09-16:**
1. **Окно `fading_time`.** Вышел → радар держит `presence = on` ещё `fading_time` секунд → проверка присутствия в ветке `lux` **проходит** → свет включается, хотя человека уже нет. Задержка 2 с это не лечит — она на порядок меньше окна (было 10 с; стало 2 с — окно сократилось, но не исчезло).
1. **Окно `fading_time`.** Вышел → радар держит `presence = on` ещё `fading_time` секунд → проверка присутствия в ветке `lux` **проходит** → свет включается, хотя человека уже нет.
→ ✅ **ЗАКРЫТО (§4.3):** задержка в ветке `lux` поднята `2 → 3 → 5 с` — замеренное окно отпускания радара при `fading_time = 2 с` составляет **3.2 с** («выключил свет → presence off»), 5 с перекрывает его с запасом 1.8 с. **Ждёт подтверждения Alex** — если снова зажжётся, ставить `wait_for_trigger` на `presence → off` вместо фиксированной задержки.
2. **Feedback loop через собственную лампу.** Свет зажёгся → `lux` подскочила `2 → 12` → стала `> 6` → на следующем падении автоматизация ВКЛ снова срабатывает. Порог ВКЛ и ВЫКЛ **совпадают (6)** → мёртвая зона нулевая → шум датчика (`24` ↔ `1112`) гоняет сценарий по кругу. `mode: single` не спасает: запуск завершается быстрее, чем приходит следующий.
→ 🔴 **НЕ ЗАКРЫТО — правка отклонена Alex** («тебя просили чинить то что не сломано?!»). Оставлено как открытый вопрос, не как задача.
**Предложенные фиксы — НА РАССМОТРЕНИИ, не применены:**