19 KiB
⚙️ HA — автоматизации
Справочник логики автоматизаций (
automations.yamlна t610). Топология/команды/Modbus — family/how-to/home-automation.
🟢 АКТУАЛЬНО 2026-09-15 (поздний вечер): 26 АВТОМАТИЗАЦИЙ — 25
on, 1off(Ventilation automation on, намеренно),unavailable= 0. Zigbee работает на ZHA.➕ Добавлено в этот вечер: 12 автоматизаций контроля батарей (id
8800000000000…8800000000011, всеon). Порог 20 %, выдержка 2 ч, двойной канал:persistent_notification+ pushnotify.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.Что доделано после первичной пересборки:
- ✅ 4 «призрака»-автоматизации УДАЛЕНЫ из
core.entity_registry(тела не существовало:GET /api/config/automation/config/<id>→ 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 вводит в заблуждение.Итог на 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.🔴 ПИТФОЛЛЫ, найденные при починке:
device-триггер батареи — типbattery_level, НЕbattery. ИначеAutomation ... failed to setup triggers and has been disabled.binary_sensor«battery_low» в ZHA нет — только numericsensor.*_battery, порог черезbelow: 10.- Домен
entity_idне меняется переименованием:switch.office_table_light_switch_l1→ ZHA-имяlight.tz3000_5gey1ohx_ts0002_osveshchenie. Автоматизации переписаны наlight.*.reload—POST /api/services/automation/reloadс long-lived JWT, порт 80 (http://172.30.32.1/api/). Супервизорский токен → 401.
1. Где живёт
- Файл:
/config/automations.yamlв HA Core на t610. - Всего: 26 автоматизаций — 25
on, 1off(Ventilation automation on, намеренно,last_triggered12 марта),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 (не по памяти):
B="https://mallexxx.duckdns.org" curl -s -H @/tmp/h1 "$B/api/config/automation/config/<ID>"
🔴 ПИТФОЛЛ (стоил пустой заливки)
REST GET/POST /api/config/automation/config/<id> использует поля во множественном числе — triggers / conditions / actions (в файле automations.yaml — trigger/condition/action).
Правка по единственному числу молча уходит в пустые пути: POST → 200 {"result":"ok"}, значения НЕ меняются.
→ ВСЕГДА читать конфиг обратно и сверять фактические значения.
Бэкап перед правкой: cp ~/tmp-t610/automations/automations.yaml{,.bak-$(date +%Y%m%d-%H%M%S)}
2. Карта автоматизаций
| 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 (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 |
Темно: вкл. подсветку лестницы | 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 |
Вкл. ночной свет душевая | присутствие + темно → light.dushevaia_night_light on |
1771997918348 |
Выкл. ночной свет душевая | нет присутствия / светло → off |
1773451257968 |
Протечка котельная | moist → notify.notify |
8800000000000…8800000000011 |
Батарея: 12 шт. | см. §6 |
🔄 Переименовано 2026-09-15: ссылки на
light.night_light_shower_2→light.dushevaia_night_light(id1771997851260,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.
Образец правильной защиты от дребезга: «Темно/Светло подсветка лестницы» использует гистерезис (
below: 20/above: 60). Брать как эталон.
3. 🔴 ДЕФЕКТ: свет кабинета мигает при перезагрузке HA
Симптом: при каждом рестарте HA свет в кабинете мигает.
Первопричина: триггеры office_pass_switch_table / office_pass_switch_main используют platform: state без to/from → срабатывают на любую смену состояния сущности кнопки.
При старте HA кнопки проходят unavailable → unknown → on — каждый переход дёргает light.toggle. Подтверждено историей: switch.office_table_light_switch_l1 сменил состояние 3 раза в течение 5 минут в момент рестартов HA (05:16:36 → unavailable, 05:16:40 → on, 05:18:39 → unavailable, 05:18:46 → unknown, 05:19:20 → on).
Текущий конфиг (сырой):
{
"alias": "office_pass_switch_table",
"mode": "restart",
"trigger": [{"platform": "state", "entity_id": ["switch.office_table_light_switch_l1"]}],
"action": [{"service": "light.toggle", "target": {"entity_id": "light.smart_light_office_left"}}]
}
Направление фикса: привязать триггер к конкретному состоянию (to:) ИЛИ заменить на триггер по событию нажатия. Требует определить фактическое поведение кнопки при физическом нажатии (сейчас кнопки в on — это состояние после старта, не нажатие).
Статус: ⚠️ НЕ ИСПРАВЛЕНО. Требует замера поведения кнопки при нажатии.
4. Ночной свет душевой 2
Сущности (device_id 4095e7c3b47b9dc9640cfb8c3aeff022 = радар, 4d6e55505ff7dbad13d2674cdcb18d5a = лампа):
sensor.shower_2_presence_sensor_illuminance— освещённость, lxbinary_sensor.shower_2_presence_sensor_presence— занятостьlight.dushevaia_night_light— само реле (его дёргает автоматизация; бывш.light.night_light_shower_2)
📌 2026-09-15: хелпер
switch.night_light_shower_2(switch_as_x) снесён при переезде на ZHA. Осталась одна сущность —light.dushevaia_night_light. Автоматизации ссылаются именно на неё.
Автоматизации:
| id | Триггер | Условие | |
|---|---|---|---|
| ВКЛ | 1771997851260 |
illuminance below: 6 + occupied |
below: 6 + is_occupied |
| ВЫКЛ | 1771997918348 |
not_occupied + illuminance above: 6 |
⚠️ conditions: [] — пусто |
История правки (2026-09-15): порог 8 → 6. Порог 8 лежал ровно в центре дребезга датчика (7 ↔ 12), рабочий диапазон датчика всего 0…15 lx → ВКЛ/ВЫКЛ хлопали по кругу.
⚠️ Остаточный риск (принят Alex): при 2 lx (покой) ВЫКЛ ждёт above: 6 и может не наступить → свет залипнет. Гистерезис сознательно не сделан.
Если залипнет — варианты: ① гистерезис вкл below 4 / выкл above 10; ② гасить по факту включения основной лампы (блокер: сущность основного освещения верхней душевой неизвестна); ③ калибровка illuminance_calibration радара.
Параметры радара: fading_time = 10 с, maximum_range = 2.85 м — проверять, покрывает ли зона всю душевую.
5. 🔋 Контроль батарей — 12 автоматизаций (2026-09-15)
Единый шаблон, id 8800000000000…8800000000011:
- 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. 🔴 Питфоллы
- Выдержка
for: '02:00:00'обязательна. Батарейные TS0201 под нагрузкой дают кратковременные просадки — без выдержки прилетают ложные алерты. - Двойной канал.
persistent_notification= видно в UI;notify.mobile_app_sm_s931b= push на телефон. Alex: «Видимо persistent с пушом на тел». - Второй триггер
ok(above: 20) гасит уведомление черезnotification_id— иначе алерт висит вечно. Для этого уpersistent_notification.createобязателенnotification_id: bat_<slug>. - 🔴 Сирота-автоматизация:
unavailableпри чистом YAML. Тело удалено изautomations.yaml, запись в реестре осталась. Удаление:Реальный случай: после удаления тел# Если 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. - ⚠️
sensor.wireless_light_switch_bed_battery=unknown— кнопка спальни спит. Автоматизация создана, но триггера не будет, пока датчик не проснётся (лечится нажатием кнопки). - ⚠️ Проверять имена сущностей после переименований: в 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. Диагностика
# История значения (доказательство дребезга)
T=$(date -u -v-3H '+%Y-%m-%dT%H:%M:%S')
curl -s -H @/tmp/h1 "$B/api/history/period/$T+00:00?filter_entity_id=<entity>&minimal_response&no_attributes" \
| jq -r '.[0][] | "\(.last_changed) -> \(.state)"'
# Состояния сущностей устройства (через шаблон)
curl -s -X POST -H @/tmp/h1 -H "Content-Type: application/json" \
-d '{"template":"{% set dev = device_id(\"sensor.x\") %}{% for e in device_entities(dev) %}{{ e }} = {{ states(e) }}\n{% endfor %}"}' \
"$B/api/template"
Артефакты: ~/tmp-t610/fix_shower_light_threshold.sh (образец правки порога), ~/tmp-t610/ha_ws.py (WS-реестры).
Бэкап: ~/tmp-t610/automations/automations.yaml.bak-20260915-105455.
Связанные
- family/how-to/home-automation — единый справочник: топология, железо, Zigbee, Modbus, команды, сценарии, питфоллы
- family/documents/home-automation-wishlist — роадмап идей и приоритетов
- family/how-to/vault-sync-pipeline — правки в vault не доедут до телефона без прогона sync-петли