[Nut-upsdev] Driver for Cyberpower PR2200

Arjen de Korte nut+devel at de-korte.org
Fri Apr 27 10:32:26 UTC 2007

> The updated spreadsheet can be found here:
> http://www.lvahs.com/pr2200.xls

I was able to decode quite a few things from this. At least the 'F'
command and 'D' command and their results are more or less clear. However,
it appears that there are some registers that can be set, possibly some
levels where the UPS switches to battery and when to raise the low battery
alarm. It appears that whatever is set, can be read through the
'R<command>\r' command, which probably responds with the current setting.
So far I have seen the commands 2, 4, 8, 15, 24, 41, 43, 61.

What we need you to do, is play around with the settings a little, while
recording what is sent to the UPS. Change a value, wait a couple of
seconds and go to the next one for that parameter. Start with the default
value and sequentially move through the list twice. The latter is
important, since we also want to know how to go back to the default value
once that has changed.

>From the list you sent earlier, I estimate that you will be able to set
the following values in the UPS (the others appear to be done by the
software on the host):

buzzer : [on],off
cold start : on,[off]
high input voltage : [138],139,140,141,142,143,144,145,146,147
low input voltage : 88,89,90,91,92,93,94,95,96,[97]
battery critical capacity : [25],30,35,40,45,50,55,60
battery mode output voltage configuration : 110,[120],130

Make a separate sheet for each of the commands, so that we don't mix them up.

I'll probably write a new driver for this, based on the powerpanel driver.
Since the command set looks quite similar (short of the fact that values
are binary, rather than in text mode), they will be merged in one driver
eventually. I'll just need to find a neat way to autodetect the different

One thing I particularly don't like about the current cyberpower driver,
is that the driver attempts to 'correct' the readings from the UPS. I
don't think this is a good idea, since you'll have to convert back and
forth between UPS and NUT representation when setting the parameters
mentioned above. You'll end up with a complex driver, that is optimized
for one single device (the one you used to calibrate the readings), but
can be way off for others.

Best regards, Arjen

PS  Please don't record the time in PortMon, this makes the output very
hard to read, since a lot of junk lines will be inserted. From what we
know from the protocol already, we can keep track of what is happening.
Just don't turn all the knobs at the same time. :-)

PPS  One way to make sure that you capture all data when draining the
battery completely, is to not power the system from the UPS.

More information about the Nut-upsdev mailing list