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.