diff --git a/family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md b/family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md new file mode 100644 index 00000000..70d0cc76 --- /dev/null +++ b/family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md @@ -0,0 +1,190 @@ +--- +title: "План: читаемые ID Zigbee, алерты батарей, виртуальные Modbus-датчики" +created: '2026-09-15' +updated: '2026-09-15' +type: plan +namespace: family +status: 🟡 ПЛАН НА УТВЕРЖДЕНИИ +tags: + - t610 + - zigbee + - zha + - modbus + - battery +related: + - '[[family/tech/zigbee-t610-z2m-i-zha]]' + - '[[family/how-to/home-automation]]' + - '[[family/how-to/ha-automations]]' +--- + +# План: читаемые ID, алерты батарей, виртуальные Modbus-датчики + +> Задача от Alex (2026-09-15): 1) убедиться, что у **всех** Zigbee-устройств читаемые ID; 2) каждому **батарейному** — оповещение о низком заряде; 3) каждый **температурный** Zigbee-датчик прописать как виртуальное устройство Modbus в bridge; 4) обновить доку. + +## 0. Что установлено фактами (снимок 2026-09-15) + +### 0.1. Новые устройства (8 всего, +1 был в доке) +ZHA: **24 записи** (23 устройства + координатор). Было 17. + +| # | Устройство (name_by_user) | IEEE | Модель | Зона | Батарея | +|---|---|---|---|---|---| +| 1 | `Темп теплый пол гостиная` | `a4c13827ea585609` | TS0201 | living_room | ✅ | +| 2 | `Температура серая` | `a4c1382ac15720dd` | TS0201 | severnaia | ✅ | +| 3 | `Темп теплый пол кабинет` | `a4c1382dac5e10e2` | TS0201 | kabinet | ✅ | +| 4 | `Темп теплый пол кухня` | `a4c13837021f5298` | TS0201 | kitchen | ✅ | +| 5 | `Темп теплый пол ванная` | `a4c13867875ee7d3` | TS0201 | vannaia | ✅ | +| 6 | `Темп теплый пол прихожая` | `a4c138cde6eed013` | TS0201 | prikhozhaia | ✅ | +| 7 | `Темп теплый пол душевая` | `a4c13865e226312d` | TS0201 | dushevaia | ✅ (был ранее) | +| 8 | `shower_2_presence_sensor` | `a4c138c4a94a6a31` | TS0601 | dushevaia | ❌ mains | + +Все 12 TS0201 — **батарейные EndDevice**, сущность `Батарея` есть у каждого. + +### 0.2. 🔴 Дефекты ID, найденные при проверке + +| # | Дефект | Пример | Оценка | +|---|---|---|---| +| D1 | **Имя устройства по-русски** (HA транслитерирует) | `Темп теплый пол гостиная` → `sensor.temp_teplyi_pol_gostinaia_temperatura` | 🔴 громоздко, ломает консистентность | +| D2 | **Перепутан префикс: `tualet_` при зоне `prikhozhaia`** | `sensor.tualet_temp_teplyi_pol_prikhozhaia_temperatura` | 🔴 прямая ошибка в имени | +| D3 | **Дубли `_2` / `_3` у LQI/RSSI** (остатки миграции) | `sensor.tz3000_gjnozsaz_ts011f_lqi_2`, `_3` | 🟡 косметика, `disabled_by=integration` | +| D4 | `sauna` — **зона `tualet`**, хотя это реле | `switch.sauna` в зоне ТУАЛЕТ | 🔴 неверная зона | +| D5 | `select`-сущности `sauna` названы `bed_dimmer_*` | `select.bed_dimmer_power_on_behavior` под устройством `sauna` | 🟡 ошибка выбора при переименовании | + +Остальные 16 устройств (реле, свет, кнопки, диммер) — ID читаемые ✅. + +### 0.3. Батарейные устройства и их сущности (7 шт.) + +| Устройство | Сущность батареи | Текущий заряд | +|---|---|---| +| `toilet_1_floor_temperature` | `sensor.toilet_1_floor_temperature_battery` | 100.0 | +| `light_sensor_stairs` | `sensor.light_sensor_stairs_battery` | 100.0 | +| `Темп теплый пол душевая` | `sensor.shower_2_floor_battery` | 100.0 | +| `boiler_water_leak` | `sensor.boiler_water_leak_battery` | 100.0 | +| `wireless_light_switch_bed` | `sensor.tz3000_kccru4oi_ts0041_batareia` | ? | +| `office_temperature_sensor` | `sensor.tz3000_akqdg6g7_ts0201_batareia` | ? | +| 6 × новых TS0201 | `sensor.*_batareia` | ? | + +**Оповещений о низком заряде — НЕТ ни у одного** (проверено: автоматизаций на `battery` нет). + +### 0.4. Modbus-bridge — занятость адресов + +| Slave | Что | Регистр | +|---|---|---| +| 100 | `sensor.office_temperature_sensor_temperature` (Room temp) | 100 | +| 101 | снифф `dining_temperature` + **запись** `switch.recirculation_pump` | 100 / 1 | +| 102 | снифф `kids_temperature` | 100 | +| 103 | снифф `bedroom_temperature` | 100 | +| 104 | Zigbee-реле `switch.boiler_controller_power` | 1 | + +**Свободно: `105+`** (у 100/102/103 — регистры ≠ 100). + +--- + +## 1. План действий + +### Шаг 1. Переименовать устройства в читаемые ID (ZHA) +Живой конфиг bridge — **не трогать** до подтверждения имён. + +Предлагаемая схема имён (единый стиль `<зона>_floor_temperature`): + +| Текущее | Предлагаемое | Итоговые сущности | +|---|---|---| +| `Темп теплый пол гостиная` | `living_room_floor_temperature` | `sensor.living_room_floor_temperature_temperature` | +| `Температура серая` | `severnaia_floor_temperature` | `sensor.severnaia_floor_temperature_temperature` | +| `Темп теплый пол кабинет` | `kabinet_floor_temperature` | `sensor.kabinet_floor_temperature_temperature` | +| `Темп теплый пол кухня` | `kitchen_floor_temperature` | `sensor.kitchen_floor_temperature_temperature` | +| `Темп теплый пол ванная` | `vannaia_floor_temperature` | `sensor.vannaia_floor_temperature_temperature` | +| `Темп теплый пол прихожая` | `prikhozhaia_floor_temperature` | `sensor.prikhozhaia_floor_temperature_temperature` | +| `Темп теплый пол душевая` | `dushevaia_floor_temperature` | `sensor.dushevaia_floor_temperature_temperature` | +| `office_temperature_sensor` | `kabinet_temperature` | `sensor.kabinet_temperature_temperature` | + +> ⚠️ **Переименование душевой затронет уже используемые ID** `sensor.shower_2_floor_temperature/humidity/battery` — их надо либо оставить как есть, либо обновить все ссылки. **Требует решения Alex.** + +Механика: ZHA **не читает** `friendly_name` из Z2M → задавать через `config/device_registry/update` (WS) с `name_by_user`. +⚠️ Питфолл: удаление `device_id` сбрасывает `area_id`; переименование не сбрасывает, но проверять `area_id` после каждой операции. + +### Шаг 2. Починить зону `sauna` (D4) и `select`-имена (D5) +- `sauna` → зона `kotelnaia` (уточнить у Alex: сауна или котельная?) +- `select.bed_dimmer_*` под `sauna` → переименовать в `sauna_*` + +### Шаг 3. Оповещения о низком заряде (7 батарейных) +На каждое устройство — автоматизация: + +```yaml +- id: + alias: "Батарея: <устройство> разряжена" + triggers: + - trigger: numeric_state + entity_id: sensor._battery + below: 20 + for: "02:00:00" + actions: + - action: persistent_notification.create + data: + title: "🔋 Батарея разряжена" + message: "<устройство>: {{ states('sensor._battery') }}%" +``` + +Порог **20 %**, выдержка **2 ч** (защита от просадки под нагрузкой). +⚠️ Домен триггера в ZHA — `battery` → `battery_level`. Проверять имена сущностей (`_battery` vs `_batareia`). +Способ доставки: `persistent_notification` — обсуждаемо (могут быть мобильные нотификации). + +### Шаг 4. Виртуальные Modbus-датчики в bridge +Добавить в `data/config.template.tmpl` секцию `mappings`: + +| Slave | Источник (HA entity) | Регистр | Имя | +|---|---|---|---| +| 105 | `sensor.living_room_floor_temperature_temperature` | 100 | Living room floor temp | +| 106 | `sensor.severnaia_floor_temperature_temperature` | 100 | Severnaia floor temp | +| 107 | `sensor.kabinet_floor_temperature_temperature` | 100 | Kabinet floor temp | +| 108 | `sensor.kitchen_floor_temperature_temperature` | 100 | Kitchen floor temp | +| 109 | `sensor.vannaia_floor_temperature_temperature` | 100 | Vannaia floor temp | +| 110 | `sensor.prikhozhaia_floor_temperature_temperature` | 100 | Prikhozhaia floor temp | +| 111 | `sensor.dushevaia_floor_temperature_temperature` | 100 | Dushevaia floor temp | +| 112 | `sensor.toilet_1_floor_temperature_temperature` | 100 | Toilet 1 floor temp | + +Формат (по образцу существующего): +```yaml + - name: "Living room floor temp" + source: "ha" + entity_id: "sensor.living_room_floor_temperature_temperature" + slave_id: 105 + register_address: 100 + register_count: 1 + data_type: "int16" + divider: 10 +``` + +⚠️ **Проверить свободно ли 105+** по двум источникам: эта карта + сам шаблон (сделано ✅). +⚠️ **`rebuild` обязателен** — шаблон впекается в образ. +⚠️ Только температурные. `dining/kids/bedroom` — уже есть (сниффы). + +### Шаг 5. Обновить доку +- `family/tech/zigbee-t610-z2m-i-zha.md` — карта устройств 16 → 23, новые TS0201, дефекты ID. +- `family/how-to/home-automation.md` §6 — карта slave'ов 100–112. +- `family/how-to/ha-automations.md` — 7 новых автоматизаций батарей. + +--- + +## 2. Вопросы к Alex (до начала работ) + +1. **Схема имён** — устраивает `living_room_floor_temperature` / `severnaia_floor_temperature`? Или другой стиль? +2. **Переименовывать ли `office_temperature_sensor`** → `kabinet_temperature`? (затронет slave 100 в bridge) +3. **Душевая:** оставить `shower_2_floor_*` или переименовать в `dushevaia_floor_temperature_*`? (переименование = правка ссылок) +4. **`sauna` в зоне «Туалет»** — куда правильно: котельная? +5. **Порог/доставка алертов:** 20 %, 2 ч, `persistent_notification` — или мобильные push? +6. **Нужны ли в Modbus влажность/CO2**, или только температура? + +## 3. Порядок выполнения и риски + +| Шаг | Риск | Откат | +|---|---|---| +| 1. Переименование | Средний — меняются entity_id, ломаются ссылки в автоматизациях/дашбордах | Бэкап `core.entity_registry` + список старых ID | +| 2. Зона/select | Низкий | Вернуть `area_id` | +| 3. Автоматизации | Низкий | Бэкап `automations.yaml` | +| 4. Modbus mappings | Средний — rebuild аддона, возможен RCU/нагрузка | Бэкап `config.template.tmpl`, `rollback` | + +**Обязательно перед началом:** +- Бэкап `/config/.storage/core.entity_registry`, `core.device_registry`, `core.restore_state` +- Бэкап `/config/automations.yaml` +- Бэкап `/addons/modbus-bridge/data/config.template.tmpl` (новый `.bak-idmodbus-<дата>`) +- Снять снапшот HA (`POST /backups/new/full`)