CyberPower UPS OR700 with nut: secret sauce


August 16, 2014

After my last UPS (a dumb APC thing picked up from officemax) bit the dust, I got myself the CyberPower OR700. I was a wee bit leery of the CyberPower linux code, though, and opted to use more standardized software to manage the system shutdown. So, I gave NUT a try.

I let this puppet contrib module install and configure the nut client & server using pretty much the example manifest, and that went remarkably smoothly. (I used the usbhid-ups driver and had to add a udev rules file so the USB ups driver was allowed to do its thing, and specify that at least for now the nut server should just be “standalone” in /etc/nut/nut.conf; puppet did everything else; this stuff was easy to google & sort out.) Then I ran the recommended simulated low battery shutdown sequence test (upsmon -c fsd), and watched my system almost finish halting before the load power was killed. Hmm. I sniffed around a bit and decided the shutdown.resume command was being sent after the filesystems had been made readonly, so good enough, I figured.

The real trouble came when I did a “real” test by pulling the OR700 from the wall. At low battery, the system shutdown and load power was killed as seen in the simulation. But then, as in the simulated run where utility power was still available, after a few seconds the OR700 resumed power to the load (!) and the attached NAS dutifully began booting up. For those not following along, the UPS was unplugged and in a low battery state, but resumed power to the load anyway a few seconds after it received the shutdown.resume. Not good at all.

After much experimenting and many tests, the extra configuration from the defaults that did the trick were to add

to my /etc/nut/ups.conf. I was also pleased to find the aforementioned puppet module had parameters for those. Nice!