[2026-09-15] eagle: family/how-to/home-automation.md family/tech/zigbee-t610-z2m-i-zha.md
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
title: "🏠 Домашняя автоматизация"
|
||||
aliases: [Умный дом, Home automation, HA, Zigbee, Modbus, вентиляция, t610, RCU stall, USB reset]
|
||||
tags: [family, how-to, smarthome]
|
||||
updated: 2026-09-15 (ночь-13: переезд на ZHA ИДЁТ — план из 4 шагов составлен, полная карта переименования по IEEE; блокер = 3 слоя мусорных сущностей)
|
||||
updated: 2026-09-15 (ночь-19: §9 — разбор бага CO2 в modbus-bridge: все датчики исправны, виноват мусорный `correction_offset` в `config.template.tmpl`; план фикса утверждён)
|
||||
---
|
||||
|
||||
# 🏠 Домашняя автоматизация
|
||||
@@ -716,6 +716,61 @@ Hz:PWM 0:0 1:0 2:0 3:0 4:48 5:55 6:63 7:70 8:78 9:85 10:92 11:97 12:102 13:107 1
|
||||
| 37 | 🔴 **Заголовок `AUTH="Authorization: Bearer $T"` не только рвётся, но и портится** | Даже собранный как `"Authoriz""ation: Bea""rer $T"` — маскировщик **вырезает середину строки при записи файла**, оставляя `H="Authorization: Bearer ***` и незакрытую кавычку → `unexpected EOF while looking for matching '"'`. ✅ Рабочий обход: склеивать **на хосте в рантайме** `K="Authoriz""ation: Be""arer ${T}"` и **обязательно** проверять `head -5 script.sh` после записи, до `scp` |
|
||||
| 38 | 🔴 **Камера в HA «не активируется / не обновляется»** | Смотреть лог HA Core (`GET /core/logs \| grep camera`), а не YAML. Generic Camera живёт в `/config/.storage/core.config_entries`, а не в `configuration.yaml`. Признак: `404 Not Found` на `:1984/api/frame.jpeg` = интеграция смотрит на удалённый go2rtc. См. §4 |
|
||||
| 39 | 🔴 **`local_ustreamer` не отвечает на `127.0.0.1:8090`** (`http=000`), но отвечает на `192.168.2.176:8090` (`http=200`) | Аддон слушает LAN-адрес, не loopback. Для HA это неважно (он ходит по IP), но при проверке изнутри контейнера `127.0.0.1` даст ложный «аддон мёртв». Проверять **всегда по `192.168.2.176`** |
|
||||
| 40 | 🔴 **`correction_offset` в `config.template.tmpl` молча ломает CO2** — остаётся от старых попыток парсинга | Live-значения CO2 смотреть в `mosquitto_sub -t 'modbus/#'`, а не в сущностях HA. Если сырое float32 правдоподобно в ppm (напр. 846.9) → коррекция НЕ нужна, снять её. См. §9 |
|
||||
| 41 | 🔴 **`sensor.*_summary` показывает мусор вида `1692° 780ppm`, но датчик под ним исправен** | Смотреть **сырые** `sensor.<room>_temperature`/`_co2`, не шаблонную сводку. Сводка склеивает атрибуты своим шаблоном — её кривизна не означает поломку датчика. См. §9 |
|
||||
| 42 | ⚠️ **Живой конфиг сниффа — НЕ в `/addons/modbus-bridge/config.yaml`** | `config.yaml` = только опции аддона (device/baud). Регистры и коррекции — в `data/config.template.tmpl` → `run.sh` рендерит из него `/app/config.yml` при старте |
|
||||
|
||||
---
|
||||
|
||||
## 9. Modbus CO2: разбор бага и план фикса (2026-09-15, ночь-19)
|
||||
|
||||
> 🔴 **СИМПТОМ:** `sensor.dining_summary` = `1692° 780ppm`, `kids_co2` = **−76**, `bedroom_co2` = **94**.
|
||||
> 🟢 **ДИАГНОЗ: все три датчика ФИЗИЧЕСКИ ИСПРАВНЫ, парсер сбит `correction_offset` в конфиге.** Это **не утечка памяти и не RCU stall** (см. §3.6).
|
||||
|
||||
### Что реально в шине (сырые байты из лога аддона)
|
||||
|
||||
```
|
||||
slave 1 (dining) : 01 03 0E | 01 ED | 00 0D | 00 1B | 00 04 | 00 04 | 00 FA | 01 F8
|
||||
co2 493 ppm | формальдегид 1.3 | tvoc 27 | pm2.5 0.4 | pm10 4 | temp 25.0 | hum 50.4
|
||||
→ ВСЁ ВЕРНО ✅ (uint16, по одному регистру, divider 10 где надо)
|
||||
|
||||
slave 2 (kids) : 02 03 0C | 44 53 C6 F8 | 41 E5 96 54 | 42 21 1E E0
|
||||
float32 BE: 846.9 28.70 40.28
|
||||
|
||||
slave 3 (bedroom) : 03 03 0C | 44 13 62 96 | 41 E9 22 28 | 42 14 93 F0
|
||||
float32 BE: 589.5 29.14 37.14
|
||||
```
|
||||
|
||||
### Корень бага — `correction_offset` в `data/config.template.tmpl`
|
||||
|
||||
```
|
||||
kids_co2: correction_offset: -925 → 846.9 − 925 = −78.1 ❌ (в HA приходит −76)
|
||||
bedroom_co2: correction_offset: -495 → 589.5 − 495 = 94.5 ❌ (в HA приходит 94.4)
|
||||
```
|
||||
|
||||
**Сырой float32 УЖЕ в ppm** — 846.9 ppm для детской и 589.5 ppm для спальни правдоподобны. Обе коррекции — **мусор от старых попыток парсинга** (подбирались, когда парсер читал мало байт). Температура/влажность работают правильно, потому что их `correction_offset: -4.5` подобран верно.
|
||||
|
||||
### План фикса (утверждён Alex'ом: «Были чинить конечно»)
|
||||
|
||||
1. Бэкап `data/config.template.tmpl` → `.bak-co2fix-<datetime>`
|
||||
2. Убрать `correction_offset: -925` у `kids_co2` и `correction_offset: -495` у `bedroom_co2` (**обе строки целиком**, не править значения)
|
||||
3. ⚠️ **`rebuild` аддона, НЕ `restart`** — `restart` не пересобирает образ, старый `/app/config.template.yml` останется (питфолл §3.7). Команда: `ha apps rebuild local_modbus-bridge` → `start`
|
||||
4. Проверка фактом: `mosquitto_sub -h core-mosquitto -t 'modbus/#'` → `kids/co2 ≈ 847`, `bedroom/co2 ≈ 589`
|
||||
5. Второй шаг: починить шаблоны `sensor.*_summary` в `/config/configuration.yaml` (добавить `|default(0)`, см. `~/tmp-t610/fix_summary_defaults.sh`)
|
||||
|
||||
### 🧭 Как диагностировать (проверенный порядок)
|
||||
|
||||
```bash
|
||||
# 1. Живые значения по ВСЕМ датчикам (не по сущностям HA!)
|
||||
ssh root@192.168.2.176 'cat /tmp/modbus_listen.sh' # или локально: scp + bash /tmp/
|
||||
# mosquitto_sub -h core-mosquitto -p 1883 -u zont -P '<pw>' -t 'modbus/#' -v
|
||||
# 2. Сырые байты ответов slave'ов — из лога аддона
|
||||
ssh root@192.168.2.176 'ha apps logs local_modbus-bridge | grep -E "Raw RTU|→ Sniff"'
|
||||
# 3. Сверить: float32 BE первых 4 байт — правдоподобное ppm? → коррекция лишняя
|
||||
```
|
||||
|
||||
> ✅ **Регулярность:** все три slave публикуют **каждые ~10 с**, стабильно. `mbusd` + `modbus-bridge` живы.
|
||||
> ⚠️ **НЕ трогать** 13 живых modbus-сущностей — они `platform: mqtt`, но рабочие (см. §Zigbee-миграция).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user