[2026-09-15] eagle: 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:
Alexey Martemyanov
2026-09-15 23:52:12 +06:00
parent 508652fae0
commit 174d7104ed
5 changed files with 526 additions and 17 deletions
+65
View File
@@ -14,6 +14,7 @@ tags:
related:
- '[[family/tech/zigbee-t610-z2m-i-zha]]'
- '[[family/how-to/home-automation]]'
- '[[family/tech/heating-cable-water-inlet]]'
---
# Реестры Home Assistant — операции
@@ -189,6 +190,68 @@ ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_re
| 8 | После сноса призраков дашборд ругается | Проверить ссылки дашбордов (§5) |
| 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 |
| 13 | WS `render_template` возвращает `null` даже для `{{ 2 + 2 }}` | Шаблоны рендерить через REST `POST /api/template` |
| 14 | `write_file` режет строку `Authorization: Bearer *** | Собирать заголовок из переменных: `P1=Authorization; P2=Bearer; AUTH=*** ${P2} ${TOK}"` |
---
## 8. 🔴 Прогноз погоды и шаблоны (HA 2026.9.2)
### 8.1. Прогноз НЕДОСТУПЕН ИЗ ШАБЛОНА — главное
Проверено четырьмя способами 2026-09-16:
| Способ | Результат |
|---|---|
| атрибут `forecast` у сущности `weather.*` | **`None`** — прогноза в атрибутах нет |
| `weather.get_forecasts(...)` **в Jinja-шаблоне** | **`UndefinedError: 'weather' is undefined`** |
| сервис `weather.get_forecasts` (мн. число), REST/WS | ✅ работает — 48 ч hourly + 6 дн daily |
| WS `weather/subscribe_forecast` | ✅ работает |
> 🔴 **Вызов сервисов из шаблонов в этой версии убран.** Значит **величину из сервиса нельзя подставить в триггер/условие «на лету»**. Обход — **материализовать в сущность**: automation по расписанию вызывает сервис и пишет результат в `input_number`, а триггеры вешаются на template-сенсор, который читает этот `input_number`.
### 8.2. WS `weather/subscribe_forecast` — стрим прогноза
```python
{"type": "weather/subscribe_forecast",
"entity_id": "weather.forecast_laki_dom",
"forecast_type": "daily"} # ⚠️ именно forecast_type, НЕ type; или "hourly"
```
| Способ | Результат |
|---|---|
| `POST /api/services/weather/get_forecast` (ед. ч., REST) | **400 Bad Request** |
| WS `call_service` → `weather.get_forecast` (ед. ч.) | `not_found` |
| WS `weather/forecast` | `unknown_command` |
| сервис **`weather.get_forecasts`** (мн. ч.) | ✅ работает |
| WS **`weather/subscribe_forecast`** | ✅ работает |
> 🔴 **ПИТФОЛЛ: ответ подписки приходит ДВУМЯ сообщениями** — сначала `result` (с `result: null`), затем отдельное `event` с `forecast`. Клиент, читающий только `result`, вернёт **0 точек**.
> Реализация: `~/tmp-t610/ha_ws.py forecast <entity> <hourly|daily>` (флаг `collect_events=True` → второй `recv()`).
> ⚠️ Версия WS-команды зависит от версии HA — при апгрейде перепроверять.
### 8.3. 🔴 `render_template` по WebSocket НЕ работает
> 🔴 **WS `render_template` возвращает `null` даже для `{{ 2 + 2 }}`** — проверено фактом. Это не ошибка шаблона, а неподдерживаемый метод.
> ✅ **Шаблоны рендерить ТОЛЬКО через REST** `POST /api/template`, тело `{"template": "..."}`. Через REST: `{{ 2 + 2 }}` → `4`, `{{ states('sensor.x') }}` → значение.
>
> ```bash
> jq -n --arg t '{{ 2 + 2 }}' '{template: $t}' > /tmp/tpl.json
> # затем POST /api/template (с t610 изнутри: http://172.30.32.1/api/template)
> ```
### 8.4. ⚠️ Питфолл окружения: `write_file` портит строку с `Bearer`
> ⚠️ При генерации скриптов **`write_file` режет литерал `Authorization: Bearer $TOK`** — строка приходит битой и скрипт не парсится (`unexpected EOF while looking for matching quote`). Обход — собирать заголовок из переменных:
>
> ```bash
> TOK=$(cat /tmp/.hatok)
> P1=Authorization
> P2=Bearer
> AUTH_HDR=*** ${P2} ${TOK}"
> ```
---
@@ -196,3 +259,5 @@ ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_re
- [[family/tech/zigbee-t610-z2m-i-zha]] — Zigbee на ZHA, §13 вычистка призраков
- [[family/how-to/home-automation]] — t610: топология, аддоны, доступ
- [[family/tech/heating-cable-water-inlet]] — практический кейс §8 (прогноз для греющего кабеля)
- [[family/plans/t610-heating-cable-automation]] — план автоматизации на базе §8.1