1 Power and UPS
Matt Cupp edited this page 2026-05-29 17:35:45 -04:00

Power and UPS

This page documents the UPS hardware, NUT (Network UPS Tools) configuration, and operational notes for the homelab power-backup setup.


What's Protected by What

UPS Model Location Connected Equipment NUT Role
Battery Backup 1 APC Back-UPS ES 750 (BE750G) Office PVE, PBS, Hyperion, Atlas, TP-Link office switch PVE = master (USB); PBS, Hyperion, Atlas = slaves (network)
Battery Backup 2 CyberPower CP1500 AVR (1500VA) Office Nexus Nexus = master (USB); no slaves
Battery Backup 3 CyberPower 1500VA Utility room EdgeSwitch 8, Verizon router No NUT management (passive protection only)

Battery Backup 1 capacity: 450W / 750VA — runtime ~11.75 min at 35% load (battery replacement ordered: APC RBC17).
Battery Backup 2 capacity: 900W / 1500VA — runtime ~158 min at 5% load.

Only use the bottom-row outlets on Battery Backup 1 (battery backup outlets). The top-row Master/Controlled outlets are for energy saving only — do not plug critical equipment there.


The office TP-Link switch must remain plugged into Battery Backup 1. If it loses power during an outage, all office machines (Atlas, Nexus, PVE, PBS, Hyperion) lose network connectivity simultaneously. This prevents NUT slaves from receiving the shutdown signal from the master, breaking orderly shutdown sequencing.


APC Beeper Is Disabled

The APC Back-UPS 750 beeper is disabled via NUT. There will be no audible alarm during a power outage. This is intentional.

Re-enable if needed:

upscmd -u upsmon -p [PASSWORD] apcups beeper.enable

Disable again:

upscmd -u upsmon -p [PASSWORD] apcups beeper.disable

NUT Architecture

NUT uses a master/slave model:

  • The master host has the UPS connected via USB and runs upsd to expose UPS data on the network (port 3493).
  • Slave hosts run upsmon in slave mode, connecting to the master over the network to monitor UPS state.
  • When the UPS reaches the low-battery threshold, the master signals all slaves to shut down first, then shuts itself down last.

Battery Backup 1 low-battery shutdown threshold is set to 300 seconds (5 minutes) remaining runtime.


NUT Configuration Files

PVE — Master for Battery Backup 1 (APC)

/etc/nut/ups.conf

[apcups]
    driver = usbhid-ups
    port = auto
    desc = "APC Back-UPS ES 750 - PVE"
    vendorid = 051d
    productid = 0002
    override.battery.runtime.low = 300

/etc/nut/nut.conf

MODE=netserver

/etc/nut/upsd.conf

LISTEN 0.0.0.0 3493

/etc/nut/upsd.users

[upsmon]
    password = [PASSWORD]
    upsmon master
    actions = SET
    instcmds = ALL

[remote]
    password = [PASSWORD]
    upsmon slave

/etc/nut/upsmon.conf

MONITOR apcups@localhost 1 upsmon [PASSWORD] master
SHUTDOWNCMD "/sbin/shutdown -h +0"

Nexus — Master for Battery Backup 2 (CyberPower)

/etc/nut/ups.conf

[cyberpower]
    driver = usbhid-ups
    port = auto
    desc = "Cyberpower 1500VA - Nexus"
    vendorid = 0764
    productid = 0501

/etc/nut/nut.conf

MODE=netserver

PBS — Slave for Battery Backup 1

/etc/nut/nut.conf

MODE=netclient

/etc/nut/upsmon.conf

MONITOR apcups@192.168.1.227 1 remote [PASSWORD] slave

Hyperion — Slave for Battery Backup 1

Hyperion uses the Synology NAS built-in UPS settings instead of standard NUT files.

/usr/syno/etc/ups/synoups.conf

ups_enabled="yes"
ups_type="net"
ups_host="192.168.1.227"
ups_port="3493"
ups_name="apcups"
ups_user="remote"
ups_pass="[PASSWORD]"

Atlas — Slave for Battery Backup 1 (Windows)

Atlas uses WinNUT-Client (nutdotnet/WinNUT-Client). Configuration:

Setting Value
Server 192.168.1.227
Port 3493
UPS name apcups
User remote
Password [PASSWORD]
Startup Start with Windows, minimize to system tray

Useful NUT Commands

All commands below run on the NUT master for the relevant UPS (PVE for BB1, Nexus for BB2).

Check full UPS status:

upsc apcups@localhost
upsc cyberpower@localhost

Monitor key values in real-time:

watch -n 1 'upsc apcups@localhost | grep -E "status|charge|runtime|input.voltage"'

Check logs for battery events:

journalctl -u nut-monitor --since "1 hour ago" | grep battery

Restart NUT services on Proxmox (PVE):

upsdrvctl stop
upsdrvctl start
systemctl restart nut-server
systemctl restart nut-monitor

Enable or disable APC beeper:

upscmd -u upsmon -p [PASSWORD] apcups beeper.enable
upscmd -u upsmon -p [PASSWORD] apcups beeper.disable

Testing UPS Shutdown

A graceful shutdown sequence was successfully tested on March 16, 2026. The procedure:

  1. Verify all NUT slaves (PBS, Hyperion, Atlas) are connected to the master (upsc apcups@localhost should show clients).
  2. Pull the APC power cable to simulate an outage.
  3. NUT master (PVE) detects on-battery state and begins countdown.
  4. At the low-battery threshold (300 seconds remaining), master signals slaves to shut down.
  5. Slaves shut down in order; master shuts itself down last.
  6. Restore power and verify all machines come back online.

Re-test after battery replacement (APC RBC17) to confirm updated runtime at threshold.