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

This commit is contained in:
Alexey Martemyanov
2026-09-14 19:27:59 +06:00
parent 0c4719715a
commit 8d6f20f1dd
+36 -3
View File
@@ -8,7 +8,7 @@
## 1. Состояние на 2026-09-14 (актуализировано 15:33 → дополнено вечерней сессией) ## 1. Состояние на 2026-09-14 (актуализировано 15:33 → дополнено вечерней сессией)
**Этап 1 ✅ · Этап 2 ✅ · Этап 3 ✅ ЗАКРЫТ.** Этап 4 — **ПОЧТИ ЗАКРЫТ (3 из 4):** ① Caddy → t610 (`mallexxx.duckdns.org` → HA на t610, HTTP 200); ② Node-RED flows перенесены, `Connected to HA`, наружу не выпущен (решение Alex «оставляем так», доступ через ingress); ③ **ZONT MQTT-редирект переключён на t610** (DNAT на роутере `.197``.176`, живой поток идёт). **ОСТАЛОСЬ:** погасить/отключить сервисы TrueNAS (заблокировано — Caddy на TrueNAS держит точку входа) + хвосты (static IP, бэкап). **Этап 1 ✅ · Этап 2 ✅ · Этап 3 ✅ ЗАКРЫТ.** Этап 4 — **ПОЧТИ ЗАКРЫТ (3 из 4):** ① Caddy → t610 (`mallexxx.duckdns.org` → HA на t610, HTTP 200); ② Node-RED flows перенесены, `Connected to HA`, наружу не выпущен (решение Alex «оставляем так», доступ через ingress); ③ **ZONT MQTT-редирект переключён на t610** (DNAT на роутере `.197``.176`, живой поток идёт). **ОСТАЛОСЬ:** погасить/отключить сервисы TrueNAS (заблокировано — Caddy на TrueNAS держит точку входа) + хвост **бэкап конфигов t610** (static IP ✅ сделан вечер-8).
**Последнее действие (2026-09-14, вечер-13): ✅ t610 ВКЛЮЧЁН и работает.** После shutdown (вечер-13, `ha host shutdown`) Alex включил хост физически → USB-камера **разлипла сама** (power-cycle — единственное лечение, см. §5-кватер-И-6). Далее по плану: `local_ustreamer`**`boot: manual`** (автозапуск снят, чтобы не дрался за `/dev/video0`), поднят **`go2rtc-hardware`**, камера переведена на RTSP H.264 → **WebRTC работает**. **Последнее действие (2026-09-14, вечер-13): ✅ t610 ВКЛЮЧЁН и работает.** После shutdown (вечер-13, `ha host shutdown`) Alex включил хост физически → USB-камера **разлипла сама** (power-cycle — единственное лечение, см. §5-кватер-И-6). Далее по плану: `local_ustreamer`**`boot: manual`** (автозапуск снят, чтобы не дрался за `/dev/video0`), поднят **`go2rtc-hardware`**, камера переведена на RTSP H.264 → **WebRTC работает**.
**Последняя верификация: 2026-09-14 (вечер-13) — ✅✅ RTSP/WebRTC РЕШЕНО.** Камера работает через **аддон `a889bffc_go2rtc-hardware`** (ffmpeg-транскод MJPEG→H.264) → RTSP `rtsp://192.168.2.176:8554/usb_camera_h264`, WebRTC в приложении HA **работает** (Alex: «Супер, работает»). ustreamer остановлен (`boot: manual`). Канон, доказательства, питфоллы — **§5-кватер-И-6**. **Последняя верификация: 2026-09-14 (вечер-13) — ✅✅ RTSP/WebRTC РЕШЕНО.** Камера работает через **аддон `a889bffc_go2rtc-hardware`** (ffmpeg-транскод MJPEG→H.264) → RTSP `rtsp://192.168.2.176:8554/usb_camera_h264`, WebRTC в приложении HA **работает** (Alex: «Супер, работает»). ustreamer остановлен (`boot: manual`). Канон, доказательства, питфоллы — **§5-кватер-И-6**.
**Зигби-реле котла (вечер-13) — ✅✅ РАБОТАЕТ, ПОДТВЕРЖДЕНО ALEX:** `switch.boiler_controller_power` заведено в `modbus-bridge` как **`slave 104, рег. 1`** (bidirectional) — правка `data/config.template.tmpl` + `ha apps rebuild/restart` (exit 0, `state: started`). Bridge жив (MQTT-поток идёт). **Alex: «Работает, супер»** — верификация закрыта. Питфоллы (лог CLI обрезан до 100 строк → API; пароль mosquitto; маскировщик) — **§5-кватер-И-7**. ⚠️ Открытый вопрос: прописан ли `slave 104` **в самом ZONT** (ZONT не трогали) — если нет, ZONT реле не увидит. **Зигби-реле котла (вечер-13) — ✅✅ РАБОТАЕТ, ПОДТВЕРЖДЕНО ALEX:** `switch.boiler_controller_power` заведено в `modbus-bridge` как **`slave 104, рег. 1`** (bidirectional) — правка `data/config.template.tmpl` + `ha apps rebuild/restart` (exit 0, `state: started`). Bridge жив (MQTT-поток идёт). **Alex: «Работает, супер»** — верификация закрыта. Питфоллы (лог CLI обрезан до 100 строк → API; пароль mosquitto; маскировщик) — **§5-кватер-И-7**. ⚠️ Открытый вопрос: прописан ли `slave 104` **в самом ZONT** (ZONT не трогали) — если нет, ZONT реле не увидит.
@@ -1975,8 +1975,9 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
| 5-мк | **ZONT MQTT → t610** (остаток Этапа 4). Переключить на роутере `192.168.2.2` (OpenWrt) DNAT: `firewall.@redirect[0]` (name `MQTT`) `dest_ip` `.197``.176` **и** `firewall.@rule[3]` (name `allow-1883`) `dest_ip` `.197``.176`. В ZONT ничего не менять. Схема, питфоллы, проверки — **§5-кватер-Д**. ⚠️ Перед правкой: `uci export firewall > backup`. ⚠️ Порт 1883 t610 OPEN, юзер `zont` есть, пароль `mqtt1z3$` проверен | **✅ сделано 2026-09-14** — оба правила → `.176`, `uci commit` + firewall reload, ZONT пошёл в mosquitto t610 (живой поток kids/bedroom). Бэкап `/root/firewall.bak-20260914-092555` | | 5-мк | **ZONT MQTT → t610** (остаток Этапа 4). Переключить на роутере `192.168.2.2` (OpenWrt) DNAT: `firewall.@redirect[0]` (name `MQTT`) `dest_ip` `.197``.176` **и** `firewall.@rule[3]` (name `allow-1883`) `dest_ip` `.197``.176`. В ZONT ничего не менять. Схема, питфоллы, проверки — **§5-кватер-Д**. ⚠️ Перед правкой: `uci export firewall > backup`. ⚠️ Порт 1883 t610 OPEN, юзер `zont` есть, пароль `mqtt1z3$` проверен | **✅ сделано 2026-09-14** — оба правила → `.176`, `uci commit` + firewall reload, ZONT пошёл в mosquitto t610 (живой поток kids/bedroom). Бэкап `/root/firewall.bak-20260914-092555` |
| ~~5-арх~~ | ~~«Перенести Caddy на OpenWrt/t610»~~**❌ ОТВЕРГНУТО (§5-кватер-Б):** на OpenWrt 80/443 заняты `uhttpd`; у Caddy 17 доменов TrueNAS → при переносе падение t610 положит все медиасервисы. **Caddy остаётся на TrueNAS.** | — | | ~~5-арх~~ | ~~«Перенести Caddy на OpenWrt/t610»~~**❌ ОТВЕРГНУТО (§5-кватер-Б):** на OpenWrt 80/443 заняты `uhttpd`; у Caddy 17 доменов TrueNAS → при переносе падение t610 положит все медиасервисы. **Caddy остаётся на TrueNAS.** | — |
| 6 | Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **⚠️ ЗАБЛОКИРОВАНО дважды:** ① пока Caddy на TrueNAS — он держит точку входа; ② **на TrueNAS всё ещё живой полный стек** (`homeassistant`, `mbusd` 502, `mosquitto` 1883, `nodered` 1880 — все `Up`, проверено 2026-09-14 вечер-3), и **ZONT пишет MQTT именно туда**. Гасить можно только после пункта 5-мк и решения по точке входа (§5-кватер-Б) | — | | 6 | Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **⚠️ ЗАБЛОКИРОВАНО дважды:** ① пока Caddy на TrueNAS — он держит точку входа; ② **на TrueNAS всё ещё живой полный стек** (`homeassistant`, `mbusd` 502, `mosquitto` 1883, `nodered` 1880 — все `Up`, проверено 2026-09-14 вечер-3), и **ZONT пишет MQTT именно туда**. Гасить можно только после пункта 5-мк и решения по точке входа (§5-кватер-Б) | — |
| 7 | Static IP для t610 на роутере (сейчас DHCP) | — | | ~~7~~ | ~~Static IP для t610 на роутере (сейчас DHCP)~~**✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-1):** `dhcp.@host[1]` = `t610` / MAC `9c:8e:99:ef:3f:c5` / `192.168.2.176`, бэкап `/root/dhcp.bak-20260914-104152` | ✅ закрыто |
| 8 | Бэкап конфигов t610 → TrueNAS + git (Gitea `git.mallexxx.duckdns.org`). **📌 Добавить в бэкап:** `/config/.storage/http` (после фикса `trusted_proxies`) и сам `Caddyfile` | — | | 8 | Бэкап конфигов t610 → Mac + TrueNAS + git (Gitea `git.mallexxx.duckdns.org`). **📌 Добавить в бэкап:** `/config/.storage/http` (фикс `trusted_proxies`), сам `Caddyfile`, а также `data/config.template.tmpl` аддона `modbus-bridge` (там живёт маппинг реле котла) | — |
| ~~9~~ | ~~**Zigbee-реле котла → modbus-bridge**~~**✅✅ ВЫПОЛНЕНО + ПОДТВЕРЖДЕНО ALEX 2026-09-14 (вечер-13, §5-кватер-И-7):** `switch.boiler_controller_power` = **`slave 104, рег. 1`** (bidirectional). Бэкап `.bak-relay-20260914-200827` | ✅ закрыто |
**✅ Закрыто в этой сессии (2026-09-14, поздняя):** **✅ Закрыто в этой сессии (2026-09-14, поздняя):**
- **Office table switch** — не управлял светом. Две причины: ① hex-`entity_id` в **триггерах** автоматизаций; ② `not_from: [unknown]` блокировал первое нажатие. Оба фикса применены, проверено на живом (оба канала). - **Office table switch** — не управлял светом. Две причины: ① hex-`entity_id` в **триггерах** автоматизаций; ② `not_from: [unknown]` блокировал первое нажатие. Оба фикса применены, проверено на живом (оба канала).
@@ -3122,6 +3123,38 @@ ssh root@192.168.2.176 'ha apps rebuild local_modbus-bridge && ha apps restart l
--- ---
### 2026-09-14 (вечер-13, доп.: Zigbee-реле котла → modbus-bridge — ✅ РАБОТАЕТ)
**Контекст:** Alex — *«и добавь в modbus bridge розетку modbus адаптеров котла как реле»**«zigbee розетку»**«Да. Boiler controller. Modbus bridge»**«Уточни из доков и конфига адреса свободные для нового виртуального реле»**«Да»* (адрес `104:1`) → *«Да, делай»***«Работает, супер, обновляем доку»**.
**Суть:** Zigbee-розетка `switch.boiler_controller_power` (питание modbus-адаптеров котла, TS011F, `0xa4c1381694217e10`) заведена в `modbus-bridge` как **виртуальный Modbus-slave `104`, регистр `1`** (bidirectional) — чтобы ZONT мог читать её состояние и включать/выключать.
**Что сделано:**
| Шаг | Факт |
|---|---|
| Адрес | Проверен по двум источникам: карта в `home-automation.md` + реальный `config.template.tmpl`. Занято было `100/100, 101/1, 101/100, 102/100, 103/100`**`104:1` свободен** (продолжает ряд виртуальных 100–103) |
| Бэкап | `data/config.template.tmpl.bak-relay-20260914-200827` (3934 б) |
| Правка | Блок `Boiler controller power (Zigbee relay)` в конец `mappings:`. **Файл правки — `data/config.template.tmpl`** (не `config.template.yml` — того файла нет; `Dockerfile` копирует `.tmpl``/app/config.template.yml` при сборке) |
| Правка через скрипт-файл | `~/tmp-t610/relay/patch.py` — идемпотентный (повторный запуск → `ALREADY_PRESENT`), по правилу «не inline-скрипты» |
| Валидация | `yaml.safe_load` → 6 mappings, дубликатов нет, ключи `…(103,100)(104,1)` |
| Деплой | `ha apps rebuild local_modbus-bridge` (exit 0) → `ha apps restart``state: started`, v1.1.0 |
| Верификация | Bridge жив (MQTT-поток `modbus/sensors/*` идёт). **Alex подтвердил вручную: «Работает, супер»** |
**Механика (проверено по исходнику):** `0x06`/`0x05``mapping_index[(slave,addr)]``value_map``perform_mapped_action``POST /api/services/switch.turn_on|off`; `0x03` → значение из HA-поллера. Slave `104` попадает в `configured_slave_ids` автоматически. **Код `modbus_ha_bridge.py` НЕ менялся** — только конфиг-шаблон.
**`value_map`** расширен против минимального (`0/1``+256/512`) на случай сырых кодов ZONT'а (как у заслонок, образец «Socket 1»).
**Что менялось в железе:** только `data/config.template.tmpl` на t610 (+ rebuild образа). Код bridge и другие аддоны не трогались.
> ⚠️ **Питфоллы верификации (новые, важные):****`ha apps logs <slug>` обрезает вывод до 100 строк и отдаёт СТАРЫЙ буфер** (записи 13:10 при времени 20:10) → живой лог только через API `GET .../api/hassio/addons/<slug>/logs` (`.data` — голая строка). ② **Замерший лог ≠ мёртвый bridge** — живость доказывается MQTT-подпиской с Mac. ③ Секрет-маскировщик Hermes подменяет `$(cat file)` → собирать заголовок в файл + `curl -H @file`. ④ `rm` в SSH ловит approval и может истечь.
>
> ⚠️ **Открытый вопрос:** прописан ли `slave 104` **в самом ZONT** — не проверялось и не трогалось (правило Alex: ZONT не менять). Если 104 не добавлен в конфиг ZONT, реле он не увидит.
**Файлы:** `~/tmp-t610/relay/{config.template.tmpl, patch.py, getlog.sh}`. Полный разбор — **§5-кватер-И-7**.
---
## Связанные заметки ## Связанные заметки
- [[family/how-to/home-automation]] — карта Modbus slave ID, ZONT, регистры вентиляции - [[family/how-to/home-automation]] — карта Modbus slave ID, ZONT, регистры вентиляции