[2026-09-12] eagle: family/how-to/home-automation.md family/how-to/truenas-infrastructure.md family/plans/home-automation-migration-t610.md

This commit is contained in:
Alexey Martemyanov
2026-09-12 16:05:11 +06:00
parent e28afa0c48
commit 5f07567b3d
3 changed files with 503 additions and 0 deletions
+2
View File
@@ -7,6 +7,8 @@ related: ["[[family/how-to/router-bishkek-asus]]"]
---
# 🏠 Умный дом — автоматика
> ⚠️ **ПЛАН ПЕРЕНОСА (2026-09-12):** весь стек домашней автоматизации (HA, zigbee2mqtt, nodered, mosquitto, mbusd, modbus-bridge) планируется перенести с TrueNAS на **HP t610** (HA OS). План со всеми путями/шагами: [[family/plans/home-automation-migration-t610]]. Карты Slave ID и регистров ниже **остаются в силе** — оборудование и адреса Modbus не меняются.
## AT2 — калибровка PWM
```
+2
View File
@@ -1,5 +1,7 @@
# TrueNAS — инфраструктура
> ⚠️ **ПЛАН ПЕРЕНОСА (2026-09-12):** вся домашняя автоматизация (HA, zigbee2mqtt, nodered, mosquitto, mbusd, modbus-bridge + камера) планируется к переносу с TrueNAS на **HP t610** (HA OS). Причина: TrueNAS на пределе RAM (17/21 ГБ). План: [[family/plans/home-automation-migration-t610]]. **НЕ ВЫПОЛНЯЕТСЯ, ждёт подтверждения.**
> Обновлено: 2026-09-02 (vpn.mallexxx:443 = РАБОЧИЙ Xray-сервер, проверено end-to-end; vless-proxy outbound мёртв)
> ## ⚠️ ПРИОРИТЕТ 2026-09-01: VPS qentra.top УДАЛЁН → vless-proxy и сетевые туннели сломаны
@@ -0,0 +1,499 @@
---
title: Перенос домашней автоматизации на HP t610
status: draft
tags:
- family
- plan
- homeautomation
- t610
- migration
created: '2026-09-12'
updated: '2026-09-12'
related:
- '[[family/how-to/home-automation]]'
- '[[family/how-to/truenas-infrastructure]]'
- '[[family/how-to/zont-modbus-bridge-udev-race-protection]]'
- '[[family/how-to/truenas-rclone-backup]]'
---
# Перенос домашней автоматизации на HP t610
> **Статус: ПЛАН, НЕ ВЫПОЛНЯЕТСЯ. Ждёт подтверждения Alex.**
> Создан 2026-09-12. Цель: убрать всю домашнюю автоматизацию с TrueNAS (он перегружен — 17/21 ГБ RAM) на выделенный HP t610, с бэкапом конфигов на TrueNAS и в git.
## 0. Зачем и что переносим
**Причина:** TrueNAS работает на пределе по памяти (занято 17 из 21 ГБ) — на нём immich + HA + ~25 контейнеров + ZFS-кэш. Домашняя автоматизация должна жить на отдельном дешёвом/тихом хосте, чтобы не зависеть от NAS и не конкурировать за RAM.
**Переносим на t610:**
| Сервис | Образ / способ | Почему |
|--------|----------------|--------|
| **Home Assistant** | **HA OS** (нативно, вся ОС) | ядро автоматизации |
| Zigbee2MQTT | docker-контейнер | нужен USB-Zigbee координатор |
| Mosquitto (MQTT) | docker-контейнер | брокер для z2m, Node-RED, ZONT |
| Node-RED | docker-контейнер | логика автоматизаций |
| mbusd | docker-контейнер | RS-485 → TCP :502 (шина вентиляции AT2) |
| modbus-bridge | docker-контейнер (локальная сборка) | снифф 485-датчиков + виртуальные slaves для ZONT |
| **Камера** | docker-контейнер (уточнить какой) | см. §8 — на TrueNAS НЕ найдена |
| udev-скрипт tty-алиасов | нативный udev + systemd | обязателен для стабильного старта mbusd/modbus-bridge |
**Остаётся на 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 (штатно), **до 16 ГБ** (2 слота) | ⚠️ узкое место. HA OS + 6 контейнеров на 4 ГБ — впритык |
| USB | **2× USB 3.0** + 4× USB 2.0 | ✅ хватает: Zigbee + 2× CH340 |
| Сеть | Gigabit (Broadcom BCM57781) | ок |
| COM | 1× RS-232 | резерв (если перейдём на нативный mbusd) |
| Диск | DOM в SATA-разъёме + 2-й SATA | ⚠️ если DOM 12 ГБ — **мало для HA OS**, нужен SSD/USB-диск |
| БП | 19.5V 3.3A, штекер 7.4×5.0 мм | нужен родной БП |
| Потребление | ~12 Вт idle, ~20 Вт под нагрузкой | ✅ тихий, дёшево 24/7 |
**⚠️ Риск RAM.** HA OS требует ~2 ГБ минимум. На 4 ГБ: HA OS (2 ГБ) + z2m (0.15) + mosquitto (0.05) + node-red (0.25) + mbusd (0.02) + modbus-bridge (0.1) + камера (0.31) = ~34 ГБ. **Работать будет, но без запаса.** Если в t610 есть 2 слота и планки 2+2 — рекомендую поставить 8 ГБ (2×4) перед переносом. Проверить фактические планки и объём DOM — шаг 1.
## 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. Инвентаризация железа t610 (перед всем)
```bash
# На t610 (после загрузки в Live-USB или уже установленную ОС):
lscpu | grep -iE "model name|^CPU\(s\)|MHz"
free -h
lsblk -o NAME,SIZE,TYPE,MODEL # какой DOM/SSD, хватит ли места
sudo dmidecode -t 17 | grep -E "Size|Locator" # сколько слотов RAM и планки
```
**Решения по результату:**
- RAM < 8 ГБ → решить, ставить ли 2×4 ГБ (рекомендуется)
- Диск < 32 ГБ → нужен SSD или USB-диск для HA OS
### Шаг 2. Установка HA OS на t610
**Откуда качать образ:** официальный раздел https://www.home-assistant.io/installation/generic-x86-64/
- Прямая ссылка на образ (generic x86-64):https://github.com/home-assistant/operating-system/releases
- Файл: `haos_generic-x86-64-<версия>.img.xz` (в разделе **Assets** последнего релиза)
- Записать на USB-флешку/SSD:
```bash
# на Mac:
xz -d haos_generic-x86-64-<версия>.img.xz
diskutil list # найти целевой диск (НЕ ошибиться!)
diskutil unmountDisk /dev/diskN
sudo dd if=haos_generic-x86-64-<версия>.img of=/dev/rdiskN bs=4m && sync
```
> ⚠️ В HA OS **UEFI**: в BIOS t610 включить UEFI-boot (не Legacy). Если t610 не грузит HA OS — вариант: **HA OS на Proxmox/Debian + qemu**, но это сложнее; сначала пробуем bare-metal.
- После записи → вставить в t610 → загрузиться → HA OS сама расширит раздел.
### Шаг 3. Первый запуск HA OS, сеть, static IP
1. t610 подключить кабелем к GPON-роутеру.
2. На роутере **назначить static IP (DHCP reservation)** — обязательно, до всего остального:
```bash
# 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`.
3. HA OS Web UI: `http://<IP t610>:8123` → первичная настройка (создать аккаунт).
> ⚠️ HA OS ставит HA «с нуля» — **конфиги мы переносим вручную** (§5), НЕ через бэкап-снапшот, чтобы не тащить мусор от старой версии долей.
### Шаг 4. Установка вспомогательных контейнеров на t610
HA OS поддерживает **аддоны** (встроенный docker). Два подхода:
- **(A) Аддоны HA OS** — Zigbee2MQTT и Mosquitto есть в официальном store. Быстро, но на t610 (4 ГБ) тяжелее и менее гибко.
- **(B) Отдельный docker** — как на TrueNAS (портируем `docker-compose.yml` 1:1). Больше контроля, совпадает со старой схемой.
**Рекомендация: (B) отдельный docker**, чтобы конфиги переносились как есть. На HA OS это делается через **SSH-аддон + `docker` CLI** или через add-on «Portainer».
Контейнеры (в порядке зависимостей):
1. **mosquitto** — порт 1883, конфиги см. §5.1
2. **zigbee2mqtt** — нужен mosquitto, USB-Zigbee`/dev/ttyACM0`
3. **nodered** — нужен mosquitto, порт 1880
4. **mbusd** — порт 502, USB-CH340#2 (шина AT2)
5. **modbus-bridge** — USB-CH340#1 (шина ZONT), host-network
6. **камера** — см. §8
### Шаг 5. Подключить USB-устройства и настроить udev-алиасы
**⚠️ САМЫЙ ОПАСНЫЙ ШАГ — на t610 другая USB-топология.**
Старые правила `KERNELS=="?-1.6:1.0"` / `"?-1.5:1.0"` **не сработают** — надо пересчитать пути.
```bash
# Подключить все 3 USB (2× CH340 + Zigbee) в ОДНИ И ТЕ ЖЕ порты навсегда!
# На t610 определить пути:
for d in /sys/class/tty/ttyUSB* /sys/class/tty/ttyACM*; do
echo "--- $d"; udevadm info -q property -p $d | grep -E "ID_VENDOR_ID|ID_MODEL_ID|ID_SERIAL|DEVPATH"
done
# DEVPATH даст что-то вида /devices/pci.../usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0
# → путь для правила: KERNELS=="1-1.2:1.0" (или с wildcard "?-1.2:1.0")
```
Составить новые `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).
### Шаг 6. Перенести конфиги (см. §5) и поднять сервисы
Порядок: скопировать конфиги → `docker compose up -d` по одному → проверить.
### Шаг 7. Проверка работоспособности (чек-лист §6)
### Шаг 8. Бэкап на TrueNAS + git (§9)
### Шаг 9. Отключить на 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
```
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 (локальная сборка)
```
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):
```yaml
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), т.к. старый привязан к прежней инсталляции (фактически токен привязан к HA `auth`, который мы не переносим вместе с `.storage` — см. примечание ниже).
### 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. Чек-лист проверки после переноса
- [ ] HA UI открывается:`http://<t610-IP>:8123`
- [ ] `docker ps` — все 5–6 контейнеров Up
- [ ] `ls -la /dev/ttyZONT /dev/ttyVent /dev/ttyACM0` — алиасы созданы, указывают на правильные ttyUSB
- [ ] **Zigbee:** устройства видны в zigbee2mqtt UI (`http://<t610-IP>:8080` или HA), `permit_join` работает, датчики обновляются
- [ ] **MQTT:**`mosquitto_sub -h localhost -t '#' -v` — видно трафик z2m
- [ ] **Modbus вентиляция:** HA видит AT2, заслонки переключаются (проверить физически!)
- [ ] **ZONT:** датчики 485 (Dining/Kids/Bedroom) в ZONT **не «недоступные»**, температуры идут
- [ ] **modbus-bridge:** логи без ошибок, MQTT-топики `modbus/sensors/*` публикуются
- [ ] **Node-RED:**`http://<t610-IP>:1880` — flows загружены, creds на месте
- [ ] **ZONT MQTT:** ZONT шлёт данные на `t610:1883` (проверить подпиской)
- [ ] **HA автоматизации:** все работают (свет, вентиляция, ГВС) — функции автоматизаций срабатывают
- [ ] **Floor plan:** dashboard с планом этажей отображается
- [ ] **Камера:** доступна по `cam.mallexxx.duckdns.org` (если переехала)
- [ ] **Стабильность:**`reboot` t610 → всё поднялось само, без ручных команд (главный тест — гонка udev!)
## 7. Отключение на TrueNAS (только после проверки!)
**⚠️ НЕ удалять, а остановить + отключить автозапуск.** Данные остаются как откат.
```bash
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. Камера — ОТКРЫТЫЙ ВОПРОС
**Факт (проверено 2026-09-12):** на TrueNAS камеры **нет** — ни контейнера, ни образа, ни папки в `/mnt/RED_2TB/docker/`, ни в `docker.bak/` (бэкап до пересоздания пула), ни в `storage/`, ни в `backup/`. Есть **только** мёртвая прокси-строка в Caddy (`cam.mallexxx.duckdns.org → 192.168.2.197:8090`), повторяющаяся во всех бэкапах Caddyfile с июля. Порт 8090 на TrueNAS никто не слушает.
**Что нужно выяснить у Alex:**
1. Модель камеры (RTSP-IP-камера? USB? бренд)
2. Где она сейчас физически работает (HTPC / Kraken / Mac / отдельное устройство?)
3. Что нужно: только просмотр (MJPEG/HLS) или запись/детекция?
**Кандидаты на t610 (по выбору):**
| Инструмент | Для чего | Образ |
|------------|----------|-------|
| **go2rtc** | RTSP → WebRTC/HLS/MJPEG, лёгкий | `alexxit/go2rtc` или `roflcoopter/...` |
| **motionEye** | просмотр + запись по детекции движения | `ccrisan/motioneye` |
| **mediamtx** | RTSP/WebRTC-сервер | `bluenviron/mediamtx` |
| **Frigate** | детекция объектов (AI) | ⚠️ **не для t610** — нужен Coral/GPU, съест всю RAM |
**Рекомендация:** если нужен просто просмотр → **go2rtc** (легчайший, идеален для слабого t610). Если запись по движению → motionEye (но следить за RAM).
## 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:
```bash
# на 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:
```bash
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` + отдельный бэкап. Gitea `DISABLE_REGISTRATION=true` и за Caddy — приемлемо, но решить осознанно.
## 10. Риски и подводные камни
| Риск | Вероятность | Митигация |
|------|-------------|-----------|
| **RAM 4 ГБ мало** | высокая | поставить 8 ГБ до переноса; следить за `free -h` |
| **udev-гонка** (docker стартует раньше tty) | высокая | скрипт ожидания + `After=dev-tty*.device` |
| **USB-пути t610 ≠ TrueNAS** | 100% | пересчитать udev по серийнику/физическому порту |
| **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 |
| **Диск DOM мал** | средняя | проверить `lsblk`, при малом — SSD |
| **Камера неизвестна** | — | §8, уточнить у Alex |
| **Слабый CPU (T56N)** | средняя | 6 контейнеров + HA OS — ок; камера с детекцией — нет |
## 11. План выполнения (этапы)
| Этап | Содержание | Требует |
|------|-----------|---------|
| **0** | Инвентаризация t610 (RAM/диск/USB) | физ. доступ |
| **1** | (если нужно) апгрейд RAM до 8 ГБ, диск | покупка |
| **2** | Установка HA OS + static IP на роутере | ✅ |
| **3** | Docker + 5 контейнеров (mosquitto, z2m, nodered, mbusd, modbus-bridge) | ✅ |
| **4** | udev-алиасы + скрипт старта | ✅ |
| **5** | Перенос конфигов всех сервисов | ✅ |
| **6** | Перенос HA config (`.storage` + yaml + www) | ✅ |
| **7** | Правка хардкод-адресов (modbus host, HA_TOKEN) | ✅ |
| **8** | ZONT MQTT → на t610 | ✅ (доступ к ZONT) |
| **9** | Камера (после выяснения §8) | ❓ |
| **10** | Полная проверка (§6) | ✅ |
| **11** | Бэкап: rsync на TrueNAS + git в Gitea | ✅ |
| **12** | GPON-редиректы + Caddy → t610 | ✅ |
| **13** | Отключение на TrueNAS (§7) | ✅ после проверки |
## 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"
```
**HA `configuration.yaml` — modbus:**
```yaml
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` (ключевое):**
```yaml
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