191 lines
12 KiB
Markdown
191 lines
12 KiB
Markdown
---
|
||
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: <N>
|
||
alias: "Батарея: <устройство> разряжена"
|
||
triggers:
|
||
- trigger: numeric_state
|
||
entity_id: sensor.<entity>_battery
|
||
below: 20
|
||
for: "02:00:00"
|
||
actions:
|
||
- action: persistent_notification.create
|
||
data:
|
||
title: "🔋 Батарея разряжена"
|
||
message: "<устройство>: {{ states('sensor.<entity>_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`)
|