[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:
Alexey Martemyanov
2026-09-15 23:42:01 +06:00
parent ee86207496
commit 5252cc00fe
4 changed files with 311 additions and 14 deletions
+81 -2
View File
@@ -1,10 +1,10 @@
---
title: "Zigbee на t610 — ZHA (справочник)"
created: '2026-09-15'
updated: '2026-09-15 (поздний вечер: +7 новых TS0201 тёплых полов, ЕДИНООБРАЗИЕ ID у 23 устройств, 12 алертов батарей, виртуальные Modbus slave 105112)'
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 100112).
status: 🟢 РАБОТАЕТ. ZHA: 24 записи (23 устройства + координатор), `unavailable` = 0. Все устройства с читаемыми ID в едином виде, все в зонах. 24 автоматизации: 23 `on`, 1 `off` намеренно. Bridge: 9 Zigbee-температур отдаются ZONT'у (slave 100112). Призраки 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]] — камера на том же хосте