[2026-09-14] eagle: family/plans/t610-home-automation.md
This commit is contained in:
@@ -79,6 +79,7 @@ ha core info # состояние HA Core
|
|||||||
ha apps # список аддонов + состояние
|
ha apps # список аддонов + состояние
|
||||||
ha apps info <slug> # детали аддона (options, схема)
|
ha apps info <slug> # детали аддона (options, схема)
|
||||||
ha apps start|stop|restart <slug>
|
ha apps start|stop|restart <slug>
|
||||||
|
ha apps uninstall <slug> # УДАЛИТЬ аддон целиком (вместе с автозапуском)
|
||||||
ha apps logs <slug> # логи аддона (ТЯЖЁЛАЯ команда — не в цикл!)
|
ha apps logs <slug> # логи аддона (ТЯЖЁЛАЯ команда — не в цикл!)
|
||||||
ha store add <url> # добавить репозиторий
|
ha store add <url> # добавить репозиторий
|
||||||
ha hardware info # железо + USB (tty, serial)
|
ha hardware info # железо + USB (tty, serial)
|
||||||
@@ -93,7 +94,7 @@ ha supervisor logs | tail -60 # диагностика сборки local add-
|
|||||||
|
|
||||||
| Роутер | Доступ | Особенность |
|
| Роутер | Доступ | Особенность |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `192.168.2.2` (OpenWrt, основной) | SSH root, пароль `1316261` | DHCP-аренды: `cat /tmp/dhcp.leases`. **Static-привязки (`/etc/config/dhcp`, `uci show dhcp \| grep @host`): `[0]` truenas `00:0B:0E:0F:00:ED`→`.197`, `[1]` t610 `9c:8e:99:ef:3f:c5`→`.176` (добавлен 2026-09-14).** 🔑 Его интерфейс `wan` = `192.168.0.10/24` (шлюз `192.168.0.1`), маршрут `192.168.0.0/24 dev wan`. **Поэтому «`192.168.0.10`» в настройках ZONT — это ОН САМ**, а не отдельный GPON-роутер. На нём же живут DNAT-правила для внешних сервисов (`uci show firewall`): `caddy_http/https` (80/443→TrueNAS 8088/8443), `HomeAssistant` (8123, disabled), `MQTT` (1883 из 192.168.0.0/24), `TrueNas-SSH`, transmission, syncthing, xray |
|
| `192.168.2.2` (OpenWrt, основной) | ✅ **прямой SSH `root@192.168.2.2` без пароля** (2026-09-14; пароль `1316261` нужен только для fallback-пути через `sshpass`) | DHCP-аренды: `cat /tmp/dhcp.leases`. **Static-привязки (`/etc/config/dhcp`, `uci show dhcp \| grep @host`): `[0]` truenas `00:0B:0E:0F:00:ED`→`.197`, `[1]` t610 `9c:8e:99:ef:3f:c5`→`.176` (добавлен 2026-09-14).** 🔑 Его интерфейс `wan` = `192.168.0.10/24` (шлюз `192.168.0.1`), маршрут `192.168.0.0/24 dev wan`. **Поэтому «`192.168.0.10`» в настройках ZONT — это ОН САМ**, а не отдельный GPON-роутер. На нём же живут DNAT-правила для внешних сервисов (`uci show firewall`): `caddy_http/https` (80/443→TrueNAS 8088/8443), `MQTT` (1883 из 192.168.0.0/24), `TrueNas-SSH`, transmission, syncthing, xray. ~~`HomeAssistant` (8123, disabled)~~ — **🗑 УДАЛЁН 2026-09-14** вместе с парным `allow-8123` (см. §5-кватер-М) |
|
||||||
| `192.168.6.1` («Rasputin», OpenWrt aarch64) | SSH root | eth0 `192.168.2.157/24` — видит сеть 192.168.2.x |
|
| `192.168.6.1` («Rasputin», OpenWrt aarch64) | SSH root | eth0 `192.168.2.157/24` — видит сеть 192.168.2.x |
|
||||||
| `192.168.0.1` (GPON-шлюз) | — | Шлюз wan-интерфейса роутера `192.168.2.2` (`58:f8:5c:47:1c:9f`, REACHABLE). ZONT приходит в брокер **с адреса `.0.1`** (через него) |
|
| `192.168.0.1` (GPON-шлюз) | — | Шлюз wan-интерфейса роутера `192.168.2.2` (`58:f8:5c:47:1c:9f`, REACHABLE). ZONT приходит в брокер **с адреса `.0.1`** (через него) |
|
||||||
| **ZONT** `192.168.0.50` | Web UI `http://192.168.0.50/` (порт 80, «ZONT LOCAL») — **доступен ТОЛЬКО с роутера `192.168.2.2`** (с Mac — таймаут) | MAC **`f8:b3:b7:d8:46:f3`** (по ARP на wan роутера). Совпадает с MQTT-клиентом `zont_0FA7C33CC89F_f8:b3:b7:d8:46:f0`. **Найден 2026-09-14 фактом** (ARP + баннер «ZONT LOCAL»); веб-UI — SPA на WebSocket `ws://<host>/ws`, авторизация логин/пароль по `localStorage` |
|
| **ZONT** `192.168.0.50` | Web UI `http://192.168.0.50/` (порт 80, «ZONT LOCAL») — **доступен ТОЛЬКО с роутера `192.168.2.2`** (с Mac — таймаут) | MAC **`f8:b3:b7:d8:46:f3`** (по ARP на wan роутера). Совпадает с MQTT-клиентом `zont_0FA7C33CC89F_f8:b3:b7:d8:46:f0`. **Найден 2026-09-14 фактом** (ARP + баннер «ZONT LOCAL»); веб-UI — SPA на WebSocket `ws://<host>/ws`, авторизация логин/пароль по `localStorage` |
|
||||||
@@ -184,7 +185,9 @@ done
|
|||||||
| mbusd | `local_mbusd` | local add-on | ✅ started (502) |
|
| mbusd | `local_mbusd` | local add-on | ✅ started (502) |
|
||||||
| modbus-bridge | `local_modbus-bridge` | local add-on | ✅ started |
|
| modbus-bridge | `local_modbus-bridge` | local add-on | ✅ started |
|
||||||
| MQTT-интеграция в HA | `mqtt` (config entry) | — | ✅ добавлена 2026-09-14 |
|
| MQTT-интеграция в HA | `mqtt` (config entry) | — | ✅ добавлена 2026-09-14 |
|
||||||
| Samba share | `core_samba` | official | ⏸️ stopped (нужен пароль) |
|
| ~~Samba share~~ | ~~`core_samba`~~ | official | 🗑 **УДАЛЁН 2026-09-14** (был `password: null` → `failed to boot`; `boot=auto`). Alex: «не нужна». См. **§5-кватер-Н** |
|
||||||
|
|
||||||
|
**Итого аддонов: 10** (из 11 — `core_samba` удалён 2026-09-14).
|
||||||
|
|
||||||
**Репозитории:** official + Zigbee2MQTT (`https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`) + Local apps.
|
**Репозитории:** official + Zigbee2MQTT (`https://github.com/zigbee2mqtt/hassio-zigbee2mqtt`) + Local apps.
|
||||||
|
|
||||||
@@ -1996,7 +1999,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`.
|
- **📹 Поворот камеры 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-роутера» нет.
|
- **📹 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]].
|
- **📹 Caddy ПЕРЕСТРОЕН** — из `Caddyfile` убраны `cam.*` (камера на t610 по RTSP) и `nodered.*` (ingress HA); на t610 ведёт **только** `mallexxx.duckdns.org` → `192.168.2.176:80`. Обновлён [[family/how-to/truenas-infrastructure]].
|
||||||
- **✅✅ ОСТАЛОСЬ 0 пунктов (2026-09-14, ночь):** ① **п.8** — бэкап конфигов t610 (A3) → **✅ ЗАКРЫТ ПОЛНОСТЬЮ 3/3:** git-синк (`9d31118`) + автобэкап на TrueNAS (крон `nas` 03:30, ротация 14 → rclone → Mail.ru) + **копия на Mac (часть 3/3 сделана, подтверждено Alex 2026-09-14)**. См. [[family/plans/t610-backup-to-truenas]]. **Хвост:** `Caddyfile` в t610-бэкап не входит (он на TrueNAS — учесть отдельно); ② **п.6** — погасить на TrueNAS стек автоматизации → **✅ ВЫПОЛНЕНО 2026-09-14 (ночь), §5-кватер-Л:** погашено 7 контейнеров (`homeassistant`/`mbusd`/`mosquitto`/`nodered`/`zigbee2mqtt`/`modbus-bridge`/`ser2net`) + `library` по команде Alex, **Caddy не тронут**. **Остаток хвостов:** ротация токена из remote `nolvu-landing`; в роутере `redirect[1]` HA `8123`→`.197` помечен `enabled='0'` — мёртвый, можно удалить; `inpx-web`/`inpxer` в циклическом краше (не трогать).
|
- **✅✅ ОСТАЛОСЬ 0 пунктов (2026-09-14, ночь):** ① **п.8** — бэкап конфигов t610 (A3) → **✅ ЗАКРЫТ ПОЛНОСТЬЮ 3/3:** git-синк (`9d31118`) + автобэкап на TrueNAS (крон `nas` 03:30, ротация 14 → rclone → Mail.ru) + **копия на Mac (часть 3/3 сделана, подтверждено Alex 2026-09-14)**. См. [[family/plans/t610-backup-to-truenas]]. **Хвост:** `Caddyfile` в t610-бэкап не входит (он на TrueNAS — учесть отдельно); ② **п.6** — погасить на TrueNAS стек автоматизации → **✅ ВЫПОЛНЕНО 2026-09-14 (ночь), §5-кватер-Л:** погашено 7 контейнеров (`homeassistant`/`mbusd`/`mosquitto`/`nodered`/`zigbee2mqtt`/`modbus-bridge`/`ser2net`) + `library` по команде Alex, **Caddy не тронут**. **Остаток хвостов:** ротация токена из remote `nolvu-landing`; ~~в роутере `redirect[1]` HA `8123`→`.197` помечен `enabled='0'` — мёртвый, можно удалить~~ → **✅ УДАЛЁН 2026-09-14 (ночь), §5-кватер-М** (вместе с парным `allow-8123`); `inpx-web`/`inpxer` в циклическом краше (не трогать); аддон `core_samba` — **🗑 УДАЛЁН 2026-09-14, §5-кватер-Н**.
|
||||||
- **✅ Синк конфигов в 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.**
|
- **✅ Синк конфигов в 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-09-14, позднейшая, Modbus-диагностика):**
|
||||||
@@ -2024,7 +2027,7 @@ curl -s -X POST -H "$HDR" -H "Content-Type: application/json" \
|
|||||||
| ~~**A0**~~ | ~~**№3: починка приёма кадра bridge** (приоритет сессии)~~ | — | **✅✅ ВЫПОЛНЕНО ЦЕЛИКОМ 2026-09-14 вечер-6 (§5-кватер-З):** Шаг 1 (логирование, вечер-5) дал механизм; **Шаг 2 — фикс сборки кадров по канону (T3.5 + `resetFrame`), коммит `3748feb` → Gitea → scp → `ha apps rebuild` → `restart`.** Проверено офлайн-тестом (4/4) и на живом: **7/7 полей `dining` в HA, оба summary ожили, `unavailable` 10→8.** Диагностика снята (вечер-7) |
|
| ~~**A0**~~ | ~~**№3: починка приёма кадра bridge** (приоритет сессии)~~ | — | **✅✅ ВЫПОЛНЕНО ЦЕЛИКОМ 2026-09-14 вечер-6 (§5-кватер-З):** Шаг 1 (логирование, вечер-5) дал механизм; **Шаг 2 — фикс сборки кадров по канону (T3.5 + `resetFrame`), коммит `3748feb` → Gitea → scp → `ha apps rebuild` → `restart`.** Проверено офлайн-тестом (4/4) и на живом: **7/7 полей `dining` в HA, оба summary ожили, `unavailable` 10→8.** Диагностика снята (вечер-7) |
|
||||||
| ~~B1~~ | ~~**№5 (Этап 4): ДОЛИТЬ Caddyfile**~~ — **✅ СДЕЛАН + `trusted_proxies` фикс** | — | Alex подменил файл + `docker restart caddy`. `mallexxx.duckdns.org` → 200. Затем `.storage/http` → `trusted_proxies += 192.168.2.197/32` (§5-кватер-В) |
|
| ~~B1~~ | ~~**№5 (Этап 4): ДОЛИТЬ Caddyfile**~~ — **✅ СДЕЛАН + `trusted_proxies` фикс** | — | Alex подменил файл + `docker restart caddy`. `mallexxx.duckdns.org` → 200. Затем `.storage/http` → `trusted_proxies += 192.168.2.197/32` (§5-кватер-В) |
|
||||||
| ~~**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]]` |
|
| ~~**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` (проверить, нужен ли) |
|
| ~~**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` ~~(проверить, нужен ли)~~ → **✅ УДАЛЁН 2026-09-14 (ночь, по команде Alex).** |
|
||||||
| ~~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` |
|
| ~~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 → расширено до 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 | ✅ закрыто |
|
| ~~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 |
|
| ~~A4~~ | ~~**Ночной свет душевой**: триггер на падение освещённости~~ | — | **✅ ВЫПОЛНЕНО 2026-09-14 (вечер-8, §5-кватер-И-2):** в automation `1771997851260` добавлен триггер `illuminance below:8` + условие `is_occupied`. Проверено через API: `triggers`=2, `conditions`=2 |
|
||||||
@@ -3412,3 +3415,60 @@ docker update --restart=no <те же 7>
|
|||||||
- [ ] Разобраться с `inpx-web` / `inpxer` (минное поле Л-4 п.3; `library` уже погашен)
|
- [ ] Разобраться с `inpx-web` / `inpxer` (минное поле Л-4 п.3; `library` уже погашен)
|
||||||
- [ ] Вынести `HA_TOKEN` из compose в `.env` + ротация
|
- [ ] Вынести `HA_TOKEN` из compose в `.env` + ротация
|
||||||
- [ ] Ротация токена из remote `nolvu-landing` (хвост п.3-гт)
|
- [ ] Ротация токена из remote `nolvu-landing` (хвост п.3-гт)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §5-кватер-М. 🧹 Роутер: удаление мёртвого легаси HA-`8123` (2026-09-14, ночь)
|
||||||
|
|
||||||
|
**Триггер:** Alex — *«Вот про router redirect я тебе говорил»* → *«Да»* (согласие на удаление).
|
||||||
|
|
||||||
|
**Что удалено** (оба правила были `enabled='0'` — мёртвое легаси переезда HA на t610):
|
||||||
|
|
||||||
|
| Секция | name | Содержимое | Почему мёртвое |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `firewall.@redirect[1]` | `HomeAssistant` | `src_dport=8123` → `192.168.2.197:8123`, DNAT | HA больше не торчит наружу на 8123 (переехала на `.176`, точка входа = Caddy `80→8088`/`443→8443` → домен) |
|
||||||
|
| `firewall.@rule[4]` | `allow-8123` | `192.168.2.197:8123` ACCEPT | парное ACCEPT-правило к тому же редиректу |
|
||||||
|
|
||||||
|
**Команды (канон):**
|
||||||
|
```bash
|
||||||
|
D=$(date +%Y%m%d-%H%M%S)
|
||||||
|
uci export firewall > /root/firewall.bak-$D # БЭКАП ПЕРЕД ПРАВКОЙ
|
||||||
|
uci delete firewall.@redirect[1]
|
||||||
|
uci delete firewall.@rule[4] # индекс ПОСЛЕ первого удаления!
|
||||||
|
uci commit firewall && /etc/init.d/firewall reload
|
||||||
|
```
|
||||||
|
|
||||||
|
**⚠️ ПИТФОЛЛ — индексы переиндексируются.** После `uci delete firewall.@redirect[1]` остальные redirect'ы сдвигаются (`caddy_http` был `[3]` → стал `[2]`, и т.д.). Поэтому `allow-8123`, который был `@rule[4]`, удалялся **отдельной командой после** и проверялся `uci show firewall.@rule[4]` **перед** удалением. Не удалять оба правила одной пачкой по старым индексам.
|
||||||
|
|
||||||
|
**⚠️ ПИТФОЛЛ — `uci delete` показывает UUID, а не имя.** Вывод `uci show firewall.@redirect[1]` перед удалением отдаёт `firewall.cfg0a3837=redirect` — это внутренний UUID, не `@redirect[1]`. Не пугаться, это норма: имя в `.name`.
|
||||||
|
|
||||||
|
**Результат (проверено):** redirect'ов **9 → 8**, rule **6 → 5**. Остались: `MQTT` (`1883`→`.176`), `TrueNas-SSH` (`22`), `caddy_http` (`80`→`8088`), `caddy_https` (`443`→`8443`), `transmission_tcp/udp` (`51413`), `syncthing-22000`, `xray-reverse-12346`; rules: `Allow-DHCP-Renew`, `Allow-Ping`, `Allow-IGMP`, `allow-1883` (→`.176`), `allow-22`.
|
||||||
|
|
||||||
|
**Бэкап:** `/root/firewall.bak-20260914-145917`. **Откат:** восстановить секции из бэкапа → `uci commit firewall && /etc/init.d/firewall reload`.
|
||||||
|
|
||||||
|
**Верификация после reload (всё ✅):** `mallexxx.duckdns.org` = 200; `immich.*`/`git.*`/`jellyfin.*`/`portainer.*` = 200 (Caddy жив); MQTT `modbus/#` на `.176` = живой поток; правил с `8123` в `firewall` **не осталось**.
|
||||||
|
|
||||||
|
> 📌 **ПИТФОЛЛ диагностики:** `nc -z mallexxx.duckdns.org 8123` с Mac даёт **OPEN**, хотя порт **не проброшен**. Факт: `nft list chain inet fw4 dstnat | grep 8123` — **пусто**, `uci show firewall | grep 8123` — **пусто**, HTTP = `000`, баннер пустой. Причина: домен резолвится во **внешний IP провайдерского NAT**, а `wan` роутера = `192.168.0.10` (за ещё одним NAT; `upnpd` `enabled 0`). **Не принимать `nc` OPEN за открытый порт — проверять `nft`/`uci` на роутере + HTTP-ответ.**
|
||||||
|
|
||||||
|
> 📌 **Дисциплина доков:** факт этой правки живёт **только здесь**, в плане. `family/how-to/rasputin-router.md` — отдельная дока про роутер, её **не трогать** по этому поводу (агент ошибочно дописал туда раздел, откачено).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## §5-кватер-Н. 🗑 Аддон `core_samba` — УДАЛЁН (2026-09-14, ночь)
|
||||||
|
|
||||||
|
**Триггер:** Alex — *«убери самбу с HA она failed to boot и вообще не нужна»* → *«Сноси её нахуй»*.
|
||||||
|
|
||||||
|
**Причина падения (установлена до сноса):** в опциях аддона **`"password": null`** — Samba не может стартовать без пароля пользователя `homeassistant`. При этом **`boot=auto`** → при каждой загрузке HA пыталась поднять её и падала.
|
||||||
|
|
||||||
|
**Что сделано:**
|
||||||
|
```bash
|
||||||
|
ha apps uninstall core_samba # → "Command completed successfully."
|
||||||
|
```
|
||||||
|
> ⚠️ **Питфолл:** флаг `--boot` у `ha apps options` **не существует** (`Error: unknown flag: --boot`) — снять `boot=auto` отдельной командой перед удалением нельзя. Не нужно: `uninstall` убирает аддон целиком вместе с автозапуском.
|
||||||
|
|
||||||
|
**Проверено после удаления (всё ✅):**
|
||||||
|
- `ha apps | grep -i samba` — **пусто** (в списке аддонов нет)
|
||||||
|
- `docker ps -a | grep -i samba` — **пусто** (контейнера нет)
|
||||||
|
- `/addons/core_samba`, `/data/core_samba` — **папок нет**
|
||||||
|
|
||||||
|
**Состояние аддонов t610 после:** 11 → **10**.
|
||||||
|
|||||||
Reference in New Issue
Block a user