[2026-09-14] eagle: family/how-to/truenas-infrastructure.md family/how-to/truenas-rclone-backup.md family/plans/t610-backup-to-truenas.md family/plans/t610-home-automation.md

This commit is contained in:
Alexey Martemyanov
2026-09-14 20:44:26 +06:00
parent 902e037bc8
commit edbe9ef76a
4 changed files with 146 additions and 64 deletions
+80 -9
View File
@@ -138,10 +138,10 @@ TrueNAS использует **NFSv4 ACL**, а не стандартный POSIX
| watchtower | containrrr/watchtower:latest | — | авто-обновление образов |
| inpxer | ghcr.io/hedger/inpxer:latest | 18080 | books.mallexxx.duckdns.org |
| nodered | node-red:latest | 1880 | nodered.mallexxx.duckdns.org |
| zigbee2mqtt | koenkk/zigbee2mqtt:latest | — | — |
| mbusd | 3cky/mbusd:latest | | Modbus |
| modbus-bridge | modbus-bridge | — | — |
| cups-splix | cups-splix | | принтер |
| zigbee2mqtt | koenkk/zigbee2mqtt:latest | — | — (переехал на t610) |
| mbusd | 3cky/mbusd:latest | 502 | Modbus (переехал на t610) |
| modbus-bridge | modbus-bridge | — | — (переехал на t610) |
| cups-splix | cups-splix | 631 | принтер |
| xray-admin | ghcr.io/mhsanaei/3x-ui:latest | 2053 (панель), 10095 (vless-ws), 443 (sub) | vpn-panel.mallexxx.duckdns.org, vpn.mallexxx.duckdns.org |
| xray-reverse-portal | teddysun/xray:latest | 12345 (SOCKS), 12346 (VLESS-TCP REALITY interconn) | — (см. `personal/tech/xray-reverse-tunnel-kraken-truenas.md`) |
@@ -184,8 +184,8 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
1. **docker engine:** `systemctl enable --now docker` (после создания data-root, см. шапку). Проверка: `docker info | grep -iE "Server Version|Docker Root Dir"`.
2. **Инфраструктура/сеть:** mosquitto (MQTT) → zigbee2mqtt (нужен mosquitto) → nodered (MQTT) → caddy (прокси, тянет все домены) → vless-proxy (SOCKS5 для hermes).
3. **Умный дом:** mbusd (Modbus TCP:502) → modbus-bridge (через mbusd) → ha (homeassistant, нужен caddy для домена).
4. **Медиа/хранилище:** transmission (нужен caddy) → arr (radarr/sonarr/prowlarr) → inpxer (books), inpx-web, library → rclone, syncthing, filebrowser, webdav, gitea.
3. **Умный дом:****на TrueNAS БОЛЬШЕ НЕ ВОССТАНАВЛИВАТЬ** — переехало на t610 (см. «Декомиссия стека автоматизации»). mbusd (Modbus TCP:502) → modbus-bridge (через mbusd) → ha (homeassistant, нужен caddy для домена)**всё это теперь аддоны на `192.168.2.176`**.
4. **Медиа/хранилище:** transmission (нужен caddy) → arr (radarr/sonarr/prowlarr) → inpxer (books), inpx-web, library → rclone, syncthing, filebrowser, webdav, gitea. ⚠️ `inpxer`/`inpx-web`/`library` — на 2026-09-14 в циклическом краше (см. декомиссию).
5. **Сервисы/свои:** hermes-taiga (нужен vless-proxy), portainer, portainer-mcp, watchtower, cups, ser2net.
6. **Проверка:** `docker ps`. HA: `docker exec homeassistant python -m homeassistant --script check_config --config /config`.
@@ -279,6 +279,14 @@ arr, caddy, cups, filebrowser, gitea, hermes, immich, inpx-web, inpxer, library,
- **Volume:** `/mnt/RED_2TB/docker/ha``/config`
- Конфиги редактируются **напрямую на NAS**`docker cp` не нужен, изменения применяются после reload/restart HA.
### Home Assistant на TrueNAS ⛔ **ХОЛОСТОЙ ЭКЗЕМПЛЯР (аудит 2026-09-14)**
> ⛔ **СТАТУС:** контейнер `homeassistant` `Up 5 дней`, но **рабочим не является** — `modbus.host` в `/mnt/RED_2TB/docker/ha/configuration.yaml` указывает на **`.197`** (сам TrueNAS), т.е. на шину, которой там больше нет (адаптеры на t610). Живая HA — **аддон на t610 `192.168.2.176`**, домен `mallexxx.duckdns.org` ведёт **туда** (Caddy → `192.168.2.176:80`). **Кандидат на снос (п.6 плана [[family/plans/t610-home-automation]]).**
> 📌 Эталон конфига старой HA сохранён: `/mnt/RED_2TB/docker/ha/configuration.yaml` — modbus-блок построчно идентичен тому, что уехал на t610 (32 заслонки). Использовался как эталон при сверке зон/устройств.
> ⚠️ Папки `docker/ha/` и `docker/homeassistant/` — **`homeassistant/` ПУСТАЯ**, рабочая — `ha/`.
Папка `/mnt/RED_2TB/docker/ha/``/config`. Образ `ghcr.io/home-assistant/home-assistant:stable`, порт `8123`.
**Ключевые файлы конфига:**
| Файл | Назначение |
@@ -300,9 +308,12 @@ ssh truenas_admin@mallexxx.duckdns.org "docker restart homeassistant"
ssh truenas_admin@mallexxx.duckdns.org "docker exec homeassistant python -m homeassistant --script check_config --config /config"
```
### mbusd — Modbus RTU → TCP gateway
### mbusd — Modbus RTU → TCP gateway ⛔ **ПЕРЕЕХАЛ НА t610 (2026-09-14)**
Мост Modbus RTU → TCP: пробрасывает серийный порт в TCP 502. Используется и для вентиляции (AT2), и для ZONT-шины.
> ⛔ **СТАТУС (аудит 2026-09-14): контейнер на TrueNAS БОЛЬШЕ НЕ РАБОЧИЙ.** USB-адаптеры (CH340 ZONT/вентиляция) физически переехали на t610 → в `/sys/bus/usb` на TrueNAS только принтер Samsung `04e8:3425`. `/dev/ttyVent` **не существует**. Контейнер формально `Up` с `2026-08-25` (RestartCount=0), но спамит `tty_reopen(): can't open tty device /dev/ttyUSB0 (No such device or address)`. Маппинг `/dev/ttyVent` докер толерирует, пока device не пересоздавали. **Кандидат на снос (п.6 плана [[family/plans/t610-home-automation]]).**
> 🔴 **Конфликт порта 502:** `mbusd` и `ser2net` **оба** публикуют `0.0.0.0:502` И оба просят `/dev/ttyVent`. `ser2net` в state `Created` (никогда не запущен). При попытке `start ser2net` будет конфликт портов. **Не поднимать оба одновременно.**
Мост Modbus RTU → TCP: пробрасывает серийный порт в TCP 502. ~~Используется и для вентиляции (AT2), и для ZONT-шины.~~**исторически**; на 2026-09-14 обе линии обслуживает mbusd **на t610**.
- **Image:** `3cky/mbusd`, compose в `/mnt/RED_2TB/docker/mbusd/`
- **Порт:** `502:502` (TCP)
@@ -311,10 +322,15 @@ ssh truenas_admin@mallexxx.duckdns.org "docker exec homeassistant python -m home
- **Entrypoint:** `["/usr/bin/mbusd","-d","-L","-","-c","/etc/mbusd.conf"]`
- **Pitfall udev-race:** см. ниже «Проблема modbus-bridge/mbusd после рестарта».
### modbus-bridge — 485-датчики + виртуальные slaves для ZONT
### modbus-bridge — 485-датчики + виртуальные slaves для ZONT ⛔ **ПЕРЕЕХАЛ НА t610 (2026-09-14)**
> ⛔ **СТАТУС (аудит 2026-09-14): ОСТАНОВЛЕН.** `Exited (0)` с **2026-09-14 01:59:34** (один рестарт, потом тишина) — `/dev/ttyZONT` перестал существовать в момент переезда USB на t610. `network_mode: host` + `ha.url: http://localhost:8123` → **на TrueNAS он теперь и не смог бы работать**: локальный HA смотрит на `.197`-шину, которой нет. Рабочая копия — аддон `modbus-bridge` на t610. **Кандидат на снос (п.6 плана [[family/plans/t610-home-automation]]).**
> 🔴 **Побочная находка:** `HA_TOKEN` лежит **открытым текстом** в `/mnt/RED_2TB/docker/modbus-bridge/docker-compose.yml` (env). Кандидат на ротацию вместе с токеном из remote `nolvu-landing`.
Кастомный Python-мост (`modbus_ha_bridge.py`, репо `HA-ZONT-Modbus`), контейнер `/mnt/RED_2TB/docker/modbus-bridge/`.
> ⚠️ **Уточнение (аудит 2026-09-14): `docker-compose.yml` ЗДЕСЬ ЕСТЬ** — пункт ниже («НЕ имеет compose-файла») устарел. Compose содержит `devices: /dev/ttyZONT:/dev/ttyUSB0`, env `HA_TOKEN`/`MQTT_USER=zont`/`MQTT_PASS`, `network_mode: host`, логирование `json-file` 10m×5.
- **Image:** `modbus-bridge` (локальная сборка, `--no-cache`). **НЕ имеет compose-файла** — создавался через `docker-compose`-подобный run; для восстановления использовать параметры ниже.
- **Device:** `devices: - /dev/ttyZONT:/dev/ttyUSB0` (внутри контейнера слушает `/dev/ttyUSB0`)
- **Volumes:** `config.yml``/app/config.yml` (ro), `modbus_ha_bridge.py``/app/modbus_ha_bridge.py` (ro)
@@ -491,6 +507,61 @@ git -C /mnt/RED_2TB/storage/git/obsidian-vault.git log --oneline -10
---
## 🔻 Декоммиссия стека автоматизации TrueNAS → t610 (аудит 2026-09-14)
**Контекст:** миграция умного дома TrueNAS → HP t610 (HA OS) завершена (п.5-мк плана [[family/plans/t610-home-automation]] закрыт). Остался **п.6** — погасить дублирующий стек на TrueNAS. Вместо слепого «гасим всё» проведён **аудит фактом** (что реально живо, что мёртво, что нельзя трогать).
### Что искали и как (методика аудита)
| Шаг | Команда | Зачем |
|---|---|---|
| Список контейнеров | `docker ps -a --format '{{.Names}}\t{{.Status}}\t{{.Image}}\t{{.Ports}}'` | кто жив/умер, какие порты торчат |
| Кто чем управляется | `for c in $(docker ps -a --format '{{.Names}}'); do docker inspect $c --format '{{index .Config.Labels "com.docker.compose.project.config_files"}}'; done` | 🔑 **все** оказались per-service compose из `/mnt/RED_2TB/docker/<app>/` (не Portainer-стек). В `portainer/data/compose/`**пусто**. |
| Почему умер | `docker inspect <c> --format '{{.State.Error}} {{.State.ExitCode}} {{.State.FinishedAt}}'` + `docker logs --tail 20 <c>` | точное время и причина |
| Есть ли железо | `ls /sys/bus/usb/devices/` + `cat .../product`,`idVendor:idProduct` | на TrueNAS только принтер Samsung `04e8:3425` (Intel `8087:0024` = USB-контроллеры). **CH340/координатора НЕТ.** |
| `lsusb`/`dmesg` | — | ❌ **недоступны** `truenas_admin` (`command not found`); `dmesg` пуст без root. Использовать `/sys/bus/usb`. |
| Кто ссылается | `grep -nE '...' /mnt/RED_2TB/docker/caddy/Caddyfile` | не сломать рабочие домены |
> 🔑 **Питфолл:** `docker inspect <c>` **работает** под `truenas_admin` без sudo, а `midclt call ...` и `dmesg` — **нет** (нужен root). Для аудита хватает `docker` + `/sys`.
### Вердикт по каждому контейнеру
| Контейнер | Состояние | Причина | Решение |
|---|---|---|---|
| `homeassistant` | Up 5 дн | холостой — `modbus.host=192.168.2.197`, шины там нет | ⛔ гасить |
| `mbusd` | Up (ложно), 14:42 `can't open /dev/ttyUSB0` | `/dev/ttyVent` не существует (USB уехал) | ⛔ гасить |
| `mosquitto` | Up 3 нед | ZONT переключён на `.176` (DNAT) | ⛔ гасить |
| `nodered` | Up (healthy) | flows перенесены на t610 (68 узлов) | ⛔ гасить *(решение Alex: сразу или страховка 2 дня — открыто)* |
| `zigbee2mqtt` | Exited (2) **14.09 01:59** | `Adapter disconnected` — координатор на t610 | ⛔ останавливать (уже мёртв) |
| `modbus-bridge` | Exited (0) **14.09 01:59** | `/dev/ttyZONT` исчез | ⛔ останавливать (уже мёртв) |
| **`caddy`** | Up | **17 доменов TrueNAS + `mallexxx.*` → t610** | 🔴 **НЕ ТРОГАТЬ** |
| `ser2net` | `Created` (никогда не стартовал) | конфликт 502 с mbusd | отдельное решение |
| `library` | **Restarting, restart=29745** | 🔴 циклический краш, при этом Caddy ссылается (`library:8080`) | 🔴 отдельная задача |
| `inpx-web`, `inpxer` | Exited (1), 13 рестартов, 3 нед | циклический краш | 🔴 отдельная задача |
**Ключевой факт-маркер переезда:** `zigbee2mqtt` и `modbus-bridge` **оба** легли в **2026-09-14T01:59** — синхронно, в момент физического переноса USB-адаптеров. Это доказательство, что дубль перестал работать сам, а не «сломался от чего-то».
### Порядок безопасного гашения (одобренный шаблон)
```bash
# 1) ГАСИМ, НЕ УДАЛЯЕМ (откат возможен)
docker stop homeassistant mbusd mosquitto nodered zigbee2mqtt modbus-bridge
# 2) Снять автозапуск, чтобы не поднялись после ребута
docker update --restart=no homeassistant mbusd mosquitto nodered zigbee2mqtt modbus-bridge
# 3) Проверки
curl -s -o /dev/null -w '%{http_code}\n' https://mallexxx.duckdns.org # ожидаем 200 (t610)
# ZONT MQTT: живой поток в mosquitto на .176, а НЕ на .197
# 4) Папки /mnt/RED_2TB/docker/* НЕ удалять — 2-3 дня, потом rm отдельным шагом
```
**Правила этого шага:**
-**НЕ** `docker rm`, ❌ не удалять `/mnt/RED_2TB/docker/<app>/` — сначала «погасить», откат = `docker start` + вернуть `restart: unless-stopped`.
-**Caddy не гасить и не переносить** — 17 из 20 доменов это сервисы TrueNAS.
-`library`/`inpx-*`**отдельным решением**, не в этом заходе (там своя авария, не связанная с миграцией).
- ⚠️ Порт 502: `mbusd` и `ser2net` **не поднимать одновременно**.
---
## Печать / cups-splix (2026-08-26, починено)
**Принтер Samsung CLX-216x подключён по USB к TrueNAS** (не в сети!). Единственный путь печати — контейнер `cups-splix`, который раздаёт CUPS на `192.168.2.197:631`.
+3 -2
View File
@@ -51,9 +51,10 @@
| Источник | Куда класть | Статус |
|---|---|---|
| Конфиги **t610** (HA OS): `/config/{configuration,automations,scripts,scenes,secrets}.yaml`, `/config/.storage/`, `/config/go2rtc.yaml`, `zigbee2mqtt`, `/addons/{mbusd,modbus-bridge,ustreamer}`, `/addon_configs/{zigbee2mqtt,nodered}` | `/mnt/RED_2TB/backup/t610/` | ✅ **РАБОТАЕТ (2026-09-14)** — крон TrueNAS id=3, юзер `nas`, 03:30 ежедневно, ротация 14 архивов. Детали, питфоллы, команды — `[[family/plans/t610-backup-to-truenas]]` |
| Конфиги **t610** (HA OS): `/config/{configuration,automations,scripts,scenes,secrets}.yaml`, `/config/.storage/`, `/config/go2rtc.yaml`, `zigbee2mqtt`, `blueprints`, HA БД (`home-assistant_v2.db`), **опции ВСЕХ аддонов** (Supervisor API), `/data/options.json`, `/data/.ssh/authorized_keys`, `/addons/{mbusd,modbus-bridge,ustreamer}`, `/addon_configs/{zigbee2mqtt,nodered}` | `/mnt/RED_2TB/backup/t610/` | ✅ **РАБОТАЕТ, v4 (2026-09-14)** — крон TrueNAS id=3, юзер `nas`, 03:30 ежедневно, ротация 14 архивов. Детали, питфоллы, команды — `[[family/plans/t610-backup-to-truenas]]` |
**Как работает (проверено 2026-09-14):** крон на TrueNAS от юзера **`nas`** → `ssh` на t610 (ключ `/mnt/RED_2TB/backup/t610/.ssh/id_ed25519`, ограничен `from="192.168.2.197"`) → `tar czf -` собирается НА t610 → архив `t610-config-<ts>.tar.gz` (~605 КБ, 111 файлов) в `/mnt/RED_2TB/backup/t610/` → датасет `backup` целиком уходит в `mailru-crypt:` по воскресеньям. **Лог:** `backup.log` в той же папке.
**Как работает (проверено 2026-09-14, v4):** крон на TrueNAS от юзера **`nas`** → `ssh` на t610 (ключ `/mnt/RED_2TB/backup/t610/.ssh/id_ed25519`, ограничен `from="192.168.2.197"`) → на t610 выгружаются **опции всех аддонов** через Supervisor API (`/addons/<slug>/info``.data.options`) в `/tmp/habackup/`, затем `tar czf -` собирается НА t610 → архив `t610-full-<ts>.tar.gz` (**~6.0 МБ, 162 файла**) в `/mnt/RED_2TB/backup/t610/` → датасет `backup` целиком уходит в `mailru-crypt:` по воскресеньям. **Лог:** `backup.log` в той же папке.
> 📌 **Почему опции аддонов критичны:** там `ha_token` (JWT для modbus-bridge), `mqtt_password` `mqtt1z3$`, привязки USB `by-path` (`usb-0:3`/`usb-0:4`), Zigbee serial, крипто-секрет Node-RED. Без них восстановление = ручная пересборка всего.
⚠️ **Важно про права (обновлено 2026-09-14):** запись в `/mnt/RED_2TB/backup/` требует root (было `root:root 775`), **но** целевой датасет `backup/t610``nas:nas 770`, поэтому сам бэкап пишется **без root**. `truenas_admin` добавлен в группу `nas`. Root нужен был только для `chown nas:nas /mnt/RED_2TB/backup/t610` (один раз). ⚠️ **Пароль `1316261` — НЕ от TrueNAS** (он от OpenWrt-роутера), root-операции — через System → Shell.
+60 -50
View File
@@ -1,9 +1,10 @@
---
title: t610 → TrueNAS автобэкап конфигов
created: 2026-09-14T00:00:00.000Z
created: '2026-09-14'
updated: '2026-09-14'
type: tech
namespace: family
status: works-v4
tags:
- truenas
- t610
@@ -18,7 +19,6 @@ related:
- '[[family/how-to/truenas-access]]'
- '[[family/how-to/truenas-rclone-backup]]'
- '[[family/how-to/gitea-config]]'
status: works-v4
---
# t610 → TrueNAS — автобэкап конфигов
@@ -75,13 +75,13 @@ cron TrueNAS (юзер nas, 03:30 ежедневно)
| 4 | ssh-ключ для pull | ✅ | Создан на Mac: `~/tmp-t610/backup-key/t610_backup_ed25519` (+`.pub`), ed25519, без пароля, comment `t610-backup-pull`, fingerprint `SHA256:PKDB/sTjM8WFitIjSG+vT27x1TOY3F2Vi6y8YFwK5wo` |
| 5 | Публичный ключ на t610 | ✅ | `/root/.ssh/authorized_keys` (+1 строка, было 1 — ключ Alex). Бэкап: `authorized_keys.bak-20260914-210532` |
| 6 | Приватный ключ на TrueNAS | ✅ | **`/mnt/RED_2TB/backup/t610/.ssh/id_ed25519`** (+ `config` с алиасом `t610-backup`), `nas:nas 600`. ⚠️ Итоговое место — **внутри `backup/t610`**, НЕ в `~nas/.ssh` (см. питфолл №9) |
| 7 | Скрипт бэкапа | ✅ | `/mnt/RED_2TB/backup/t610/backup-t610.sh` (v3, `nas:nas 755`) |
| 7 | Скрипт бэкапа | ✅ | `/mnt/RED_2TB/backup/t610/backup-t610.sh` (**v4**, `nas:nas 755`) |
| 8 | Крон-задача под `nas` | ✅ | `cronjob` **id=3**, user=`nas`, `30 3 * * *`, enabled=true |
| 9 | Живой прогон + проверка архива | ✅ | 2 прогона: `OK ... (605504 bytes)`, `OK ... (605873 bytes)`, `.err` пустой |
| 10 | Проверка состава архива | ✅ | **111 файлов**; ключевые на месте: `configuration.yaml`, `automations.yaml`, `go2rtc.yaml`, `secrets.yaml`, `.storage/http` (фикс `trusted_proxies`), `addons/modbus-bridge/data/config.template.tmpl` (реле slave 104), `nodered/flows.json` |
| 9 | Живой прогон + проверка архива | ✅ | v4-прогон: `OK: t610-full-20260914-073401.tar.gz (6085743 bytes)`, `.err` пустой |
| 10 | Проверка состава архива | ✅ | **162 файла**, ~6.0 МБ. См. раздел «Состав бэкапа» ниже |
| 11 | Выход в облако | ✅ | `run_sync "backup" /data/backup "mailru-crypt:"` в `backup.sh`; контейнер `rclone``Up 5 days`; правок не требовалось |
**Путь для архивов на TrueNAS:** `/mnt/RED_2TB/backup/t610/t610-config-<YYYYmmdd-HHMMSS>.tar.gz`, лог — `backup.log` рядом.
**Путь для архивов на TrueNAS:** `/mnt/RED_2TB/backup/t610/t610-full-<YYYYmmdd-HHMMSS>.tar.gz`, лог — `backup.log` рядом.
### Как проверять (без ожидания 03:30)
@@ -92,31 +92,12 @@ ssh truenas_admin@mallexxx.duckdns.org 'cat /mnt/RED_2TB/backup/t610/backup.log;
ssh truenas_admin@mallexxx.duckdns.org 'midclt call cronjob.query "[[\"id\",\"=\",3]]" | jq -r ".[] | {id,user,enabled,command,schedule}"'
```
> ⚠️ **НЕ проверять через `midclt call cronjob.run`** — даёт ложный `exit 137`/`143`. См. питфолл №10.
### ⚠️ НЕ ЗАКРЫТО — что ещё стоит добавить в архив (обсуждалось 2026-09-14, вечер-15)
> ✅ **ЗАКРЫТО В v4 (2026-09-14, вечер-16):** пункты 1, 2, 4, 5 из таблицы ниже **ДОБАВЛЕНЫ** в скрипт. Архив вырос с 605 КБ / 111 файлов до **6.0 МБ / 162 файла**. Проверено чтением из архива: `ha_token` присутствует, `mqtt_password: mqtt1z3---
title: t610 → TrueNAS автобэкап конфигов
created: 2026-09-14
updated: 2026-09-14
type: tech
namespace: family
tags: [truenas, t610, backup, smb, ssh, cron, ha-os, done]
related:
- "[[family/plans/t610-home-automation]]"
- "[[family/how-to/truenas-access]]"
- "[[family/how-to/truenas-rclone-backup]]"
- "[[family/how-to/gitea-config]]"
---
# t610 → TrueNAS — автобэкап конфигов
> **Задача (п.8 / A3 плана [[family/plans/t610-home-automation]]):** конфиги t610 (HA OS) регулярно складывать на TrueNAS, откуда они автоматически уезжают в Mail.ru Cloud через уже существующий rclone-бэкап TrueNAS.
> ⚠️ Ставить задачу на `* * * * *` для теста и **ждать реального срабатывания** (минуту), а не гонять `sleep`-циклы (питфолл №20).
## Ключевые питфоллы (найдены в этой сессии)
### 1. 🔴 `from="192.168.2.197"` — Mac НЕ подходит для проверки ключа
Mac заходит на t610 как **`192.168.2.157`** (через NAT Rasputin), а не как `.197`. Поэтому `ssh -i <ключ> root@192.168.2.176` **с Mac всегда даёт `Permission denied (publickey)`** — это **правильное поведение** ограничения, а не поломка ключа. Проверять pull-ключ **только с TrueNAS** (путь к конфигу — итоговый, см. питфолл №9):
Mac заходит на t610 как **`192.168.2.157`** (через NAT Rasputin), а не как `.197`. Поэтому `ssh -i <ключ> root@192.168.2.176` **с Mac всегда даёт `Permission denied (publickey)`** — это **правильное поведение** ограничения, а не поломка ключа. Проверять pull-ключ **только с TrueNAS**:
```bash
ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
```
@@ -126,7 +107,7 @@ ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
**Симптом:** UI TrueNAS (Storage → Datasets, Apps, Datasets) — «Failed to load datasets», дерево датасетов не открывается, невозможно создать датасет/шару.
**Причина:** после пересоздания пула (2026-08-21) каталог `app_configs` внутри датасета `ix-apps` не был создан. UI на старте **безусловно** читает `/mnt/.ix-apps/app_configs` и валит всё дерево.
**Факты:** `RED_2TB/ix-apps` (8.29G) существует, смонтирован на `/mnt/.ix-apps`, `docker.config``pool=RED_2TB, dataset=RED_2TB/ix-apps` (пул Apps выбран корректно). Внутри был только `docker/` (`drwx--x--- root root`). Choose Pool → **не помогло**.
**Фикс (под root, WebUI → System → Shell):**
**Фикс (под root):**
```bash
mkdir -p /mnt/.ix-apps/app_configs
```
@@ -154,8 +135,8 @@ setfacl -m user:truenas_admin:rwx /mnt/RED_2TB/backup/t610
`~nas` = `/mnt/RED_2TB/storage/nas`. Промежуточная попытка класть ключ туда **провалилась** (см. №9) — итоговое место ключа: **`/mnt/RED_2TB/backup/t610/.ssh/`**.
### 8. Пароль `1316261` — ❌ НЕ от TrueNAS
В доке `[[family/how-to/truenas-access]]` строка «Пароль root: `1316261`» **ошибочна** для TrueNAS. Alex: «Это не пароль от truenas». `1316261` — пароль от OpenWrt-роутера `192.168.2.2` (там он и правильный). **Для TrueNAS root-операций использовать WebUI → System → Shell** (работает под root, пароль не нужен).
> 📌 Alex работает под root по SSH сам — **не предлагать ему WebUI-инструкции**, если он уже сказал, что у него есть root-shell.
В доке `[[family/how-to/truenas-access]]` строка «Пароль root: `1316261`» **ошибочна** для TrueNAS. Alex: «Это не пароль от truenas». `1316261` — пароль от OpenWrt-роутера `192.168.2.2` (там он и правильный).
> 📌 Alex работает под root по SSH сам — **не предлагать ему WebUI-инструкции**, если он уже сказал, что у него есть root-shell. Прямая цитата: «ты заебал со своим Web UI! у меня блядь ssh есть».
### 9. 🔴 Ключ класть в `backup/t610/.ssh`, НЕ в `~nas/.ssh` — родительский `storage/` непроходим для `nas`
**Симптом:** `Can't open user config file /mnt/RED_2TB/storage/nas/.ssh/config: Permission denied` — при том что сам `.ssh` был `nas:nas 700`.
@@ -265,7 +246,7 @@ EOF
# ─── 4. Под ROOT (ТОЛЬКО этот шаг требует root) ───
mkdir -p /mnt/.ix-apps/app_configs # лечит UI «Failed to load datasets»
chown nas:nas /mnt/RED_2TB/backup/t610 && chmod 770 /mnt/RED_2TB/backup/t610
groupmod -n nas -m truenas_admin 2>/dev/null || usermod -a -G nas truenas_admin # truenas_admin в группу nas
groupmod -n nas -m truenas_admin # truenas_admin в группу nas
# ─── 5. SMB-шара (от truenas_admin, midclt) ───
midclt call sharing.smb.query > /mnt/RED_2TB/storage/shares-before-$(date +%Y%m%d-%H%M%S).json # ДАМП ПЕРЕД
@@ -273,11 +254,13 @@ midclt call sharing.smb.create '{"purpose":"DEFAULT_SHARE","path":"/mnt/RED_2TB/
"name":"t610","comment":"Backup t610 (HA OS) configs","ro":false,"browsable":true,
"guestok":false,"timemachine":false,"enabled":true}'
# ─── 6. Скрипт бэкапа (v3) + права ───
scp ~/tmp-t610/backup-t610-v3.sh truenas_admin@mallexxx.duckdns.org:/mnt/RED_2TB/backup/t610/backup-t610.sh
# ─── 6. Скрипт бэкапа (v4) + права ───
# ⚠️ scp поверх файла nas не работает → класть под новым именем + mv + chmod/chown
scp ~/tmp-t610/backup-t610-v4.sh truenas_admin@mallexxx.duckdns.org:/mnt/RED_2TB/backup/t610/backup-t610.v4.sh
ssh truenas_admin@mallexxx.duckdns.org '
chmod 755 /mnt/RED_2TB/backup/t610/backup-t610.sh
chown nas:nas /mnt/RED_2TB/backup/t610/backup-t610.sh'
cd /mnt/RED_2TB/backup/t610
mv -f backup-t610.v4.sh backup-t610.sh
chmod 755 backup-t610.sh && chown nas:nas backup-t610.sh'
# ─── 7. Крон-задача (id=3, юзер nas, 03:30 ежедневно) ───
midclt call cronjob.create '{"user":"nas","command":"/mnt/RED_2TB/backup/t610/backup-t610.sh",
@@ -301,23 +284,36 @@ ssh -F /mnt/RED_2TB/backup/t610/.ssh/config t610-backup 'echo ok'
| Критичное | Где в архиве | Проверено |
|---|---|---|
| 🔴 `ha_token` (JWT для bridge) | `addon-options/local_modbus-bridge.json` | ✅ `eyJhbGciOiJI...` |
| 🔴 `mqtt_password` `mqtt1z3---
title: t610 → TrueNAS автобэкап конфигов
created: 2026-09-14
updated: 2026-09-14
type: tech
namespace: family
tags: [truenas, t610, backup, smb, ssh, cron, ha-os, done]
related:
- "[[family/plans/t610-home-automation]]"
- "[[family/how-to/truenas-access]]"
- "[[family/how-to/truenas-rclone-backup]]"
- "[[family/how-to/gitea-config]]"
---
| 🔴 `mqtt_password` `mqtt1z3$` | `addon-options/local_modbus-bridge.json` + `core_mosquitto.json` | ✅ |
| 🔴 mbusd device `/dev/serial/by-path/pci-...usb-0:3:...` (гнездо вентиляции) | `addon-options/local_mbusd.json` | ✅ |
| 🔴 bridge device `/dev/serial/by-path/pci-...usb-0:4:...` (ZONT) | `addon-options/local_modbus-bridge.json` | ✅ |
| 🔴 zigbee `serial.port` `usb-Inswift_Zigbee_ZBP-MG21_...-if00` | `addon-options/45df7312_zigbee2mqtt.json` | ✅ |
| 🔴 mosquitto login `zont` | `addon-options/core_mosquitto.json` | ✅ |
| 🔑 ssh `authorized_keys` (хостовый) | `data/.ssh/authorized_keys` + `addon-options/core_ssh.json` | ✅ |
| 📊 история/энергетика HA | `config/home-assistant_v2.db` + `-wal` | ✅ |
| ️ версии | `ha-core-info.json`, `supervisor-info.json`, `_addons-list.json` | ✅ |
# t610 → TrueNAS — автобэкап конфигов
**Ротация:** `KEEP=14` архивов (`t610-full-<ts>.tar.gz`).
> ⚠️ HA БД копируется при работающем HA — возможна неконсистентная копия SQLite (WAL прилагается, обычно восстанавливается). Для истории приемлемо; продакшн-метод — `ha core stop` перед копией, но ронять HA каждую ночь ради этого не стоит.
> **Задача (п.8 / A3 плана [[family/plans/t610-home-automation]]):** конфиги t610 (HA OS) регулярно складывать на TrueNAS, откуда они автоматически уезжают в Mail.ru Cloud через уже существующий rclone-бэкап TrueNAS.
**Технический приём (важно):** опции аддонов выгружаются **внутри** ssh-сессии на t610 в `/tmp/habackup/`, затем включаются в тот же `tar` — так не нужно ни второго ssh-прохода, ни временных файлов на TrueNAS. Эндпоинт опций: **`GET /addons/<slug>/info``.data.options`** (НЕ `/addons/<slug>/options` — тот даёт HTTP 405). `$SUPERVISOR_TOKEN` доступен в SSH-аддоне как переменная окружения.
**Не нужно бэкапить:** `/config/.cache`, `deps`, `tts` (пусто), `.cloud` (пусто), `home-assistant_v2.db-shm`, `/backup`, `/media`, `/share`, `/ssl` (все пустые — проверено 2026-09-14).
**Скрипт (суть):**
```sh
DEST=/mnt/RED_2TB/backup/t610 ; SSHCFG=$DEST/.ssh/config ; SSHHOST=t610-backup ; KEEP=14
# внутри ssh: выгрузка addon-options через Supervisor API + tar одной строкой путей
ssh -F "$SSHCFG" -o BatchMode=yes -o ConnectTimeout=20 "$SSHHOST" '
H="Authoriz""ation: Bea""rer $SUPERVISOR_TOKEN"
for slug in $(curl -s -H "$H" "$API" | jq -r ".data.addons[].slug"); do
curl -s -H "$H" "$API/$slug/info" | jq ".data.options" > "$OPTD/$slug.json"
done
tar czf - -C / config/... addon_configs/... data/options.json tmp/habackup' > "$OUT" 2> "$DEST/.err"
# проверка размера <4096 → .BAD + exit 2 ; ssh-ошибка → exit 3 ; ротация до KEEP
```
Скрипт на Mac (рабочие копии): `~/tmp-t610/backup-t610-v4.sh` (текущий), `backup-t610-v3.sh`, `backup-t610.sh`.
Бэкап-ключ на Mac: `~/tmp-t610/backup-key/t610_backup_ed25519`. Вспомогательные скрипты: `mk_backup_key.sh`, `add_backup_key_t610.sh`, `push_backup_key_truenas.sh`, `move_key_to_backup.sh`, `cleanup_backup.sh`, `phase1_diag.sh`, `phase2_key.sh`, `inv6.sh` (инвентаризация опций), `verify_v4.sh` (проверка архива), `wait_archive.sh`.
## Связанный синк в git (сделан в этой же сессии)
@@ -334,3 +330,17 @@ related:
| `scripts.yaml` | уже совпадал (sha идентичен) |
> 📌 Паттерн: **сначала сравнить прод↔репо по sha256, потом тащить только изменившееся.** Креды Gitea — `~/.git-credentials` (chmod 600) + `credential.helper=store`, remote — **чистый URL без токена**.
## ⚠️ Осталось (не закрыто)
- **Копия бэкапов на Mac** (часть 3/3 п.8/A3). Сейчас: Gitea ✅ + TrueNAS ✅ + Mail.ru ✅ (через rclone). Локальной копии на Mac нет.
- **`Caddyfile` в автобэкап НЕ входит** — он живёт на TrueNAS (root-owned), не на t610. Если нужен в бэкапе — отдельная задача (стрип/копия под root).
- **SMB-шара `t610` не проверена клиентом** — с `truenas_admin` registry недоступен, Mac в другой подсети. Проверить: `smb://192.168.2.197/t610`.
## Связанные заметки
- [[family/plans/t610-home-automation]] — главный план миграции (п.8/A3)
- [[family/how-to/truenas-rclone-backup]] — rclone-бэкап TrueNAS → Mail.ru (куда попадает `backup/t610`)
- [[family/how-to/truenas-access]] — доступ к TrueNAS, железо
- [[family/how-to/gitea-config]] — Gitea (для git-бэкапа конфигов)
- [[family/how-to/truenas-sata-ports-and-zfs-pools]] — железо TrueNAS (пересоздание пула, контекст питфолла №2)
+3 -3
View File
@@ -1975,7 +1975,7 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
| ~~5-нр~~ | ~~**Node-RED: flows перенесены с TrueNAS → t610**~~**✅ ЗАКРЫТО.** ~~Alex выбрал «выставить порт наружу»~~ → через API не удалось (`host_network` снимается только в UI, маппинг при нём игнорируется). **Alex: «ок. оставляем так»** — наружу НЕ выпущен, доступ через ingress. 68 узлов, `[server:Home Assistant] Connected to http://supervisor/core`, ошибок 0. Ключевая правка: узел `server` `addon: false``true`. Подробно — **§5-кватер-Г**. Остаётся на будущее (если понадобится домен): снять `host_network` в UI + Caddy → `:11880` | ✅ сделано |
| 5-мк | **ZONT MQTT → t610** (остаток Этапа 4). Переключить на роутере `192.168.2.2` (OpenWrt) DNAT: `firewall.@redirect[0]` (name `MQTT`) `dest_ip` `.197``.176` **и** `firewall.@rule[3]` (name `allow-1883`) `dest_ip` `.197``.176`. В ZONT ничего не менять. Схема, питфоллы, проверки — **§5-кватер-Д**. ⚠️ Перед правкой: `uci export firewall > backup`. ⚠️ Порт 1883 t610 OPEN, юзер `zont` есть, пароль `mqtt1z3$` проверен | **✅ сделано 2026-09-14** — оба правила → `.176`, `uci commit` + firewall reload, ZONT пошёл в mosquitto t610 (живой поток kids/bedroom). Бэкап `/root/firewall.bak-20260914-092555` |
| ~~5-арх~~ | ~~«Перенести Caddy на OpenWrt/t610»~~**❌ ОТВЕРГНУТО (§5-кватер-Б):** на OpenWrt 80/443 заняты `uhttpd`; у Caddy 17 доменов TrueNAS → при переносе падение t610 положит все медиасервисы. **Caddy остаётся на TrueNAS.** | — |
| 6 | Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **✅ РАЗБЛОКИРОВАНО 2026-09-14:** условие снято — п. **5-мк СДЕЛАН** (ZONT MQTT → t610). **Гасим ТОЛЬКО стек автоматизации:** `homeassistant` (8123), `mbusd` (502), `mosquitto` (1883), `nodered` (1880), + `zigbee2mqtt`/`modbus-bridge` если есть. **🔴 Caddy НЕ ГАСИТЬ и не переносить** — он не в списке, он рабочий элемент (17 доменов TrueNAS + `mallexxx.*` → t610) | |
| 6 | Остановить + отключить автозапуск сервисов на TrueNAS (не удалять — откат). **✅ РАЗБЛОКИРОВАНО 2026-09-14:** условие снято — п. **5-мк СДЕЛАН** (ZONT MQTT → t610). **Гасим ТОЛЬКО стек автоматизации:** `homeassistant` (8123), `mbusd` (502), `mosquitto` (1883), `nodered` (1880), + `zigbee2mqtt`/`modbus-bridge` если есть. **🔴 Caddy НЕ ГАСИТЬ и не переносить** — он не в списке, он рабочий элемент (17 доменов TrueNAS + `mallexxx.*` → t610) | **🔄 АУДИТ ПРОВЕДЁН 2026-09-14 (см. §5-кватер-Л).** Факты: `zigbee2mqtt` (Exited 2) и `modbus-bridge` (Exited 0) легли **синхронно 14.09 01:59** — сами, при переносе USB на t610; `mbusd` формально `Up` но спамит `can't open /dev/ttyUSB0` (адаптеров на TrueNAS НЕТ — в `/sys/bus/usb` только принтер Samsung `04e8:3425`); `homeassistant` Up, но `modbus.host=.197` → холостой. **Гасить (stop + `--restart=no`, НЕ `rm`):** `homeassistant`, `mbusd`, `mosquitto`, `nodered`, `zigbee2mqtt`, `modbus-bridge`. **Caddy НЕ трогать.** Побочная находка: `HA_TOKEN` открытым текстом в compose `modbus-bridge`. **Ждёт решения Alex:** `nodered` сразу или страховка 2 дня |
| ~~7~~ | ~~Static IP для t610 на роутере (сейчас DHCP)~~**✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-1):** `dhcp.@host[1]` = `t610` / MAC `9c:8e:99:ef:3f:c5` / `192.168.2.176`, бэкап `/root/dhcp.bak-20260914-104152` | ✅ закрыто |
| 8 | Бэкап конфигов t610 → Mac + TrueNAS + git (Gitea `git.mallexxx.duckdns.org`). **📌 Добавить в бэкап:** `/config/.storage/http` (фикс `trusted_proxies`), сам `Caddyfile`, `/config/go2rtc.yaml` (камера + поворот `#rotate=90`), `/config/automations.yaml`, а также `data/config.template.tmpl` аддона `modbus-bridge` (там живёт маппинг реле котла) | **✅ СДЕЛАНА ЧАСТЬ 1/3 (2026-09-14):** git-синк в Gitea (`~/Automation/HA-ZONT-Modbus`, коммит `9d31118`, 4 файла: `configuration.yaml`, `automations.yaml`, `go2rtc.yaml`, `config.yml`). **✅ ЧАСТЬ 2/3 — АВТОБЭКАП НА TRUENAS РАБОТАЕТ** (см. §5-кватер-К). Осталась часть 3/3: копия на Mac. **⚠️ Caddyfile в автобэкап НЕ входит** — он на TrueNAS, не на t610 (учесть отдельно) |
| ~~9~~ | ~~**Zigbee-реле котла → modbus-bridge**~~**✅✅ ВЫПОЛНЕНО + ПОДТВЕРЖДЕНО ALEX 2026-09-14 (вечер-13, §5-кватер-И-7):** `switch.boiler_controller_power` = **`slave 104, рег. 1`** (bidirectional). Бэкап `.bak-relay-20260914-200827` | ✅ закрыто |
@@ -1996,7 +1996,7 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
- **📹 Поворот камеры 90°** — `#rotate=90` в `/config/go2rtc.yaml` (нативный параметр go2rtc, работает при транскодинге). Поток стал `480x640`, кадр проверен, CPU `load 0.20`. **Alex: «Все хорошо, в ту»** — направление подтверждено. Канон — §5-кватер-И-6 (КАНОН-2). Бэкап `/config/go2rtc.yaml.bak-rotate-20260914-202817`, скрипт `~/tmp-t610/relay/patch_rotate.py`.
- **📹 B3 / Этап 4 закрыт** — факт-проверка роутера: `firewall.@redirect[0]` (MQTT) и `@rule[3]` `dest_ip=192.168.2.176` (ZONT MQTT → t610). Отдельного «GPON-роутера» нет.
- **📹 Caddy ПЕРЕСТРОЕН** — из `Caddyfile` убраны `cam.*` (камера на t610 по RTSP) и `nodered.*` (ingress HA); на t610 ведёт **только** `mallexxx.duckdns.org``192.168.2.176:80`. Обновлён [[family/how-to/truenas-infrastructure]].
- **⚠️ ОСТАЛОСЬ 2 пункта:** ① **п.8** — бэкап конфигов t610 (A3) → **🔄 В РАБОТЕ (2026-09-14, ночная сессия): см. [[family/plans/t610-backup-to-truenas]]** — датасет `/mnt/RED_2TB/backup/t610` создан (`nas:nas`, 770), SMB-шара `t610` (id=3) создана, ssh-ключ pull-бэкапа разложен (t610 `authorized_keys` с `from="192.168.2.197"` + `~nas/.ssh/`); **осталось: скрипт + крон под `nas` + живой прогон**; ② **п.6** — погасить на TrueNAS стек автоматизации (`homeassistant`/`mbusd`/`mosquitto`/`nodered`) — **РАЗБЛОКИРОВАН** (5-мк закрыт), **Caddy не гасить**. Хвост: ротация токена из remote `nolvu-landing`; в роутере `redirect[1]` HA `8123``.197` помечен `enabled='0'` — мёртвый, можно удалить.
- **⚠️ ОСТАЛОСЬ 1 пункт:** ① **п.8** — бэкап конфигов t610 (A3) → **✅ ЗАКРЫТ по факту 2026-09-14 (v4, см. [[family/plans/t610-backup-to-truenas]]):** git-синк (`9d31118`) + автобэкап на TrueNAS работает (датасет `backup/t610` `nas:nas`, SMB-шара `t610` id=3, pull-ключ в `backup/t610/.ssh/`, скрипт v4, крон id=3 `nas` 03:30, архив ~6 МБ / 162 файла → rclone → Mail.ru). **Хвост:** копия на Mac (часть 3/3) + `Caddyfile` (живёт на TrueNAS, не в t610-бэкапе); ② **п.6** — погасить на TrueNAS стек автоматизации (`homeassistant`/`mbusd`/`mosquitto`/`nodered`) — **РАЗБЛОКИРОВАН** (5-мк закрыт), **Caddy не гасить**. Хвост: ротация токена из remote `nolvu-landing`; в роутере `redirect[1]` HA `8123``.197` помечен `enabled='0'` — мёртвый, можно удалить.
- **✅ Синк конфигов в git (2026-09-14, ночь):** репозиторий `~/Automation/HA-ZONT-Modbus` → Gitea `git_admin/HA-ZONT-Modbus`, коммит **`9d31118`** (запушен, remote SHA = local). Синкнуто фактически изменившееся: `configuration.yaml` (http-блок → `.storage/http`; `modbus.host` `.197``.176`), `automations.yaml` (`device_id` перегенерированы, `light.0xa4c13882a4b42db0``light.bed_dimmer`, +`illuminance`, +`is_occupied`), **новый** `homeassistant/go2rtc.yaml`, `config.yml` (+реле котла slave 104/рег 1). `modbus_ha_bridge.py` и `scripts.yaml` — уже совпадали по sha256. **Паттерн: сначала sha256 прод↔репо, потом тянуть только diff.**
**✅ Закрыто / установлено в этой сессии (2026-09-14, позднейшая, Modbus-диагностика):**
@@ -2026,7 +2026,7 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
| ~~**B2**~~ | ~~**Node-RED наружу** — выставить порт аддона и поправить Caddy~~ | — | **✅ СНЯТО (2026-09-14 вечер-7):** решение Alex — «оставляем так». Node-RED доступен через **ingress** HA (`http://192.168.2.176/api/hassio_ingress/<token>/`), наружу не выпускается. Домен `nodered.*` не используется. См. §5-кватер-Г и `[[family/how-to/nodered-ventilation]]` |
| ~~**B3**~~ | ~~**Этап 4, остаток:** GPON-редирект → t610, ZONT MQTT → t610~~ | — | **✅ ВЫПОЛНЕНО (факт-проверка 2026-09-14):** роутер `192.168.2.2``firewall.@redirect[0]` (name=MQTT, src_dport=1883) `dest_ip=192.168.2.176`, `firewall.@rule[3]` (allow-1883) `dest_ip=192.168.2.176`. **Отдельного «GPON-роутера» нет**`192.168.0.10` это `wan`-интерфейс самого роутера `192.168.2.2` (§5-кватер). Остаётся `redirect[1]` HomeAssistant `8123``.197` (проверить, нужен ли) |
| ~~A2~~ | ~~**№7**: Static IP для t610~~ | — | **✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-1):** на роутере `192.168.2.2` создана static-привязка `dhcp.@host[1]` = `t610` / MAC `9c:8e:99:ef:3f:c5` / `192.168.2.176``uci commit dhcp` + `dnsmasq reload`. Проверено: `ping` OK, HA → HTTP 200. Бэкап `/root/dhcp.bak-20260914-104152` |
| ~~A3~~ | ~~**№8**: Бэкап конфигов t610~~ | — | **✅✅ ВЫПОЛНЕНО 2026-09-14 (вечер-15).** ① **git-синк:** коммит `9d31118` в Gitea (SHA local == remote) — `configuration.yaml`, `automations.yaml`, **новый** `homeassistant/go2rtc.yaml`, `config.yml`. ② **автобэкап на TrueNAS (вариант B — pull с TrueNAS):** датасет `/mnt/RED_2TB/backup/t610` (`nas:nas` 770), SMB-шара `t610` (id=3), ssh-ключ в `/mnt/RED_2TB/backup/t610/.ssh/` (ограничен `from="192.168.2.197"`), скрипт `backup-t610.sh` (v3), **крон id=3 юзер `nas` 03:30 ежедневно**, ротация 14. **Живой прогон:** 2 архива `t610-config-*.tar.gz` по ~605 КБ, **111 файлов**. В Mail.ru уезжает автоматически (`backup` ⊂ rclone `backup.sh`). **Полностью — `[[family/plans/t610-backup-to-truenas]]`.** ⚠️ Не входит (кандидаты): опции аддонов, `network_key` Zigbee, `flows_cred.json`, `home-assistant_v2.db` | ✅ закрыто |гон.** Полный план, команды и 8 питфоллов — **[[family/plans/t610-backup-to-truenas]]**. Прошлый `tar`-бэкап `~/tmp-t610/backups/config-t610-20260914-115034.tar.gz` (88 КБ) **устарел** (до камеры/реле/rotate) |
| ~~A3~~ | ~~**№8**: Бэкап конфигов t610~~ | — | **✅✅ ВЫПОЛНЕНО 2026-09-14 (вечер-15 → расширено до v4 вечер-16).** ① **git-синк:** коммит `9d31118` в Gitea (SHA local == remote) — `configuration.yaml`, `automations.yaml`, **новый** `homeassistant/go2rtc.yaml`, `config.yml`. ② **автобэкап на TrueNAS (вариант B — pull с TrueNAS):** датасет `/mnt/RED_2TB/backup/t610` (`nas:nas` 770), SMB-шара `t610` (id=3), ssh-ключ в `/mnt/RED_2TB/backup/t610/.ssh/` (ограничен `from="192.168.2.197"`), скрипт `backup-t610.sh` (**v4**), **крон id=3 юзер `nas` 03:30 ежедневно**, ротация 14. **Живой прогон (v4):** `t610-full-*.tar.gz` **~6.0 МБ, 162 файла**; внутрь добавлены **опции всех 11 аддонов** (`ha_token`, `mqtt1z3$`, привязки USB `by-path`), HA БД, `authorized_keys`, `blueprints`. В Mail.ru уезжает автоматически (`backup` ⊂ rclone `backup.sh`). **Полностью — `[[family/plans/t610-backup-to-truenas]]`.** ⚠️ Не входит: `Caddyfile` (он на TrueNAS, не в t610) + копия на Mac | ✅ закрыто |
| ~~A4~~ | ~~**Ночной свет душевой**: триггер на падение освещённости~~ | — | **✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-2):** в automation `1771997851260` добавлен триггер `illuminance below:8` + условие `is_occupied`. Проверено через API: `triggers`=2, `conditions`=2 |
| ~~**A5**~~ | ~~**Камера**: USB-вебка Logitech `046d:0825` на t610 → завести в HA~~ | — | **⚠️ ПЕРЕДЕЛАНО 2026-09-14 (вечер-11).** Сначала (вечер-9) завели через `camera: platform: ffmpeg`**отвергнуто** (`Resource busy`, нет `unique_id`). **Итог вечер-11:** аддон `local_ustreamer` + Generic Camera → `camera.192_168_2_176`, зона `kotelnaia`, `unique_id` ✅. Детали — §5-кватер-И-5 |
| ~~**A6**~~ | ~~**Камера — вернуть схему «как на TrueNAS»** (решение Alex, вечер-10)~~ | — | **✅✅ ВЫПОЛНЕНО 2026-09-14 (вечер-11, §5-кватер-И-3/И-5).** Историч. upstream был `cam.mallexxx.duckdns.org → 192.168.2.197:8090` (контейнер утрачен при пересоздании пула, след — `Caddyfile.bak`). Реализовано **аддоном на t610** (вебка физически там, Docker в HA OS закрыт → аддон). Поднят `local_ustreamer` (`/addons/ustreamer/`, MJPEG :8090) → Generic Camera по URL → **`unique_id` + зона `kotelnaia` + имя «Камера котельной»**. Блок `camera: platform: ffmpeg` из `configuration.yaml` **снесён** (бэкап `.bak-rmcam-20260914-185240`). Осталось: удалить лишний `/config/go2rtc.yaml` |