[2026-09-15] Zigbee: единые ID 23 устройств, 12 алертов батарей, virtual Modbus slave 105-112, fix slave 100
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
title: "🏠 Домашняя автоматизация"
|
title: "🏠 Домашняя автоматизация"
|
||||||
aliases: [Умный дом, Home automation, HA, Zigbee, Modbus, вентиляция, t610, RCU stall, USB reset]
|
aliases: [Умный дом, Home automation, HA, Zigbee, Modbus, вентиляция, t610, RCU stall, USB reset]
|
||||||
tags: [family, how-to, smarthome]
|
tags: [family, how-to, smarthome]
|
||||||
updated: 2026-09-15 (✅ §9 — CO2 ЗАКРЫТ, `correction_offset` убраны, 848/599 ppm. §3.9 — память: 4 ГБ BIOS → 3.31 ГБ usable, «1.44 ГБ» была ошибкой чтения `MemFree`. Датчик «Темп теплый пол душевая» добавлен. Дока Zigbee переписана в справочник: [[family/tech/zigbee-t610-z2m-i-zha]])
|
updated: 2026-09-15 (✅ поздний вечер — Zigbee: +7 новых TS0201 тёплых полов, единый вид ID у 23 устройств, 12 алертов батарей, виртуальные Modbus slave 105–112 в bridge; исправлен slave 100, отдававший `0`. §9 — CO2 ЗАКРЫТ. §3.9 — память: 4 ГБ BIOS → 3.31 ГБ usable. Дока Zigbee — [[family/tech/zigbee-t610-z2m-i-zha]])
|
||||||
---
|
---
|
||||||
|
|
||||||
# 🏠 Домашняя автоматизация
|
# 🏠 Домашняя автоматизация
|
||||||
@@ -43,9 +43,11 @@ updated: 2026-09-15 (✅ §9 — CO2 ЗАКРЫТ, `correction_offset` убра
|
|||||||
|
|
||||||
> 🟢 **ZIGBEE: РАБОТАЕТ НА ZHA (2026-09-15).** Интеграция ZHA (встроена в HA), координатор — тот же стик. Z2M **остановлен**, не удалён (данные целы в `/config/zigbee2mqtt/`).
|
> 🟢 **ZIGBEE: РАБОТАЕТ НА ZHA (2026-09-15).** Интеграция ZHA (встроена в HA), координатор — тот же стик. Z2M **остановлен**, не удалён (данные целы в `/config/zigbee2mqtt/`).
|
||||||
>
|
>
|
||||||
> **Итог:** удалены три слоя мусора (127 сущностей `platform=mqtt` + 18 устройств); сущности и 16 устройств переименованы; 11 зон (Areas) восстановлены; **17 записей в ZHA (16 устройств + координатор), `unavailable` = 0**; **14 автоматизаций: 13 `on`, 1 `off` намеренно** (`Ventilation automation on`); кнопка спальни шлёт события, диммер рулится; свет лестницы + 2 сценария подсветки работают.
|
> **Итог:** удалены три слоя мусора (127 сущностей `platform=mqtt` + 18 устройств); **23 устройства ZHA** с читаемыми ID в едином виде (`<зона>_<роль>`), все в зонах; **12 автоматизаций контроля батарей** (порог 20 %, push + persistent); **9 температурных Zigbee-датчиков** отдаются ZONT'у как виртуальные Modbus slave **100, 105–112**; **26 автоматизаций: 25 `on`, 1 `off` намеренно** (`Ventilation automation on`); кнопка спальни шлёт события, диммер рулится; свет лестницы + 2 сценария подсветки работают.
|
||||||
>
|
>
|
||||||
> 📌 **Перепаривание НЕ нужно — подтверждено фактом.** Устройства отвечают координатору, ZHA принимает их по NVRAM-сети. Имена даёт технические (`light.tz3000_*`), т.к. `friendly_name` из Z2M не читает — переименованы вручную.
|
> 🔴 **Ключевой факт:** переименование HA-сущности **молча ломает** маппинг bridge → slave отдаёт `0`. Проверено на живом случае: slave 100 (кабинет) отдавал `0`, после правки — `23.97`. Правило: **переименовал сущность → проверь `data/config.template.tmpl` + `rebuild` + ссылки в `automations.yaml`.**
|
||||||
|
>
|
||||||
|
> 📌 **Перепаривание НЕ нужно — подтверждено фактом.** Устройства отвечают координатору, ZHA принимает их по NVRAM-сети. Имена даёт технические (`light.tz3000_*`) — переименованы вручную (HA НЕ перегенерирует `entity_id` при смене `name_by_user`).
|
||||||
>
|
>
|
||||||
> Полный справочник по текущему конфигу: координатор, карта 16 устройств по IEEE, кнопка+диммер, свет лестницы, рецепт миграции, ZHA WebSocket API, питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]].
|
> Полный справочник по текущему конфигу: координатор, карта 16 устройств по IEEE, кнопка+диммер, свет лестницы, рецепт миграции, ZHA WebSocket API, питфоллы — [[family/tech/zigbee-t610-z2m-i-zha]].
|
||||||
|
|
||||||
@@ -567,8 +569,10 @@ curl -s -H @/tmp/h1 "$B/api/config/automation/config/<ID>" > /tmp/aut_<ID>.json
|
|||||||
### Правило адресов
|
### Правило адресов
|
||||||
|
|
||||||
- **Реальные 485:** `1–99` (датчики 1/2/3, AT2 = 10, relay 11/12/13/14, газ-котёл вкл = 20).
|
- **Реальные 485:** `1–99` (датчики 1/2/3, AT2 = 10, relay 11/12/13/14, газ-котёл вкл = 20).
|
||||||
- **Виртуальные (bridge):** `100–247` — `100` Tuya Zigbee, `101/102/103` Гостиная/Детская/Спальня (рег. 100), `104:1` Zigbee-реле котла.
|
- **Виртуальные (bridge):** `100–112` — `100` кабинет (бывш. `office_temperature_sensor`), `101/102/103` Гостиная/Детская/Спальня (рег. 100), `104:1` Zigbee-реле котла, **`105–112` температурные Zigbee-датчики тёплых полов** (гостиная/серая/кабинет/кухня/ванная/прихожая/душевая/туалет).
|
||||||
- **Свободно:** `105+`; у 100/102/103 — только регистры ≠ 100. `104:2+` свободны.
|
- **Свободно:** `113+`; у 100/102/103 — только регистры ≠ 100. `104:2+` свободны.
|
||||||
|
- ⚠️ **Маппинг ссылается на HA-сущность по имени.** Переименовал сущность — поправь `data/config.template.tmpl` + `rebuild`, иначе slave молча отдаёт `0`. Реальный случай 2026-09-15: slave 100 = `0` → после правки `23.97`.
|
||||||
|
- ⚠️ **Проверка slave'а без ZONT:** bridge отвечает только на запрос. Смотреть `HA poll -> sensor.<entity> = <val>` (поллер жив) и `Response: ... = <val> [<hex>]` (ответил ZONT'у).
|
||||||
- Занятость проверять **по двум источникам:** эта карта + `/addons/modbus-bridge/data/config.template.tmpl` на t610.
|
- Занятость проверять **по двум источникам:** эта карта + `/addons/modbus-bridge/data/config.template.tmpl` на t610.
|
||||||
- После правки шаблона — **обязателен rebuild** (см. §3).
|
- После правки шаблона — **обязателен rebuild** (см. §3).
|
||||||
- `value_map` при write: `value_map.get(reg_val, 1 if reg_val else 0)`; для чужих кодов (ZONT `0x0100`/`0x0200`) маппить явно: `{0:0, 1:1, 256:0, 512:1}`.
|
- `value_map` при write: `value_map.get(reg_val, 1 if reg_val else 0)`; для чужих кодов (ZONT `0x0100`/`0x0200`) маппить явно: `{0:0, 1:1, 256:0, 512:1}`.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ created: '2026-09-15'
|
|||||||
updated: '2026-09-15'
|
updated: '2026-09-15'
|
||||||
type: plan
|
type: plan
|
||||||
namespace: family
|
namespace: family
|
||||||
status: 🟡 ПЛАН НА УТВЕРЖДЕНИИ
|
status: 🟢 ВЫПОЛНЕНО 2026-09-15 (поздний вечер). Все 4 шага закрыты, проверено фактами.
|
||||||
tags:
|
tags:
|
||||||
- t610
|
- t610
|
||||||
- zigbee
|
- zigbee
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
title: "Zigbee на t610 — ZHA (справочник)"
|
title: "Zigbee на t610 — ZHA (справочник)"
|
||||||
created: '2026-09-15'
|
created: '2026-09-15'
|
||||||
updated: '2026-09-15'
|
updated: '2026-09-15 (поздний вечер: +7 новых TS0201 тёплых полов, ЕДИНООБРАЗИЕ ID у 23 устройств, 12 алертов батарей, виртуальные Modbus slave 105–112)'
|
||||||
type: tech
|
type: tech
|
||||||
namespace: family
|
namespace: family
|
||||||
status: 🟢 РАБОТАЕТ. ZHA: 17 записей (16 устройств + координатор), `unavailable` = 0. 14 автоматизаций: 13 `on`, 1 `off` намеренно (`Ventilation automation on`).
|
status: 🟢 РАБОТАЕТ. ZHA: 24 записи (23 устройства + координатор), `unavailable` = 0. Все устройства с читаемыми ID в едином виде, все в зонах. 26 автоматизаций: 25 `on`, 1 `off` намеренно. Bridge: 9 Zigbee-температур отдаются ZONT'у (slave 100–112).
|
||||||
tags:
|
tags:
|
||||||
- t610
|
- t610
|
||||||
- haos
|
- haos
|
||||||
@@ -42,26 +42,54 @@ related:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Устройства (16 + координатор)
|
## 2. Устройства (23 + координатор)
|
||||||
|
|
||||||
| IEEE | Имя | modelId | Тип |
|
> 🗓 **2026-09-15 (поздний вечер): +7 новых TS0201 (тёплые полы), проведено ЕДИНООБРАЗИЕ ID.** Все 23 устройства имеют читаемые `name_by_user`; все сущности — вид `<device>_<role>` (`_temperature`, `_humidity`, `_battery`, `_lqi`, `_rssi`, `_identify`, `_firmware`). Все устройства в зонах, «без зоны» — нет.
|
||||||
|---|---|---|---|
|
|
||||||
| `a4c13862d39377e6` | `office_temperature_sensor` | TS0201 | EndDevice (батарея) |
|
| IEEE | Имя | modelId | Тип | Зона |
|
||||||
| `a4c138f8da8bc478` | `recirculation_pump` | TS011F | Router — на нём висит `modbus-bridge` (relay slave 104) |
|
|---|---|---|---|---|
|
||||||
| `84fd27fffed9e137` | `night_light_shower_2` | TS0001 | Router |
|
| `a4c13862d39377e6` | `kabinet_temperature` (бывш. `office_temperature_sensor`) | TS0201 | EndDevice (батарея) | kabinet |
|
||||||
| `a4c1386d40ddb67b` | `light_sensor_stairs` | TS0222 | EndDevice (батарея) |
|
| `a4c138f8da8bc478` | `recirculation_pump` | TS011F | Router — на нём висит `modbus-bridge` (relay slave 101/1) | kotelnaia |
|
||||||
| `a4c1381186ed1a32` | `smart_light_office` | TS0012 | EndDevice |
|
| `84fd27fffed9e137` | `night_light_shower_2` | TS0001 | Router | dushevaia |
|
||||||
| `a4c13873b5c1575b` | `office_table_light_switch` | TS0002 | Router |
|
| `a4c1386d40ddb67b` | `light_sensor_stairs` | TS0222 | EndDevice (батарея) | lestnitsa |
|
||||||
| `a4c13807b64c7fd4` | `kitchen_hood` | TS0003 | Router |
|
| `a4c1381186ed1a32` | `smart_light_office` | TS0012 | EndDevice | kabinet |
|
||||||
| `a4c1386d0839706a` | `light_stairs` | TS0002 | Router |
|
| `a4c13873b5c1575b` | `office_table_light_switch` | TS0002 | Router | kabinet |
|
||||||
| `a4c138eb6fbe9d19` | `heating_cable_plug` | TS011F | Router |
|
| `a4c13807b64c7fd4` | `kitchen_hood` | TS0003 | Router | kitchen |
|
||||||
| `a4c1384fbe0b3a6b` | `sauna` (`_TZ3210_nhqka112`) | TS011F | Router |
|
| `a4c1386d0839706a` | `light_stairs` | TS0002 | Router | lestnitsa |
|
||||||
| `a4c138b0f9e674a5` | `wireless_light_switch_bed` | TS0041 | EndDevice (батарея) |
|
| `a4c138eb6fbe9d19` | `heating_cable_plug` | TS011F | Router | kotelnaia |
|
||||||
| `a4c13882a4b42db0` | `bed_dimmer` (`_TZ3000_ooc8illt`) | TS0052 | Router |
|
| `a4c1384fbe0b3a6b` | `sauna` (`_TZ3210_nhqka112`) | TS011F | Router | tualet |
|
||||||
| `a4c138c4a94a6a31` | `shower_2_presence_sensor` | TS0601 | Router (mmWave) |
|
| `a4c138b0f9e674a5` | `wireless_light_switch_bed` | TS0041 | EndDevice (батарея) | bedroom |
|
||||||
| `a4c1381694217e10` | `boiler_controller_power` | TS011F | Router |
|
| `a4c13882a4b42db0` | `bed_dimmer` (`_TZ3000_ooc8illt`) | TS0052 | Router | bedroom |
|
||||||
| `a4c1383d5fcaa063` | `boiler_water_leak` | TS0207 | EndDevice |
|
| `a4c138c4a94a6a31` | `shower_2_presence_sensor` | TS0601 | Router (mmWave) | dushevaia |
|
||||||
| `a4c138c650636cf6` | `toilet_1_floor_temperature` | TS0201 | EndDevice |
|
| `a4c1381694217e10` | `boiler_controller_power` | TS011F | Router | kotelnaia |
|
||||||
|
| `a4c1383d5fcaa063` | `boiler_water_leak` | TS0207 | EndDevice (батарея) | kotelnaia |
|
||||||
|
| `a4c138c650636cf6` | `toilet_1_floor_temperature` | TS0201 | EndDevice (батарея) | tualet |
|
||||||
|
| `a4c13827ea585609` | `living_room_floor_temperature` | TS0201 | EndDevice (батарея) | living_room |
|
||||||
|
| `a4c1382ac15720dd` | `severnaia_floor_temperature` | TS0201 | EndDevice (батарея) | severnaia |
|
||||||
|
| `a4c1382dac5e10e2` | `kabinet_floor_temperature` | TS0201 | EndDevice (батарея) | kabinet |
|
||||||
|
| `a4c13837021f5298` | `kitchen_floor_temperature` | TS0201 | EndDevice (батарея) | kitchen |
|
||||||
|
| `a4c13867875ee7d3` | `vannaia_floor_temperature` | TS0201 | EndDevice (батарея) | vannaia |
|
||||||
|
| `a4c138cde6eed013` | `prikhozhaia_floor_temperature` | TS0201 | EndDevice (батарея) | prikhozhaia |
|
||||||
|
| `a4c13865e226312d` | `dushevaia_floor_temperature` | TS0201 | EndDevice (батарея) | dushevaia |
|
||||||
|
|
||||||
|
> 🔴 **`sauna` = зона `tualet` (Туалет 1) — ЭТО ПРАВИЛЬНО, подтверждено Alex.** Не путать с `bed_dimmer` (Спальня).
|
||||||
|
> 📌 **Единый вид сущностей:** `sensor.<device>_temperature` / `_humidity` / `_battery` / `_lqi` / `_rssi`, `button.<device>_identify`, `update.<device>_firmware`. Для реле: `sensor.<device>_power` / `_voltage` / `_current` / `_energy`, `select.<device>_indicator_mode` / `_power_outage_memory`.
|
||||||
|
> 📌 **Прихожая** ранее имела ошибочный префикс `tualet_` — исправлено на `prikhozhaia_floor_temperature`.
|
||||||
|
> 📌 **Координатор** `Inswift ZBP-MG21` — 45 диагностических сущностей, все `disabled_by: integration`.
|
||||||
|
|
||||||
|
### 2.1. 🔴 Как переименовывать (проверенный рецепт 2026-09-15)
|
||||||
|
|
||||||
|
**Смена `name_by_user` у устройства НЕ переименовывает `entity_id`** — HA перегенерирует их только у новых сущностей. Обязательны два шага:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Шаг 1 — имя устройства
|
||||||
|
{"type":"config/device_registry/update","device_id": D, "name_by_user": "living_room_floor_temperature"}
|
||||||
|
# Шаг 2 — каждая сущность отдельно
|
||||||
|
{"type":"config/entity_registry/update","entity_id":"sensor.old_name","new_entity_id":"sensor.new_name"}
|
||||||
|
```
|
||||||
|
> ⚠️ **После переименования проверить ссылки в `automations.yaml`** — старые `entity_id` рвутся молча. Проверка: вытащить все `entity_id:` из YAML, сверить со списком `/api/states`.
|
||||||
|
> ⚠️ Записи автоматизаций со старым `device_id`/`entity_id` остаются в реестре как сироты `unavailable` → удалять через WS `config/entity_registry/remove`. Если падает с `id_reuse: Identifier values have to increase` — сначала `update` c `disabled_by: user`, затем `remove`.
|
||||||
|
> ⚠️ Переименование сущности **не меняет `area_id`**; но удаление `device_id` — сбрасывает (питфолл 3).
|
||||||
|
|
||||||
> 🔴 **`sauna` = `_TZ3210_nhqka112` TS011F (реле), `bed_dimmer` = `_TZ3000_ooc8illt` TS0052 (диммер).** Источник истины — `database.db` (IEEE + modelId + manufName в одной строке).
|
> 🔴 **`sauna` = `_TZ3210_nhqka112` TS011F (реле), `bed_dimmer` = `_TZ3000_ooc8illt` TS0052 (диммер).** Источник истины — `database.db` (IEEE + modelId + manufName в одной строке).
|
||||||
> ⚠️ `shower_2_presence_sensor` (`_TZE204_qasjif9e`, TS0601, Mains) — mmWave-радар присутствия, не датчик климата.
|
> ⚠️ `shower_2_presence_sensor` (`_TZE204_qasjif9e`, TS0601, Mains) — mmWave-радар присутствия, не датчик климата.
|
||||||
@@ -90,7 +118,89 @@ light_sensor_stairs
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. Кнопка спальни и диммер — рабочая связка
|
## 4. Батарейные устройства и оповещения (12 автоматизаций)
|
||||||
|
|
||||||
|
**Батарейных Zigbee-устройств — 11** (All TS0201 ×8, TS0222, TS0207, TS0041 → итого 11):
|
||||||
|
|
||||||
|
| Сущность заряда | Место |
|
||||||
|
|---|---|
|
||||||
|
| `sensor.toilet_1_floor_temperature_battery` | Туалет 1 (тёплый пол) |
|
||||||
|
| `sensor.light_sensor_stairs_battery` | Лестница (освещённость) |
|
||||||
|
| `sensor.dushevaia_floor_temperature_battery` | Душевая (тёплый пол) |
|
||||||
|
| `sensor.boiler_water_leak_battery` | Котельная (протечка) |
|
||||||
|
| `sensor.kabinet_temperature_battery` | Кабинет (температура) |
|
||||||
|
| `sensor.living_room_floor_temperature_battery` | Гостиная (тёплый пол) |
|
||||||
|
| `sensor.severnaia_floor_temperature_battery` | Серая (тёплый пол) |
|
||||||
|
| `sensor.kabinet_floor_temperature_battery` | Кабинет (тёплый пол) |
|
||||||
|
| `sensor.kitchen_floor_temperature_battery` | Кухня (тёплый пол) |
|
||||||
|
| `sensor.vannaia_floor_temperature_battery` | Ванная (тёплый пол) |
|
||||||
|
| `sensor.prikhozhaia_floor_temperature_battery` | Прихожая (тёплый пол) |
|
||||||
|
| `sensor.wireless_light_switch_bed_battery` | Спальня (кнопка) |
|
||||||
|
|
||||||
|
### Единый шаблон автоматизации (id `8800000000000`…`8800000000011`)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- id: '8800000000000'
|
||||||
|
alias: 'Батарея: <место>'
|
||||||
|
triggers:
|
||||||
|
- trigger: numeric_state
|
||||||
|
entity_id: sensor.<device>_battery
|
||||||
|
below: 20
|
||||||
|
for: '02:00:00'
|
||||||
|
id: low
|
||||||
|
- trigger: numeric_state
|
||||||
|
entity_id: sensor.<device>_battery
|
||||||
|
above: 20
|
||||||
|
id: ok
|
||||||
|
actions:
|
||||||
|
- choose:
|
||||||
|
- conditions: [{condition: trigger, id: low}]
|
||||||
|
sequence:
|
||||||
|
- action: persistent_notification.create # уведомление в UI
|
||||||
|
- action: notify.mobile_app_sm_s931b # push на телефон
|
||||||
|
- conditions: [{condition: trigger, id: ok}]
|
||||||
|
sequence:
|
||||||
|
- action: persistent_notification.dismiss
|
||||||
|
mode: single
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🔴 **Порог 20 %, выдержка 2 ч.** Выдержка обязательна: батарейные TS0201 под нагрузкой дают кратковременные просадки, без `for:` прилетают ложные алерты.
|
||||||
|
> 🔴 **Двойной канал:** `persistent_notification` (видно в UI) + `notify.mobile_app_sm_s931b` (push). При возврате заряда выше порога уведомление гасится автоматически (`notification_id: bat_<slug>`).
|
||||||
|
> 📌 **Предыдущие 2 автоматизации удалены** (`1773451323415`, `1773459663218`) — были с порогом 10 и без push, заменены единым видом.
|
||||||
|
> 📌 **Границы:** `automations.yaml` генерировать целиком, старый YAML со старыми `device_id` не патчится (питфолл 9).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Виртуальные Modbus-датчики (bridge, slave 100–112)
|
||||||
|
|
||||||
|
Температурные Zigbee-датчики отдаются ZONT'у через `modbus-bridge` как виртуальные slave'ы, регистр **100**, `int16`, `divider: 10`.
|
||||||
|
|
||||||
|
| Slave | HA-сущность | Имя в конфиге |
|
||||||
|
|---|---|---|
|
||||||
|
| **100** | `sensor.kabinet_temperature_temperature` | Room temp (исторический, был `office_temperature_sensor`) |
|
||||||
|
| 101 | снифф `dining_temperature` + запись `switch.recirculation_pump` | Dining temp / Socket 1 |
|
||||||
|
| 102 | снифф `kids_temperature` | Kids Temperature |
|
||||||
|
| 103 | снифф `bedroom_temperature` | Bedroom Temperature |
|
||||||
|
| 104 | `switch.boiler_controller_power` | Boiler controller power (Zigbee relay) |
|
||||||
|
| 105 | `sensor.living_room_floor_temperature_temperature` | Living room floor temp |
|
||||||
|
| 106 | `sensor.severnaia_floor_temperature_temperature` | Severnaia (grey room) floor temp |
|
||||||
|
| 107 | `sensor.kabinet_floor_temperature_temperature` | Kabinet floor temp |
|
||||||
|
| 108 | `sensor.kitchen_floor_temperature_temperature` | Kitchen floor temp |
|
||||||
|
| 109 | `sensor.vannaia_floor_temperature_temperature` | Vannaia floor temp |
|
||||||
|
| 110 | `sensor.prikhozhaia_floor_temperature_temperature` | Prikhozhaia floor temp |
|
||||||
|
| 111 | `sensor.dushevaia_floor_temperature_temperature` | Dushevaia floor temp |
|
||||||
|
| 112 | `sensor.toilet_1_floor_temperature_temperature` | Toilet 1 floor temp |
|
||||||
|
|
||||||
|
> 📌 **Свободно: `113+`.** У 100/102/103 — только регистры ≠ 100.
|
||||||
|
> 🔴 **`rebuild` аддона ОБЯЗАТЕЛЕН** после правки `data/config.template.tmpl` — шаблон впекается в образ (`Dockerfile: COPY data/config.template.tmpl`).
|
||||||
|
> 🔴 **Проверка работоспособности slave'а:** bridge отвечает только на запросы ZONT'а. Проверять **двумя** признаками:
|
||||||
|
> 1. `ha apps logs local_modbus-bridge | grep "HA poll -> sensor.<entity>"` — bridge поллит HA и кэширует.
|
||||||
|
> 2. `... | grep -A3 "Slave: 100"` → `Response: ... (ha:sensor.<entity>) = <val> [<hex>]`.
|
||||||
|
> ⚠️ Если сущность переименована, а маппинг ссылается на старое имя → slave отдаёт **`0`** молча. Симптом именно такой: `= 0 [00 00]`. Проверять после любого переименования.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Кнопка спальни и диммер — рабочая связка
|
||||||
|
|
||||||
**Кнопка** `wireless_light_switch_bed` (`TS0041`, `_TZ3000_kccruoi`) — сущности `event.*` у неё **нет**, она шлёт **`zha_event`**:
|
**Кнопка** `wireless_light_switch_bed` (`TS0041`, `_TZ3000_kccruoi`) — сущности `event.*` у неё **нет**, она шлёт **`zha_event`**:
|
||||||
|
|
||||||
@@ -113,7 +223,7 @@ command press_type, args: [0]
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Свет лестницы и подсветка
|
## 7. Свет лестницы и подсветка
|
||||||
|
|
||||||
```
|
```
|
||||||
light.light_stairs_left / light.light_stairs_right
|
light.light_stairs_left / light.light_stairs_right
|
||||||
@@ -136,7 +246,7 @@ actions: [{action: light.turn_off, target: {entity_id: [light.light_stairs_left
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Миграция Z2M → ZHA (воспроизведение)
|
## 8. Миграция Z2M → ZHA (воспроизведение)
|
||||||
|
|
||||||
**Принцип:** сеть живёт в **NVRAM стика**, не в файлах. Перепаривание не требуется — ZHA поднимает ту же сеть и сама принимает устройства.
|
**Принцип:** сеть живёт в **NVRAM стика**, не в файлах. Перепаривание не требуется — ZHA поднимает ту же сеть и сама принимает устройства.
|
||||||
|
|
||||||
@@ -197,7 +307,7 @@ curl -s -X POST -H "$H" -H "$CT" \
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. ZHA WebSocket API — рабочие команды
|
## 9. ZHA WebSocket API — рабочие команды
|
||||||
|
|
||||||
| Задача | Команда |
|
| Задача | Команда |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -227,7 +337,7 @@ cd ~/tmp-t610 && grep -o 'eyJ[A-Za-z0-9._-]*' ha_token.txt | head -1 > /tmp/.hat
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8. Доступ к HA API на t610
|
## 10. Доступ к HA API на t610
|
||||||
|
|
||||||
| Параметр | Значение |
|
| Параметр | Значение |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -243,7 +353,7 @@ cd ~/tmp-t610 && grep -o 'eyJ[A-Za-z0-9._-]*' ha_token.txt | head -1 > /tmp/.hat
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 9. Snapshot / бэкап
|
## 11. Snapshot / бэкап
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
||||||
@@ -257,7 +367,7 @@ curl -s -H "$HDR" http://supervisor/backups | jq
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 10. Питфоллы
|
## 12. Питфоллы
|
||||||
|
|
||||||
| # | Питфолл | Обход |
|
| # | Питфолл | Обход |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
@@ -277,6 +387,11 @@ curl -s -H "$HDR" http://supervisor/backups | jq
|
|||||||
| 14 | **`sqlite3` в аддоне нет** | `database.db` читать через `strings` |
|
| 14 | **`sqlite3` в аддоне нет** | `database.db` читать через `strings` |
|
||||||
| 15 | **Перепутанные IEEE при переименовании вслепую** | Источник истины — `database.db`, не производные карты |
|
| 15 | **Перепутанные IEEE при переименовании вслепую** | Источник истины — `database.db`, не производные карты |
|
||||||
| 16 | **После переноса часть устройств — EndDevice (батарея), они спят** | Разбудить нажатием паринг-кнопки; это НЕ перепаривание |
|
| 16 | **После переноса часть устройств — EndDevice (батарея), они спят** | Разбудить нажатием паринг-кнопки; это НЕ перепаривание |
|
||||||
|
| 17 | 🔴 **`name_by_user` НЕ переименовывает `entity_id`** | HA меняет entity_id только у новых сущностей. Переименовывать **и устройство, и каждую сущность** отдельно (`device_registry/update` + `entity_registry/update`) |
|
||||||
|
| 18 | 🔴 **После переименования рвутся ссылки в `automations.yaml`** | Молча → автоматизация ссылается на призрак. Проверять: все `entity_id:` из YAML сверить со `/api/states` |
|
||||||
|
| 19 | 🔴 **Сирота-автоматизация: `unavailable`, но YAML чист** | Тело удалено из `automations.yaml`, запись в реестре осталась → `config/entity_registry/remove`. Если `id_reuse: Identifier values have to increase` — сначала `update` c `disabled_by: user`, затем `remove` |
|
||||||
|
| 20 | 🔴 **Modbus slave отдаёт `0 [00 00]` после переименования HA-сущности** | Маппинг ссылается на старое имя. Проверять `HA poll -> sensor.<entity>` в логе bridge. Реальная поломка 2026-09-15: slave 100 отдавал 0, после фикса — 23.97 |
|
||||||
|
| 21 | **Проверить slave bridge без ZONT нельзя** | Bridge — serial-slave: отвечает только на запрос. Признаки работы: `HA poll -> <entity> = <val>` (поллер) и `Response: ... = <val> [<hex>]` (ответ ZONT'у) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user