docs: Document the deployment
Add a top-level README mapping the boxes and a full docs/ tree: topic pages (architecture, networking, deployment), per-site box pages for colony and home with containers nested under their hosts, remote and mobile boxes, the installer, and the home switch fabric reference (folded in from home-switches.md, with AGENTS.md and code comments retargeted to its new home). Box pages carry marked assignment tables that CI regenerates from nixos.allAssignments. AGENTS.md points at the new docs and keeps its terse agent version of the mechanics, referring to the topic pages for depth.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# hass
|
||||
|
||||
Home automation container: Home Assistant plus its supporting services (MQTT, camera restreaming,
|
||||
Frigate NVR), running on [`sfh`](../../sfh.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`
|
||||
|
||||
## Role
|
||||
|
||||
- **Home Assistant** (`services.home-assistant`) — declarative config (`configWritable = false`),
|
||||
components `esphome`, `zha`, `denonavr`, `webostv`, `androidtv_remote`, `heos`, `mqtt`, `wled`,
|
||||
`met`, `google_translate`; custom components `alarmo`, `frigate`, `west_wood_club`; a custom
|
||||
Irish Rail sensor (Glenageary ↔ Dublin Connolly). A `hass-cli` wrapper is on the box, wired to
|
||||
the local server with a token from `my.secrets`.
|
||||
- **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` leg) 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 1-day retention; 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
|
||||
|
||||
<!-- assignments: hass -->
|
||||
<!-- assignments-start -->
|
||||
| Name | Assignment | IPv4 | IPv6 | Domain | Notes |
|
||||
|---|---|---|---|---|---|
|
||||
| hass-ctr (frigate) | hi | `192.168.68.103/22 gw 192.168.71.254` | `2a0e:97c0:4d0:1::5:3/64` | h.nul.ie | |
|
||||
| hass-ctr-lo | lo | `192.168.72.103/21` | `2a0e:97c0:4d0:2::5:3/64` | h.nul.ie | |
|
||||
<!-- assignments-end -->
|
||||
|
||||
## 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).
|
||||
- `/dev/bus/usb/001/002` (raw USB device node).
|
||||
|
||||
## Networking
|
||||
|
||||
MACVLAN legs created from `sfh`'s container NICs: `host0` on `lan-hi-ctrs` (the `hi` assignment,
|
||||
alt name `frigate`, default gateway via the VIP) and `lan-lo` on `lan-lo-ctrs` (the `lo`
|
||||
assignment, no gateway) — the `lo` leg 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`.
|
||||
@@ -0,0 +1,47 @@
|
||||
# unifi
|
||||
|
||||
The UniFi network controller, running as a container on [`sfh`](../../sfh.md). It manages the
|
||||
home UniFi switch `brian` (see [switches.md](../../switches.md)).
|
||||
|
||||
- **Source:** [`nixos/boxes/home/palace/vms/sfh/containers/unifi.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/containers/unifi.nix)
|
||||
- **Host:** NixOS container on `sfh`
|
||||
|
||||
## Status
|
||||
|
||||
**Currently enabled.** The container spent a while disabled — its import was commented out of
|
||||
[`containers/default.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/containers/default.nix)
|
||||
while there was no UniFi gear to manage — and was re-enabled when the UniFi switch `brian` was
|
||||
added, gaining a `core` leg (`unifi-ctr-core`) at the same time so it can reach the switch on its
|
||||
management network. It is imported, listed in `sfh`'s `my.containers.instances`, and
|
||||
`services.unifi.enable = true`.
|
||||
|
||||
## Role
|
||||
|
||||
- **UniFi controller** (`services.unifi`, `pkgs.unifi` on `mongodb-7_0`, firewall open; TCP 8443
|
||||
allowed).
|
||||
- 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
|
||||
|
||||
<!-- assignments: unifi -->
|
||||
<!-- assignments-start -->
|
||||
| Name | Assignment | IPv4 | IPv6 | Domain | Notes |
|
||||
|---|---|---|---|---|---|
|
||||
| unifi-ctr-core | core | `192.168.64.21/24` | — | h.nul.ie | |
|
||||
| unifi-ctr | hi | `192.168.68.100/22 gw 192.168.71.254` | `2a0e:97c0:4d0:1::5:1/64` | h.nul.ie | |
|
||||
<!-- assignments-end -->
|
||||
|
||||
## Networking
|
||||
|
||||
Two MACVLAN legs from `sfh`'s container NICs: `host0` on `lan-hi-ctrs` (the `hi` assignment —
|
||||
`unifi-ctr`, `192.168.68.100`, default gateway via the VIP) and `lan-core` on `lan-core-ctrs`
|
||||
(the `core` assignment — `unifi-ctr-core`, `192.168.64.21/24`, no gateway). The `core` leg is
|
||||
how the controller talks to the switches: `brian` lives at `192.168.64.13` on `core`.
|
||||
|
||||
## Notable config files
|
||||
|
||||
- [`nixos/boxes/home/palace/vms/sfh/containers/unifi.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/containers/unifi.nix) —
|
||||
container system: UniFi service, assignments.
|
||||
- [`nixos/boxes/home/palace/vms/sfh/default.nix`](../../../../../nixos/boxes/home/palace/vms/sfh/default.nix) —
|
||||
the `sfh` side: container instance, MACVLAN wiring.
|
||||
Reference in New Issue
Block a user