[2026-09-15] eagle: family/how-to/home-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:
Alexey Martemyanov
2026-09-15 23:57:20 +06:00
parent 174d7104ed
commit 82e5cb2640
4 changed files with 156 additions and 76 deletions
+23 -2
View File
@@ -191,7 +191,7 @@ ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_re
| 9 | Удаление `device_id` сбрасывает `area_id` | Восстановить через `device_registry/update` |
| 10 | На t610 нет `python3` | Скрипты на `jq`/bash |
| 11 | `weather/get_forecast` (ед. ч.) и `weather/forecast` не существуют | Мн. ч.: сервис `weather.get_forecasts` либо WS `weather/subscribe_forecast` (ответ — 2 сообщения) |
| 12 | `weather.get_forecasts()` в Jinja → `'weather' is undefined` | Вызов сервисов из шаблонов убран — материализовать в `input_number` через automation |
| 12 | `weather.get_forecasts()` в Jinja → `'weather' is undefined` | Вызывать как **ДЕЙСТВИЕ** `action: weather.get_forecasts` + `response_variable`; `variables:` — внутри `actions:` ПОСЛЕ вызова. Helper'ы НЕ нужны |
| 13 | WS `render_template` возвращает `null` даже для `{{ 2 + 2 }}` | Шаблоны рендерить через REST `POST /api/template` |
| 14 | `write_file` режет строку `Authorization: Bearer *** | Собирать заголовок из переменных: `P1=Authorization; P2=Bearer; AUTH=*** ${P2} ${TOK}"` |
@@ -207,10 +207,31 @@ ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_re
|---|---|
| атрибут `forecast` у сущности `weather.*` | **`None`** — прогноза в атрибутах нет |
| `weather.get_forecasts(...)` **в Jinja-шаблоне** | **`UndefinedError: 'weather' is undefined`** |
| `weather.get_forecasts` **как ДЕЙСТВИЕ** (`action:` + `response_variable`) | ✅ **работает** — 48 точек |
| сервис `weather.get_forecasts` (мн. число), REST/WS | ✅ работает — 48 ч hourly + 6 дн daily |
| WS `weather/subscribe_forecast` | ✅ работает |
> 🔴 **Вызов сервисов из шаблонов в этой версии убран.** Значит **величину из сервиса нельзя подставить в триггер/условие «на лету»**. Обход — **материализовать в сущность**: automation по расписанию вызывает сервис и пишет результат в `input_number`, а триггеры вешаются на template-сенсор, который читает этот `input_number`.
> **Как брать прогноз в автоматизации (рабочий путь, 0 helper'ов):**
> вызов **действием** с `response_variable`, а вычисления — в `variables:`
> ВНУТРИ `actions:` ПОСЛЕ вызова (верхнеуровневые `variables:` вычисляются до
> действий и `forecast` там ещё нет).
>
> ```yaml
> actions:
> - action: weather.get_forecasts
> target: {entity_id: weather.forecast_laki_dom}
> data: {type: hourly}
> response_variable: wx
> - variables:
> fc_min: >-
> {{ wx['weather.forecast_laki_dom']['forecast'][:24]
> | map(attribute='temperature') | min | default(99) | float(99) }}
> ```
>
> 🔴 **Питфолл (стоил лишней итерации):** вызов сервисов из Jinja-шаблона
> (`{{ weather.get_forecasts(...) }}`) действительно убран → `'weather' is undefined`.
> Но это **не значит**, что прогноз недоступен: как **действие** он работает. Не
> строить обходной слой (`input_number` + обновлятор), не проверив `action:` + `response_variable`.
### 8.2. WS `weather/subscribe_forecast` — стрим прогноза