[2026-09-14] eagle: family/how-to/home-automation.md family/plans/t610-home-automation.md
This commit is contained in:
@@ -166,7 +166,7 @@ Hz : PWM
|
||||
Tuya Zigbee thermal Sensor - 100
|
||||
|
||||
Vent control - 10 (0A)
|
||||
Газ котёл вкл - 20 (14)
|
||||
Газ котёл вкл - 20 (14) ⚠️ см. [[family/plans/t610-home-automation]] §5-кватер-П-7: в логе modbus-bridge ответы slave 20 помечены `[DROP-TAIL]`/`[BUF-LEFT]` и НЕ парсятся (баг сборки кадров) → состояние по bridge не читается. Прямой `nc`-запрос на 502 даёт `OK`, но это другой путь.
|
||||
|
||||
Заслонки:
|
||||
Relay module - 11 (0B): reg 2-17, on: 256, off: 512
|
||||
|
||||
@@ -320,7 +320,7 @@ nc -w 5 192.168.2.176 502 < /tmp/mbreq.bin | xxd
|
||||
| **12** | Relay module — заслонки 2 | reg 1 → ✅ `OK 640001` |
|
||||
| **10** | Vent control (AT2) | ✅ `OK` (значение 100) |
|
||||
| **2, 3** | датчики Детская / Спальня | ✅ `OK` |
|
||||
| **20** | Газ котёл вкл | ✅ `OK` |
|
||||
| **20** | Газ котёл вкл | ✅ `OK` (прямой `nc`-запрос на 502, **не** через bridge) |
|
||||
|
||||
> ⚠️ **ПРО АРТЕФАКТ:** «нестабильные ответы» и «76% `EXC 0x0B`» в замерах — **артефакт**: запросы слались через `nc` на порт 502 **пока HA/mbusd одновременно опрашивали ту же шину**. На чистой линии трафик нормальный. **НЕ причина** `unavailable`, **НЕ повод** крутить `timeout`.
|
||||
|
||||
@@ -2797,7 +2797,8 @@ Alex: *«Да. Boiler controller. Modbus bridge»* → затем: *«Уточн
|
||||
|
||||
### ⚠️ Замечание к задаче
|
||||
|
||||
На шине **уже есть `slave 20 = «Газ котёл вкл»`** (реальное реле, отвечает ✅). Если задача — управлять питанием котла, возможен **дубль**: ZONT уже умеет slave 20. Стоит уточнить у Alex, зачем именно Zigbee-реле при наличии 20.
|
||||
На шине **уже есть `slave 20`** (ZONT опрашивает его как `Func 0x1 READ COILS` + `Func 0x5 WRITE COIL addr=1`). ⚠️ **ПОПРАВЛЕНО 2026-09-14 (ночь-14, §5-кватер-П-7): соcтояние slave 20 в логе ПРОЧИТАТЬ НЕЛЬЗЯ** — все ответы помечены `[DROP-TAIL]`/`[BUF-LEFT]`, CRC не сходится, рамки наложены (тот же баг сборки кадров, §5-кватер-З). Прежняя запись «отвечает ✅ / Газ котёл вкл» — **не подтверждена наблюдением, снята**. Bridge slave 20 **не обслуживает** (`configured_slave_ids` = `1,2,3,10,100–104`), отвечает физическое устройство ZONT.
|
||||
Возможен **дубль** назначения с Zigbee-реле (104). Стоит уточнить у Alex, зачем Zigbee-реле при наличии 20 — **и заодно** снять достоверный статус 20 нормальным сниффером.
|
||||
|
||||
**Питфоллы (уже известны):** `switch.sauna`/`recirculation_pump` в `unknown` — розетки физически отключены, не баг; управление таким реле «вслепую» вернёт ошибку.
|
||||
|
||||
@@ -3596,3 +3597,34 @@ except (TypeError, ValueError):
|
||||
4. **Живой лог — только supervisor API:** `http://supervisor/addons/<slug>/logs` (из аддона; `127.0.0.1:80` НЕ виден — аддон в изолированной сети `172.30.33.1`). `?lines=1500` — тянуть больше строк (по умолчанию отдаёт ~100).
|
||||
5. **Источник истины для реле = репо `~/Automation/HA-ZONT-Modbus`.** Правки кода — там, не в `~/tmp-t610/` и не на t610 напрямую.
|
||||
6. **`source: "ha"` означает «bridge сам поллит HA-сущность»**, а не «читает с шины». Признак работы — строка `HA poll -> <entity> = <val>` в логе.
|
||||
|
||||
### П-7. 🔴 `slave 20` — СОСТОЯНИЕ НЕ ЧИТАЕТСЯ (моя ложная трактовка, снята 2026-09-14, ночь-14)
|
||||
|
||||
**Контекст:** Alex — *«1.0 это верное значение для этого параметра? Совпадает со slave 20?»* → *«Slave 20 что пишет в ответе??»*.
|
||||
|
||||
**Сначала я заявил** «slave 20 отвечает `14 01 01 00 55 84` → `00` = ВЫКЛЮЧЕНО» — **ЭТО БЫЛО НЕВЕРНО, снято мной же** после перепроверки полного лога.
|
||||
|
||||
**Факт из живого лога** (`logs?lines=4000`, дебаг-лог включён):
|
||||
```log
|
||||
2026-09-14 16:03:46 Slave: 20 Func: 0x1 CRC OK: True
|
||||
Raw RTU: 14 01 00 00 00 01 FF 0F ← запрос ZONT к slave 20 (CRC самой рамки невалиден)
|
||||
→ READ COILS: 1 coil(s) from 0
|
||||
[DROP-TAIL 6] 14 01 01 00 55 84 ← bridge ОБЪЯВИЛ пакет битым («хвост» не сходится)
|
||||
--------------------------------------------------
|
||||
2026-09-14 16:03:51 Slave: 20 Func: 0x1 CRC OK: True
|
||||
Raw RTU: 14 01 01 00 55 84
|
||||
[DROP-TAIL 14] 14 01 01 00 55 84 68 01 00 00 00 01 f4 f3 ← 68 01 … = следующий запрос (slave 104) НАЛОЖИЛСЯ
|
||||
```
|
||||
|
||||
**Почему `00` — не «выключено»:**
|
||||
1. Строка помечена **`[DROP-TAIL]`** — bridge сам считает пакет **битым**;
|
||||
2. `0x55 0x84` как CRC для `14 01 01 00` **не сходится** (CRC ≠ 0x5584);
|
||||
3. Хвост `68 01 00 00 00 01 f4 f3` — это **следующий кадр** (slave `0x68` = 104), вклинившийся вплотную → **наложение рамок**.
|
||||
|
||||
**Связь с §5-кватер-З:** это тот же **баг сборки кадров** (мусорные `00`, `[BUF-LEFT]`, `14 01 40 55 f8` ×16). Ответ slave 20 **не образует валидный кадр → отбрасывается молча**. Поэтому **состояние slave 20 в логе прочитать НЕЛЬЗЯ ВООБЩЕ** — ни ON, ни OFF.
|
||||
|
||||
**📌 ПИТФОЛЛ (главный):** не выдёргивать байт состояния из строки, помеченной `[DROP-TAIL]`/`[BUF-LEFT]`/`[DROP-HEAD]` — эти строки означают «bridge объявил кадр битым», их содержимое **не является данными**. Для валидных данных нужна строка `CRC OK: True` + отдельный `Raw RTU` **без** меток сброса, ИЛИ строка `Sniff: <field> = <val>` / `HA poll -> …`.
|
||||
|
||||
**Проверка числа катушек:** в логе slave 20 виден только `Func: 0x1` (READ COILS) и `0x5` (WRITE COIL `addr=1 value=0xFF00` = «включить»). Bridge **не обслуживает** slave 20 (`configured_slave_ids` — только `1,2,3,10,100–104`), т.е. отвечает **не bridge**, а физическое устройство ZONT. Ответы на WRITE в логе — тоже битые/наложенные.
|
||||
|
||||
**➡️ Открыто:** чтобы достоверно узнать состояние slave 20 — нужен пассивный сниффер БЕЗ наложения рамок (иначе данные недостоверны). Ранее записанное «slave 20 = Газ котёл вкл (отвечает ✅)» (см. §9 «Замечание к задаче») — **НЕ подтверждено наблюдением, поправлено там же**.
|
||||
|
||||
Reference in New Issue
Block a user