Files
obsidian-vault/family/how-to/ha-automations.md
T

125 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ⚙️ HA — автоматизации
> **Справочник логики автоматизаций** (`automations.yaml` на t610). Топология/команды/Modbus — [[family/how-to/home-automation]].
## 1. Где живёт
- **Файл:** `/config/automations.yaml` в HA Core на t610.
- **Всего:** 16 автоматизаций (15 `on` / 1 `off``Ventilation automation on`).
- **Локальная копия:** `~/tmp-t610/automations/automations.yaml`.
- **Читать живьём через API** (не по памяти):
```bash
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` | Светло: выкл. подсветку лестницы | 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` | **Вкл. ночной свет душевая** | присутствие + темно → `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`). Брать как эталон.
---
## 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`).
**Текущий конфиг (сырой):**
```json
{
"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` — освещённость, lx
- `binary_sensor.shower_2_presence_sensor_presence` — занятость
- `switch.night_light_shower_2` — **само реле** (его дёргает автоматизация)
- `light.night_light_shower_2` — хелпер `switch_as_x` поверх того же реле
> ⚠️ **Две сущности = одно реле.** Управлять надо `switch.` — той, к которой привязана автоматика, иначе состояние «расходится» в UI.
**Автоматизации:**
| | 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. Диагностика
```bash
# История значения (доказательство дребезга)
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]] — роадмап идей и приоритетов