[Nut-upsdev] usb ups on openindiana

Jim Klimov jimklimov at cos.ru
Sat Nov 9 13:24:38 UTC 2013


Hello all,

   I am trying to set up my brother's UPS (remotely over internet)
on an OpenIndiana-based storage box. According to him, the UPS is
probably an Ippon Back Power Pro 600 dated around 2003 (battery
recently replaced), and it has an USB connection.

  Sorry for a relatively long post with a log of my successes and
failures, in the hopes that someone would point out what I did
wrong. I guess this is among my first experiences with USB in
Solaris - for a decade we had either serial or snmp UPSes :)

  I have found some assorted blog posts, following which I found
that the proper driver nowadays is blazer_usb (and earlier versions
of NUT had an ippon driver, which was AFAIK serial-only). However
I can't get the blazer_usb driver to recognize this UPS, and there
are some other problems. Another driver says it found the UPS, but
I am not sure about its correctness :)

   Main question is if this is some mistake of mine, an OS specific
thing, or just that this particular UPS is not supported (or maybe
its mgmt parts are broken - who knows, so far they haven't been
tested in any other OS)?

   For the record, here's what I did so far:

1) Installed the GCC-based development environment in OI, libusb
    and other packages that the build wanted

2) Compiled nut-2.6.5 (with the patch mentioned a week ago)

3) Installed NUT in the global zone, and defined the ups.conf entry:

[ippon]
         driver = blazer_usb
         port = auto
         desc = "Ippon Pro 600 USB"

[hid]
         driver = usbhid-ups
         port = auto


4) The interesting part is about getting USB to be found at all :)

Do credit where credit is due - some helpful posts were:
http://barbz.com.au/blog/?p=407
http://www.mail-archive.com/nut-upsuser@lists.alioth.debian.org/msg06556.html


# /usr/sbin/cfgadm -lv usb8/5
Ap_Id                          Receptacle   Occupant     Condition
Information
When         Type         Busy     Phys_Id

usb8/5                         connected    configured   ok
Mfg: OMRON  Product: 87XXUPS  NConfigs: 1  Config: 0  <no cfg str descr>
unavailable  usb-input    n        /devices/pci at 0,0/pci103c,1609 at 12:5

# prtconf -v | ggrep -B20 -A20 OMRON | egrep "value='(NAME|usb)"

                         value='NAME= ugen0 Power' + '0=USB D3 State' +
'3=USB D0 State'
                         value='usb6da,3.0' + 'usb6da,3' +
'usbif6da,class3.0.0' + 'usbif6da,class3.0' + 'usbif6da,class3' +
'usbif,class3.0.0' + 'usbif,class3.0' + 'usbif,class3' + 'usb,device'


So this UPS has VendorID 06DA, ProductID 0003.

# rem_drv ugen
# add_drv -i '"usb6da,3.0"' -m '* 0666 nobody nobody' ugen

# dmesg | tail
...
Nov  9 15:42:10 n54l usba: [ID 912658 kern.info] USB 1.10 device
   (usb6da,3) operating at low speed (USB 1.x) on USB 1.10 root hub:
   input at 5, ugen0 at bus address 2

Nov  9 15:42:10 n54l usba: [ID 349649 kern.info]        OMRON 87XXUPS

Nov  9 15:42:10 n54l genunix: [ID 936769 kern.info] ugen0 is
   /pci at 0,0/pci103c,1609 at 12/input at 5


However, the UPS is *usually* not found at all:

root at n54l:/# /usr/local/ups/bin/usbhid-ups -DDDD -a hid

Network UPS Tools - Generic HID driver 0.37 (2.6.5)
USB communication driver 0.31
    0.000000     debug level is '4'
    0.001180     upsdrv_initups...
    0.002196     No appropriate HID device found
    0.002241     No matching HID UPS found


root at n54l:/# /usr/local/ups/bin/blazer_usb -DDDD -a ippon

Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)
    0.000000     debug level is '4'
    0.001235     No appropriate HID device found
    0.001287     No supported devices found. Please check your device
availability with 'lsusb' and make sure you have an up-to-date version
of NUT. If this does not help, try running the driver with at least
'subdriver', 'vendorid' and 'productid' options specified. Please refer
to the man page for details about these options (man 8 blazer).



I wrote that it is *usually* not found, because early in my tests
(i.e. soon after boot) it was actually discovered as a device on
the USB bus, but with no details and unrecognized as a known UPS.

Actually, I've tracked this down to the USB device nodes changing
ownership from nobody:nobody to root:root during blazer_ups driver
startup :\ I am so far at a loss as to "The why". Even weirder,
sometimes the device links get gone as well, and this recovers them:

# devfsadm -Cv
devfsadm[5083]: verbose: symlink /dev/usb/6da.3/0/devstat -> 
../../../../devices/pci at 0,0/pci103c,1609 at 12/input at 5:6da.3.devstat
devfsadm[5083]: verbose: symlink /dev/usb/6da.3/0/cntrl0 -> 
../../../../devices/pci at 0,0/pci103c,1609 at 12/input at 5:6da.3.cntrl0
devfsadm[5083]: verbose: symlink /dev/usb/6da.3/0/cntrl0stat -> 
../../../../devices/pci at 0,0/pci103c,1609 at 12/input at 5:6da.3.cntrl0stat
devfsadm[5083]: verbose: symlink /dev/usb/6da.3/0/if0in1 -> 
../../../../devices/pci at 0,0/pci103c,1609 at 12/input at 5:6da.3.if0in1
devfsadm[5083]: verbose: symlink /dev/usb/6da.3/0/if0in1stat -> 
../../../../devices/pci at 0,0/pci103c,1609 at 12/input at 5:6da.3.if0in1stat


Running as root does work around the former problem, but the UPS
is still not recognized by any of the protocols:

# /usr/local/ups/bin/blazer_usb -DDDD -a ippon -u root
Network UPS Tools - Megatec/Q1 protocol USB driver 0.09 (2.6.5)
    0.000000     debug level is '4'
    0.022634     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    0.045564     - VendorID: 06da
    0.045663     - ProductID: 0003
    0.045733     - Manufacturer: OMRON
    0.045788     - Product: 87XXUPS
    0.045841     - Serial Number: unknown
    0.045899     - Bus: /dev/usb
    0.045951     Trying to match device
    0.046011     Device matches
    0.046187     Trying megatec protocol...
    0.049547     send: Q1
    0.101572     read: (217.0 2
    0.101674     blazer_status: short reply
    0.101733     Status read 1 failed
    1.266722     send: I/O error
    1.266900     blazer_status: short reply
    1.266956     Status read 2 failed
    1.267648     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    1.271661     - VendorID: 06da
    1.271763     - ProductID: 0003
    1.271823     - Manufacturer: unknown
    1.271877     - Product: unknown
    1.271925     - Serial Number: unknown
    1.271974     - Bus: /dev/usb
    1.272020     Trying to match device
    1.272074     Device does not match - skipping
    1.272175     No appropriate HID device found
    1.272256     blazer_status: short reply
    1.272309     Status read 3 failed
    1.272358     Trying mustek protocol...
    1.272933     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    1.277622     - VendorID: 06da
    1.277670     - ProductID: 0003
    1.277693     - Manufacturer: unknown
    1.277715     - Product: unknown
    1.277734     - Serial Number: unknown
    1.277756     - Bus: /dev/usb
    1.277774     Trying to match device
    1.277793     Device does not match - skipping
    1.277838     No appropriate HID device found
    1.277861     blazer_status: short reply
    1.277885     Status read 1 failed
    1.278143     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    1.282635     - VendorID: 06da
    1.282726     - ProductID: 0003
    1.282782     - Manufacturer: unknown
    1.282829     - Product: unknown
    1.282881     - Serial Number: unknown
    1.282932     - Bus: /dev/usb
    1.282979     Trying to match device
    1.283026     Device does not match - skipping
    1.283124     No appropriate HID device found
    1.283224     blazer_status: short reply
    1.283273     Status read 2 failed
    1.283866     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    1.288638     - VendorID: 06da
    1.288727     - ProductID: 0003
    1.288779     - Manufacturer: unknown
    1.288829     - Product: unknown
    1.288881     - Serial Number: unknown
    1.288927     - Bus: /dev/usb
    1.288975     Trying to match device
    1.289028     Device does not match - skipping
    1.289123     No appropriate HID device found
    1.289189     blazer_status: short reply
    1.289239     Status read 3 failed
    1.289285     Trying megatec/old protocol...
    1.289829     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    1.290230     Failed to open device, skipping. (I/O error)
    1.290291     No appropriate HID device found
    1.290339     blazer_status: short reply
    1.290388     Status read 1 failed
    1.300475     No appropriate HID device found
    1.300572     blazer_status: short reply
    1.300622     Status read 2 failed
    1.321620     No appropriate HID device found
    1.321719     blazer_status: short reply
    1.321772     Status read 3 failed
    1.321827     Trying zinto protocol...
    1.322081     No appropriate HID device found
    1.322144     blazer_status: short reply
    1.322192     Status read 1 failed
    1.322417     No appropriate HID device found
    1.322479     blazer_status: short reply
    1.322530     Status read 2 failed
    1.322747     No appropriate HID device found
    1.322808     blazer_status: short reply
    1.322860     Status read 3 failed
    1.322909     No supported UPS detected


# /usr/local/ups/bin/usbhid-ups -DDDD -a hid -u root 

Network UPS Tools - Generic HID driver 0.37 (2.6.5)
USB communication driver 0.31
    0.000000     debug level is '4'
    0.000342     upsdrv_initups...
    0.021748     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    0.044606     - VendorID: 06da
    0.044658     - ProductID: 0003
    0.044679     - Manufacturer: OMRON
    0.044709     - Product: 87XXUPS
    0.044730     - Serial Number: unknown
    0.044753     - Bus: /dev/usb
    0.044778     Trying to match device
    0.044805     This Liebert device (06da:0003) is not (or perhaps not
yet) supported by usbhid-ups. Please make sure you have an up-to-date
version of NUT. If this does not fix the problem, try running the
driver with the '-x productid=0003' option. Please report your results
to the NUT user's mailing list <nut-upsuser at lists.alioth.debian.org>.

    0.044833     Device does not match - skipping
    0.044891     No appropriate HID device found
    0.044923     No matching HID UPS found


(no idea why liebert comes up - vendor id?)

# /usr/local/ups/bin/usbhid-ups -DDDD -a hid -u root -x productid=0003
Network UPS Tools - Generic HID driver 0.37 (2.6.5)
USB communication driver 0.31
    0.000000     debug level is '4'
    0.000739     upsdrv_initups...
    0.022865     Checking device (06DA/0003) (/dev/usb/6da.3/0)
    0.045791     - VendorID: 06da
    0.045896     - ProductID: 0003
    0.045958     - Manufacturer: OMRON
    0.046020     - Product: 87XXUPS
    0.046073     - Serial Number: unknown
    0.046136     - Bus: /dev/usb
    0.046189     Trying to match device
    0.046282     Device matches
    0.051733     HID descriptor, method 1: (9 bytes) => 09 21 11 01 00 
01 22 1b 00
    0.051848     i=0, extra[i]=09, extra[i+1]=21
    0.051920     HID descriptor, method 2: (9 bytes) => 09 21 11 01 00 
01 22 1b 00
    0.051978     HID descriptor length 27
    0.058714     Report Descriptor size = 27
    0.058817     Report Descriptor: (27 bytes) => 06 00 ff 09 01 a1 01 
09 02 15 00 26 ff 00
    0.058887      75 08 95 08 81 82 09 02 95 08 91 82 c0
    0.059102     Using subdriver: Liebert HID 0.3
    0.059195     Entering libusb_get_report
    0.060809     libusb_get_report: I/O error
    0.060914     Can't retrieve Report 00: I/O error
    0.060993     Path: ff000001.ff000002, Type: Input, ReportID: 0x00, 
Offset: 0, Size: 8
    0.061057     Entering libusb_get_report
    0.061850     libusb_get_report: I/O error
    0.061954     Can't retrieve Report 00: I/O error
    0.062024     Path: ff000001.ff000002, Type: Output, ReportID: 0x00, 
Offset: 0, Size: 8
    0.062132     Report descriptor retrieved (Reportlen = 27)
    0.062189     Found HID device
    0.062245     Detected a UPS: OMRON/87XXUPS
    0.062316     string_to_path: depth = 3
    0.062443     string_to_path: depth = 3
    0.062521     string_to_path: depth = 3
    0.062588     string_to_path: depth = 3
    0.062663     string_to_path: depth = 3
    0.062727     string_to_path: depth = 3
    0.062800     string_to_path: depth = 4
    0.062867     string_to_path: depth = 4
    0.062936     string_to_path: depth = 4
    0.063001     string_to_path: depth = 4
    0.063069     string_to_path: depth = 4
    0.063133     string_to_path: depth = 4
    0.063195     find_nut_info: unknown info type: load.off.delay
    0.063249     find_nut_info: unknown info type: load.on.delay
    0.063305     find_nut_info: unknown info type: load.off.delay
    0.063381     upsdrv_initinfo...
    0.063452     upsdrv_updateinfo...
    0.063507     Not using interrupt pipe...
    0.063559     Quick update...
    0.064358     dstate_init: sock /var/state/ups/usbhid-ups-hid open on 
fd 7
    0.064417     upsdrv_updateinfo...
    0.064442     Not using interrupt pipe...
    0.064466     Quick update...
    2.064222     upsdrv_updateinfo...
    2.064347     Not using interrupt pipe...
    2.064421     Quick update...
    4.063982     upsdrv_updateinfo...
    4.064080     Not using interrupt pipe...
    4.064108     Quick update...
(this goes on forever)

However (after starting upsd) it seems that the UPS is seen somehow:

#  /usr/local/ups/bin/upsc hid at localhost

device.mfr: OMRON
device.model: 87XXUPS
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0003
driver.version: 2.6.5
driver.version.data: Liebert HID 0.3
driver.version.internal: 0.37
ups.mfr: OMRON
ups.model: 87XXUPS
ups.productid: 0003
ups.status: OB
ups.vendorid: 06da


I am puzzled why it is considered "OB" for example, which makes this
information somewhat useless for automated shutdowns...

It is indeed quite possible, that this particular piece of hardware is
just not supported by NUT and there are few-to-no problems regarding
the OS/Software side of my setup... I'd welcome confirmations though :)
And ideas about the volatility of device node setup (disappearance of
symlinks and changes of ownership with blazer_usb - but not with the
usbhid-ups driver) are also welcome.

Also, for the record, it is very inconvenient that starting an UPS
driver requires an entry in the ups.conf nowadays - basically, to
find a matching driver I'd have to make dozens of such entries and
see if any of them works... I'm lucky I got a possible hit on my
second attempt.

Thanks,
//Jim Klimov




More information about the Nut-upsdev mailing list