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.