Archive
Monitoring a CyberPower UPS in Fedora
I recently bought an HP MicroServer N40L for a small home/media server, and I chose to install pre-release Fedora 18 on it. Fedora is perhaps not the best choice for a server, but I’m quite familiar with it, and I enjoy the First aspect of that distro.
Anyway, I’m not doing anything terribly complicated with the server, but one of the things I found slightly tricky to set up was UPS monitoring. I have a CyberPower CP425HG connected via USB, and one of its fun “features” is that it resets the USB interface every 20 seconds if a driver has not connected. So before I even got any monitoring going, it was flooding the logs with disconnect/reconnect messages. Then when I tried to get Network UPS Tools to monitor it, I found it quite racy for the driver to connect while the UPS in a usable state.
So, here’s how I now have it configured, for my own reference and in case anyone else has similar issues. First is to simply install the tools with “yum install nut nut-client
“. Then the NUT configuration files need a few basic additions, just added at the end of the existing files.
Added to /etc/ups/ups.conf
:
[cps] driver = "usbhid-ups" port = "auto" vendorid = "0764"
The specific “vendorid
” is probably not actually necessary, but I chose to go ahead and restrict my configuration to the CyberPower vendor anyway.
Added to /etc/ups/upsd.users
:
[nutmon] password = CENSORED upsmon master
and to /etc/ups/upsmon.conf
:
MONITOR cps@localhost 1 nutmon CENSORED master
The username “nutmon
” and its password don’t really matter for local use; it’s just used for the monitor to talk to upsd. You’d pay more attention if you were linking multiple machines’ UPS status over the network.
Now the tricky part is how to get NUT started at the right time as the system boots. A usual “systemctl enable
” never seemed to catch the UPS at a sane point of its cycle during boot, and if missed the service just fails. So for that, I added a udev rule to start the service as soon as the UPS is detected.
Create a new file /etc/udev/rules.d/99-nut.rules
:
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0764", TAG+="systemd", ENV{SYSTEMD_WANTS}+="nut-server.service nut-monitor.service"
(Note, I wrapped that line for blogging, but the rule needs to be all on one line.)
When I look at the system boot logs, I am still getting one cycle where the UPS disconnects itself, and thus NUT fails to start too. But when the UPS connects the second time, udev kicks off the service again and I finally get proper UPS monitoring. Whew!