[2026-09-18] eagle: family/how-to/home-automation.md

This commit is contained in:
Alexey Martemyanov
2026-09-18 12:09:29 +06:00
parent 9c5983cca8
commit a8313e9be2
+47 -26
View File
@@ -701,7 +701,7 @@ curl -s -H @/tmp/h1 "$B/api/config/automation/config/<ID>" > /tmp/aut_<ID>.json
``` ```
Гостиная - 1 (bridge virt. 101) Детская - 2 (102) Спальня - 3 (103) Гостиная - 1 (bridge virt. 101) Детская - 2 (102) Спальня - 3 (103)
Tuya Zigbee thermal Sensor - 100 Гардеробная (в ZONT: «ТП: Гардеробная») - 100 ⚠️ ранее звался «Tuya Zigbee thermal Sensor»
Vent control (AT2) - 10 (0A) Vent control (AT2) - 10 (0A)
Газ котёл вкл - 20 (14) ⚠️ ответы [DROP-TAIL]/[BUF-LEFT], НЕ парсятся Газ котёл вкл - 20 (14) ⚠️ ответы [DROP-TAIL]/[BUF-LEFT], НЕ парсятся
``` ```
@@ -760,46 +760,67 @@ ZONT ──[тип 51: устройство, slave_id]────────
Также в свежем дампе **Alex уже создал два контура**: `#Z10525=16,'ТП: Кабинет'` и Также в свежем дампе **Alex уже создал два контура**: `#Z10525=16,'ТП: Кабинет'` и
`#Z10643=16,'ТП: Гардеробная'`. `#Z10643=16,'ТП: Гардеробная'`.
**✅ ОБНОВЛЕНО 2026-09-18 (круг 53, ФИНАЛ):** «ТП: Гардеробная» — **НЕ новый slave 113**, а
переименование **уже существующего** device `slave 100` (`#Z8381`). Ниже §41-строка 113 —
**тупиковая ветка круга 52, откачена** (см. раздел «Круг 52/53» ниже).
| slave | HA-сущность | устройство (51) | регистр (52) | датчик (1) | имя в ZONT | | slave | HA-сущность | устройство (51) | регистр (52) | датчик (1) | имя в ZONT |
|---|---|---|---|---|---| |---|---|---|---|---|---|
| **100** | `garderobnaia_temperature_temperature` | `8381` | `8383` | `8382` | **ТП: Гардеробная** ✅ (было «Tuya Zigbee Thermal Sensor») |
| 101 | `dining_temperature_2` (sniff) | `8910` | `8912` | `8911` | Температура гостиная |
| 102 | `kids_temperature` (sniff) | `8699` | `8701` | `8700` | Температура детская |
| 103 | `bedroom_temperature` (sniff) | `8931` | `8933` | `8932` | Температура спальня |
| 105 | `living_room_floor_*` | `4117` | `4101` | `4109` | ТП: гостиная | | 105 | `living_room_floor_*` | `4117` | `4101` | `4109` | ТП: гостиная |
| 106 | `severnaia_floor_*` | `4118` | `4102` | `4110` | **zigbee серая** ✅ (в свежем дампе — имя уже `zigbee серая`) | | 106 | `severnaia_floor_*` | `4118` | `4102` | `4110` | **zigbee серая** |
| 107 | `kabinet_floor_*` | `4119` | `4103` | `4111` | ТП: кабинет | | 107 | `kabinet_floor_*` | `4119` | `4103` | `4111` | ТП: кабинет |
| 108 | `kitchen_floor_*` | `4120` | `4104` | `4112` | ТП: кухня | | 108 | `kitchen_floor_*` | `4120` | `4104` | `4112` | ТП: кухня |
| 109 | `vannaia_floor_*` | `4121` | `4105` | `4113` | ТП: ванная | | 109 | `vannaia_floor_*` | `4121` | `4105` | `4113` | ТП: ванная |
| 110 | `prikhozhaia_floor_*` | `4122` | `4106` | `4114` | ТП: прихожая | | 110 | `prikhozhaia_floor_*` | `4122` | `4106` | `4114` | ТП: прихожая |
| 111 | `dushevaia_floor_*` | `4123` | `4107` | `4115` | ТП: душевая | | 111 | `dushevaia_floor_*` | `4123` | `4107` | `4115` | ТП: душевая |
| 112 | `toilet_1_floor_*` | `4124` | `4108` | `4116` | ТП: туалет 1 | | 112 | `toilet_1_floor_*` | `4124` | `4108` | `4116` | ТП: туалет 1 |
| **113** | `garderobnaia_temperature_temperature` | `4127` | `4125` | `4126` | **ТП: гардеробная** 🆕 (собрана, не залита) |
**Проверено (круг 51):** цепочка устройство→регистр→датчик по всем 8 — зелёная; круг `783 → 783` > 🔴 **РАССИНХРОНА НЕТ.** Гардеробная в ZONT **всегда была на `slave_id: 100`** — ровно как
ЧИСТЫЙ; txt→yml→txt байт-в-байт; регресс 10 снапшотов зелёный. 785 → **809 строк**. > в bridge. Круг 52 ошибочно завёл дубль на 113, потому что искал датчик **по имени**
> («Гардеробная»), а в ZONT он назывался «Tuya Zigbee Thermal Sensor».
> 📌 **Правило: наличие датчика проверять по `slave_id` (`grep '=51,<slave>,'`), а не по имени.**
**Круг 52 («ТП: гардеробная»):** 2 вставки в YML (`virtual_sensors` + `modbus_devices`, slave 113), **🔴 `dining_temperature_2` — НЕ незаведённый датчик.** Это тот же прибор, что `dining_co2` /
сборка → **651 строка** (648 + 3). Дифф против свежего дампа: **потерь 0, изменённых тел 0**, `dining_tvoc` / `dining_pm2_5` / `dining_formaldehyde` / `dining_humidity` (CO₂-сенсор столовой).
добавлено ровно `4125`/`4126`/`4127`. Артефакт — `zont_config/config_local_2026-09-18_11-41-36_NEW.txt` В ZONT он **есть** — под именем **«Температура гостиная»**, `slave 101`. Bridge: маппинг
(перенесён из `/tmp`), коммит `e188b52` (поставлен ДО проверки Alex — нарушение порядка). `Dining temp` = `slave_id: 101`, `sniff_field: dining_temperature`**номер совпадает**.
Причина разнобоя: физически датчик стоит в гостиной, а устройство в HA названо `Dining Sensor`.
🔴 **РАССИНХРОН `slave_id` — задача НЕ решена одной ZONT-правкой!** В `config.template.tmpl` на t610 > ✅ **ПОКРЫТИЕ ПОЛНОЕ:** все `slave_id`, которые отдаёт bridge (100104, 105112), в ZONT есть.
гардеробная уже сидит на **`slave_id: 100`** (маппинг «Room temp», историческое наследие от переноса > **Заводить нечего.** Нативные `h2000_pro_temperatura_*` — это сам ZONT, их «добавлять» некуда;
2026-09-15; файл mtime `2026-09-15 23:54`, в круге 52 **не менялся**). Я поставил в ZONT **113** > `t610_cpu_temp` — CPU хоста; `light_sensor_stairs_temperature` — сломан (0.0).
ZONT будет опрашивать 113, bridge на 113 **не ответит**.
Два выхода (решение за Alex, не подтверждено): (1) в ZONT поставить **100**, как в bridge;
(2) оставить 113 и дописать в bridge маппинг 113 → `sensor.garderobnaia_temperature_temperature` + `rebuild`.
> 📌 **Правило:** один физический датчик = **один `slave_id` по обе стороны**. Перед правкой **Круг 53 («ТП: Гардеробная»)** — откат тупиковой ветки круга 52 (`.yml` пересобран из `.txt`,
> ZONT-стороны сверять `slave_id` в `config.template.tmpl` **на t610**. `git checkout` не нужен) + переименование двух объектов, `slave_id`/`register_id` не тронуты:
**⏳ Осталось (круг 52):** заливка на контроллер (**НЕ сделана** — самовольная попытка отбита, ```text
прибор не тронут; `POST /config.txt`**405**, заливка только через WS) · #Z8381=51,100,'ТП: Гардеробная',5000,300000,[],[],0,[8383]
🔴 контур `#Z10643=16,'ТП: Гардеробная'` ссылается на регистр `8911` (= `register_id` датчика #Z8382=1,'0','ТП: Гардеробная',0,0,0,60000,[],[],[],8383,[],0,0,0
«Температура Гостиная», `#Z8910`/`#Z8912`), а **не** на новый `4125` — перенаправлять ли, не подтверждено · ```
🔴 **рассинхрон `slave_id` 100 ↔ 113** (см. выше).
> 🔴 **Полное покрытие ≠ «все датчики в ZONT».** Аудит HA ↔ bridge ↔ ZONT: 17 температурных сущностей Дифф против свежего дампа: потерь **0**, добавлений **0**, изменено ровно **2** тела (имена);
> в HA, 13 маппингов в bridge, 12 в ZONT. Три снифф-датчика (`dining_temperature_2` 101, `kids_temperature` 102, 648 → **648 строк**. Артефакт `zont_config/config_local_2026-09-18_11-41-36_NEW.txt`,
> `bedroom_temperature` 103) в bridge есть, в ZONT **не заведены**; гардеробная — номер расходится; **коммит `dd8c262`**.
> `dushevaia_floor_*` в HA `unavailable`. Детали: [[personal/projects/zont-config-compiler]] §34.8, §34.9.
**Круг 52 (тупиковая ветка, откачена):** вставки slave 113 → `4125`/`4126`/`4127`, 651 строка,
коммит `e188b52`. НЕВЕРНО: датчик уже существовал. Не откатывать `e188b52` вручную —
он перекрыт `dd8c262`.
⚠️ **Урок круга 52 (дорого стоил):** артефакт прошлого круга — **не база**. Дамп `00-45-31`
устарел (в нём не было датчиков 105–112, заливка круга 51 состоялась позже). 🔴 **Правку боевого
конфига строить только от СВЕЖЕГО дампа, снятого прямо перед работой:**
`curl -s http://192.168.0.50/config.txt`.
**⏳ Осталось:** заливка на контроллер (**НЕ сделана** — самовольная попытка отбита, прибор не тронут;
`POST /config.txt`**405**, заливка только через WS `#S`-команды) ·
🔴 контур `#Z10643=16,'ТП: Гардеробная'` (создан Alex'ом) ссылается на регистр `8911`
(= `register_id` датчика «Температура Гостиная»), а **не** на `8383` — перенаправлять ли, не подтверждено ·
`sensor.dushevaia_floor_temperature_temperature` в HA `unavailable` (железо, не конфиг).
Детали: [[personal/projects/zont-config-compiler]] §34–§36.
🔑 **Ключевой факт:** bridge-сторона для 105–112 была готова ещё 2026-09-15 (маппинги в 🔑 **Ключевой факт:** bridge-сторона для 105–112 была готова ещё 2026-09-15 (маппинги в
`config.template.tmpl`); не хватало именно ZONT-стороны. Источник истины `config.template.tmpl`); не хватало именно ZONT-стороны. Источник истины