From 3ceebed6952a921be62f621d3b5817052cc3eef3 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 14 Sep 2026 13:36:48 +0600 Subject: [PATCH] [2026-09-14] eagle: family/how-to/t610-access.md family/plans/t610-addons-deployment.md --- family/how-to/t610-access.md | 24 +++++++++++++++++++++++- family/plans/t610-addons-deployment.md | 6 ++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/family/how-to/t610-access.md b/family/how-to/t610-access.md index 7a91dbb2..8ef34447 100644 --- a/family/how-to/t610-access.md +++ b/family/how-to/t610-access.md @@ -7,7 +7,8 @@ > ✅ **Состояние на 2026-09-14 (Этап 3 ЗАКРЫТ, z2m = 15 устройств):** z2m, mbusd (порт 502), modbus-bridge (MQTT + HA-опрос) — развёрнуты аддонами и **работают**. В HA добавлена **MQTT-интеграция**. **HA-конфиг перенесён с TrueNAS** (`.storage` реестры + конфиги + `www/`): HA запущен, **11 зон, MQTT-интеграция цела, ошибок нет**. Zigbee-розетки добавлены: `heating_cable_plug` (NEO NAS-WR01B, греющий кабель) и **`boiler_controller_power`** (`0xa4c1381694217e10`, TS011F, Котельная — питание контроллеров котлов), мёртвые устройства (3 шт.) **удалены из z2m**. Реестр HA = **332 сущности, hex = 0**. **Зоны проставлены у 18 устройств.** > ✅ **Автоматизации: 16 шт., 15 `on` + 1 `off`, 0 `unavailable`** (было 13 «мёртвых» — `device_id` перемаплены + hex-`entity_id` почищен **и в триггерах**). > ✅ **HTTP-варнинг устранён** (блок `http:` → `.storage/http`), **`modbus.host` = `192.168.2.176`** (НЕ `127.0.0.1` — см. питфолл ниже), **modbus-bridge 404 исправлены** (+rebuild аддона). -> ⏸️ **ОСТАЛСЯ ОДИН БЛОКЕР — аппаратный:** 32 заслонки вентиляции `unavailable` (шина не отвечает, exception 0x0B) → CH340 #2 нужно физически подключить к линиям A/B шины. Конфиг верный. +> ⏸️ **ОСТАЛСЯ ОДИН БЛОКЕР — аппаратный:** 32 заслонки вентиляции `unavailable` (шина не отвечает, exception 0x0B) → CH340 #2 нужно физически подключить к линиям A/B шины. Конфиг верный. **Разбор доведён 2026-09-14:** mbusd слушает 502, TCP принимает соединения, но лог показывает только `conn_open/close` (ни байта в serial), Modbus-запрос к slave 11 → пусто. См. §«Диагностика шины вентиляции (mbusd)». +> 🔑 **CH340 привязывать ТОЛЬКО по `by-path`.** Доказано: у двух CH340 нет серийников → в `/dev/serial/by-id/` для них **один общий симлинк** (ведёт на `ttyUSB1`, на `ttyUSB0` ссылки нет). 🔴 Перепутывание кабелей CH340 #1/#2 **не даст ошибки** — аддоны поднимутся, но будут работать не с теми шинами. См. §«ГЛАВНЫЙ ПИТФОЛЛ». > > 🔑 **Ключевой вывод:** HA связывает сущности по **`unique_id`**, а не по `entity_id`. Смена `friendly_name` в z2m **сохраняет человеческие `entity_id`** — дублей нет. > 🔑 **При переносе HA между инстансами теряются ВСЕ инстанс-локальные привязки** (устройства ре-регистрируются): @@ -297,6 +298,27 @@ ZONT (modbus-bridge): /dev/serial/by-path/pci-0000:00:12.0-usb-0:3:1.0-por > ✅ **Плюс аддонов:** старая проблема гонки udev ([[family/how-to/zont-modbus-bridge-udev-race-protection]]) на t610 **неактуальна** — Supervisor сам ждёт устройство при старте аддона, скрипты ожидания tty не нужны. +## Диагностика шины вентиляции (mbusd) — состояние на 2026-09-14 + +**mbusd настроен ВЕРНО, проблема аппаратная.** Полный разбор (чтобы не переделывать): + +| Проверка | Команда | Результат | +|---|---|---| +| Аддон запущен | `ha apps info local_mbusd` | `state: started` | +| Порт слушается | `nc -z 192.168.2.176 502` | ✅ **открыт** | +| Устройство в опциях | `ha apps info local_mbusd \| grep -A8 'options:'` | `device: /dev/serial/by-path/pci-0000:00:12.0-usb-0:4:1.0-port0` (CH340 #2, порт 4) ✅ | +| Параметры | там же | speed 9600, mode 8n1, retries 3, timeout 1000, trx `addc` | +| Modbus-запрос к slave 11 | `printf '\x0b\x03\x00\x00\x00\x01\xd5\xba' \| nc 192.168.2.176 502` | ❌ **пусто (нет ответа)** | +| Лог mbusd | `ha apps logs local_mbusd \| tail -20` | только `conn_open()`/`conn_close()` — **запросы до порта не доходят** | + +**Интерпретация:** TCP-уровень работает (соединение принимается, `conn_open` от `192.168.2.176`, `172.30.32.1`, `192.168.2.157`), но **по serial-шине обмена нет** → Modbus RTU не получает ответов от slave 11 (заслонки). HA показывает exception **0x0B** = `GATEWAY TARGET DEVICE FAILED TO RESPOND`. + +**Вывод: конфиг верный, дело в физике.** Варианты: линии **A/B** вентиляционной шины не подключены к CH340 #2, либо шина обесточена, либо неверны slave-адреса/скорость. **Работа за Alex** — проверить физическое подключение CH340 #2 к шине вентиляции. + +> ⚠️ Проверить, что CH340 #2 действительно смотрит на вентиляцию (а не перепутан с ZONT), **без физического вмешательства нельзя** — на шине вентиляции никто не отвечает, эталонного трафика для сравнения нет. См. §«ОПАСНОСТЬ ТИХОГО СБОЯ» выше. +> +> ℹ️ **Конфиг HA modbus:** `configuration.yaml` → `modbus: [{name: rtu_bus, type: tcp, host: 192.168.2.176, port: 502}]`. Slave 10 (AT2 fans) **закомментирован** в конфиге с пометкой «not responding on vent bus» — чтобы не блокировать опрос заслонок. После починки шины — раскомментировать. + ## Установленные аддоны (обновлено 2026-09-14) | Аддон | Slug | Версия | Состояние | Порты | diff --git a/family/plans/t610-addons-deployment.md b/family/plans/t610-addons-deployment.md index 1c7fc9c8..ecbe4d01 100644 --- a/family/plans/t610-addons-deployment.md +++ b/family/plans/t610-addons-deployment.md @@ -9,7 +9,7 @@ tags: - haos - addons created: '2026-09-13' -updated: '2026-09-14' +updated: '2026-09-15' related: - '[[family/plans/home-automation-migration-t610]]' - '[[family/how-to/home-automation]]' @@ -23,6 +23,7 @@ related: > **modbus.host исправлен: `127.0.0.1` → `192.168.2.176`** (mbusd в отдельном контейнере — `127.0.0.1` изнутри HA его не видел). > **modbus-bridge: HTTP 404 → 200.** Опрашивал HA по hex-`entity_id`; правился `modbus_ha_bridge.py` + `data/config.template.tmpl` + **обязательный rebuild аддона**. > ⚠️ **ЕДИНСТВЕННЫЙ ОСТАВШИЙСЯ БЛОКЕР (физика, не конфиг): 32 заслонки вентиляции `unavailable`.** mbusd работает (TCP отвечает), но шина **не отвечает** — exception **0x0B** (GATEWAY TARGET DEVICE FAILED TO RESPOND). Вывод: **CH340 #2 воткнут в USB, но линии A/B вентиляционной шины к нему не подключены / шина обесточена.** За Alex. +> 🔍 **Разбор mbusd доведён 2026-09-14 (конец сессии):** аддон настроен верно — `device` = `by-path ...0:4:1.0-port0` (CH340 #2, порт 4), speed 9600, mode 8n1, порт **502 открыт**, TCP принимает соединения (`conn_open` в логе). Но лог mbusd показывает **только `conn_open`/`conn_close` — ни одного байта в serial**, Modbus-запрос к slave 11 (`printf '\x0b\x03\x00\x00\x00\x01\xd5\xba' | nc 192.168.2.176 502`) → **пусто**. Значит проблема **не в конфиге**, а в физике шины. Полная таблица проверок: [[family/how-to/t610-access]] §«Диагностика шины вентиляции (mbusd)». > ⚠️ **`unknown` после рестарта HA — ПРОВЕРЕНО ЭКСПЕРИМЕНТОМ 2026-09-14.** Реле/кнопки слетают в `unknown` при каждой перезагрузке HA, но **состояния возвращаются сами через ~40–60 с** (без нажатий) — их переопубликовывает z2m, увидев birth-message HA (`homeassistant/status`). `retain` для этого НЕ нужен и фактически не публикуется. ✅ **ФИКС ПРИМЕНЁН: `not_from: [unavailable, unknown]` убран из триггеров** (`automations.yaml`, 2 шт.) — кнопка срабатывает **с первого нажатия**, проверено на живом (l1 и l2, вкл+выкл). Полностью: §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ③‑тер. > **✅ ЗОНЫ ВОССТАНОВЛЕНЫ (18 устройств):** при переносе `area_id` теряются так же, как `device_id` (устройства ре-регистрируются) → все 14 zigbee были **без зон**. Проставлены по эталону с TrueNAS по zigbee-адресу. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ①. > **✅ office-переключатель управляет светом:** устранены hex-`entity_id` **в триггерах** автоматизаций (`switch.0xa4c13873b5c1575b_l1/l2` → человеческие) + реле выведены из `unknown` физическим нажатием. Цепочка `light → switch_as_x → z2m → реле` проверена. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ②③. @@ -1074,7 +1075,8 @@ curl -s -K /tmp/curl.auth http://192.168.2.176/api/states \ - [x] ✅ **ИСПРАВЛЕНО 2026-09-14 — modbus.host:** `127.0.0.1` → `192.168.2.176`. - [x] ✅ **ИСПРАВЛЕНО 2026-09-14 — modbus-bridge 404:** hex-entity_id в коде аддона → человеческие + `ha addons rebuild`. - [x] ✅ **ВЫПОЛНЕНО 2026-09-14 (поздняя сессия) — Zigbee-розетка `boiler_controller_power` добавлена** (`0xa4c1381694217e10`, TS011F, зона Котельная) как питание контроллеров котлов; 13 сущностей переименованы из hex. **Итого z2m = 15 устройств, реестр = 332 сущности, hex = 0.** -- [ ] ⏸️ **ГЛАВНЫЙ ОСТАВШИЙСЯ БЛОКЕР (аппаратный, за Alex):** 32 заслонки вентиляции `unavailable` — шина не отвечает (exception 0x0B). Подключить линии A/B к CH340 #2 (`by-path ...0:4:1.0-port0`, slave 11). Конфиг верный, оживут сами. +- [ ] ⏸️ **ГЛАВНЫЙ ОСТАВШИЙСЯ БЛОКЕР (аппаратный, за Alex):** 32 заслонки вентиляции `unavailable` — шина не отвечает (exception 0x0B). Подключить линии A/B к CH340 #2 (`by-path ...0:4:1.0-port0`, slave 11). Конфиг верный, оживут сами. **Разбор доведён 2026-09-14:** mbusd слушает 502, TCP принимает, но в логе только `conn_open/close` (ни байта в serial), Modbus-запрос → пусто. Значит физика, не конфиг. Детали: [[family/how-to/t610-access]] §«Диагностика шины вентиляции». +- [x] ✅ **ПОДТВЕРЖДЕНО 2026-09-14 (конец сессии) — привязка CH340 только по `by-path`.** На живом t610 доказано: в `/dev/serial/by-id/` для двух CH340 существует **ровно ОДИН симлинк** (`usb-1a86_USB_Serial-if00-port0 → ttyUSB1`) — ссылки на `ttyUSB0` через by-id нет вообще (оба адаптера без серийников). by-id физически не может адресовать второй адаптер. 🔴 **Плюс зафиксирована опасность тихого сбоя:** перепутывание кабелей CH340 #1/#2 не проявится ошибкой (оба аддона поднимутся, но будут работать не с теми шинами) — детали в [[family/how-to/t610-access]] §«ГЛАВНЫЙ ПИТФОЛЛ». - [ ] Камера (§8 родительского плана) — не аддон, разбираться отдельно - [x] ✅ **ВЫПОЛНЕНО 2026-09-14 (конец сессии) — ЗОНЫ восстановлены у 18 устройств.** `area_id` теряется при ре-регистрации устройств (как `device_id`) — все 14 zigbee были без зон. Проставлены по эталону с TrueNAS по `identifiers[0][1]` (`zigbee2mqtt_`). Скрипт: `~/tmp-t610/etap3-fix/set_all_areas.jq`. - [x] ✅ **ИСПРАВЛЕНО 2026-09-14 (конец сессии) — office-переключатель:** hex-`entity_id` в **триггерах** автоматизаций (`switch.0xa4c13873b5c1575b_l1/l2` → `switch.office_table_light_switch_l1/l2`); реле выведены из `unknown` нажатием кнопок. Цепочка управления светом проверена на живом.