[2026-09-15] eagle: family/how-to/home-automation.md family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md family/tech/ha-registry-operations.md family/tech/zigbee-t610-z2m-i-zha.md
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
---
|
||||
title: "Zigbee на t610 — ZHA (справочник)"
|
||||
created: '2026-09-15'
|
||||
updated: '2026-09-15 (поздний вечер: +7 новых TS0201 тёплых полов, ЕДИНООБРАЗИЕ ID у 23 устройств, 12 алертов батарей, виртуальные Modbus slave 105–112)'
|
||||
updated: '2026-09-16 (ночь: вычищены 185 призраков Z2M из архива реестра `deleted_entities` 360→175; план этажей починен — ссылка на снесённого `light.smart_light_stairs_l1` → `light.light_stairs_left`; H2000_PRO °F→°C сбросом `sensor.private` override)'
|
||||
type: tech
|
||||
namespace: family
|
||||
status: 🟢 РАБОТАЕТ. ZHA: 24 записи (23 устройства + координатор), `unavailable` = 0. Все устройства с читаемыми ID в едином виде, все в зонах. 26 автоматизаций: 25 `on`, 1 `off` намеренно. Bridge: 9 Zigbee-температур отдаются ZONT'у (slave 100–112).
|
||||
status: 🟢 РАБОТАЕТ. ZHA: 24 записи (23 устройства + координатор), `unavailable` = 0. Все устройства с читаемыми ID в едином виде, все в зонах. 24 автоматизации: 23 `on`, 1 `off` намеренно. Bridge: 9 Zigbee-температур отдаются ZONT'у (slave 100–112). Призраки Z2M в архиве реестра вычищены; план этажей и H2000_PRO исправлены. `unavailable` всего 8 — вентиляция AT2 + `todo.shopping_list` (намеренно).
|
||||
tags:
|
||||
- t610
|
||||
- haos
|
||||
@@ -400,9 +400,88 @@ curl -s -H "$HDR" http://supervisor/backups | jq
|
||||
|
||||
---
|
||||
|
||||
## 13. Вычистка призраков Z2M и починка UI (2026-09-16, ночь)
|
||||
|
||||
### 13.1. 🔴 Призраки живут в `deleted_entities`, а НЕ в `entities`
|
||||
|
||||
**Симптом:** во вкладке «Обслуживание» висят сущности с пометкой «недоступно» — `sensor.office_temperature_sensor_battery`, `light.smart_light_stairs_l1` и др. При этом `/api/states` их не отдаёт, WS-реестр (`config/entity_registry/list`) — тоже, `repairs/list_issues` пуст.
|
||||
|
||||
**Причина:** записи лежат в **архиве удалённых** `core.entity_registry → data.deleted_entities`. HA их не загружает в runtime, но UI их показывает.
|
||||
|
||||
```bash
|
||||
# живое vs архив — РАЗНЫЕ секции одного файла
|
||||
jq '.data.entities|length' /config/.storage/core.entity_registry # 572 — живое
|
||||
jq '.data.deleted_entities|length' /config/.storage/core.entity_registry # 360 → 175 — архив
|
||||
```
|
||||
|
||||
> ⚠️ **`config/entity_registry/get` по такому entity_id → `not_found`.** Это ожидаемо и НЕ значит, что записи нет.
|
||||
> ⚠️ Правка `.storage` вступает в силу только после рестарта HA.
|
||||
|
||||
### 13.2. Контролируемый снос — скрипт `~/tmp-t610/ghost_purge.sh`
|
||||
|
||||
Сам исключает: (1) `entity_id`, который сейчас живой; (2) вентиляцию (`fan|at2|damper|vent|shopping_list`). Dry-run по умолчанию.
|
||||
|
||||
```bash
|
||||
scp ~/tmp-t610/ghost_purge.sh root@192.168.2.176:/tmp/
|
||||
ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_registry' # dry-run
|
||||
ssh root@192.168.2.176 'bash /tmp/ghost_purge.sh /config/.storage/core.entity_registry --apply' # снос
|
||||
```
|
||||
|
||||
**Результат 2026-09-16:** снято **185** записей (179 в пачке + 6 точечных ранее). Архив 360 → 175. Живых 572 — не тронуто.
|
||||
|
||||
**Что снесено:** старые Z2M-сущности (`_linkquality`, префиксы `0x…`), остатки удалённых аддонов (`go2rtc`, `go2rtc_hardware`, `file_editor`, `samba_share`), HACS/Tuya-флаги, старые `switch_as_x`-обёртки, 4 автоматизации-дубля.
|
||||
|
||||
**Что НЕ тронуто:** 175 записей, чей `entity_id` живой (ZHA-устройства, телефон `sm_s931b`, вентиляция, снифферы Modbus) — плюс отдельно `light.night_light_shower_2`, `light.smart_light_office_left/right` (тот же тип `switch_as_x`, но живые).
|
||||
|
||||
> 📌 Питфолл `set -e` в bash-скриптах: `comm`/`grep` возвращают 1 при пустом результате и валят скрипт. Использовать `set -uo pipefail` (без `-e`) + `|| true` на таких строках.
|
||||
|
||||
### 13.3. План этажей ссылался на снесённого призрака
|
||||
|
||||
**Дашборд:** `home_plan` (storage-mode, `url_path: home-plan`), конфиг — `/config/.storage/lovelace.home_plan`, карта — `/config/www/floorplan/floor1_ha.svg`, `floor2_ha.svg`.
|
||||
|
||||
**Симптом:** после сноса призраков на карте ошибка «недоступно».
|
||||
**Причина:** элемент `state-icon` ссылался на снесённый `light.smart_light_stairs_l1` (был `switch_as_x`-обёрткой). Живой = `light.light_stairs_left/right`.
|
||||
|
||||
```bash
|
||||
# 1) вытащить все ссылки плана
|
||||
jq -r '.data.config.views[].sections[].cards[]? | select(.type=="picture-elements") | .elements[]? | select(.entity?!=null) | .entity' \
|
||||
/config/.storage/lovelace.home_plan | sort -u
|
||||
# 2) сверить со списком живых из /api/states
|
||||
# 3) заменить мёртвые → скрипт
|
||||
ssh root@192.168.2.176 'bash /tmp/fix_plan_stairs.sh /config/.storage/lovelace.home_plan --apply'
|
||||
```
|
||||
|
||||
> 🔴 **Правило: после сноса призраков — проверять ссылки дашбордов.** План этажей жалуется «недоступно» именно из-за мёртвой ссылки, а не из-за поломки устройства. Все 29 ссылок плана после фикса валидны.
|
||||
|
||||
### 13.4. 🔴 H2000_PRO показывал °F
|
||||
|
||||
**Симптом:** три датчика `sensor.h2000_pro_temperatura_*` (улица/подача/тёплый пол) отдавали °F. Значения тоже были в °F (55.22 °F = 12.9 °C).
|
||||
|
||||
**Причина:** ручной override в опциях сущности — `sensor.private.suggested_unit_of_measurement: "°F"` (все три).
|
||||
|
||||
**Фикс (WS):**
|
||||
```python
|
||||
{"type":"config/entity_registry/update",
|
||||
"entity_id":"sensor.h2000_pro_temperatura_ulitsa",
|
||||
"options_domain":"sensor.private", # ⚠️ не "sensor"!
|
||||
"options":{"suggested_unit_of_measurement": None}}
|
||||
```
|
||||
|
||||
> 🔴 **ПИТФОЛЛ: `options_domain: "sensor"` даёт `success: true`, но единицу НЕ меняет.** Проверено фактом: первый заход не подействовал, после смены на `"sensor.private"` — сработало.
|
||||
> ⚠️ `H2000_PRO` — контроллер отопления, **не Zigbee**. Приходит через MQTT-discovery (ZONT). **Не трогать интеграцию** — только опции сущности.
|
||||
|
||||
**Результат:** 12.9 / 28.2 / 30.2 °C.
|
||||
|
||||
**Скрипты сессии:** `~/tmp-t610/ghost_purge.sh` (снос призраков), `ghost_inventory.sh` (инвентаризация), `fix_plan_stairs.sh` (ссылки плана), `fix_h2000_all.py` (единицы °F→°C), `clean_ghosts.sh` (ранняя версия).
|
||||
|
||||
**Бэкапы:** `core.entity_registry.bak-ghostpurge-20260916-002503`, `.bak-purge-20260916-000530`, `.bak-ghosts-20260916-000329`, `lovelace.home_plan.bak-fixplan-20260916-003231`.
|
||||
|
||||
---
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[family/how-to/home-automation]] — топология, аддоны t610, первопричина RCU stall, Modbus
|
||||
- [[family/tech/ha-registry-operations]] — реестры HA: переименование, опции, снос призраков
|
||||
- [[family/how-to/ha-automations]] — автоматизации
|
||||
- [[family/plans/t610-backup-to-truenas]] — автобэкап `/config/zigbee2mqtt/`
|
||||
- [[family/tech/local-ustreamer-addon]] — камера на том же хосте
|
||||
|
||||
Reference in New Issue
Block a user