[2026-09-14] eagle: family/how-to/t610-access.md family/plans/t610-addons-deployment.md

This commit is contained in:
Alexey Martemyanov
2026-09-14 13:21:31 +06:00
parent 6a690f8921
commit e898e5c022
2 changed files with 26 additions and 6 deletions
+20 -3
View File
@@ -23,7 +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.
> ⚠️ **`unknown` после рестарта HA — ПРОВЕРЕНО ЭКСПЕРИМЕНТОМ 2026-09-14, воспроизводится.** Реле/кнопки слетают в `unknown` при каждой перезагрузке HA; `retain: true` + `cache_state*` в z2m стоят, но не помогают. Практический эффект: первое нажатие кнопки после рестарта не срабатывает. **Открытый фикс: убрать `not_from: [unknown]` из триггеров** (не применён). См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ③‑бис.
> ⚠️ **`unknown` после рестарта HA — ПРОВЕРЕНО ЭКСПЕРИМЕНТОМ 2026-09-14, воспроизводится.** Реле/кнопки слетают в `unknown` при каждой перезагрузке HA; `retain: true` + `cache_state*` в z2m стоят, но не помогают. ✅ **ФИКС ПРИМЕНЁН: `not_from: [unavailable, unknown]` убран из триггеров** (`automations.yaml`, 2 шт.) — кнопка теперь срабатывает **с первого нажатия**, проверено на живом (l1 и l2, вкл+выкл). ⏳ Осталось выяснить, доходит ли cached-стейт из `state.json` до HA до первого события от устройства. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ③‑бис.
> **✅ ЗОНЫ ВОССТАНОВЛЕНЫ (18 устройств):** при переносе `area_id` теряются так же, как `device_id` (устройства ре-регистрируются) → все 14 zigbee были **без зон**. Проставлены по эталону с TrueNAS по zigbee-адресу. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ①.
> **✅ office-переключатель управляет светом:** устранены hex-`entity_id` **в триггерах** автоматизаций (`switch.0xa4c13873b5c1575b_l1/l2` → человеческие) + реле выведены из `unknown` физическим нажатием. Цепочка `light → switch_as_x → z2m → реле` проверена. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ②③.
> Сервисы: z2m (14 устройств), mbusd (502), modbus-bridge (MQTT + HA-опрос), MQTT-интеграция в HA.
@@ -946,7 +946,23 @@ curl -s -X POST -K curl.auth -H "Content-Type: application/json" \
**Практическое следствие:** триггер `platform: state` с `not_from: [unavailable, unknown]` **не сработает на первое нажатие после рестарта** (`unknown` блокирует) — нужно второе.
**Фикс (точечный, не зависит от z2m):** убрать `not_from: [unknown]` из триггеров кнопок в `automations.yaml`.
⚠️ На момент записи фикс **НЕ применён** — ожидает решения Alex (альтернатива: копать, почему `cache_state_send_on_startup` не отрабатывает — без гарантии).
**ПРИМЕНЁН И ПРОВЕРЕН 2026-09-14.** `not_from: [unavailable, unknown]` удалён из обоих офисных триггеров (`office_pass_switch_table`, `office_pass_switch_main`). Залит файл + рестарт HA. **Проверка на живом (toggle реле через z2m, эмуляция нажатия):**
```
mosquitto_pub … -t 'zigbee2mqtt/office_table_light_switch/set' -m '{"state_l1":"TOGGLE"}'
→ switch.office_table_light_switch_l1: on→off
→ light.smart_light_office_left: off→ON ✅ свет включился С ПЕРВОГО нажатия
→ switch.smart_light_office_left: off→on (физическое реле сработало)
```
Оба канала (l1→`light.smart_light_office_left`, l2→`light.smart_light_office_right`) проверены на вкл и выкл. **Бэкап: `/config/automations.yaml.bak-20260914-131541`**, локально `~/tmp-t610/` + `/tmp/autom_pre.yaml`.
> 🔑 **Почему так, а не иначе (объяснение Alex, которое он и просил закодить):** `not_from: [unknown]` — это ЗАЩИТА, задуманная верно: при старте HA состояние = `unknown`, затем устройство присылает реальный стейт, и без защиты это выглядело бы как «переключение» → свет бы щёлкал сам. Но защита стояла **слишком широко**: она блокировала и первое НАСТОЯЩЕЕ нажатие. На TrueNAS баг не вылезал, потому что HA там почти не перезагружали.
> **Чего хотел Alex:** «запоминать стейт на момент перезагрузки», чтобы после рестарта сразу был `on`/`off`, а не `unknown`.
> ✅ **Этот механизм в z2m УЖЕ настроен и хранит стейт на диске.** Кэш: **`/homeassistant/zigbee2mqtt/state.json`** (не `/config/zigbee2mqtt`, не `/addon_configs/…` — проверить `find / -name state.json`) — плоский JSON `{ieee: {param: value}}`, пишется при каждом событии, среди прочего:
> ```json
> "0xa4c13873b5c1575b": { "state_l1": "ON", "state_l2": "ON" },
> "0xa4c1381186ed1a32": { "state_left": "OFF", "state_right": "OFF" }
> ```
> При старте z2m с `cache_state_send_on_startup: true` эти значения **должны** переопубликовываться. **Остаётся открытым:** приходит ли cached-стейт к HA **до** того, как устройство пришлёт своё (тогда `unknown` не появится вовсе и `not_from` можно вернуть в узком виде). Проверяется так: рестарт HA + снятие состояния каждые 2 с → видно последовательность `unknown`→cached `ON` или `unknown`→`ON`(от устройства). **Эксперимент не доведён.**
> ℹ️ Датчики (t°/освещённость/радар) выходят из `unknown` сами за секунды-минуты — страдают только **реле и кнопки**.
> ℹ️ Проверка живости узла без нажатия — `get`-запрос: `mosquitto_pub … -t 'zigbee2mqtt/<name>/get' -m '{"state_l1":""}'` → устройство отвечает текущим состоянием.
@@ -1005,7 +1021,8 @@ curl -s -X POST -K curl.auth -H "Content-Type: application/json" \
- [x]**ИСПРАВЛЕНО 2026-09-14 (конец сессии) — office-переключатель:** hex-`entity_id` в **триггерах** автоматизаций (`switch.0xa4c13873b5c1575b_l1/l2``switch.office_table_light_switch_l1/l2`); реле выведены из `unknown` нажатием кнопок. Цепочка управления светом проверена на живом.
- [x]**УСТАНОВЛЕНО 2026-09-14 (конец сессии) — z2m не публикует состояние пассивно:** реле «залипают» в `unknown` до первого события. Живость проверять по `lastSeen` в `database.db` (JSON-lines, читать построчно).
- [x]**ПРОВЕРЕНО ЭКСПЕРИМЕНТОМ 2026-09-14 — `unknown` возвращается после рестарта HA.** Зафиксировано состояние → рестарт → состояние снято: всё `on`/`off` слетело в `unknown`. `retain: true` + `cache_state*` в z2m стоят, но retained на топиках устройств фактически не публикуется (контроль: `bridge/state` retained есть). Питфолл: `mosquitto_sub -R` в аддоне врёт. См. §«ДОБАВЛЕНО В КОНЦЕ СЕССИИ» ③‑бис.
- [ ] ⚠️ **ОТКРЫТО (на решение Alex): убрать `not_from: [unknown]` из триггеров кнопок** в `automations.yaml` — иначе первое нажатие после рестарта HA не срабатывает (`unknown` блокирует триггер). Альтернатива — копать `cache_state_send_on_startup`. **Фикс не применён.**
- [x] **ВЫПОЛНЕНО 2026-09-14 (конец сессии, после объяснения Alex) `not_from: [unavailable, unknown]` УБРАН** из триггеров `office_pass_switch_table`/`office_pass_switch_main`. Кнопка срабатывает **с первого нажатия после рестарта**; проверено на живом toggle'ом через z2m на обоих каналах. Бэкап `/config/automations.yaml.bak-20260914-131541`.
- [ ]**ОТКРЫТО (низкий приоритет):** выяснить, доходит ли cached-стейт из `/homeassistant/zigbee2mqtt/state.json` до HA **до** первого события от устройства. Если да — `unknown` после рестарта исчезнет вовсе, и защиту `not_from` можно вернуть в узком виде (только против фантомного переключения). Метод: рестарт HA + снятие состояния каждые 2 с.
- [ ] ⚠️ Незакреплённое: `sensor.0xa4c138f8da8bc478_voltage/energy/power/current` (11 hex-сущностей розетки Насос обратки) — проживут ли под новым `friendly_name` или создадутся дубли; проверить после шага 8.
## Связанные заметки