Skip to content

UPS — CyberPower PR1500ERT2U

Line-interactive rackmount UPS providing battery backup and graceful shutdown for proxfold. Monitored via Network UPS Tools (NUT) running directly on the Proxmox host.

Hardware

Property Value
Model CyberPower PR1500ERT2U
Capacity 1500VA / 1500W, pure sine wave, line-interactive
Form factor 2U rackmount
Purchased from Scorptec (~$1,179 AUD)
Protected load proxfold (Dell R430, dual 550W redundant PSUs — Dell P/N 0X185V, 80+ Platinum — both on UPS)
Power cables 2× IEC C13-to-C14 (UPS outputs → each R430 PSU); standard IEC kettle lead supplied in the box for wall → UPS
Data cable USB Type A-to-B (proxfold → UPS), supplied with the unit

Note

Both R430 PSUs are on battery-backed UPS outlets, so the pair still provides its usual hot-plug redundancy against a single-PSU failure — but both share the UPS as an upstream single point of failure. The NAS (192.168.1.253) and networking gear (The-Egg, PENFOLD-SW01) are not on the UPS yet; revisit outlet allocation as part of future rack work.

Guest shutdown behaviour

NUT runs in standalone mode on proxfold only. There are no NUT clients on the VMs/LXCs — arrstack (VM 101), nginx (VM 102), plex (LXC 100), and control (LXC 104) shut down as part of the host's own graceful shutdown -h +0. Proxmox sends each guest an ACPI shutdown, waits, then powers off. This is sufficient for a single-host deployment.

If additional hosts are added later (e.g. a second Proxmox node, a dedicated Home Assistant appliance) they should run NUT in netclient mode pointing at proxfold as the master — the existing upsmon user is already defined for this.

USB detection

The UPS presents as a CyberPower HID device:

Vendor:  0764  (Cyber Power System, Inc.)
Product: 0601
Serial:  P1ZQS2000083
Kernel:  usbhid

The vendor/product pair 0764:0601 is the generic CyberPower HID identifier shared by the PR1500ERT2U, PR1500LCDRT2U, PR1500RT2U, and several other CyberPower models — it is driven by NUT's usbhid-ups driver (CyberPower HID subdriver 0.6).

NUT installation

Item Value
Host proxfold (Proxmox VE, Debian-based)
Package nut (apt, version 2.8.0)
Mode standalone
Driver usbhid-ups (CyberPower HID subdriver 0.6)
UPS name cyberpower
Listen 127.0.0.1:3493, [::1]:3493 (loopback only)

Install on a fresh Proxmox host:

apt install -y nut
systemctl enable --now nut-server nut-monitor

Configuration

Full file contents are captured in Config Files — NUT (/etc/nut/*.conf). Summary of each file:

File Purpose
/etc/nut/nut.conf Sets NUT mode — MODE=standalone
/etc/nut/ups.conf Declares the cyberpower UPS, driver, USB match
/etc/nut/upsd.conf upsd listen addresses (loopback only)
/etc/nut/upsd.users Monitoring user (upsmon) and admin user for upsrw/upscmd
/etc/nut/upsmon.conf upsmon monitor line, shutdown command, powerdown flag

All /etc/nut/*.conf files are owned root:nut with mode 640.

Services

Service Role
nut-server.service Runs the usbhid-ups driver and the upsd network daemon
nut-monitor.service Runs upsmon, which reacts to UPS events (OB/LB) and triggers host shutdown

Both are enabled and active.

Operational parameters

Values captured at deploy (2026-04-19) with the R430 at idle:

Metric Value
Input voltage 238 V (nominal 240 V AC)
Load at idle ~8% (~120 W)
Battery runtime at current load ~118 min (7083 s reported)
battery.charge.warning 35%
battery.runtime.low (shutdown trigger) 600 s (10 min — raised from the 300 s default to give ZFS and guest VMs extra buffer)

Commands reference

# Full status dump
upsc cyberpower@localhost

# Single variable
upsc cyberpower@localhost ups.status
upsc cyberpower@localhost battery.runtime

# Tune a variable (requires admin creds from upsd.users)
upsrw -s battery.runtime.low=600 -u admin cyberpower@localhost

# Send a UPS command
upscmd cyberpower@localhost beeper.disable
upscmd cyberpower@localhost test.battery.start.quick

# Force shutdown (ACTUALLY shuts the host down — test only on a safe window)
upsmon -c fsd

# Service logs
journalctl -u nut-monitor
journalctl -u nut-server

Test results

Battery transfer test — 2026-04-19 11:40 ACST

  • Duration on battery: ~2.5 min (11:40:33 → 11:42:58)
  • Server operation: no disruption — clean OLOBOL transitions
  • upsmon event log captured transitions correctly
  • No guest interruption, no ZFS scrub or pool error

Future work

  • Discord notification — hook NOTIFYCMD in upsmon.conf into the existing MediaBot webhook for battery/transfer events
  • Home Assistant NUT integration — once the HAOS VM is deployed (Phase 6B), consume upsd directly from HA for dashboards and automations
  • Beeper — consider upscmd cyberpower@localhost beeper.disable depending on final rack location
  • Daily self-test — cron upscmd cyberpower@localhost test.battery.start.quick weekly or monthly once HA/Discord alerting is in place
  • Expand protected load — extend UPS coverage to the NAS and networking once additional PSU cables are on hand