Files
obsidian-vault/family/plans/home-automation-migration-t610.md
T

30 KiB
Raw Blame History

title, status, tags, created, updated, related
title status tags created updated related
Перенос домашней автоматизации на HP t610 draft
family
plan
homeautomation
t610
migration
2026-09-12 2026-09-12
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.yamlmodbus.host 192.168.2.197 IP t610 иначе HA на t610 не найдёт mbusd (он теперь локальный — можно 127.0.0.1, т.к. mbusd host-network)
modbus-bridge/config.ymlha.url http://localhost:8123 без изменений остаётся localhost
modbus-bridge/config.ymlmqtt.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/

# на 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) — обязательно, до всего остального:
# 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.

  1. HA OS Web UI: http://<IP t610>: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" не сработают — надо пересчитать пути.

# Подключить все 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).

Шаг 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):

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):

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 (только после проверки!)

⚠️ НЕ удалять, а остановить + отключить автозапуск. Данные остаются как откат.

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 + отдельный бэкап. 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:

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

Связанные заметки