diff --git a/family/documents/home-automation-wishlist.md b/family/documents/home-automation-wishlist.md index ee43b3e7..6096aa18 100644 --- a/family/documents/home-automation-wishlist.md +++ b/family/documents/home-automation-wishlist.md @@ -7,6 +7,7 @@ related: - "[[family/plans/t610-home-automation]]" - "[[family/how-to/home-automation]]" - "[[family/how-to/ha-automations]]" + - "[[family/how-to/zigbee2mqtt-t610]]" - "[[family/how-to/nodered-ventilation]]" - "[[family/documents/home-wishlist]]" --- @@ -71,6 +72,7 @@ related: ### 7. Энергетика — что реально жрёт ZONT-реле котлов уже дают статусы; 2 Zigbee-розетки с мониторингом есть (`recirculation_pump`, `heating_cable_plug`). **Добавить:** токовые клещи (Zigbee) на ввод/котёл → видно, где деньги. +> ⚠️ **Проверено 2026-09-15:** `heating_cable_plug` отдаёт `0 Вт / 0 кВт·ч` — либо нагрузка реально не подключена, либо измерения не идут. `sauna` в `state.json` = `null`. Прежде чем считать по ним энергию — убедиться, что мониторинг живой. Инвентарь — [[family/how-to/zigbee2mqtt-t610]]. ### 8. Дашборд + алерты в Telegram Без этого автоматика «невидима». Один экран + пуш на всё критичное. Частично уже в вишлисте UI (см. §4). diff --git a/family/how-to/ha-automations.md b/family/how-to/ha-automations.md index a7a39ba8..b0331158 100644 --- a/family/how-to/ha-automations.md +++ b/family/how-to/ha-automations.md @@ -6,6 +6,7 @@ updated: 2026-09-15 related: - "[[family/plans/t610-home-automation]]" - "[[family/how-to/home-automation]]" + - "[[family/how-to/zigbee2mqtt-t610]]" - "[[family/documents/home-automation-wishlist]]" --- diff --git a/family/how-to/home-automation.md b/family/how-to/home-automation.md index dd92f5a5..da234d08 100644 --- a/family/how-to/home-automation.md +++ b/family/how-to/home-automation.md @@ -15,6 +15,7 @@ related: - '[[family/how-to/router-bishkek-asus]]' - '[[family/plans/t610-home-automation]]' - '[[family/how-to/ha-automations]]' + - '[[family/how-to/zigbee2mqtt-t610]]' - '[[family/how-to/truenas-access]]' --- # 🏠 Умный дом — автоматика diff --git a/family/how-to/zigbee2mqtt-t610.md b/family/how-to/zigbee2mqtt-t610.md new file mode 100644 index 00000000..219135fe --- /dev/null +++ b/family/how-to/zigbee2mqtt-t610.md @@ -0,0 +1,124 @@ +--- +title: "📡 Zigbee2MQTT на t610 — справочник" +aliases: [Zigbee, Zigbee2MQTT, z2m, Zigbee справочник, zigbee2mqtt-t610] +tags: [family, how-to, smarthome, zigbee, zigbee2mqtt] +updated: 2026-09-15 +related: + - "[[family/plans/t610-home-automation]]" + - "[[family/how-to/home-automation]]" + - "[[family/how-to/ha-automations]]" +--- + +# 📡 Zigbee2MQTT на t610 — справочник + +> **Назначение документа:** инвентарь Zigbee-устройств, пути и доступ к z2m, операции (спаривание/переименование), питфоллы диагностики. +> Хост/аддоны/USB/гнёзда — [[family/plans/t610-home-automation]]. Карта Modbus/железа — [[family/how-to/home-automation]]. Логика автоматизаций — [[family/how-to/ha-automations]]. + +--- + +## 1. Базовая конфигурация (проверено живьём 2026-09-15) + +| Параметр | Значение | +|---|---| +| Аддон | `45df7312_zigbee2mqtt` — **started**, v **2.14.1-1** | +| Координатор | **Inswift ZBP-MG21** (`usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00`), адаптер **ember** | +| Порт координатора | `/dev/serial/by-id/usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00`, baud 115200, `rtscts: false` | +| Физическое гнездо | USB3 порт 1 (`pci-0000:04:00.0-usb-0:1:1.0`) | +| Канал | **11** | +| `pan_id` | 36513 | +| MQTT | `mqtt://core-mosquitto:1883`, user `zont` | +| `base_topic` | `zigbee2mqtt` | +| `homeassistant: enabled` | true (устройства авто-пробрасываются в HA) | +| Frontend | `enabled: true`, порт **8099** — ⚠️ **фактически недоступен** (порт занят `ttyd` самого SSH-аддона) | +| `retain: true` | да | + +### Пути на t610 (аддон `core_ssh`, доступ по ключу `~/.ssh/id_rsa`) + +- **Живой конфиг z2m:** `/config/zigbee2mqtt/configuration.yaml` + (из опции аддона `data_path: /config/zigbee2mqtt`; **НЕ** `/addon_configs/45df7312_zigbee2mqtt/` — та папка пустая). +- **Состояние устройств (последние значения):** `/config/zigbee2mqtt/state.json` +- **База (сеть/связи/модели):** `/config/zigbee2mqtt/database.db` (SQLite, но **`sqlite3` в аддоне НЕТ** — читать через `strings`) +- **Бэкап координатора:** `/config/zigbee2mqtt/coordinator_backup.json` +- **Логи:** `/config/zigbee2mqtt/log/<дата>/log.log` (текущий) + `log1.log` (ротация) + +**Бэкапы конфига (уже есть):** `configuration.yaml.bak-20260914-114609`, `configuration.yaml.bak-20260914-121108`; базы — `database.db.bak-before-remove-20260914-114923`, `database.db.bak-before-remove2-20260914-120936`. + +--- + +## 2. Инвентарь устройств — 15 спарено (2026-09-15) + +`Currently 15 devices are joined.` Соответствие **IEEE ↔ friendly_name ↔ модель** — из `configuration.yaml` + `database.db`: + +| IEEE address | friendly_name | Модель | Что это | +|---|---|---|---| +| `0xa4c13862d39377e6` | `office_temperature_sensor` | `TS0201` (_TZ3000_akqdg6g7) | **Датчик t°/влажности Zigbee** (кабинет) — 23.48 °C / 44.8 % | +| `0xa4c138c4a94a6a31` | `shower_2_presence_sensor` | `TS0601` (_TZE204_qasjif9e) | Радар присутствия душевой 2 (+ освещённость lx) | +| `0xa4c138f8da8bc478` | `recirculation_pump` | `TS011F` (_TZ3000_gjnozsaz) | Розетка насоса рециркуляции ГВС (с мониторингом: V/E/P/I) | +| `0xa4c138eb6fbe9d19` | `heating_cable_plug` | `TS011F` (_TZ3000_gjnozsaz) | **Розетка греющего кабеля** (с мониторингом). На 2026-09-15: `OFF`, 0 Вт, 222 В | +| `0xa4c1381694217e10` | `boiler_controller_power` | `TS011F` (_TZ3000_gjnozsaz) | Питание контроллера котла → Modbus `slave 104, рег.1` (bidirectional) | +| `0xa4c1384fbe0b3a6b` | `sauna` | `TS011F` (_TZ3210_nhqka112) | Реле сауны. ⚠️ На 2026-09-15 в `state.json` — `null`, в HA-сущностях `unknown` | +| `0xa4c1386d40ddb67b` | `light_sensor_stairs` | `TS0222` (_TZ3000_hy6ncvmw) | Датчик освещённости лестницы (85 lx) | +| `0xa4c1386d0839706a` | `light_stairs` | `TS0002` (_TZ3000_5gey1ohx) | Подсветка лестницы | +| `0xa4c1381186ed1a32` | `smart_light_office` | `TS0012` (_TZ3000_0e6uvexf) | Умный свет кабинета (2 канала: left/right) | +| `0xa4c13873b5c1575b` | `office_table_light_switch` | `TS0002` (_TZ3000_5gey1ohx) | Выключатель стола кабинета (L1/L2) | +| `0xa4c13807b64c7fd4` | `kitchen_hood` | `TS0003` (_TZ3000_odzoiovu) | Вытяжка кухни (3 скорости: L1/L2/L3) | +| `0xa4c138b0f9e674a5` | `wireless_light_switch_bed` | `TS0041` (_TZ3000_kccru4oi) | Беспроводная кнопка спальни | +| `0xa4c13882a4b42db0` | `bed_dimmer` | `TS0052` (_TZ3000_ooc8illt) | Диммер спальни | +| `0xa4c1383d5fcaa063` | `boiler_water_leak` | `TS0207` (Zbeacon) | Датчик протечки котельной (батарея 100 %) | +| `0xa4c138d…` *(см. конфиг)* | — | — | 15-е устройство — сверять по живому `configuration.yaml` | + +> ⚠️ Список выше — **снимок 2026-09-15**. Источник истины — живой `/config/zigbee2mqtt/configuration.yaml` (секция `devices:`). При расхождении — прав живой конфиг. + +--- + +## 3. Режим спаривания (permit_join) + +- **В HA:** `switch.zigbee2mqtt_bridge_permit_join` — на 2026-09-15 = **`off`**. +- Диагностика z2m-моста в HA: `binary_sensor.zigbee2mqtt_bridge_connection_state` (= `on`), `sensor.zigbee2mqtt_bridge_version` (= `2.14.1`), `select.zigbee2mqtt_bridge_log_level` (= `info`), `button.zigbee2mqtt_bridge_restart`. + +**Включить спаривание:** HA-сервис `switch.turn_on` на `switch.zigbee2mqtt_bridge_permit_join` (таймер — свойство моста в UI). После спаривания — **обязательно выключить обратно**. + +**Как увидеть новое устройство:** после интервью оно появится в `configuration.yaml` → `devices:` и в HA как сущности `sensor._*`. + +--- + +## 4. Питфоллы диагностики (проверено) + +- 🔴 **`mosquitto_sub` внутри аддона `core_ssh` НЕ РАБОТАЕТ** — `Error: Bad file descriptor`. Не пытаться читать MQTT оттуда. Обход: читать `state.json` напрямую, либо `GET /api/states` через HA REST, либо подписка на MQTT **с Mac** (не из аддона). +- 🔴 **z2m frontend (порт 8099) недоступен** — порт занят `ttyd` SSH-аддона (видно в `netstat -tlnp`: `0.0.0.0:8099 ... 164/ttyd`). Заходить через ingress HA, не напрямую. +- 🔴 **`data_path` = `/config/zigbee2mqtt`, НЕ `/addon_configs/...`** — папка `/addon_configs/45df7312_zigbee2mqtt/` существует, но **пуста** (приманка). +- 🔴 **`sqlite3` в аддоне отсутствует** — `database.db` читать через `strings` + grep. +- ⚠️ **`ha apps logs` обрезает вывод и отдаёт старый буфер** → живой лог только файлом `/config/zigbee2mqtt/log/<дата>/log.log`. +- ⚠️ В логе **основной объём — поток телеметрии** (`MQTT publish: topic 'zigbee2mqtt/...'`). Для событий спаривания/интервью фильтровать: `grep -iE "interview|joining|joined|permit|Successfully"` и **исключать** `grep -v "MQTT publish"`. +- ⚠️ Запросы к `http://192.168.2.176` (raw IP, plain HTTP, private network) **требуют апрува** в Hermes — предупреждать Alex заранее. +- ⚠️ Секрет-маскировщик Hermes подменяет `Bearer $(cat …)` на `***` → собирать заголовок в файл `printf`'ом, затем `curl -H @/tmp/h1`. Рабочий `/tmp/.hatok` уже есть на Mac. + +--- + +## 5. Открытый вопрос: датчик Т тёплого пола, туалет 1 этаж (2026-09-15) + +**Запрос Alex:** «zigbee датчик в режиме спаривания пропиши его как датчик Т теплого пола в туалете на 1м этаже». + +**Факты на момент запроса:** +- `permit_join` = **off** → в режиме спаривания **ничего не висело**, новое устройство не предъявлено. +- Существующий «датчик t° Zigbee» = `office_temperature_sensor` (`0xa4c13862d39377e6`, TS0201) — стоит в кабинете. +- **«Тёплый пол, туалет» в карте Modbus** = `Relay module 14 (0E)`, позиция **5 → «Туалет 1 — н.п.»** — у ZONT это реле помечено **неподключённым**. См. [[family/how-to/home-automation]] §«Карта Slave ID». +- **Зигби-реле `heating_cable_plug`** (`0xa4c138eb6fbe9d19`, TS011F) — на 2026-09-15 `OFF`, 0 Вт. Судя по имени — вилка греющего кабеля. + +**🔴 Ключевое ограничение (озвучено Alex):** **TS0201 — датчик, а не термостат.** Он только измеряет воздух; тёплый пол включается **реле**. Поэтому «прописать как датчик Т пола» ≠ «управлять полом». + +**Варианты, предложенные Alex (ждём выбор):** +1. **Просто датчик Т** — привязать новый Zigbee-датчик температуры к зоне «Туалет 1 этаж», назвать `toilet_1_floor_temperature` (мониторинг t° воздуха). +2. **Термостат пола** — если куплен Zigbee-**термостат** (датчик пола + реле в одном), завести в HA как `climate.*` и связать с реле греющего кабеля. +3. **Переименовать существующее** — если имелось в виду уже спаренное устройство (`heating_cable_plug` / `office_temperature_sensor`). + +**Статус: НЕ ВЫПОЛНЕНО.** Ждём от Alex: (а) какой вариант, (б) модель устройства, которое спаривается. Ничего в z2m не менялось. + +--- + +## 6. Связанные заметки + +- [[family/plans/t610-home-automation]] — единственный рабочий документ по техчасти (хост, доступ, USB/гнёзда, аддоны, Modbus) +- [[family/how-to/home-automation]] — карта железа: AT2, Slave ID, регистры заслонок/реле, ZONT relays +- [[family/how-to/ha-automations]] — логика HA-автоматизаций, карта device_id ↔ entity_id +- [[family/documents/home-automation-wishlist]] — роадмап автоматизаций, приоритеты