43 KiB
title, status, tags, created, updated, related
| title | status | tags | created | updated | related | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| Перенос домашней автоматизации на HP t610 | in-progress |
|
2026-09-12 | 2026-09-14 |
Перенос домашней автоматизации на HP t610
Статус: В ПРОЦЕССЕ. Этап 1 ✅. Этап 2 ✅ ПОЛНОСТЬЮ ВЫПОЛНЕН (z2m — 16 устройств, mbusd — порт 502, modbus-bridge — MQTT + HA-опрос, MQTT-интеграция в HA добавлена). Этап 3 (перенос HA-конфига +
.storage/) 🔄 В РАБОТЕ — разведка выполнена, решения приняты (БД с нуля, реестры заменить, HACS на согласовании, Zigbee-имена чистить); ждём ответа Alex. Цель: убрать всю домашнюю автоматизацию с TrueNAS (он перегружен — 17/21 ГБ RAM) на выделенный HP t610, с бэкапом конфигов на TrueNAS и в git.Прогресс 2026-09-14 (вечер) — Этап 2 ЗАКРЫТ, Modbus-сервисы работают:
- ✅ mbusd — local add-on
local_mbusdРАБОТАЕТ. База: готовый образ3cky/mbusd:latest. Порт 502 открыт. Устройство:/dev/serial/by-path/pci-0000:00:12.0-usb-0:4:1.0-port0(CH340 #2, порт 4 → шина вентиляции AT2). Питфоллы сборки local add-ons — см. family/plans/t610-addons-deployment §«Local add-ons mbusd / modbus-bridge».- ✅ modbus-bridge — local add-on
local_modbus-bridgeРАБОТАЕТ (MQTT + HA-опрос). Базаpython:3.11-alpine,uart: true+host_network: true. Устройство: by-path CH340 #1 (порт 3 → шина ZONT). MQTT подключён, 13 discovery-сообщений, HA-опрос возвращает значение. Питфолл:ha.urlобязан бытьhttp://192.168.2.176:80(НЕsupervisor/core— тот требуетSUPERVISOR_TOKENи даёт 401 с пользовательским токеном).- ✅ В HA добавлена MQTT-интеграция (её НЕ БЫЛО → discovery-сообщения z2m/bridge не превращались в сущности, было всего 22 системные сущности). Стало 104 сущности (69 Zigbee). Рецепт — family/how-to/t610-access §«Добавление интеграции MQTT».
- ⏭️ Следующий шаг: Этап 3 (перенос HA-конфига +
.storage/).
Прогресс 2026-09-13 — 🎉 t610 запущен и в сети:
- ✅ HA OS 18.2 записана на диск, t610 загрузился и работает. IP
192.168.2.176(DHCP-имяhomeassistant). Web UI:http://192.168.2.176(⚠️ порт 80, не 8123).- ✅ HA Core 2026.9.2, Supervisor 2026.09.0, OS 18.2. Диск: 228.5 ГБ, занято 5 ГБ.
- ✅ SSH включён через аддон
core_ssh(Terminal & SSH) — вход по ключу~/.ssh/id_rsa.- ✅ Этап 1 развёртывания аддонов ВЫПОЛНЕН (Mosquitto 1883, Node-RED 1880, File editor, Samba). Детали: family/plans/t610-addons-deployment.
- ✅ Этап 2a ВЫПОЛНЕН 2026-09-14: все 3 USB-устройства подключены к t610 и видны. Карта:
ttyUSB0= CH340 #1 (порт 3 → ZONT),ttyUSB1= CH340 #2 (порт 4 → Vent),ttyACM0= Zigbee Inswift ZBP-MG21. Подробности: family/how-to/t610-access §USB. Порты 3/4 зафиксированы — устройства не вынимать.- ✅ Блокер 2b РЕШЁН 2026-09-14: оба CH340 =
1a86:7523без серийника → by-id идентичен, но привязка по/dev/serial/by-path/...работает, и аддон видит её через флагuart: true(штатный механизм Supervisor,devices:не нужен). udev-алиасыttyZONT/ttyVentна HA OS отменены (невозможны: SSH-аддон = Alpine-контейнер). Детали: family/plans/t610-addons-deployment §Этап 2.- ⚠️ Решение изменено: ставим всё АДДОНАМИ, а не docker-compose 1:1 (Шаг 3 заменён — см. family/plans/t610-addons-deployment). Плюс: проблема udev-гонки снимается.
- ⏭️ Следующий шаг: Этап 3 (перенос HA-конфига) — Этап 2b (z2m, mbusd, modbus-bridge) выполнен 2026-09-14.
Доступ к хосту и CLI: family/how-to/t610-access.
Прогресс 2026-09-12:
- ✅ План составлен на основе живого состояния TrueNAS (дампы конфигов всех контейнеров — §12).
- ✅ HA OS 18.2 скачан и распакован →
~/haos/haos_generic-x86-64-18.2.img(1.8 ГБ) — см. Шаг 1.- ✅ Диск подтверждён и записан (бывшая Windows 7 безвозвратно перезаписана с согласия Alex).
0. Зачем и что переносим
Причина: TrueNAS работает на пределе по памяти (занято 17 из 21 ГБ) — на нём immich + HA + ~25 контейнеров + ZFS-кэш. Домашняя автоматизация должна жить на отдельном дешёвом/тихом хосте, чтобы не зависеть от NAS и не конкурировать за RAM.
Переносим на t610:
| Сервис | Образ / способ | Почему |
|---|---|---|
| Home Assistant | HA OS (нативно, вся ОС) | ядро автоматизации |
| Zigbee2MQTT | HA-аддон (45df7312_zigbee2mqtt) |
✅ работает — 16 устройств |
| Mosquitto (MQTT) | HA-аддон (core_mosquitto) |
✅ работает — 1883/1884 |
| Node-RED | HA-аддон (a0d7b954_nodered) |
✅ работает — 1880 |
| mbusd | HA local add-on (local_mbusd) |
✅ работает — RS-485 → TCP :502 (шина вентиляции AT2) |
| modbus-bridge | HA local add-on (local_modbus-bridge) |
✅ работает — снифф 485-датчиков + виртуальные slaves для ZONT, MQTT + HA-опрос |
| Камера | docker-контейнер | см. §8 — разобраться отдельно |
❌ ОТМЕНЁН — на HA OS невозможен; привязка serial по /dev/serial/by-path/... через флаг аддона uart: true |
Остаётся на TrueNAS: immich, media-стек (jellyfin/transmission/radarr/sonarr/prowlarr), caddy, gitea, filebrowser, webdav, syncthing, rclone, cups, portainer, hermes-taiga, xray-*.
1. Железо: HP t610 — что мы имеем
| Параметр | Значение | Вывод |
|---|---|---|
| CPU | AMD T56N, 2 ядра @ 1.65 ГГц (Bobcat, 2011) | PassMark ~850, single-thread ~450 — вдвое слабее TrueNAS (G2020) |
| RAM | 4 ГБ DDR3-1600 SODIMM | ✅ за глаза для HA OS + контейнеров (с HA.OS+5 контейнеров ~1.5–2 ГБ реально) |
| USB | 2× USB 3.0 + 4× USB 2.0 | ✅ хватает: Zigbee + 2× CH340 |
| Сеть | Gigabit (Broadcom BCM57781) | ок |
| COM | 1× RS-232 | резерв (если перейдём на нативный mbusd) |
| Диск | HDD (переносим с TrueNAS) | ✅ места достаточно |
| БП | 19.5V 3.3A, штекер 7.4×5.0 мм | нужен родной БП |
| Потребление | ~12 Вт idle, ~20 Вт под нагрузкой | ✅ тихий, дёшево 24/7 |
📌 Диск — HDD (есть в наличии), отдельно проверять/апгрейдить не нужно. RAM 4 ГБ достаточно.
2. Целевая архитектура
ДОМ
┌────────────────────────────────────────────────────────┐
│ │
│ ZONT (192.168.0.10) Zigbee-устройства │
│ │ Modbus master на ttyZONT │ (Tuya датчики) │
│ │ │ │
│ USB-CH340#1 (ttyZONT) USB-Zigbee (ttyACM0) │
│ │ │ │
│ ┌─────── HP t610 — HA OS ───────┴─────────┐ │
│ │ HA OS (ядро, нативно) │ │
│ │ ├ mosquitto (docker) :1883 │ │
│ │ ├ zigbee2mqtt (docker) ── mosquitto │ │
│ │ ├ nodered (docker) ── mosquitto │ │
│ │ ├ mbusd (docker) :502 ← CH340#2 (ttyVent → AT2) │
│ │ └ modbus-bridge (docker) ← CH340#1 (ttyZONT) │
│ └─────────────────────────────────────────┘ │
│ │
│ GPON-роутер ──(port forward)──► t610:8123 (HA UI) │
└────────────────────────────────────────────────────────┘
│
│ бэкап конфигов (rsync/git)
▼
TrueNAS (RED_2TB) — хранилище бэкапов + bare git repo
Ключевые сетевые потоки:
- HA ↔ mosquitto (
localhost:1883) — MQTT-интеграция - zigbee2mqtt → mosquitto → HA (датчики Zigbee)
- Node-RED → mosquitto → HA (логика)
- HA →
t610:502(mbusd) — опрос вентиляции AT2 и заслонок по Modbus TCP - ZONT →
t610:1883(mosquitto) — по MQTT (через редирект GPON-роутера) - modbus-bridge →
localhost:8123(HA REST API) +localhost:1883(MQTT)
3. Что меняется по адресам (карта правок)
Это самый важный раздел — при переносе ломаются все хардкод-адреса:
| Где | Сейчас | Станет | Комментарий |
|---|---|---|---|
ha/configuration.yaml → modbus.host |
192.168.2.197 |
IP t610 | иначе HA на t610 не найдёт mbusd (он теперь локальный — можно 127.0.0.1, т.к. mbusd host-network) |
modbus-bridge/config.yml → ha.url |
http://localhost:8123 |
без изменений | остаётся localhost |
modbus-bridge/config.yml → mqtt.broker |
localhost |
без изменений | mosquitto рядом |
| ZONT → MQTT-брокер | TrueNAS (192.168.2.197:1883?) | t610:1883 | ⚠️ смотреть, где задаётся (в веб-интерфейсе ZONT, раздел MQTT) |
| GPON-роутер port forward | → 192.168.2.197 | → IP t610 | для HA UI + MQTT |
Caddy cam.mallexxx |
192.168.2.197:8090 |
IP t610:8090 | камера переезжает на t610 (или остаётся — см. §8) |
Caddy mallexxx.duckdns.org |
192.168.2.197:8123 |
IP t610:8123 | HA UI |
udev-правила 99-tty-alias.rules |
KERNELS=="?-1.6" / "?-1.5" (USB-топология TrueNAS) |
новые пути t610 | ⚠️ ОБЯЗАТЕЛЬНО пересчитать — на t610 нумерация USB другая |
4. Шаги переноса — пошагово
⚠️ Общий принцип: ничего не удаляем на TrueNAS, пока t610 не заработает полностью. Отключение на TrueNAS — отдельный финальный этап (§7).
Шаг 1. Установка HA OS на t610
Образ: https://www.home-assistant.io/installation/generic-x86-64/ Драйвер-ссылка (последний релиз, раздел Assets): https://github.com/home-assistant/operating-system/releases
✅ Сделано 2026-09-12: скачан и распакован HA OS 18.2 (релиз 2026-07-30).
~/haos/haos_generic-x86-64-18.2.img.xz— 552 МБ (архив),xz -tOK~/haos/haos_generic-x86-64-18.2.img— 1.8 ГБ (готов к записи)- SHA256 архива:
514ba5447c663026bc12ab95b68f0c206401b480560743f7a59b074de912dc4e- ⚠️ Отдельного файла контрольных сумм в релизе нет; целостность подтверждена
xz -t.- На TrueNAS сейчас HA 2026.9.1 — совместимо с HA OS 18.x.
Записать на HDD t610 (диск переносим, образ пишем прямо на него — через USB-переходник на Mac):
✅ ВЫПОЛНЕНО 2026-09-13. Образ записан на диск, диск вставлен в t610, HA OS загрузилась. Прежняя Windows 7 безвозвратно перезаписана (Alex подтвердил).
📌 Было (исторический контекст): диск был подключён к Mac как
/dev/disk29(внешний USB, 250.1 ГБ) и оказался НЕ пустым — на нём установленная Windows 7:disk29s1 Windows_NTFS "Зарезервировано системой" 52.4 МБ disk29s2 Windows_NTFS "Windows 7" 250.0 ГБ
ddбыл остановлен до явного подтверждения Alex — правильное поведение.Команда, которой записан образ:
diskutil unmountDisk /dev/disk29 sudo dd if=~/haos/haos_generic-x86-64-18.2.img of=/dev/rdisk29 bs=4m && syncПисать в
/dev/rdisk29(raw, быстрее). После записиdiskutil listпокажет разделы HA OS (hassos-boot, hassos-data).
# на Mac:
diskutil list # найти целевой диск (НЕ ошибиться!)
diskutil info /dev/diskN # ⚠️ ОБЯЗАТЕЛЬНО: убедиться, что диск пустой/не нужный
diskutil unmountDisk /dev/diskN
sudo dd if=~/haos/haos_generic-x86-64-18.2.img of=/dev/rdiskN bs=4m && sync
⚠️ Питфолл (выявлен на практике): не писать
ddвслепую по номеру диска.disk29оказался бывшим системным диском с Windows 7 — проверкаdiskutil infoперед записью обязательна. ⚠️ В HA OS UEFI: в BIOS t610 включить UEFI-boot (не Legacy). Если t610 не грузит HA OS — вариант: HA OS на Proxmox/Debian + qemu, но это сложнее; сначала пробуем bare-metal.
- После записи → вставить диск в t610 → загрузиться → HA OS сама расширит раздел.
Шаг 2. Первый запуск HA OS, сеть, static IP
- t610 подключить кабелем к GPON-роутеру.
- На роутере назначить static IP (DHCP reservation) — обязательно, до всего остального:
# OpenWrt (роутер сети 192.168.2.x), SSH root@192.168.2.2:
# узнать MAC t610, затем добавить в dhcp host:
uci add dhcp host
uci set dhcp.@host[-1].name='t610-ha'
uci set dhcp.@host[-1].mac='<MAC t610>'
uci set dhcp.@host[-1].ip='192.168.2.150' # ← выбранный статический IP
uci commit dhcp && /etc/init.d/dnsmasq restart
💡 Выбрать свободный IP (проверить ping). Кандидат:
192.168.2.150.
- HA OS Web UI:
http://<IP t610>:8123→ первичная настройка (создать аккаунт).
⚠️ HA OS ставит HA «с нуля» — конфиги мы переносим вручную (§5), НЕ через бэкап-снапшот, чтобы не тащить мусор от старой версии долей.
Шаг 3. Установка вспомогательных сервисов на t610
⚠️ РЕШЕНО 2026-09-13: ставим всё АДДОНАМИ (Вариант C). Детальный план развёртывания вынесен в отдельный документ: family/plans/t610-addons-deployment. Причины: из SSH-аддона host docker CLI не виден (аддон в своём контейнере); аддоны = штатный путь HA OS, Supervisor сам пробрасывает USB-устройства (снимает проблему udev-гонки); Zigbee2MQTT — через community-repo, mbusd/modbus-bridge — local add-ons.
HA OS внутри использует host docker 29.6.2 (ha docker info подтверждает), но управлять им из аддона нельзя. Рабочий путь — аддоны.
Контейнеры (в порядке зависимостей):
- mosquitto — порт 1883, конфиги см. §5.1 — ✅ аддон
core_mosquitto - zigbee2mqtt — USB-Zigbee by-id — ✅ аддон
45df7312_zigbee2mqtt - nodered — порт 1880 — ✅ аддон
a0d7b954_nodered - mbusd — порт 502, by-path CH340#2 (порт 4, шина AT2) — ✅ local add-on
local_mbusd - modbus-bridge — by-path CH340#1 (порт 3, шина ZONT),
host_network— ✅ local add-onlocal_modbus-bridge(работает: MQTT + HA-опрос;ha.url=http://192.168.2.176:80) - камера — см. §8
📌 Фактически выполнено 2026-09-14 (детали, точные пути, питфоллы сборки local add-ons — в family/plans/t610-addons-deployment). Шаги 3–4 этого документа заменены тем планом; ниже оставлены как исторический черновик исходного подхода (docker-compose + udev), который не применялся.
Шаг 4. Подключить USB-устройства — ✅ ВЫПОЛНЕНО 2026-09-14 (алиасы ОТМЕНЕНЫ)
✅ Факт (2026-09-14): все 3 USB подключены и опознаны; привязка — по
/dev/serial/by-path/...(НЕ udev-алиасы). Карта портов, by-id/by-path и sysfs-пути: family/how-to/t610-access §USB. udev-алиасыttyZONT/ttyVentотменены — на HA OS невозможны (SSH-аддон = Alpine-контейнер, нет/etc/udev/rules.d/udevadm; хостовый debug-SSH 22222 включается только флешкой). Вместо них — флагuart: trueв манифесте аддона. Ниже (и в старом тексте Шага 4) — черновик исходного подхода, не применявшийся.
# ИСТОРИЧЕСКИЙ ЧЕРНОВИК (не применять): на t610 другая USB-топология, старые KERNELS не сработают.
# udevadm в SSH-аддоне НЕТ — читать sysfs (/sys/class/tty/<tty>/device), см. t610-access §USB.
Составить новые `99-tty-alias.rules` **по серийникам, а не по портам** — надёжнее:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{serial}=="<serial CH340 #1>", SYMLINK+="ttyZONT" SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{serial}=="<serial CH340 #2>", SYMLINK+="ttyVent"
> ⚠️ У дешёвых CH340 **серийники часто отсутствуют/одинаковые** → тогда только по `KERNELS` (физическому порту). Тогда — жёстко зафиксировать, в какой USB-порт какой адаптер вставлен, и подписать порты физически.
> ⚠️ **Гонка с udev** (та же проблема, что на TrueNAS): docker стартует раньше udev → контейнеры с `devices:` падают. На HA OS решать через `systemd` unit `After=dev-ttyZONT.device` ИЛИ через скрипт ожидания (§ Шаг 6).
### Шаг 5. Перенести конфиги (см. §5) и поднять сервисы
Порядок: скопировать конфиги → `docker compose up -d` по одному → проверить.
### Шаг 6. Проверка работоспособности (чек-лист §6)
### Шаг 7. Бэкап на TrueNAS + git (§9)
### Шаг 8. Отключить на TrueNAS (§7) — ТОЛЬКО после успешной проверки
## 5. Что именно копировать (точные пути)
**Источник:** `/mnt/RED_2TB/docker/` на TrueNAS (SSH `truenas_admin@mallexxx.duckdns.org`, ключ `~/.ssh/id_rsa`).
**Приёмник:** t610, каталог `/mnt/data/` (или `/addon_configs` для HA OS).
### 5.1 mosquitto
mosquitto/config/mosquitto.conf # listener 1883, allow_anonymous false, password_file mosquitto/config/passwd # ⚠️ права 600, пароли пользователей mosquitto/config/ → /mosquitto/config mosquitto/data/ → /mosquitto/data mosquitto/log/ → /mosquitto/log
compose (порт 1883).
### 5.2 zigbee2mqtt
zigbee2mqtt/configuration.yaml # serial: /dev/ttyACM0, adapter: ember, network_key, pan_id zigbee2mqtt/database.db # ⚠️ КРИТИЧНО — иначе спаривать устройства заново! zigbee2mqtt/state.json zigbee2mqtt/coordinator_backup.json # бэкап координатора → всё в /app/data (внутри контейнера)
**⚠️ КРИТИЧНО:** `network_key` + `pan_id` + `database.db` должны совпасть 1:1, иначе все Zigbee-устройства надо спаривать заново.
compose: `devices: /dev/ttyACM0:/dev/ttyACM0`, `network_mode: host`.
### 5.3 nodered
nodered/flows.json + nodered/flows_cred.json # ⚠️ cred — там пароли нод nodered/settings.js, package.json, node_modules (не обязательно) → /data
compose: порт 1880, `TZ=Asia/Novosibirsk`.
### 5.4 mbusd — ✅ РЕАЛИЗОВАНО КАК LOCAL ADD-ON (2026-09-14)
> ⚠️ **Фактически на t610 — HA local add-on `local_mbusd`, НЕ docker-compose.** Тот же образ `3cky/mbusd:latest`, но обёрнут в аддон: `/addons/mbusd/{config.yaml,Dockerfile,run.sh}`. Serial — `/dev/serial/by-path/pci-0000:00:12.0-usb-0:4:1.0-port0` (CH340 #2, порт 4). Порт 502 открыт. Детали и питфоллы: [[family/plans/t610-addons-deployment]] §«Local add-ons mbusd / modbus-bridge».
> Ниже — исходный черновик (docker-compose с TrueNAS), **не применявшийся**.
mbusd/mbusd.conf # device=/dev/ttyUSB0, speed=9600, port=502
compose (как на TrueNAS):
```yaml
services:
mbusd:
image: 3cky/mbusd
container_name: mbusd
entrypoint: ["/usr/bin/mbusd", "-d", "-L", "-", "-c", "/etc/mbusd.conf"]
ports: ["502:502"]
devices: [/dev/ttyVent:/dev/ttyUSB0]
volumes: [/mnt/data/mbusd/mbusd.conf:/etc/mbusd.conf]
restart: unless-stopped
5.5 modbus-bridge — ✅ РЕАЛИЗОВАНО КАК LOCAL ADD-ON (2026-09-14)
⚠️ Фактически на t610 — HA local add-on
local_modbus-bridge, НЕ docker-compose. Базаpython:3.11-alpine,uart: true+host_network: true. Serial — by-path CH340 #1 (порт 3). Опции аддона:device,baudrate,ha_token,mqtt_user,mqtt_password;run.shгенерирует runtimeconfig.ymlиз шаблона (data/config.template.tmpl). MQTT + sniffer работают; ⏳ HA-опрос 401 (токен не от этого инстанса). Ниже — исходный черновик (docker-compose с TrueNAS), не применявшийся.
modbus-bridge/Dockerfile
modbus-bridge/modbus_ha_bridge.py # основной скрипт
modbus-bridge/config.yml # serial port, ha url, mqtt broker, sniff, mappings
modbus-bridge/docker-compose.yml
compose (как на TrueNAS):
services:
modbus-bridge:
build: .
image: modbus-bridge-modbus-bridge
container_name: modbus-bridge
network_mode: host
devices: [/dev/ttyZONT:/dev/ttyUSB0]
volumes:
- /mnt/data/modbus-bridge/config.yml:/app/config.yml:ro
- /mnt/data/modbus-bridge/modbus_ha_bridge.py:/app/modbus_ha_bridge.py:ro
environment:
- HA_TOKEN=<long-lived token из HA>
restart: unless-stopped
⚠️
HA_TOKEN— long-lived token. После переноса HA на t610 — сгенерировать НОВЫЙ токен в HA (Профиль → Security → Long-lived tokens), т.к. старый привязан к прежней инсталляции. ✅ Проверка токена — только по HTTP-коду:curl -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $T" http://192.168.2.176/api/→ 200 ок, 401 негодный. ❌ ЛОЖНЫЙ СЛЕД (не повторять, 2026-09-14): версия «HA сверяетissв JWT сinstance_id» — НЕВЕРНА. У рабочего токенаiss=e75d1d6f…,core.uuid=d3b24dad…— не совпадают, и это норма. Токен, выпущенный другим инстансом, даёт 401 по другой причине; единственный надёжный критерий — HTTP-код на/api/. Детали: family/plans/t610-addons-deployment §«HA MQTT-интеграция +ha.url».
5.6 Home Assistant config
ha/configuration.yaml # главный: modbus, template sensors, http.trusted_proxies
ha/automations.yaml
ha/scripts.yaml
ha/secrets.yaml
ha/.storage/ # ⚠️ осторожно: тут UI-интеграции, lovelace, entity registry
ha/www/floorplan/*.svg # фон плана этажей
Два варианта переноса HA-конфига:
| Вариант | Что копировать | Плюсы | Минусы |
|---|---|---|---|
| A. Полный | весь ha/ включая .storage |
всё UI-настроенное (интеграции, план) переезжает 1:1 | тянет мусор, .storage привязан к версии/аутентификации |
| B. Чистый | yaml-файлы + www/ + .storage/lovelace.home_plan |
чисто, версия свежая | UI-интеграции (MQTT, Tuya, HACS) настраивать заново вручную |
Рекомендация: вариант A (полный), т.к. в .storage живут:
core.config_entries— интеграции (MQTT, localtuya, tuya_local, modbus, HACS)lovelace.home_plan— dashboard с планом этажей (⚠️ НЕ пересоздать вручную)core.entity_registry/core.device_registry— имена entity (иначе все автоматизации сломаются по ссылкам!)
⚠️ Критично:
core.entity_registryсодержитentity_idдля всех автоматизаций. Без негоautomations.yamlне найдёт сущности. Сохранять обязательно. ⚠️.storage/auth— можно НЕ копировать (создастся новый пользователь); или скопировать, чтобы сохранить логины.
5.7 (опционально) камера
См. §8 — сначала выяснить, что это за камера.
5.8 udev + скрипт старта
system/99-tty-alias.rules # ⚠️ ПЕРЕСОЗДАТЬ под t610 (см. Шаг 5)
system/start-modbus.sh # скрипт ожидания tty перед docker start
Тот же паттерн, что на TrueNAS: ждать появления /dev/ttyZONT и /dev/ttyVent, потом docker start.
6. Чек-лист проверки после переноса
ℹ️ Обновлён 2026-09-14 под аддонную архитектуру (был: docker ps / tty-алиасы / порт 8123 — всё неактуально). ✅ = уже подтверждено на живом t610; ⏳ = ждёт Этапа 3.
- ✅ HA UI открывается:
http://192.168.2.176(⚠️ порт 80, не 8123) ha apps— все аддоныstarted(z2m, mosquitto, nodered, mbusd, modbus-bridge, core_ssh)- ✅ Serial: by-path/b-id видны в аддонах (
uart: true); привязка по/dev/serial/by-path/...(НЕ tty-алиасы — они на HA OS невозможны) - ✅ Zigbee: z2m работает — 16 устройств подхватились из старой базы, координатор EmberZNet 7.4.5
- ✅ MQTT: трафик z2m идёт (discovery-сообщения публикуются), логин
zontработает - Modbus вентиляция: HA видит AT2, заслонки переключаются (проверить физически!) — требует Этапа 3 (перенос HA-конфига)
- ZONT: датчики 485 (Dining/Kids/Bedroom) в ZONT не «недоступные», температуры идут — требует
ha_tokenв modbus-bridge + Этап 3 - ✅ modbus-bridge: sniffer работает, MQTT подключён, 13 discovery-топиков
modbus/sensors/*опубликованы, HA-опрос работает (ha.url=http://192.168.2.176:80) - ✅ mbusd: порт 502 открыт, устройство на by-path CH340 #2 (порт 4)
- Node-RED:
http://192.168.2.176:1880— flows загружены, creds на месте - ZONT MQTT: ZONT шлёт данные на
t610:1883(проверить подпиской) — требует перенаправления GPON-роутера - HA автоматизации: все работают (свет, вентиляция, ГВС) — функции автоматизаций срабатывают
- Floor plan: dashboard с планом этажей отображается
- Камера: доступна по
cam.mallexxx.duckdns.org(если переехала) - Стабильность:
reboott610 → всё поднялось само, без ручных команд
7. Отключение на TrueNAS (только после проверки!)
⚠️ НЕ удалять, а остановить + отключить автозапуск. Данные остаются как откат.
ssh truenas_admin@mallexxx.duckdns.org
# 1. Остановить контейнеры
docker stop homeassistant zigbee2mqtt nodered mosquitto mbusd modbus-bridge
# 2. Убрать автозапуск (restart policy)
docker update --restart=no homeassistant zigbee2mqtt nodered mosquitto mbusd modbus-bridge
# 3. Отключить init-скрипт modbus (POSTINIT id=3)
midclt call initshutdownscript.update 3 '{"enabled": false}'
# 4. Caddy: переключить домены на t610 (не отключать!)
# mallexxx.duckdns.org → <t610-IP>:8123
# cam.mallexxx... → <t610-IP>:8090
docker restart caddy
# 5. Опционально (позже): archive папки
# mv /mnt/RED_2TB/docker/ha /mnt/RED_2TB/docker/ha.decommissioned-2026-09
⚠️ Caddy остаётся на TrueNAS — он терминирует TLS для всех доменов. Меняем только upstream-адреса HA и камеры. ⚠️ Редирект GPON-роутера на 8123 тоже переключить на t610.
8. Камера — пункт (разобраться позже)
Контейнер камеры был на TrueNAS, просто остановлен (в списке docker ps -a не значится — вероятно, удалён при восстановлении после пересоздания пула; в Caddy остался мёртвый upstream 192.168.2.197:8090). Разобраться отдельно: найти исходный образ/папку, поднять на t610, поправить upstream в Caddy.
9. Бэкап конфигов на TrueNAS + git
9.1 Бэкап на TrueNAS (основной)
Цель: копия конфигов t610 на TrueNAS, чтобы пережить смерть t610.
- Вариант rclone: добавить в
/mnt/RED_2TB/docker/rclone/config/backup.shстроку, синкающую бэкап-папку t610 →mailru-crypt: - Вариант rsync: cron на TrueNAS (или на t610) — раз в сутки тянуть конфиги с t610:
# на TrueNAS, cron 03:30:
rsync -a --delete root@<t610-IP>:/mnt/data/ /mnt/RED_2TB/backup/t610-automation/
⚠️ Для HA OS конфиги HA — в
/mnt/data/supervisor/homeassistant/(или через SSH-аддон). Точный путь уточнить после установки.
9.2 Git (версионирование конфигов)
Цель: история изменений конфигов, откат, диффы.
Вариант A — локальный bare-repo на TrueNAS + cron (как Obsidian sync):
t610: /mnt/data/ → git repo (init, .gitignore для *.db, *.log, node_modules)
↓ push (cron, раз в час)
TrueNAS: /mnt/RED_2TB/storage/git/homeassistant-config.git (bare)
Скрипт на t610:
cd /mnt/data && git add -A && git commit -m "auto: $(date +%F\ %T)" --allow-empty
git push origin main
Вариант B — Gitea (уже работает на TrueNAS: git.mallexxx.duckdns.org):
- Создать repo
homeassistant-configв Gitea (токенeagle-reflectесть в family/how-to/gitea-config) - t610 → push в Gitea
- ✅ Плюс: веб-просмотр, диффы, история в UI
Рекомендация: Вариант B (Gitea) — уже инфраструктура есть, веб-интерфейс удобнее.
Что класть в git:
✅ configuration.yaml, automations.yaml, scripts.yaml, secrets.yaml (⚠️ или отдельно)
✅ .storage/ (кроме auth, *.db-shm, *.db-wal, tmp*)
✅ mosquitto/mosquitto.conf, modbus-bridge/config.yml, mbusd/mbusd.conf
✅ zigbee2mqtt/configuration.yaml, database.db
✅ nodered/flows.json, flows_cred.json (⚠️ пароли!)
❌ home-assistant_v2.db (200 МБ, бинарная история — не в git)
❌ *.log, node_modules/, __pycache__
⚠️ Секреты:
secrets.yaml,flows_cred.json,passwd,HA_TOKEN— либо в отдельном приватном repo, либо черезgit-crypt/.gitignore+ отдельный бэкап. GiteaDISABLE_REGISTRATION=trueи за Caddy — приемлемо, но решить осознанно.
10. Риски и подводные камни
| Риск | Вероятность | Митигация |
|---|---|---|
| udev-гонка (docker стартует раньше tty) | высокая | ✅ на аддонах неактуальна — Supervisor сам ждёт устройство при старте аддона |
| USB-пути t610 ≠ TrueNAS | ✅ решено | фактические пути зафиксированы 2026-09-14 (§12); порты 3/4 закреплены физически |
| BY-ID CH340 одинаковый | ✅ решено | оба CH340 без серийника → by-id идентичен, но привязка по /dev/serial/by-path/... + флаг uart: true в аддоне. Детали: family/plans/t610-addons-deployment §Этап 2 |
| Zigbee отвалится | средняя | database.db + network_key 1:1; переспаривание не нужно при верном переносе |
| entity_id разъедутся | средняя | копировать .storage/core.entity_registry |
Хардкод 192.168.2.197 в HA |
высокая | заменить на 127.0.0.1 (mbusd рядом) |
| GPON-редирект | высокая | переключить на t610:8123; проверить снаружи |
| HA OS не загрузится (Legacy/UEFI) | средняя | включить UEFI в BIOS; fallback — HA OS в VM |
| Камера неизвестна | — | §8, разобраться позже |
| Слабый CPU (T56N) | низкая | HA OS + 6 контейнеров — ок; камера с AI-детекцией — нет |
11. План выполнения (этапы)
| # | Содержание | Статус |
|---|---|---|
| 0 | Установка HA OS на t610 (HDD) + static IP на роутере | ✅ образ записан, t610 загружен (192.168.2.176). Static IP на роутере пока НЕ закреплён — работает по DHCP |
| 1 | Базовые сервисы: аддоны (не docker!) | ✅ Mosquitto 1883, Node-RED 1880, File editor, Samba(нужен пароль) — см. family/plans/t610-addons-deployment |
| 2 | udev-алиасы + скрипт старта | ✅ НЕ НУЖНО — аддоны снимают проблему udev-гонки (Supervisor ждёт устройство) |
| 2a | USB-устройства: Zigbee + 2× CH340 | ✅ ПОДКЛЮЧЕНЫ 2026-09-14 — ttyUSB0/ttyUSB1/ttyACM0, порты 3/4 зафиксированы (family/how-to/t610-access §USB) |
| 2b | z2m / mbusd / modbus-bridge | 🟡 привязка CH340 решена (by-path + uart: true); дальше z2m community repo; mbusd+modbus-bridge local add-ons |
| 3 | Перенос конфигов всех сервисов | ⏳ |
| 4 | Перенос HA config (.storage + yaml + www) |
⏳ |
| 5 | Правка адресов (modbus host, HA_TOKEN) | ⏳ |
| 6 | ZONT MQTT → на t610 | ⏳ |
| 7 | Камера (позже) | ⏳ |
| 8 | Полная проверка | ⏳ |
| 9 | Бэкап: rsync + git | ⏳ |
| 10 | GPON-редиректы + Caddy → t610 | ⏳ |
| 11 | Отключение на TrueNAS | ⏳ |
12. Данные, собранные при подготовке плана (2026-09-12)
Живое состояние TrueNAS (проверено):
| Контейнер | Образ | Сеть | Порты | Устройства | Ключевое |
|---|---|---|---|---|---|
| homeassistant | ghcr.io/home-assistant/home-assistant:stable |
ha_default |
8123 | — | HA 2026.9.1, volume /mnt/RED_2TB/docker/ha:/config |
| zigbee2mqtt | koenkk/zigbee2mqtt:latest |
host | — | /dev/ttyACM0 (Inswift ZBP-MG21, ember) |
network_key/pan_id в configuration.yaml |
| nodered | nodered/node-red:latest |
nodered_default |
1880 | — | TZ=Asia/Novosibirsk, Node-RED v5.0.7 |
| mosquitto | eclipse-mosquitto |
mosquitto_default |
1883 | — | allow_anonymous false, password_file /mosquitto/config/passwd |
| mbusd | 3cky/mbusd |
mbusd_default |
502 | /dev/ttyVent→/dev/ttyUSB0 (CH340 1a86:7523) |
conf: 9600 8n1, trx_control=addc |
| modbus-bridge | modbus-bridge-modbus-bridge (локальная сборка) |
host | — | /dev/ttyZONT→/dev/ttyUSB0 (CH340) |
env HA_TOKEN, config.yml |
USB-топология TrueNAS (для справки, на t610 будет иначе):
ttyUSB0 (1a86:7523 CH340) DEVPATH .../2-1/2-1.5/2-1.5:1.0 → ttyVent
ttyUSB1 (1a86:7523 CH340) DEVPATH .../2-1/2-1.6/2-1.6:1.0 → ttyZONT
ttyACM0 (Inswift Zigbee ZBP-MG21, 535A000001) → zigbee2mqtt
Текущие udev-правила (⚠️ НЕ подойдут для t610):
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", KERNELS=="?-1.6:1.0", SYMLINK+="ttyZONT"
SUBSYSTEM=="tty", KERNEL=="ttyUSB*", KERNELS=="?-1.5:1.0", SYMLINK+="ttyVent"
USB-топология t610 (фактическая, зафиксирована 2026-09-14):
Порт 3 (OHCI pci-0000:00:12.0) → ttyUSB0 CH340 #1 by-path pci-0000:00:12.0-usb-0:3:1.0-port0 → ZONT
Порт 4 (OHCI pci-0000:00:12.0) → ttyUSB1 CH340 #2 by-path pci-0000:00:12.0-usb-0:4:1.0-port0 → Vent
Порт 1 (xhci pci-0000:04:00.0) → ttyACM0 Inswift Zigbee ZBP-MG21 (serial 535A000001)
⚠️ Оба CH340 на t610 — без серийника, by-id идентичен (
usb-1a86_USB_Serial-if00-port0). Эквивалент udev-правила на t610 был быKERNELS=="1-3"/KERNELS=="1-4"(порты 3 и 4). Для аддонов udev не применяется — способ привязки решается в family/plans/t610-addons-deployment.
HA configuration.yaml — modbus:
modbus:
- name: rtu_bus
type: tcp
host: 192.168.2.197 # ← ЭТО МЕНЯЕМ на 127.0.0.1 или IP t610
port: 502
(в блоке также закомментированные AT2-сенсоры и активные switch'и заслонок slave 11/12/13/14)
modbus-bridge config.yml (ключевое):
serial: {port: /dev/ttyUSB0, baudrate: 9600, rts_de: true, timeout: 0.05}
ha: {url: "http://localhost:8123", poll_interval: 15}
mqtt: {broker: localhost, port: 1883, topic_prefix: modbus}
sniff: # slave 1/2/3 → Dining/Kids/Bedroom, регистры 2 и 100
Связанные заметки
- family/how-to/home-automation — карта slave ID, ZONT, регистры вентиляции
- family/how-to/truenas-infrastructure — docker-стек TrueNAS
- family/how-to/zont-modbus-bridge-udev-race-protection — защита от udev-гонки
- family/how-to/truenas-rclone-backup — система бэкапов
- family/how-to/gitea-config — Gitea (для git-бэкапа конфигов)
- family/how-to/truenas-access — доступ, железо, OpenWrt