[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:
@@ -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` — стрим прогноза
|
||||
|
||||
|
||||
Reference in New Issue
Block a user