9.4 KiB
Snarfnet Homelab Power Resilience & UPS Automation Plan
This document details the power resilience strategy, tiered graceful shutdown sequence, and integration architecture for the snarfnet homelab centered around the primary NUT (Network UPS Tools) Master Server.
1. Core Architecture & IP Assignments
The power resilience architecture uses a centralized NUT Master Server host that polls connected UPS hardware and broadcasts status alerts (ONBATT, LOWBATT, ONLINE, FSD) across all homelab VLANs.
| Role | Hostname / Identifier | Target IP | Subnet / VLAN | Description |
|---|---|---|---|---|
| NUT Master Server | nutserver.snarfnet.net |
14.4.4.44 |
VLAN 50 (Smart Home) | Primary NUT upsd daemon polling physical UPS via USB/Serial/SNMP. |
| NUT Web Dashboard | peanut.snarfnet.net |
140.44.4.70:8050 |
VLAN 20 (Compute / Swarm) | Peanut container UI consuming 14.4.4.44:3493. |
| Smart Home Automation | homeassistant.snarfnet.net |
14.4.4.20 |
VLAN 50 (Smart Home) | Home Assistant integration monitoring 14.4.4.44:3493 for alerts/triggers. |
| Centralized Monitoring | zabbix.snarfnet.net |
140.44.4.61 |
VLAN 20 (Spaceport K3s) | Zabbix Agent 2 / NUT exporter polling 14.4.4.44:3493. |
| Primary Storage 1 | sn-nas.snarfnet.net |
14.10.10.71 |
VLAN 40 (Storage) | Synology DSM UPS client polling 14.4.4.44. |
| Primary Storage 2 | snarfnas.snarfnet.net |
14.10.10.72 |
VLAN 40 (Storage) | Synology DSM UPS client polling 14.4.4.44. |
2. Power Resilience Topology Map
flowchart TD
subgraph Grid ["Utility Power Grid"]
Mains["Main AC Power Supply"]
end
subgraph PowerHardware ["Power Protection"]
UPS["Central UPS Hardware"]
end
subgraph NUTMasterHost ["NUT Master Node (14.4.4.44)"]
UPSD["upsd Daemon (Port 3493)"]
UPSMON_M["upsmon (Master)"]
end
subgraph Dashboards ["Monitoring & Alerting"]
Peanut["Peanut Dashboard\n(peanut.snarfnet.net:8050)"]
HA["Home Assistant\n(14.4.4.20)"]
Zabbix["Zabbix Server\n(140.44.4.61)"]
end
subgraph Slaves ["UPS Slaves (upsmon Client Nodes)"]
Harvester["Spacedock HCI Nodes\n(140.44.4.81 - 83)"]
K3sControl["K3s Control Planes\n(Aerodrome & Spaceport)"]
K3sWorkers["K3s Worker Nodes"]
Swarm["Shipyard Swarm Nodes\n(140.44.4.71 - 75)"]
NAS["Synology NAS Arrays\n(14.10.10.71 / 72)"]
end
Mains --> UPS
UPS -- USB / SNMP --> UPSD
UPSD --> UPSMON_M
UPSD -- TCP 3493 --> Peanut
UPSD -- TCP 3493 --> HA
UPSD -- TCP 3493 --> Zabbix
UPSD -- TCP 3493 (Slave Broadcast) --> Harvester
UPSD -- TCP 3493 (Slave Broadcast) --> K3sControl
UPSD -- TCP 3493 (Slave Broadcast) --> K3sWorkers
UPSD -- TCP 3493 (Slave Broadcast) --> Swarm
UPSD -- TCP 3493 (Slave Broadcast) --> NAS
3. Tiered Shutdown Hierarchy & Execution Timeline
To prevent data corruption and unexpected hard cutoffs, hosts shutdown in staged tiers based on power outage duration and battery level.
+-------------------------------------------------------------------------+
| [T+0s] Grid Power Outage -> NUT Master (14.4.4.44) detects ONBATT |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| [T+3m / Batt <= 80%] TIER 1: Non-essential Workloads |
| - Dev VMs, transcoders, test containers in Swarm & K3s drained |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| [T+7m / Batt <= 50%] TIER 2: Hypervisors, Compute Workers & Storage |
| - Harvester spacedock VMs gracefully shut down via virsh/API |
| - Aerodrome & Spaceport worker nodes gracefully halt |
| - Synology NAS arrays (14.10.10.71/72) enter Safe Mode & unmount pools |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| [T+12m / Batt <= 30%] TIER 3: Control Planes & Management Stack |
| - Aerodrome (140.44.4.11-13) & Spaceport (140.44.4.41-44) Control Planes|
| - Swarm Manager (140.44.4.71) & AI Nodes (140.44.4.7-8) halt |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| [T+15m / Batt Low] TIER 4: Forced Shutdown (FSD) & Hardware Cutoff |
| - NUT Master (14.4.4.44) issues FSD signal to remaining clients |
| - NUT Master issues `upsdrvctl shutdown` (cuts UPS load outlet) |
| - Network Core (UDM Pro 14.44.4.1) stays alive until final battery drop |
+-------------------------------------------------------------------------+
4. Configuration Blueprint & Service Integrations
A. NUT Master Server (14.4.4.44) Configuration Files
/etc/nut/ups.conf
[snarf-ups]
driver = usbhid-ups
port = auto
desc = "Snarfnet Main Server Rack UPS"
pollinterval = 5
/etc/nut/upsd.conf
LISTEN 14.4.4.44 3493
LISTEN 127.0.0.1 3493
MAXAGE 15
/etc/nut/upsd.users
[admin]
password = SUPER_SECRET_ADMIN_PASS
actions = SET
instcmds = ALL
[upsmon_master]
password = MASTER_MONITOR_PASS
upsmon master
[upsmon_slave]
password = SLAVE_MONITOR_PASS
upsmon slave
[peanut]
password = PEANUT_MONITOR_PASS
upsmon slave
/etc/nut/upsmon.conf
MONITOR snarf-ups@14.4.4.44 1 upsmon_master MASTER_MONITOR_PASS master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/local/bin/nut-notify.sh
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC
NOTIFYFLAG FSD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC
B. Client Node Configuration (upsmon Slave)
Applies to Harvester hypervisors, K3s master/worker hosts, Docker Swarm hosts, and Debian Linux nodes.
/etc/nut/upsmon.conf (Slave Mode)
MONITOR snarf-ups@14.4.4.44 1 upsmon_slave SLAVE_MONITOR_PASS slave
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POWERDOWNFLAG /etc/killpower
HOSTSYNC 15
DEADTIME 15
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
C. Synology NAS Integration (14.10.10.71 & 14.10.10.72)
- Log into DSM Console
\rightarrowControl Panel\rightarrowHardware & Power\rightarrowUPS. - Check Enable UPS Support.
- Select UPS Type: Synology UPS Server / Network NUT Server.
- Network UPS server IP address:
14.4.4.44. - Set Time before Synology NAS enters Standby Mode:
Customize time\rightarrow5 minutes(orUpon low battery).
D. Peanut Web Dashboard (peanut.snarfnet.net)
Peanut runs on Docker Swarm (140.44.4.70:8050). Ensure the Peanut service configuration references the NUT server at 14.4.4.44:
Updated docker-deployments/peanut.yml
services:
peanut:
image: brandawg93/peanut:latest
ports:
- "8050:8050"
environment:
- TZ=America/New_York
- NUT_HOST=14.4.4.44
- NUT_PORT=3493
- NUT_USER=peanut
- NUT_PASSWORD=PEANUT_MONITOR_PASS
volumes:
- peanut_config:/config
volumes:
peanut_config:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/swarm_shared/legacy_volumes/peanut/
E. Home Assistant (14.4.4.20) Integration & Automation
- Navigate to Settings
\rightarrowDevices & Services\rightarrowAdd Integration\rightarrowNetwork UPS Tools (NUT). - Host:
14.4.4.44, Port:3493. - Username:
upsmon_slave, Password:SLAVE_MONITOR_PASS.
Automation Snippet (automations.yaml)
alias: "Power Resilience: Grid Power Lost Alert"
trigger:
- platform: state
entity_id: sensor.snarf_ups_status
to: "On Battery"
action:
- service: notify.gotify
data:
title: "⚡ Power Outage Alert"
message: "Grid power failure detected! Homelab is running on UPS battery (14.4.4.44). Tiered shutdown in progress."
priority: 8
5. Power Restoration & Auto-Boot Sequence
When grid power returns, systems auto-recover in reverse order:
- UPS AC Mains Restored: Physical UPS re-enables output outlets once battery reaches safe threshold (
\ge 20\%). - Phase 1 - Gateway & Edge: UDM Pro (
14.44.4.1) & Core switches boot up and establish internal VLAN routes. - Phase 2 - NUT Master: Host at
14.4.4.44boots (BIOSRestore AC Powerset toAlways On).upsdservice starts. - Phase 3 - Storage NAS: Synology NAS nodes (
14.10.10.71,14.10.10.72) auto-boot upon power recovery. - Phase 4 - Control Planes & Hypervisors:
- Harvester
spacedockhosts (140.44.4.81-83) boot via Wake-on-LAN / IPMI / BIOS settings. - K3s master nodes (
aerodrome&spaceport) boot, resume etcd quorum.
- Harvester
- Phase 5 - Worker Compute & Workloads: Worker nodes boot; Kubernetes and Docker Swarm automatically reschedule workloads.