--- 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]]' - '[[family/how-to/gitea-config]]' - '[[family/how-to/truenas-access]]' --- # Перенос домашней автоматизации на 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 — разобраться отдельно | | 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 | ✅ за глаза для 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/ - Прямая ссылка на образ (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 сама расширит раздел. ### Шаг 2. Первый запуск 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='' 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://:8123` → первичная настройка (создать аккаунт). > ⚠️ HA OS ставит HA «с нуля» — **конфиги мы переносим вручную** (§5), НЕ через бэкап-снапшот, чтобы не тащить мусор от старой версии долей. ### Шаг 3. Установка вспомогательных контейнеров на 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 ### Шаг 4. Подключить 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}=="", SYMLINK+="ttyZONT" SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", ATTRS{serial}=="", 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 ``` 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= 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://:8123` - [ ] `docker ps` — все 5–6 контейнеров Up - [ ] `ls -la /dev/ttyZONT /dev/ttyVent /dev/ttyACM0` — алиасы созданы, указывают на правильные ttyUSB - [ ] **Zigbee:** устройства видны в zigbee2mqtt UI (`http://: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://: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 → :8123 # cam.mallexxx... → :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: ```bash # на TrueNAS, cron 03:30: rsync -a --delete root@:/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. Риски и подводные камни | Риск | Вероятность | Митигация | |------|-------------|-----------| | **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 | | **Камера неизвестна** | — | §8, разобраться позже | | **Слабый CPU (T56N)** | низкая | HA OS + 6 контейнеров — ок; камера с AI-детекцией — нет | ## 11. План выполнения (этапы) | Этап | Содержание | Требует | |------|-----------|---------| | **0** | Установка HA OS на t610 + static IP на роутере | физ. доступ | | **1** | Docker + 5 контейнеров (mosquitto, z2m, nodered, mbusd, modbus-bridge) | ✅ | | **2** | udev-алиасы + скрипт старта | ✅ | | **3** | Перенос конфигов всех сервисов | ✅ | | **4** | Перенос HA config (`.storage` + yaml + www) | ✅ | | **5** | Правка хардкод-адресов (modbus host, HA_TOKEN) | ✅ | | **6** | ZONT MQTT → на t610 | ✅ (доступ к ZONT) | | **7** | Камера | ❓ (позже) | | **8** | Полная проверка (§6) | ✅ | | **9** | Бэкап: rsync на TrueNAS + git в Gitea | ✅ | | **10** | GPON-редиректы + Caddy → t610 | ✅ | | **11** | Отключение на 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