[2026-09-14] eagle: family/how-to/t610-access.md family/plans/home-automation-migration-t610.md family/plans/t610-addons-deployment.md

This commit is contained in:
Alexey Martemyanov
2026-09-14 08:10:55 +06:00
parent 289ffcd375
commit 7a806dfe45
3 changed files with 76 additions and 52 deletions
+29 -13
View File
@@ -102,25 +102,41 @@ t610 в сети `192.168.2.0/24`. Роутеры для проверки:
> 📌 Диск был взят из TrueNAS (бывший системный диск с Windows 7) — образ HA OS записан через `dd` с Mac. Подробности в [[family/plans/home-automation-migration-t610]] Шаг 1.
## USB-устройства (блокер на 2026-09-13)
## USB-устройства (подключены 2026-09-14, карта зафиксирована)
**К t610 физически не подключены** Zigbee-координатор и два CH340:
**Все 3 устройства физически подключены к t610** (проверено 2026-09-14).
```bash
ls /dev/serial/by-id/ # No such file or directory
ls /dev/ttyUSB* /dev/ttyACM* # No such file or directory
| Устройство | by-id | **by-path (фиксированная привязка)** | tty | Физический порт |
|-----------|-------|--------------------------------------|-----|-----------------|
| CH340 #1 | `usb-1a86_USB_Serial-if00-port0` | `pci-0000:00:12.0-usb-0:3:1.0-port0` | `/dev/ttyUSB0` | USB1 порт 3 (OHCI `pci-0000:00:12.0`) |
| CH340 #2 | `usb-1a86_USB_Serial-if00-port0` ⚠️ **тот же** | `pci-0000:00:12.0-usb-0:4:1.0-port0` | `/dev/ttyUSB1` | USB1 порт 4 |
| Zigbee Inswift ZBP-MG21 | `usb-Inswift_Zigbee_ZBP-MG21_535A000001-if00` | `pci-0000:04:00.0-usb-0:1:1.0` | `/dev/ttyACM0` | USB3 порт 1 (xhci `pci-0000:04:00.0`) |
Sysfs-пути:
```
ttyUSB0 → /sys/devices/pci0000:00/0000:00:12.0/usb1/1-3/1-3:1.0/ttyUSB0
ttyUSB1 → /sys/devices/pci0000:00/0000:00:12.0/usb1/1-4/1-4:1.0/ttyUSB1
ttyACM0 → /sys/devices/pci0000:00/0000:00:15.3/0000:04:00.0/usb3/3-1/3-1:1.0
```
В `ha hardware info` из USB — только контроллеры (`ohci_hcd`), никаких `1a86:7523` (CH340) и Zigbee.
### ⚠️ ГЛАВНЫЙ ПИТФОЛЛ: два CH340 неразличимы по by-id
Оба CH340 — `1a86:7523`, **`serial = <none>`, `manufacturer = <none>`, `product = "USB Serial"`** (одинаковые).
**by-id у обоих идентичен** (`usb-1a86_USB_Serial-if00-port0`). Проброс по by-id в аддонах **сломается** — оба аддона получат одно и то же устройство.
**Что должно быть воткнуто (3 устройства, в фиксированные порты):**
| Устройство | USB-ID | Назначение |
|-----------|--------|-----------|
| Zigbee-координатор Inswift ZBP-MG21 | ember (был `/dev/ttyACM0`) | zigbee2mqtt |
| CH340 #1 | `1a86:7523` (был → `ttyZONT`) | modbus-bridge (шина ZONT) |
| CH340 #2 | `1a86:7523` (был → `ttyVent`) | mbusd (вентиляция AT2) |
**Различать только по `by-path`** (адрес шины) — ровно та же проблема, что была на TrueNAS, где алиасы `ttyZONT`/`ttyVent` делались udev-правилами по адресу шины ([[family/how-to/zont-modbus-bridge-udev-race-protection]]).
После подключения: `ls -la /dev/serial/by-id/` + `ha hardware info | grep -iE 'tty|1a86|serial'` → составить карту «серийник → устройство».
**Zigbee-координатор** — единственный из трёх, у кого есть уникальный серийник (`535A000001`), поэтому его by-id стабилен и проброс по by-id безопасен.
### Различия by-path на t610 vs TrueNAS
- TrueNAS: `KERNELS=="?-1.5"` / `"?-1.6"` (другая топология USB).
- t610: путь `pci-0000:00:12.0-usb-0:3` и `...-0:4`**порт 3 и порт 4** на одном OHCI-контроллере. Т.е. udev-правило на t610: `KERNELS=="1-3"` и `KERNELS=="1-4"`.
### Решение для HA-аддонов (открытый вопрос)
В HA-аддонах udev-правила на хосте применить нельзя (аддон — контейнер). Варианты привязки:
- **A.** В `config.yaml` аддона пробрасывать по `by-path` — но Supervisor в `devices:` обычно принимает `/dev/serial/by-id/...`; проверить, принимает ли `by-path`.
- **B.** Прописать в аддоне `devices: [/dev/ttyUSB0]` + зафиксировать физические порты (какой адаптер в какой порт) — хрупко, tty-номера могут меняться.
- **C.** Local add-on, внутри которого свой udev/симлинк-хак.
> Порты 3 и 4 **зафиксированы** — CH340 #1 в порт 3, CH340 #2 в порт 4. Устройства из портов не вынимать!
> ✅ **Плюс аддонов:** старая проблема гонки udev ([[family/how-to/zont-modbus-bridge-udev-race-protection]]) на t610 **неактуальна** — Supervisor сам ждёт устройство при старте аддона, скрипты ожидания tty не нужны.