Some notes on what the CyberPower UPS 'Powerpanel' software reports to you
For reasons beyond the scope of this entry, I recently bought a reasonably nice UPS for home usage. Me being me, I then found a Prometheus metrics exporter for it, cyberpower_exporter (and see also Mike Shoup's blog post about it), and then tinkered with it. This exporter works by talking to the daemon provided by CyberPower's Powerpanel software, instead of talking directly to the UPS, so my first port of call was to dump the raw information the daemon was providing for my UPS.
(The Powerpanel software is available as a Fedora RPM that's not too obnoxious. Per the Arch Wiki page on CyberPower UPS, you can also use Network UPS Tools (NUT). I opted to take the simpler path that theoretically should just work.)
You get status information from Powerpanel by connecting to the
/var/pwrstatd.ipc (yes I know, it should be in
and sending ASCII 'STATUS' followed by two newlines. You can do this
by hand with
nc if you feel like it:
printf 'STATUS\n\n' | nc -U /var/pwrstatd.ipc
What you get back is something like this (this is my particular UPS model, yours may vary):
STATUS state=0 model_name=CP1500PFCLCD firmware_num=000000000000 battery_volt=24000 input_rating_volt=120000 output_rating_watt=900000 avr_supported=yes online_type=no diagnostic_result=1 diagnostic_date=2020/07/31 12:34:53 power_event_result=1 power_event_date=2020/07/31 12:33:59 power_event_during=21 sec. battery_remainingtime=5160 battery_charging=no battery_discharging=no ac_present=yes boost=no utility_volt=121000 output_volt=121000 load=8000 battery_capacity=100
The 'volt' and 'watt' numbers need to be divided by 1000 to get the
units you expect from their name. The 'load' is divided by 1000 to
get a percentage (or by 100000 to get it in 0.0 to 1.0 form), and
is as a percentage of the output rating watts. The daemon doesn't
report the current load in watts; instead you have to compute it
for yourself. The battery remaining time is in seconds. The battery
capacity is a percentage, but unlike
load, it's expressed as a
straight 0-100 number. The times are in your local timezone, not
UTC, and I don't know how the UPS reports longer durations of power
events (in the minutes or even more than an hour).
I suspect that the
diagnostic_result fields can take on multiple values. Based
on what the CyberPower
pwrstat command reports for my UPS right
now, these mean a normal state, that the last power event was a
blackout (a total power loss), and that the last self-test passed.
(The blackout was because I unplugged the UPS from the wall socket to make sure everything worked, which is why it was so short.)
load number is somewhat untrustworthy and definitely
seems to be quantized by the UPS. It's possible to observe reported
loads of '0' if my home machine environment is idle enough (with
the display blanked). This isn't just an artifact of the Powerpanel
software, either; when I looked at the UPS's actual front panel,
it reported 0 load and 0 watts being used. The front panel also
reports 'VA' figures, and they didn't go to zero at these '0 load'
times. However, as far as I can tell VA figures aren't reported by
the Powerpanel software, and may or may not be provided to the
outside world by the UPS itself.
(The NUT page for a very similar model doesn't list any VA data.)
As a consequence, you can't really use the reported
to see how much power your overall UPS-based setup is using over
time; the UPS
load will under-report at times of low usage and
perhaps at other times. This was a bit disappointing, but then I
didn't buy the UPS to (also) be a watt-meter with a USB readout
that I could grab from the computer.
(The UPS connects to my desktop via USB and is visible as a USB device, but I haven't tried to dump its USB traffic to see the truly raw data. That's a little bit too much work for my current level of curiosity.)