[2026-09-14] eagle: family/plans/t610-home-automation.md

This commit is contained in:
Alexey Martemyanov
2026-09-14 15:49:09 +06:00
parent 823c2e76c4
commit 74c9995589
+13 -13
View File
@@ -736,7 +736,10 @@ modbus/sensors/bedroom/humidity 36.0
> **Задача сессии (Alex):** «Что дальше по плану?» → далее по ходу: «Датчик есть. Что с ним??» → «Ок. Делай. Меняй правила caddy на truenas чтобы указывали на t610».
### 5-кватер-А. Датчик столовой: причина найдена — шина отвечает нулём, bridge отбрасывает
### 5-кватер-А. Датчик столовой: «шина отвечает нулём» — ПРОМЕЖУТОЧНАЯ ГИПОТЕЗА, ОПРОВЕРГНУТА
> 🔴🔴 **ОПРОВЕРГНУТО ПОЗЖЕ ТОЙ ЖЕ СЕССИЕЙ (§5-кватер-Д): датчик НЕ отдаёт ноль.** Прямое сырьё прослушивание шины (bridge остановлен) поймало **валидный ответ с данными** — `01 03 0E 03 1A 00 0E …` (CO2=794 и т.д.). А `= 0 [00 00]` в логе bridge — это `sniff:dining_temperature` (значение, которое bridge **подставляет из своей таблицы**), а НЕ то, что вернул датчик. Раздел сохранён как урок: **лог bridge ≠ ответ датчика** (см. ниже, почему `slave 1 / reg 100` — тоже неверная трактовка).
> **Правильная цепочка:** реальный датчик гостиной = **slave 1, base_register 2, quantity 7** (запрос `01 03 00 02 00 07`), ответ 14 байт. Регистр 100 — это **виртуальный** slave 101, который bridge отдаёт ZONT'у. См. §5-кватер-Д.
**Alex подтвердил: датчик в столовой физически ЕСТЬ.** Значит ветка «чистить мусор» отпала — идём чинить источник.
@@ -749,24 +752,21 @@ modbus/sensors/bedroom/humidity 36.0
→ Response: 1 register(s) from 100 (sniff:dining_temperature) = 0 [00 00]
```
**Расшифровка (ключевой факт):**
**Как это трактовалось тогда (❌ ошибочно):**
| Наблюдение | Значение |
| Наблюдение | Трактовка того момента (❌) |
|---|---|
| `Slave: 1` | Столовая = **slave 1** (совпадает с картой: Гостиная=1) |
| `CRC OK: True` | Кадр целый — **проводка и обмен в порядке** |
| `Slave: 1` | Столовая = slave 1 (совпадает с картой: Гостиная=1) |
| `CRC OK: True` | Кадр целый — проводка и обмен в порядке |
| `Func: 0x3` | Чтение holding-регистра |
| `from 100` | Регистр **100** (температура) |
| `= 0 [00 00]` | 🔴 **Датчик отвечает ЗНАЧЕНИЕМ 0**, а не молчит |
| опрос каждые 5 с, стабильно | Не «иногда», а **постоянно ноль** |
| `from 100` | Регистр **100** (температура) — ❌ на самом деле это **виртуальный slave 101**, регистр 100 |
| `= 0 [00 00]` | 🔴 «датчик отвечает ЗНАЧЕНИЕМ 0» — ❌ **опровергнуто: ноль подставляет bridge** |
> 🔴 **ВЫВОД: ZONT датчик ОПРАШИВАЕТ (slave 1, reg 100, каждые 5 с), датчик ОТВЕЧАЕТ — но отдаёт ноль.** `modbus-bridge` считает `0` невалидной температурой → **не публикует** в `modbus/sensors/dining/*` → HA-сущности остаются `unknown` → `dining_summary` падает в `unavailable`. **Проблема НЕ в HA и НЕ в проводке/обмене, а в самом датчике или его регистрации в ZONT.**
> **Вывод того момента («ZONT опрашивает, датчик отвечает нулём») — ОПРОВЕРГНУТ** прямым прослушиванием шины (§5-кватер-Д). Реально: **ответ датчика на шине есть и содержит данные**; bridge их не доводит до публикации. Ошибка трактовки: `= 0` в логе bridge — это **значение из внутренней таблицы bridge** (не прочитанное с шины), а `from 100` — ответ **виртуального** slave 101, не физического датчика.
**Дополнительное наблюдение (зацепка):** в логе для столовой виден **только** `sniff:dining_temperature` (reg 100). Сущности CO2/влажности/TVOC/PM на датчик завязаны, но **ZONT эти регистры для столовой не читает** → значит либо датчик только-температурный, либо в ZONT он заведён частично.
**Дополнительное наблюдение (зацепка, частично подтверждено):** в логе для столовой виден только `sniff:dining_temperature` — потому что ZONT читает гостиную как **1 регистр под slave 101**, а реальные 7 регистров идут по slave 1 / reg 2 (см. §5-кватер-Д).
**Почему `|default(0)` — по-прежнему НЕ фикс** (подтверждено): он дал бы `0° 0ppm`, что совпало бы с реальным «нулём» и замаскировало бы поломку. **Правильно — найти, почему датчик отдаёт 0**: не откалиброван / не сконфигурирован в ZONT / просело питание по шине (485-датчики питаются от линии).
> 📌 **Не путать с §5-тер:** там зафиксировано, что `modbus/sensors/dining/*` не публикуется. Здесь — **почему** (датчик отвечает нулём), после того как Alex подтвердил наличие датчика.
> 📌 **Не путать с §5-тер:** там зафиксировано, что `modbus/sensors/dining/*` не публикуется. Здесь — промежуточная (ошибочная) версия «почему». **Действующее объяснение — §5-кватер-Д.**
> ⛔ **Alex переключил внимание на план миграции** — задачу по датчику столовой **не доделывали** (не чинили ZONT, не трогали реестр). Остаётся в бэклоге как отдельная задача.
### 5-кватер-Б. Развязка Caddy — архитектура и подготовленная правка