[2026-09-15] eagle: family/how-to/home-automation.md family/tech/zigbee-t610-z2m-i-zha.md
This commit is contained in:
@@ -136,7 +136,7 @@ ssh -i ~/.ssh/id_rsa root@192.168.2.176 '<команда>' # аддон core_
|
||||
|
||||
> 💡 **Диагностический признак:** аддон в `state: error`, но в логе `Service exited with code 256 (by signal 15)` → это **нормальная остановка**, а `error` — финальный статус. Читать лог, а не только `state`.
|
||||
|
||||
> 🧭 **Про Zigbee и возможный переезд Z2M → ZHA — отдельная дока:** [[family/tech/zigbee-t610-z2m-i-zha.md]]. Кратко: HA штатно Zigbee поддерживает (ZHA встроена, стик тот же), **но `coordinator_backup.json` у ember-адаптера ВСЕГДА пуст** — перенос «без спаривания» держится на NVRAM стика, а не на файле; при переезде теряются 16 friendly_name и ломается `modbus-bridge`. Решение 2026-09-15: **Z2M остаётся**.
|
||||
> 🧭 **Про Zigbee и переезд Z2M → ZHA — отдельная дока:** [[family/tech/zigbee-t610-z2m-i-zha.md]]. Кратко: HA штатно Zigbee поддерживает (ZHA встроена, стик тот же), **но `coordinator_backup.json` у ember-адаптера ВСЕГДА пуст** — перенос «без спаривания» держится на **NVRAM стика**, а не на файле; при переезде теряются 16 friendly_name и ломается `modbus-bridge`. **Решение 2026-09-15 (ночь): ПЕРЕЕЗЖАЕМ НА ZHA** — snapshot HA сделан (`ada4c8e5`, 123 МБ), следующий шаг: остановить `45df7312_zigbee2mqtt`.
|
||||
|
||||
**Опции аддонов** меняются только через Supervisor API (не `ha apps`, который умеет лишь start/stop/rebuild). Для PATCH нужен **ПОЛНЫЙ набор опций**, иначе 400.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
title: "Zigbee на t610 — Z2M сейчас, перенос в ZHA (разбор 2026-09-15)"
|
||||
title: "Zigbee на t610 — переезд Z2M → ZHA (в работе, 2026-09-15)"
|
||||
created: '2026-09-15'
|
||||
updated: '2026-09-15 (ночь-8: разбор переноса Z2M → ZHA; главный факт — coordinator_backup.json у ember-адаптера ВСЕГДА пуст, устройства живут в database.db)'
|
||||
updated: '2026-09-15 (ночь-9: ✅ РЕШЕНИЕ ПРИНЯТО — переезжаем на ZHA; snapshot HA сделан, следующий шаг — остановить Z2M)'
|
||||
type: tech
|
||||
namespace: family
|
||||
status: research — перенос НЕ выполнен, Z2M работает
|
||||
status: 🔄 В РАБОТЕ — решение о переезде принято, snapshot готов, Z2M ещё работает
|
||||
tags:
|
||||
- t610
|
||||
- haos
|
||||
@@ -21,15 +21,20 @@ related:
|
||||
- '[[family/plans/t610-backup-to-truenas]]'
|
||||
---
|
||||
|
||||
# Zigbee на t610 — Z2M / перенос в ZHA
|
||||
# Zigbee на t610 — переезд Z2M → ZHA (В РАБОТЕ)
|
||||
|
||||
> 🚦 **СОСТОЯНИЕ (2026-09-15 ночь):** решение принято, **переезжаем на ZHA**. Snapshot HA сделан (`ada4c8e5`, 123 МБ). Файлы Z2M скачаны на Mac. **Z2M ещё работает** — остановка не выполнена.
|
||||
> ▶️ **СЛЕДУЮЩИЙ ШАГ: остановить аддон `45df7312_zigbee2mqtt`** (`stop`, НЕ удалять), затем добавить интеграцию ZHA на порт `/dev/serial/by-id/usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00`, тип EZSP/ember.
|
||||
|
||||
> ❓ **Вопрос Alex (2026-09-15):** «HA штатно поддерживает Zigbee без Z2M? Что нужно, чтобы перенести всё в HA **без заново спаривания**?»
|
||||
|
||||
## Короткий ответ
|
||||
|
||||
**Да, HA поддерживает Zigbee штатно — интеграция ZHA, встроена в HA core, ничего ставить не надо. Стик тот же (`/dev/ttyACM0`).**
|
||||
**Да, HA поддерживает Zigbee штатно — интеграция ZHA, встроена в HA core, ничего ставить не надо. Стик тот же.**
|
||||
|
||||
**НО перенос «без спаривания» через `coordinator_backup.json` у тебя НЕ сработает** — этот файл у ember/EZSP-адаптера **всегда пуст** (`"devices": []`). Это **не поломка** и **не устаревший файл**: так работает ember у Zigbee2MQTT.
|
||||
**Перенос без перепаривания работает — но НЕ через `coordinator_backup.json`**, а потому что **сеть живёт в NVRAM стика**. У ember/EZSP-адаптера этот файл **всегда пуст** (`"devices": []`) — это **не поломка** и **не устаревший файл**: так работает ember у Zigbee2MQTT.
|
||||
|
||||
> 🔴 **ГЛАВНАЯ ПУТАНИЦА ЭТОЙ СЕССИИ (чтобы не повторить):** увидев `devices: []`, я объявил «перенос отменяется». **Это была ошибка.** Для переезда TrueNAS → t610 файл был **единственным носителем** сети (менялся хост). Для Z2M → ZHA хост **тот же**, стик **тот же** — носитель сети это сам стик, файл не участвует вообще. Более простой случай, не более сложный.
|
||||
|
||||
---
|
||||
|
||||
@@ -146,16 +151,30 @@ ZHA стартует на ТОМ ЖЕ стике
|
||||
ZHA их обнаруживает (уже в сети) — заново спаривать НЕ нужно
|
||||
```
|
||||
|
||||
**Порядок (если решимся):**
|
||||
**Порядок (ВЫПОЛНЯЕТСЯ — статус на 2026-09-15 ночь):**
|
||||
|
||||
1. **Полный snapshot HA** — обязательно, до всего.
|
||||
2. Скачать `coordinator_backup.json` (ключ/PAN/канал) + `database.db` (инвентарь) — на случай отката.
|
||||
3. **Остановить Z2M** (`stop`, не удалять) — стик освободить.
|
||||
4. HA → Настройки → Устройства → **Добавить интеграцию → ZHA** → порт
|
||||
1. ✅ **СДЕЛАНО — Полный snapshot HA.** Slug `ada4c8e5`, job `7d7aea7e536241e4af0ed5fc50cc83fb`, тип `full`, **123 МБ**, 2026-09-15 13:37 UTC. Второй, более ранний: `2880be7c` (13:35). Содержимое обоих: `homeassistant: true`, folders `share/ssl/media`, addons — все 7.
|
||||
2. ✅ **СДЕЛАНО — скачаны `coordinator_backup.json` + `database.db` + `configuration.yaml` + `state.json`** на Mac, md5 сверены (см. §Бэкапы).
|
||||
3. ⬜ **СЛЕДУЮЩИЙ ШАГ — остановить Z2M** (`45df7312_zigbee2mqtt`, `stop`, **не удалять**) — освободить стик.
|
||||
4. ⬜ HA → Настройки → Устройства → **Добавить интеграцию → ZHA** → порт
|
||||
`/dev/serial/by-id/usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00` → тип **EZSP/ember**.
|
||||
5. При запросе — восстановить `coordinator_backup.json` (ZHA возьмёт параметры сети).
|
||||
6. ZHA поднимает сеть. Устройства уже в ней — идут сами. **Батарейные (`EndDevice`) спят** — их надо разбудить кнопкой, но это **не перепаривание**.
|
||||
7. Переназначить `modbus-bridge` (он завязан на `switch.0xa4c138f8da8bc478`).
|
||||
5. ⬜ При запросе — восстановить `coordinator_backup.json` (ZHA возьмёт параметры сети: ключ/PAN/канал).
|
||||
6. ⬜ ZHA поднимает сеть. Устройства уже в ней — идут сами. **Батарейные (`EndDevice`) спят** — их надо разбудить кнопкой, но это **не перепаривание**.
|
||||
7. ⬜ Переназначить `modbus-bridge` (он завязан на `switch.0xa4c138f8da8bc478`).
|
||||
|
||||
### Рабочий рецепт: создание snapshot через Supervisor API
|
||||
|
||||
```bash
|
||||
HDR="Authorization: Bearer ${SUPERVISOR_TOKEN}" # заголовок собирать В РАНТАЙМЕ на t610
|
||||
curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
||||
-d '{"name":"pre-zha-migration-20260915"}' \
|
||||
http://supervisor/backups/new/full
|
||||
# → {"result":"ok","data":{"job_id":"7d7a…","slug":"ada4c8e5"}}
|
||||
```
|
||||
|
||||
> 🔴 **ПИТФОЛЛ: `-d '{"type":"full"}'` → ошибка `extra keys not allowed @ data['type']`.** Эндпоинт `/backups/new/full` **уже** подразумевает full — ключ `type` лишний.
|
||||
> 🔴 **ПИТФОЛЛ: список бэкапов — `GET /backups`** (не `/backups/`, не с trailing slash + piped jq в одном `curl`). Правильно: `curl -s -H "$HDR" http://supervisor/backups | jq …`.
|
||||
> 🔴 **ПИТФОЛЛ: `jq: parse error: Expected string key before ':' at line 1, column 4`** — токен **не доехал** в переменную (пустой `$HDR`), curl вернул текст ошибки, jq подавился. Причина — фильтр секретов съел строку с токеном. **Фикс: собирать заголовок на самой t610 из `$SUPERVISOR_TOKEN`, не передавать значение через SSH-строку.**
|
||||
|
||||
---
|
||||
|
||||
@@ -167,13 +186,17 @@ ZHA их обнаруживает (уже в сети) — заново спар
|
||||
| 2 | **Все автоматизации с `switch.0xa4c138f8da8bc478` и подобными** | `entity_id` в ZHA будут другие → переписать все ссылки |
|
||||
| 3 | **`modbus-bridge`** | жёстко завязан на Zigbee-сущность `switch.0xa4c138f8da8bc478` (relay slave 104) — сломается |
|
||||
|
||||
**Почему Z2M сейчас остаётся (решение 2026-09-15):**
|
||||
- 16 устройств уже спарены и работают (проверено: 19 сущностей online, `presence`, `illuminance`, `state` живые)
|
||||
- `modbus-bridge` висит на Z2M-сущность — переезд немедленно ломает мост на ZONT
|
||||
- ZHA и Z2M **не уживаются на одном стике** — второго нет
|
||||
- Выигрыш от переезда = 0. HA «штатно поддерживает Zigbee» — правда, но у Alex не «поставить интеграцию», а «перенести построенную сеть + переписать автоматизации»
|
||||
**Решение 2026-09-15 (НОЧЬ, ФИНАЛЬНОЕ): ПЕРЕЕЗЖАЕМ НА ZHA.** Alex подтвердил задачу прямо: «заменить Z2M на ZHA, устройства не спаривать заново».
|
||||
|
||||
> 📌 Формулировка для будущего: **вопрос не в возможностях ZHA, а в том, что сеть уже построена и завязана на неё.**
|
||||
> 🔴 **Отменено прежнее решение «Z2M остаётся, выигрыш 0»** (записано ранее в этой же доке). Alex настоял — переезд нужен, несмотря на цену. Причина: HA штатно поддерживает Zigbee, и Alex хочет убрать Z2M как отдельный слой.
|
||||
|
||||
**Цена переезда (принята осознанно):**
|
||||
- 16 friendly names задать заново (ZHA их не читает из `database.db`)
|
||||
- Все автоматизации со ссылками на `switch.0xa4c138f8da8bc478` и подобными — переписать
|
||||
- `modbus-bridge` сломается и требует переназначения (relay slave 104)
|
||||
- Батарейные `EndDevice` спят — разбудить кнопкой (это НЕ перепаривание)
|
||||
|
||||
> 📌 Формулировка: **вопрос не в возможностях ZHA, а в том, что переезд = сменить программу-управитель, а не перенести сеть.** Сеть остаётся в стике.
|
||||
|
||||
---
|
||||
|
||||
@@ -213,9 +236,10 @@ database.db MD5 3292d64bf1455d4b3d50a93c0950d0b4
|
||||
state.json MD5 20bfb775cbab002e59d1be31a15db9e6
|
||||
```
|
||||
|
||||
Скрипты на Mac (`~/tmp-t610/`): `z2m-backup-request.sh` (первая версия, `localhost` — падает), `z2m-backup-request2.sh` (`core-mosquitto` — работает), `z2m-get-backup.sh` (полный цикл + распаковка), `z2m-check-adapter.sh` (диагностика адаптера).
|
||||
Скрипты на Mac (`~/tmp-t610/`): `z2m-backup-request.sh` (первая версия, `localhost` — падает), `z2m-backup-request2.sh` (`core-mosquitto` — работает), `z2m-get-backup.sh` (полный цикл + распаковка), `z2m-check-adapter.sh` (диагностика адаптера), `zha-step1d-snapshot.sh` (✅ рабочий snapshot через Supervisor API), `zha-check.sh` (список бэкапов).
|
||||
|
||||
> ⚠️ **Правило:** скрипты писать на Mac → `scp` → выполнить. Не инлайнить `mosquitto_sub` с паролем в одну ssh-строку — `$` в пароле `mqtt1z3$` ломается в двойных кавычках.
|
||||
> ⚠️ **Проверять скрипт на диске через `od -c`/`grep`, а не глазами в чате** — фильтр секретов маскирует строку с токеном в выводе, но файл на диске целый. Ложная тревога «скрипт побит» уже случалась.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user