Give `river` a dedicated RDMA VF and two RSTP trunk attachments. Keep client services on the router VIPs and carry Digiweb VLANs over both switch paths. Set VF trust, multicast reception, bridge MAC and ARP behavior for local switching. Wait for Kea interface readiness and apply RSTP costs through `mstpd` despite port-registration and rename races. Load `palace`'s RAID module in the initrd. Record RouterOS and RouterBOOT upgrades and validate port, carrier and switch outages. Document the deployed architecture, interface handoffs and recovery procedures. Add physical socket maps, NIC capacities and cable connections alongside the logical topology and failover checks.
60 lines
2.8 KiB
Markdown
60 lines
2.8 KiB
Markdown
# hass
|
|
|
|
Home automation container: Home Assistant plus its supporting services (MQTT, camera restreaming,
|
|
Frigate NVR), running on [`sfh`](../README.md).
|
|
|
|
- **Source:** [`nixos/boxes/home/palace/vms/sfh/containers/hass.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/containers/hass.nix)
|
|
- **Host:** NixOS container on `sfh`
|
|
- **nixpkgs:** `mine`
|
|
|
|
## Role
|
|
|
|
### Home Assistant
|
|
|
|
`services.home-assistant` uses declarative configuration (`configWritable = false`). It enables
|
|
the `esphome`, `zha`, `denonavr`, `webostv`, `androidtv_remote`, `heos`, `mqtt`, `wled`, `met` and
|
|
`google_translate` components, plus custom `alarmo`, `frigate`, `west_wood_club` and Irish Rail
|
|
integrations. A `hass-cli` wrapper uses a token from `my.secrets` to reach the local server.
|
|
|
|
- **mosquitto** — MQTT broker (anonymous local listener; port 1883 allowed, alongside HTTP).
|
|
- **go2rtc** — restreams the Reolink living-room camera (RTSP from `reolink-living-room`, on the
|
|
`lo` network) and the office USB webcam (`/dev/video0` via ffmpeg).
|
|
- **Frigate** (`services.frigate`, `frigate.h.nul.ie` — the `frigate` alt name on the `hi`
|
|
assignment) — records both restreamed cameras with a short retention policy; detection is
|
|
disabled.
|
|
- External access is via `https://hass.nul.ie` through the `middleman` reverse proxy
|
|
(`trusted_proxies`); internally it's `hass-ctr.h.nul.ie`.
|
|
- Not a deploy-rs target (`my.deploy.enable = false`) — it's rendered via `my.asContainer` and
|
|
started by `sfh`'s `my.containers.instances`.
|
|
|
|
## Network assignments
|
|
|
|
See the consolidated [network assignments](../../../../networking.md#box-assignments) table (this box: `hass`).
|
|
|
|
## Storage
|
|
|
|
Frigate footage lives on a **separate HDD LV**: `palace` passes the `hdds/frigate` LVM LV to the
|
|
`sfh` VM, sfh mounts it at `/mnt/frigate`, and the container bind-mounts it at `/var/lib/frigate`
|
|
(read-write). This keeps recording churn off the NVMe-oF root.
|
|
|
|
## Devices
|
|
|
|
Passed through from `sfh` (USB host ports on `palace`):
|
|
|
|
- Nabu Casa Connect ZBT-1 Zigbee coordinator → `/dev/ttyUSB0` (used by `zha`).
|
|
- USB webcam → `/dev/video0` (go2rtc's `webcam_office` stream).
|
|
- The matching raw USB device node allowed through from `sfh`.
|
|
|
|
## Networking
|
|
|
|
MACVLAN interfaces created from `sfh`'s container NICs: `host0` on `ctrs-hi` (the `hi` assignment,
|
|
alt name `frigate`, default gateway via the VIP) and `lan-lo` on `ctrs-lo` (the `lo`
|
|
assignment, no gateway) — the `lo` interface reaches the IoT devices (the Reolink camera lives there).
|
|
|
|
## Notable config files
|
|
|
|
- [`nixos/boxes/home/palace/vms/sfh/containers/hass.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/containers/hass.nix) —
|
|
container system: Home Assistant, Frigate, mosquitto, go2rtc.
|
|
- [`nixos/boxes/home/palace/vms/sfh/default.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/default.nix) —
|
|
the `sfh` side: bind mounts, MACVLAN wiring, `DeviceAllow`.
|