[2026-09-16] eagle: family/documents/home-automation-wishlist.md family/how-to/ha-automations.md family/how-to/home-automation.md family/plans/heating-cable-automation.md family/plans/t610-heating-cable-automation.md family/tech/ha-registry-operations.md family/tech/heating-cable-water-inlet.md
This commit is contained in:
@@ -2,9 +2,11 @@
|
||||
|
||||
> **Справочник логики автоматизаций** (`automations.yaml` на t610). Топология/команды/Modbus — [[family/how-to/home-automation]].
|
||||
|
||||
> 🟢 **АКТУАЛЬНО 2026-09-15 (поздний вечер): 24 АВТОМАТИЗАЦИИ — 23 `on`, 1 `off` (`Ventilation automation on`, намеренно), `unavailable` = 0.** Zigbee работает на ZHA.
|
||||
> 🟢 **АКТУАЛЬНО 2026-09-16: 25 АВТОМАТИЗАЦИЙ — 24 `on`, 1 `off` (`Ventilation automation on`, намеренно), `unavailable` = 0.** Zigbee работает на ZHA.
|
||||
>
|
||||
> 📌 **Сверка счёта:** в §1 ниже упоминается «26» — это счёт **включая 2 удалённые батарейные**, которые ещё числились сиротами в реестре. После чистки реестра фактически **24**. Брать 24.
|
||||
> **➕ 2026-09-16: добавлена `Греющий кабель: управление`** (`automation.greiushchii_kabel_upravlenie`, id `heating_cable_ctl_0001`) — управление вводом воды по `min(ZONT-улица, прогноз met.no 24ч)`, пороги −8/−3 °C (выдержка 12 ч) + аварийный −20 °C + fail-safe. Расчёт обоснования порогов — §7.1.
|
||||
>
|
||||
> 📌 **Сверка счёта:** в §1 ниже упоминается «26» — это счёт **включая 2 удалённые батарейные**, которые ещё числились сиротами в реестре. После чистки реестра было **24**, после 2026-09-16 — **25**. Брать 25.
|
||||
>
|
||||
> **➕ Добавлено в этот вечер: 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).
|
||||
@@ -34,7 +36,8 @@
|
||||
## 1. Где живёт
|
||||
|
||||
- **Файл:** `/config/automations.yaml` в HA Core на t610.
|
||||
- **Всего:** **24 автоматизации — 23 `on`, 1 `off`** (`Ventilation automation on`, намеренно, `last_triggered` 12 марта), **`unavailable` = 0**. Файл = 228 строк.
|
||||
- **Всего:** **25 автоматизаций — 24 `on`, 1 `off`** (`Ventilation automation on`, намеренно, `last_triggered` 12 марта), **`unavailable` = 0**. Файл = 780 строк (650 + 130 новой автоматизации кабеля).
|
||||
- **Бэкапы перед правками 2026-09-16 (кабель):** `/config/automations.yaml.bak-cable-20260915-234837`, `.bak-cable2-*`, `.bak-cable3-*`; локально — `~/tmp-t610/bak-cable-20260915-234837/automations.yaml`.
|
||||
- **Бэкапы перед правками 2026-09-15 (поздний вечер):** `/config/automations.yaml.bak-preids-20260915-223427`, `/config/automations.yaml.bak-gard-20260915-225404` (перед переносом датчика в Гардеробную); рабочая копия — `~/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`.
|
||||
@@ -71,6 +74,7 @@ REST `GET/POST /api/config/automation/config/<id>` использует поля
|
||||
| `1771997918348` | **Выкл. ночной свет душевая** | нет присутствия / светло → off |
|
||||
| `1773451257968` | Протечка котельная | `moist` → `notify.notify` |
|
||||
| `8800000000000`…`8800000000011` | **Батарея: 12 шт.** | см. §6 |
|
||||
| `heating_cable_ctl_0001` | **Греющий кабель: управление** | `time_pattern /15` + `numeric_state ZONT below −8` + отвал датчика → `choose` 5 веток на `switch.heating_cable_plug`. См. §7 |
|
||||
|
||||
> 🔄 **Переименовано 2026-09-15:** ссылки на `light.night_light_shower_2` → `light.dushevaia_night_light` (id `1771997851260`, `1771997918348`).
|
||||
> ⛔ **Удалены из карты:** `1773451323415` «Датчик протечки котельная батарея» и `1773459663218` «Zigbee T sensor батарея» — заменены 12 единообразными (§6). Тела удалены, осиротевшие записи реестра вычищены.
|
||||
@@ -237,6 +241,59 @@ curl -s -X POST -H @/tmp/h1 -H "Content-Type: application/json" \
|
||||
|
||||
---
|
||||
|
||||
## 7. Греющий кабель: управление (2026-09-16)
|
||||
|
||||
**Автоматизация:** `automation.greiushchii_kabel_upravlenie` · id `heating_cable_ctl_0001` · `mode: single` · **одна** на все случаи (0 helper'ов).
|
||||
|
||||
**Управляет:** `switch.heating_cable_plug` (NEO NAS-WR01B, `a4c138eb6fbe9d19`, котельная) — розетка греющего кабеля ввода воды. Кабель саморегулирующийся.
|
||||
|
||||
**Порог −8 °C** — по расчёту промерзания бетонной подушки 30 см (Новосибирск, суглинок, труба на 4 м). Выдержка 12 ч = тепловая инерция бетона. Прогноз привлекается потому, что ZONT — одна точка и может отвалиться.
|
||||
|
||||
### Ветки логики
|
||||
|
||||
| Ветка `choose` | Условие | Действие |
|
||||
|---|---|---|
|
||||
| 1 | `eff ≤ −20` | `switch.turn_on` + persistent + push (без выдержки) |
|
||||
| 2 | `not zont_ok` | `switch.turn_on` + push (fail-safe) |
|
||||
| 3 | `eff ≤ −8` + розетка `off` **12 ч** | `switch.turn_on` + persistent + push |
|
||||
| 4 | `eff ≥ −3` + розетка `on` | `switch.turn_off` + persistent |
|
||||
| 5 | розетка `on` + `power < 5 W` 10 мин | push «нет потребления» |
|
||||
|
||||
Триггеры: `time_pattern /15` + `numeric_state ZONT below −8` + `state ZONT → unknown/unavailable 30 мин`.
|
||||
где `eff` = ZONT-улица, если датчик жив, иначе прогноз-мин на 24 ч.
|
||||
|
||||
**Конструкция — прогноз как ДЕЙСТВИЕ, не как шаблон:**
|
||||
```yaml
|
||||
actions:
|
||||
- action: weather.get_forecasts # сервис во МНОЖЕСТВЕННОМ числе
|
||||
target: {entity_id: weather.forecast_laki_dom}
|
||||
data: {type: hourly}
|
||||
response_variable: wx
|
||||
- variables: # ПОСЛЕ вызова — forecast уже есть
|
||||
zont_ok: "{{ states('sensor.h2000_pro_temperatura_ulitsa') not in ['unknown','unavailable','none',''] }}"
|
||||
fc_min: "{{ wx['weather.forecast_laki_dom']['forecast'][:24] | map(attribute='temperature') | min | float(-100) }}"
|
||||
eff: "{{ zont if zont_ok else fc_min }}"
|
||||
- choose: [...] # 5 веток
|
||||
```
|
||||
|
||||
> 🔴 **Питфоллы этой автоматизации (все три поймал проверкой, без неё ушли бы в прод):**
|
||||
> 1. **`weather.get_forecasts` — ТОЛЬКО как `action:` + `response_variable`.** В Jinja-шаблоне → `'weather' is undefined`; атрибута `forecast` у сущности нет. Имя — **множественное число**; `weather.get_forecast` (ед. ч.) не существует.
|
||||
> 2. **`variables:` вычисляются ДО действий.** `fc_min` из `response_variable` можно объявить **только внутри `actions:`, после** вызова сервиса.
|
||||
> 3. **Fail-safe нельзя строить на `min([99, fc_min])`** — `min([99, 11.1])` = 11.1, условие не сработает никогда. Нужен отдельный флаг `zont_ok` по строковому состоянию.
|
||||
>
|
||||
> ⚠️ **Выдержка 12 ч** реализована через `for: '12:00:00'` на `switch.heating_cable_plug` (состояние), НЕ на шаблон — `for:` нельзя вешать на вычисляемое значение.
|
||||
> ⚠️ **WS `render_template` возвращает `null`** даже для `{{ 2 + 2 }}` — шаблоны проверять только через REST `POST /api/template`.
|
||||
> ⚠️ **`automation.trigger` через WS не обновляет `last_triggered`** — прогон подтверждать иначе (значения в `variables`, лог HA).
|
||||
|
||||
📄 **План: [[family/plans/t610-heating-cable-automation]]**
|
||||
🧰 **Инструменты:** `~/tmp-t610/ha_ws.py forecast <entity> <daily|hourly>`, `verify_cable.py`, `rest_tpl.sh`, `verify_calc.sh`.
|
||||
|
||||
### ⚠️ Не проверено физически
|
||||
|
||||
Розетка ни разу не включалась — `off`, `0 W / 0 kWh`, `voltage 223 V`. Это **норма** для выключенной розетки, не поломка. Что кабель реально греет — не подтверждено: нужен ручной прогон `switch.heating_cable_plug` на 10 мин и проверка `sensor.heating_cable_plug_power > 0`.
|
||||
|
||||
---
|
||||
|
||||
## Связанные
|
||||
|
||||
- [[family/how-to/home-automation]] — единый справочник: топология, железо, Zigbee, Modbus, команды, сценарии, питфоллы
|
||||
|
||||
Reference in New Issue
Block a user