[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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user