[2026-09-18] eagle: family/how-to/home-automation.md personal/projects/zont-config-compiler.md

This commit is contained in:
Alexey Martemyanov
2026-09-18 00:47:48 +06:00
parent 60c044520f
commit 83715aa980
2 changed files with 269 additions and 8 deletions
+61 -2
View File
@@ -2,7 +2,7 @@
title: "🏠 Домашняя автоматизация"
aliases: [Умный дом, Home automation, HA, Zigbee, Modbus, вентиляция, t610, RCU stall, USB reset]
tags: [family, how-to, smarthome]
updated: 2026-09-17b
updated: 2026-09-18
---
# 🏠 Домашняя автоматизация
@@ -53,6 +53,10 @@ updated: 2026-09-17b
>
> **Итог:** удалены три слоя мусора (127 сущностей `platform=mqtt` + 18 устройств); **23 устройства ZHA** с читаемыми ID в едином виде (`<зона>_<роль>`), все в зонах; **12 автоматизаций контроля батарей** (порог 20 %, push + persistent); **9 температурных Zigbee-датчиков** отдаются ZONT'у как виртуальные Modbus slave **100, 105112**; **26 автоматизаций: 25 `on`, 1 `off` намеренно** (`Ventilation automation on`); кнопка спальни шлёт события, диммер рулится; свет лестницы + 2 сценария подсветки работают.
>
> 🔴 **Уточнение 2026-09-18 (§6.1):** «9 датчиков отдаются ZONT'у» — верно **только для bridge**.
> Со стороны ZONT зарегистрированы **4** (slaves 100103); датчики тёплых полов `105111` bridge
> отдаёт, но **ZONT их не опрашивает** — на контроллере нет записей тип 51/52/1. В работе, см. §6.1.
>
> 🔴 **2026-09-16 (ночь): вычищены 185 призраков Z2M** из архива реестра (`deleted_entities` 360 → 175). Призраки живут **именно в архиве**, а не в `entities` — UI «Обслуживание» их показывал, `/api/states` и WS-реестр нет. Живые (572) не тронуты. Снесены также остатки аддонов `go2rtc`/`file_editor`/`samba_share` и старые `switch_as_x`-обёртки.
> 🔴 **План этажей (`home-plan`) ссылался на снесённого призрака** `light.smart_light_stairs_l1` → ошибка на карте. Исправлено на `light.light_stairs_left`. Проверять ссылки плана после сноса: `~/tmp-t610/fix_plan_stairs.sh`.
> 🔴 **H2000_PRO отдавал °F** — ручной override `sensor.private.suggested_unit_of_measurement: "°F"` у трёх сущностей. Сброшено через WS с **`options_domain: "sensor.private"`** (через `"sensor"` update проходит, но НЕ меняет). Стало 12.9 / 28.2 / 30.2 °C.
@@ -673,8 +677,17 @@ curl -s -H @/tmp/h1 "$B/api/config/automation/config/<ID>" > /tmp/aut_<ID>.json
> ⚙️ **Конфиг самого ZONT правится конвертерами `.txt ⇄ .yml`** (`/Users/admin/Automation/HA-ZONT-Modbus`): [[personal/projects/zont-config-compiler]] — конвертеры, типы объектов, форма сценариев
- **Реальные 485:** `199` (датчики 1/2/3, AT2 = 10, relay 11/12/13/14, газ-котёл вкл = 20).
- **Виртуальные (bridge):** `100112``100` **гардеробная** (исторический датчик, был `office_temperature_sensor``kabinet_temperature`), `101/102/103` Гостиная/Детская/Спальня (рег. 100), `104:1` Zigbee-реле котла, **`105112` температурные Zigbee-датчики тёплых полов** (гостиная/серая/кабинет/кухня/ванная/прихожая/душевая/туалет).
- **Виртуальные (bridge):** `100112`
- `100` **гардеробная** (исторический датчик, был `office_temperature_sensor``kabinet_temperature`)
- `101/102/103` Гостиная / Детская / Спальня (регистр 100)
- `104:1` Zigbee-реле котла
- `105112` температурные Zigbee-датчики тёплых полов (гостиная/серая/кабинет/кухня/ванная/прихожая/душевая/туалет)
- **Свободно:** `113+`; у 100/102/103 — только регистры ≠ 100. `104:2+` свободны.
- 🔴 **Наличие маппинга в bridge ≠ видимость в ZONT** (проверено 2026-09-18, §6.1). Bridge может отдавать
значение, а ZONT его **не спрашивать**: со стороны контроллера нужны **три** записи на каждый датчик
(тип 51 устройство → тип 52 регистр → тип 1 виртуальный датчик). Замер: из 9 «отдаваемых» датчиков
ZONT реально опрашивает **4** (slaves 100103), датчики тёплых полов `105111` **не зарегистрированы
в конфиге ZONT вообще** (`grep` по «тёпл|пол» — только контур `#Z10152=16` и датчик `#Z8432=27`).
- ⚠️ **Маппинг ссылается на HA-сущность по имени.** Переименовал сущность — поправь `data/config.template.tmpl` + `rebuild`, иначе slave молча отдаёт `0`. Реальный случай 2026-09-15: slave 100 = `0` → после правки `23.97`.
- ⚠️ **Проверка slave'а без ZONT:** bridge отвечает только на запрос. Смотреть `HA poll -> sensor.<entity> = <val>` (поллер жив) и `Response: ... = <val> [<hex>]` (ответил ZONT'у).
- Занятость проверять **по двум источникам:** эта карта + `/addons/modbus-bridge/data/config.template.tmpl` на t610.
@@ -691,6 +704,52 @@ Vent control (AT2) - 10 (0A)
Газ котёл вкл - 20 (14) ⚠️ ответы [DROP-TAIL]/[BUF-LEFT], НЕ парсятся
```
### 6.1. 🔴 Регистрация Zigbee-датчика у ZONT — ТРИ записи, не одна (2026-09-18)
Цепочка «HA-сущность → ZONT» состоит из **двух независимых половин**, и обе обязательны:
```text
HA sensor ──[bridge config.template.tmpl: source: ha]──▶ Modbus slave 10X / рег. 100
ZONT ──[тип 51: устройство, slave_id]─────────────────────────┤ спрашивает шину
──[тип 52: регистр, адрес 100, 16 бит]───────────────────┤ куда положить ответ
──[тип 1: виртуальный датчик, ссылка на id регистра]────┘ что показать в UI
```
**Форма записи (эталон — датчик `#Z8382` «Температура Zigbee», slave 100):**
```text
#Z8381=51,100,'Tuya Zigbee Thermal Sensor',5000,300000,[],[],0,[8383]
│ │ │ │ └─ поле 9 = [id регистра (тип 52)]
│ │ │ └─ поле 5 = timeout, мс
│ │ └─ поле 4 = poll_interval, мс
│ └─ поле 2 = slave_id на шине 485
└─ тип 51 = Modbus-устройство (секция modbus_devices)
#Z8383=52,'Темп. датч.',100,16,0,1,16,0,1,29,1,4
│ │ │ │ └─ поле 11 = 4 (для датчиков); 255 = виртуальный/служебный
│ │ │ └─ поле 4 = разрядность: 16 = int16; 128 = битовая маска; 8 = uint8
│ │ └─ поле 2 = адрес регистра (у всех температурных = 100)
│ └─ поле 1 = подпись регистра
└─ тип 52 = Modbus-регистр, вложен в устройство 51
#Z8382=1,'0','Температура Zigbee',0,0,0,60000,[],[],[],8383,[],0,0,0
│ │ │ │ └─ поле 10 = id регистра (тип 52)
│ │ │ └─ поле 6 = интервал опроса/публикации, мс
│ │ └─ поле 2 = имя датчика (то, что видно в UI ZONT)
│ └─ поле 1 = адрес-заглушка '0' для modbus-источника
└─ тип 1 = виртуальный датчик (секция virtual_sensors)
```
**🔴 Что доказывает факт «датчика нет в ZONT»:** `grep` по конфигу ZONT (cp1251) на «тёпл|пол» даёт
только контур отопления `#Z10152=16,'Тёплый пол'` и его штатный датчик `#Z8432=27`. Ни одной записи
типа 51/1 для тёплых полов нет → bridge их отдаёт, ZONT **не спрашивает**.
**Порядок работ (обе стороны!).** Bridge-сторона и ZONT-сторона правятся **разными файлами** и
деплоятся по-разному: bridge — `/addons/modbus-bridge/data/config.template.tmpl` на t610 + `rebuild`;
ZONT — конвертеры в `/Users/admin/Automation/HA-ZONT-Modbus` + заливка на контроллер.
⚙️ Механика ZONT-стороны: [[personal/projects/zont-config-compiler]] §31.
### AT2 (slave 10) — вентиляторы
```