--- title: "⚙️ HA — автоматизации (automations.yaml)" aliases: [HA automations, Автоматизации HA, automations.yaml, Ночной свет душевая] tags: [family, how-to, smarthome, home-assistant, automation] updated: 2026-09-15 related: - "[[family/plans/t610-home-automation]]" - "[[family/how-to/home-automation]]" - "[[family/how-to/zigbee2mqtt-t610]]" - "[[family/documents/home-automation-wishlist]]" --- > **📌 Текущий статус (2026-09-15):** дефект «ночной свет душевой» — **порог исправлен** `8 → 6` (по решению Alex), применено через REST и подтверждено. **Открытый хвост:** у ВЫКЛ-автоматизации по-прежнему `conditions: []` — нет связи с основным освещением; при 2 lx свет может залипать. Ждём факта: залипнет или нет. # ⚙️ HA — автоматизации (`automations.yaml`) > **Назначение документа:** разбор логики автоматизаций Home Assistant на t610, карта «устройство ↔ entity_id ↔ device_id», найденные дефекты. Карта железа/Modbus — [[family/how-to/home-automation]]. Хост/аддоны/доступ — [[family/plans/t610-home-automation]]. ## 1. Где живёт - **Файл:** `/config/automations.yaml` в HA Core на t610. - **Локальная копия-эталон (проверено 2026-09-15):** `~/tmp-t610/automations/automations.yaml` (208 строк, 16 автоматизаций) и `~/tmp-t610/etap3-fix/automations.yaml` (версия после правки зон, 2026-09-14). - **Итого автоматизаций:** **16** (15 `on` / 1 `off`). - ⚠️ **Живой конфиг читать через REST API**, а не по памяти: `GET /api/config/automation/config/`. Готовый скрипт-образец — `~/tmp-t610/check_aut_dushev.sh`. ## 2. Карта device_id ↔ entity_id (из `~/tmp-t610/etap3-fix/devid_mapping.json`) | device_id | Устройство / назначение | |---|---| | `4095e7c3b47b9dc9640cfb8c3aeff022` | **`shower_2_presence_sensor`** — радар присутствия душевой 2 (Tuya `ZY-M100-S_2` / TS0601) | | `4d6e55505ff7dbad13d2674cdcb18d5a` | **`night_light_shower_2`** — ночная подсветка душевой 2 (Tuya `TS0001`, Zigbee-реле) | | `1ea8bbc2612dde303e4279bc5fbad57a` | `light_sensor_stairs` — датчик освещённости лестницы (TS0222) | | `028b7d9f489c87bdc9e563473a1d61e8` | подсветка лестницы (`switch`) | | `5cd5d9d2d289b5e470bbeaac0eb7905c` | кнопка/диммер спальни (TS0043-подобная) | | `098a641cb1d30f08f1ae293e00d9885b` | `light.bed_dimmer` (TS0052) | | `16d2c6f64ec399e5261c89b35c1e75c6` | розетка циркуляции ГВС | | `b9d384a51b780a7924ed9504eddec12e` | `boiler_water_leak` — датчик протечки котельной (TS0207) | | `bcf47eeae909877978bdaf6c705210f8` | датчик t° Zigbee = `office_temperature_sensor` (`0xa4c13862d39377e6`, TS0201, кабинет). Уточнено 2026-09-15 | | *(новый, device_id не зафиксирован)* | **`0xa4c138c650636cf6`** (TS0201, `_TZ3000_dowj6gyi`) — Zigbee-датчик t°/влажности, спарен 2026-09-15, назначается как `toilet_1_floor_temperature`. См. [[family/how-to/zigbee2mqtt-t610]] §5 | | `0c7a0eb6d60e852b447266da69a7785e` | *(entity-хелпер, см. mapping)* | > ⚠️ **H2000 PRO не в этой карте и не Zigbee.** `sensor.h2000_pro_*` приходят отдельной интеграцией (`config_entry 01M2EXY2D5YJZY71VAKJTTGB16`), не через z2m/Modbus. **Не трогать** (Alex 2026-09-15). **Сущности радара душевой 2** (`device_id 4095e7c3…`, платформа `mqtt`): - `sensor.shower_2_presence_sensor_illuminance` — «Освещенность», lx - `binary_sensor.shower_2_presence_sensor_presence` — «Занятость», on/off - `sensor.shower_2_presence_sensor_target_distance` — Target distance, м - `number.shower_2_presence_sensor_radar_sensitivity` — 0..9 - `number.shower_2_presence_sensor_minimum_range` / `maximum_range` — 0..9.5 м, шаг 0.15 - `number.shower_2_presence_sensor_detection_delay` — 0..10 с - `number.shower_2_presence_sensor_fading_time` — 0.5..1500 с - `sensor.shower_2_presence_sensor_linkquality` **Сущности ночной подсветки душевой 2** (`device_id 4d6e5550…`): - `switch.night_light_shower_2` — **само реле** (его и дёргает автоматизация) - `light.night_light_shower_2` — хелпер `switch_as_x` поверх того же реле (`config_entry 01KKC78ZM7QRJQY36Q4D27KGCD`, `target_domain: light`, `invert: false`). **Один и тот же физический релей — управлять надо `switch.`-сущностью, к которой привязана автоматика.** - `number.night_light_shower_2_countdown`, `select..._power_on_behavior`, `select..._switch_type`, `sensor..._linkquality` ## 3. Ночной свет душевой — две автоматизации **ВКЛ — `id: '1771997851260'`, «Вкл. ночной свет душевая»** ```yaml triggers: - platform: device type: occupied # binary_sensor.shower_2_presence_sensor_presence device_id: 4095e7c3b47b9dc9640cfb8c3aeff022 entity_id: b4a50e16942064f9c00d0d86501a667e - platform: device type: illuminance # sensor.shower_2_presence_sensor_illuminance device_id: 4095e7c3b47b9dc9640cfb8c3aeff022 entity_id: df9fe40b9d96de3b1bdeeb62707a7cab below: 6 # ✅ применено 2026-09-15 (было 8) conditions: - condition: device type: is_illuminance ... below: 6 - condition: device type: is_occupied actions: # turn_on - type: turn_on domain: switch entity_id: fa72bc65e5cf9e9249a5b0d377e5a3f4 # = switch.night_light_shower_2 mode: single ``` **ВЫКЛ — `id: '1771997918348'`, «Выкл. ночной свет душевая»** ```yaml triggers: - type: not_occupied # присутствие пропало - type: illuminance ... above: 6 # ✅ применено 2026-09-15 (было 8) conditions: [] # ⚠️ ПУСТО — нет ни одного условия actions: # turn_off switch.night_light_shower_2 mode: single ``` ### 🔴 Дефект (диагностирован 2026-09-15) **Симптом:** ночной свет горит при включённом основном освещении; датчик присутствия при этом ничего не нарушает. **Первопричина — асимметрия логики, а НЕ датчик:** 1. **Нет связи «основное освещение включено → ночной свет не нужен».** В ВЫКЛ-автоматизации `conditions: []` — она ничего не проверяет про основной свет. Гасит только по `not_occupied` или `above: 8`. 2. **Порог `8 lx` стоял ровно в центре дребезга датчика.** Факт-замер 2026-09-15: покой = **2 lx**, а при движении/свете значение металось **7 ↔ 12** (см. §3 «Обоснование цифрой»). Порог `8` попадал в мёртвую середину → ВКЛ и ВЫКЛ срабатывали по кругу. Триггер `above: 8` **срабатывал**, но нестабильно. 3. **`mode: single` + `occupied` держится** → человек в душевой, темно по показаниям → ночной свет горит поверх основного. **❌ Отвергнутые версии (не повторять):** - «датчик присутствия не видит порог / виноват датчик» — **неверно**: `binary_sensor..._presence` работает штатно (observed `on`/`off` в 04:49:15). - «порог просто надо чуть поднять» — **частично верно, и это и сделано**: порог `8` действительно лежал в центре дребезга (7↔12), поэтому его и сдвинули на `6`. Но **корень** — отсутствие условия по основному свету: порогом это не лечится (потолок датчика ~15 lx, он не отличает ночной свет от основного). **✅ Факт-замер (2026-09-15, 04:48–04:49 UTC):** | Сущность | Значение | |---|---| | `sensor.shower_2_presence_sensor_illuminance` | 2 lx | | `binary_sensor.shower_2_presence_sensor_presence` | off | | `switch.night_light_shower_2` | off | | `number..._fading_time` | 10 с | | `number..._maximum_range` | 2.85 м | ### ✅ Применённая правка (2026-09-15) — порог 8 → 6 **Решение Alex (дословно): «ставь 6».** Применено через REST API и **подтверждено чтением конфига обратно**: | Автоматизация | Триггер | Условие | |---|---|---| | ВКЛ `1771997851260` | `illuminance below: 6` | `below: 6` + `is_occupied` | | ВЫКЛ `1771997918348` | `illuminance above: 6` | — (по-прежнему пусто) | **📊 Обоснование цифрой (ключевой замер).** История `sensor.shower_2_presence_sensor_illuminance`: - **За 10 минут до правки (2026-09-15, 04:27–04:48 UTC):** `7 → 12 → 7 → 12 → 7 → 12 → 7` — метание **7 ↔ 12**. - **2026-09-14 днём:** `15↔8`, `13↔8`, `5↔0` — тот же дребезг вокруг 8. - **Рабочий диапазон датчика в этой точке — всего 0…15 lx.** Порог `8` стоял ровно в центре метания → ВКЛ/ВЫКЛ хлопали туда-сюда. **⚠️ Остаточный риск (предупреждён Alex, принят осознанно):** при **2 lx** (покой) ВЫКЛ ждёт `above: 6` и может не наступить → ночной свет залипнет. Гистерезис **сознательно не сделан** по прямому указанию Alex. **Если залипнет — варианты (по возрастанию):** ① гистерезис `вкл below 4 / выкл above 10`; ② гасить ночной свет по факту включения основной лампы (**блокер: сущность основного освещения верхней душевой неизвестна** — среди `light.*`/`switch.*` душевой есть только `night_light_shower_2`); ③ калибровка `illuminance_calibration` радара. **Артефакты:** - Скрипт-образец: `~/tmp-t610/fix_shower_light_threshold.sh` (читает конфиг → правит только `.below`/`.above` == 8 → POST → читает обратно). - Бэкап файла: `~/tmp-t610/automations/automations.yaml.bak-20260915-105455`. **🔴 ПИТФОЛЛ (стоил одной пустой заливки):** REST `GET/POST /api/config/automation/config/` отдаёт и принимает поля **во МНОЖЕСТВЕННОМ числе — `triggers` / `conditions`** (в файле `automations.yaml` — `trigger`/`condition`). Правка по единственному числу через API **молча уходит в пустые пути**: `POST` возвращает `200 {"result":"ok"}`, но значения НЕ меняются. → **ВСЕГДА читать конфиг обратно и сверять фактические значения.** ### Прочие наблюдения (не правки) - `fading_time` = 10 с, `maximum_range` = **2.85 м** — проверить, покрывает ли зона всю душевую. - Калибровка `illuminance_calibration` радара: 2 lx при выключенном свете в закрытой душевой — правдоподобно, но потолок 15 lx подозрительно низок. - **Луковичный вывод:** потолок датчика ~15 lx означает, что он **не отличает ночной свет от основного** — оба выше его шкалы. Поэтому порогом задача «гасить ночной при включении основного» **не решается в принципе**, нужен триггер по основной лампе (см. блокер выше). ## 4. Прочие содержательные автоматизации | id | alias | Логика | |---|---|---| | `1768585827761` | Выключить циркуляцию ГВС | `time 23:00` → turn_off | | `1768585922970` | Включить циркуляцию ГВС | `time 09:30` → turn_on | | `1770404069135` | Ventilation automation on | `time 05:00` → `fan.turn_on fan.automation` | | `5735cb9f855e462dbdbdf680d0d6a66f` | office_pass_switch_table | `switch.office_table_light_switch_l1` change → toggle `light.smart_light_office_left` | | `45b96f6f38f6488ba70266fa5da665f5` | office_pass_switch_main | `switch.office_table_light_switch_l2` change → 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 % | | `1771997851260` | **Вкл. ночной свет душевая** | см. §3 🔴 | | `1771997918348` | **Выкл. ночной свет душевая** | см. §3 🔴 | | `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) — это единственная пара с правильной защитой от дребезга. Паттерн годится как образец для правки душевой. ## 5. Питфоллы диагностики - **Секрет-маскировщик Hermes** подменяет `Bearer $(cat ...)` на `***` → собирать заголовок через `printf` в файл, затем `curl -H @/tmp/hdr.txt`. Рабочий `/tmp/.hatok` уже есть на Mac. - `ha apps logs ` обрезает вывод и отдаёт старый буфер → живой лог только через API. - Запросы к `http://192.168.2.176` (raw IP, plain HTTP, private network) **требуют апрува** в Hermes — предупреждать Alex заранее, не ретраить вслепую. - **🔴 Форма полей через REST — МНОЖЕСТВЕННОЕ число:** `GET/POST /api/config/automation/config/` использует `triggers` / `conditions` (в файле — `trigger` / `condition`). Правка по единственному числу **молча уходит в пустые пути**: `POST` отдаёт `200 {"result":"ok"}`, значения НЕ меняются. **Всегда читать обратно и сверять.** - **История значения (для доказательства дребезга) — эндпоинт истории:** ``` GET /api/history/period/?filter_entity_id=&minimal_response&no_attributes ``` Возвращает список списков; брать `.[0]`, печатать `last_changed` + `state`. Пример (последние 25 мин): ``` curl -s -H @/tmp/hdr.txt "http://192.168.2.176/api/history/period/$(date -u -v-25M '+%Y-%m-%dT%H:%M:%S')+00:00?filter_entity_id=sensor.shower_2_presence_sensor_illuminance&minimal_response&no_attributes" ``` Именно этим способом доказано метание 7↔12 вокруг порога 8. - **Две сущности = одно реле:** `switch.night_light_shower_2` и `light.night_light_shower_2` — один и тот же физический реле (`switch_as_x`). Управлять надо той, к которой привязана автоматизация (`switch.`), иначе состояние «расходится» в UI. ## Связанные заметки - [[family/plans/t610-home-automation]] — единственный рабочий документ по техчасти (хост, доступ, аддоны, Modbus, Zigbee) - [[family/how-to/home-automation]] — карта железа: AT2 (параметры/PWM), Slave ID, регистры заслонок/реле, ZONT relays - [[family/documents/home-automation-wishlist]] — роадмап автоматизаций, приоритеты - [[family/how-to/nodered-ventilation]] — алгоритм вентиляции по CO₂ (Node-RED)