Power corrupts
I bought a Belkin F6H500ukUNV from eBuyer (quickfind code 77131). At under £25 including P&P it seemed like a good deal and I've been meaning to get round to having a UPS to allow clean shutdown of my local machine during power problems.
Belkin ship Linux and FreeBSD programs to talk to the UPS (though only over
the serial interface - it has USB too). It doesn't like xterm it seems; prints
Error opening terminal: xterm.
. Seems fine with a terminal type of linux.
It also puts all its files (config, help, binaries) in /etc/belkin
. And it's
binary only so I can't fix any of this brokenness.
However, the lovely Network UPS Tools exists.
Except Belkin have a number of UPS types, all incompatible with each other.
After figuring out that I really, really needed to use the Belkin provided
cable and not just a generic serial extender cable (grrrr. Why? If it's got
a 9 pin D labelled RS232 why not make it a sensible port?) I got the Belkin
software working and straced it to see what it did. A bit of looking at the
nut source found several drivers that appeared to use the commands Belkin were
sending (Q1, I & F). I tried powermust
first, with the following
/etc/nut/ups.conf
:
[belkin] driver = powermust port = /dev/ttyM2
(I have a 4 port serial card, so /dev/ttyM2
is just a normal serial port,
really.)
And tada. It works. I can now get output like:
[noodles@pot ~]$ upsc belkin@localhost battery.charge: 100.0 battery.voltage: 13.8 battery.voltage.nominal: 12.0 driver.name: powermust driver.parameter.port: /dev/ttyM2 driver.version: 2.0.3 driver.version.internal: 1.1 input.voltage: 227.0 input.voltage.fault: 227.0 input.voltage.maximum: 234.0 input.voltage.minimum: 221.0 output.frequency: 50.0 output.voltage: 227.0 output.voltage.target.battery: 230.0 ups.delay.shutdown: 2 ups.delay.start: 3 ups.load: 0.0 ups.mfr: Mustek ups.model: PowerMust ups.serial: unknown ups.status: OL
I don't know about doing shutdown yet, but ups.status
correctly goes to OB
(on battery) if I pull the power, which is probably the most important thing. :)
At some point I'd like to move over to the USB interface; I have better things to do with my serial ports. Belkin don't appear to have done the sane USB HID power thing; instead it's some odd hid device that doesn't even have a Belkin manufacturer ID:
Bus 003 Device 015: ID 0001:0000 Fry's Electronics Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0001 Fry's Electronics idProduct 0x0000 bcdDevice 1.00 iManufacturer 1 MEC iProduct 2 MEC0002 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Devices bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.00 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 624 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)
The NUT energizerups driver appears to talk USB and use the Q1/F commands, so I think I'll try that later. Or it's back to usbsnoop and a Windows box I guess.