Files
obsidian-vault/family/plans/t610-zigbee-ids-battery-freshsensors-modbus.md
T

191 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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'ов 100112.
- `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`)