Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Liebert Corp PowerSure PST UPS #2271

Closed
digitlman opened this issue Jan 19, 2024 · 45 comments · Fixed by #2369
Closed

Support for Liebert Corp PowerSure PST UPS #2271

digitlman opened this issue Jan 19, 2024 · 45 comments · Fixed by #2369
Labels
impacts-release-2.8.1 Issues reported against NUT release 2.8.1 (maybe vanilla or with minor packaging tweaks) liebert USB non-zero interface numbers Most UPSes serve USB interactions on interface 0 which is default. Recent "composite devices" differ USB
Milestone

Comments

@digitlman
Copy link

digitlman commented Jan 19, 2024

Need help getting driver support for this unit:

Bus 001 Device 096: ID 10af:0002 Liebert Corp. PowerSure PST UPS
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x10af Liebert Corp.
  idProduct          0x0002 PowerSure PST UPS
  bcdDevice            0.02
  iManufacturer           3 Vertiv Co.
  iProduct                1 Liebert PST5
  iSerial                 5 2309310073A4A3C
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode           33 US
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      27
         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               5
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              0
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode           33 US
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     816
         Report Descriptors:
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval             255

Supposedly has kernel support: https://linux-hardware.org/?id=usb:10af-0002

@digitlman
Copy link
Author

digitlman commented Jan 19, 2024

root@NUT01:/home/it#  sudo /lib/nut/usbhid-ups -a Liebert_LR -DDD
Network UPS Tools - Generic HID driver 0.47 (2.8.0)
USB communication driver (libusb 1.0) 0.43
   0.000000     [D1] debug level is '3'
   0.001752     [D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.43')
   0.001849     [D1] upsdrv_initups (non-SHUT)...
   0.037827     [D2] Checking device 1 of 5 (7392/7811)
   0.038055     [D1] Failed to open device (7392/7811), skipping: Access denied (insufficient permissions)
   0.038123     [D2] Checking device 2 of 5 (10AF/0002)
   0.038213     [D1] Failed to open device (10AF/0002), skipping: Access denied (insufficient permissions)
   0.038265     [D2] Checking device 3 of 5 (0424/EC00)
   0.038362     [D1] Failed to open device (0424/EC00), skipping: Access denied (insufficient permissions)
   0.038413     [D2] Checking device 4 of 5 (0424/9514)
   0.038498     [D1] Failed to open device (0424/9514), skipping: Access denied (insufficient permissions)
   0.038550     [D2] Checking device 5 of 5 (1D6B/0002)
   0.038634     [D1] Failed to open device (1D6B/0002), skipping: Access denied (insufficient permissions)
   0.038684     [D2] libusb1: No appropriate HID device found
   0.038723     libusb1: Could not open any HID devices: insufficient permissions on everything
   0.038793     No matching HID UPS found

@digitlman
Copy link
Author

digitlman commented Jan 19, 2024

root@NUT01:/# hostnamectl
 Static hostname: NUT01
       Icon name: computer
      Machine ID: 9191adec98c9415e8718d0ae390cd465
         Boot ID: 4ebcc863c80241e697596f316547cc7a
Operating System: Raspbian GNU/Linux 12 (bookworm)
          Kernel: Linux 6.1.72-v7+
    Architecture: arm

@jimklimov
Copy link
Member

jimklimov commented Jan 19, 2024

This looks like it has a chance to be covered by usbhid-ups with a belkin-hid subdriver (per comments to some related devices, there may be scaling issues for some of the measurements that could need further adaptations of codebase to map them properly).

However, product ID 0x0002 is not currently known in the driver sources. This has two implications:

  • driver would not try to match the IDs it does not know about -- I can only suggest trying either a custom build of the version of NUT you have packaged (update drivers/belkin-hid.c around line 70, in the belkin_usb_device_table[], to add the ID) perhaps using its packaging recipes, or just a custom build of current NUT (notably usbhid-ups recently in Enhance USB device and subdriver matching in usbhid-ups to be on par with nutdrv_qx #2058 had updates to try specified subdrivers for given vendorid+productid) - see https://github.com/networkupstools/nut/wiki/Building-NUT-for-in%E2%80%90place-upgrades-or-non%E2%80%90disruptive-tests about building NUT and testing the driver from the build workspace; eventually installing if you like the results
  • generated udev.rules or similar do not tell the OS to chown the device filesystem nodes to nut run-time user -- you can address this with sudo /lib/nut/usbhid-ups -a Liebert_LR -DDD -x user=root while testing (eventually a user=root line in its ups.conf section); installing the custom build with the productid mentioned in sources and restarting the udev daemon can also do the trick

@jimklimov
Copy link
Member

I've proposed an exploratory fix in PR #2272 - you can try to build that codebase per wiki instructions linked earlier, using this for the initial git checkout:

:; git clone -b issue-2271 https://github.com/jimklimov/nut nut-issue-2271
:; cd nut-issue-2271
### ...go on with the rest of config/build/test(/install) routine

@digitlman
Copy link
Author

Jim,

Thanks for your prompt reply. I will see if I can get some testing done this weekend.

jimklimov added a commit to jimklimov/nut that referenced this issue Jan 20, 2024
@jimklimov jimklimov added USB liebert impacts-release-2.8.1 Issues reported against NUT release 2.8.1 (maybe vanilla or with minor packaging tweaks) labels Jan 20, 2024
@jimklimov
Copy link
Member

Cheers, do we have any lucky progress here? :)

@digitlman
Copy link
Author

digitlman commented Jan 23, 2024 via email

@jimklimov
Copy link
Member

Well... typically you apt install some packages for tools and *-dev dependencies, check out the needed NUT branch, and run ./ci_build.sh...

@digitlman
Copy link
Author

"WARNING: Some error has occurred while processing 'nut-scanner' command-line
arguments, see more details above the usage help text."

I did the "Replacing a systemd deployment" section.

@jimklimov
Copy link
Member

jimklimov commented Jan 30, 2024

And did you pass any arguments to nut-scanner? Which? Did it lodge any specific complaints?

Also, try nut-scanner --version to make sure you have got and are calling a new build (e.g. lack of libltdl-dev causes the optional tool to not be configured for building, and lack of some libusb...-dev may cause it to not recognize USB options).

After the configure script runs, you have a summary of the configuration choices that you can revise (or paste here, should be markdown and asciidoc friendly) - it should reveal if some options did not get chosen in your build.

@jimklimov
Copy link
Member

Gentle bump? :) Note I've updated the previous post with a few more ideas...

@electroflame
Copy link

For what it's worth, I think I have the same unit here (a Vertiv PSI5 unit). It reports the same info from lsusb.

Unfortunately, I don't have a great way to build from source, as everything's running in docker containers. I'll be down to test once the product ID patch gets merged and the docker images get updated, though.

@jimklimov
Copy link
Member

@electroflame : just in case, are your NUT containers the HomeAssistant plugin? If yes, see our Wiki for community hints about building one. Hope that helps.

Also, is a NUT container useful (e.g. to shut down its host and bring down the UPS in the end)?

@electroflame
Copy link

I'm not using the HomeAssistant plugin, although that's an idea. My plan was just to run NUT in a container and let all of the clients connect to it that way. It just helps keep everything separate on my end, and I've got a dashboard to let me know if services (i.e. containers) crash or stop responding.

I've done a little more by trying to set the productid in the ups.conf file (as I can do that in a container using the current image).

Setting productid = 0002 does allow the driver to detect the UPS (whereas without it it just fails). The server just doesn't respond with any usable information. It's always "On Battery", for example, which seems incorrect since it's wall-powered right now. Data does get filled in, though, as the vendorid does show 10af which lines up with the USB output.

Is there anything else that might help here?

@jimklimov
Copy link
Member

Following a discussion from another thread, just as a guess - check if nutdrv_qx or blazer_usb actually handle this device better than usbhid-ups? (e.g. if this device was released with VID:PID suggesting it is same as those which talk USB HID protocol, but in fact it talks one of Megatec Qx protocols and the HID support is a rudimentary stub)

@electroflame
Copy link

Hm, no dice on changing the driver. They complain about needing a subdriver, although the HID driver correctly detects the Belkin subdriver.

I'm going to spin up a VM and see if the Vertiv PowerAssist software can detect the UPS correctly.

@jimklimov
Copy link
Member

In that case, I'd suggest checking in the host system whether NUT drivers behave better, using a custom build or maybe by chrooting into the mounted container filesystem, but avoiding the virtualization layers which might confuse the devfs access permissions. Thinking of the latter, is your container privileged, or does the host see it running as processes all owned by some one user account (which is not listed as the USB node owner via NUT udev.rules or similar snippet on the host)?

@electroflame
Copy link

My container was privileged, but it made no difference either way.

I tried installing NUT on an Ubuntu VM and had similar issues. Mainly that lsusb sees the device, but NUT and nut-scanner do not.

So I tried installing it on a Raspberry Pi 4, outside of any Docker/virtualization layer, and I have the same result. lsusb sees the USB device (with the name and vendor ID, etc.) but NUT doesn't.

So as a last-ditch effort, as I was seriously questioning whether the actual UPS was malfunctioning, I hooked it up to my main Mac to check if macOS sees it as a battery. It does! So macOS reads it as a UPS, so the device isn't malfunctioning, but it doesn't really help me as NUT still can't see it, and the Mac is too far away to use the UPS via USB for more than a test (and it wouldn't be networked anyway).

Any other ideas to debug this a bit further? Thanks for the help so far!

@jimklimov
Copy link
Member

Well, nut-scanner does not see the device because its VID:PID are not built in as known and supported (the crux of PR #2272 waiting for experimental confirmations like yours to get merged - whether just IDs suffice or some more work is needed for the device model).

Starting with NUT v2.8.1 (or master) you should be able to pass a subdriver option to usbhid-ups driver, check its run-time help for acceptable values (can specify substrings though, as a case-insensitive exact/regex match), e.g.:

:; ./drivers/usbhid-ups -h
...
Acceptable values for 'subdriver' via -x or ups.conf in this driver (exact names here,
case-insensitive sub-strings may be used, as well as regular expressions):
 "EXPLORE HID 0.2", "MGE HID 1.46", "APC HID 0.100", "Arduino HID 0.21",
 "Belkin/Liebert HID 0.18", "CyberPower HID 0.8", "Delta UPS HID 0.6",
 "Ever HID 0.10", "iDowell HID 0.2", "Legrand HID 0.2",
 "Phoenixtec/Liebert HID 0.41", "openUPS HID 0.5",
 "PowerCOM HID 0.7", "Powervar HID 0.20",
 "Salicru HID 0.4", "TrippLite HID 0.85"

Try Belkin/Liebert; also maybe Phoenixtec/Liebert or MGE as likely related variants.

@electroflame
Copy link

Hm, no dice.

I decided to try apcupsd and see if that worked (even though this isn't an APC unit) and to my surprise it does actually read about half of the data off the UPS, including the status and battery (which honestly are the most important). It doesn't get Voltage or anything, though.

I wonder if this is just sending malformed data. I might just have to stick with apcupsd until the vendor/product IDs update, and see if nut-scanner can see it then.

@electroflame
Copy link

Just a quick update here:

I bit the bullet and set up a fresh install of Raspberry Pi OS (Bookworm) on a Raspberry Pi 4 and booted into that, installing a fresh version of NUT.

As an aside, there may still be issues with NUT and newer Pis or Pi OS. There's permission issues with a fresh install of each (the kernel might be grabbing the USB?) but setting up a udev rule and running upsmon as root seems to fix that.

Unfortunately, I didn't get much farther than with the VMs. With vendorid and productid specified, NUT can definitely see the UPS, it just can't get data out of it right now.

I think this is about the limit of what I can do debugging-wise, unfortunately. I'm out of ideas.

@jimklimov
Copy link
Member

From indications in the issues so far, different Pi models may have had different quality USB chips. There were many reports about issues with Pi3 (maybe owing more to platform popularity than HW quality, though) which subsided around Pi4 and on the rise with Pi5. Take with a grain of salt - I have no 100% conclusions here.

Regarding a fresh install - which NUT version was there? Packaged (and 2.8.1?) or one you've built from Git master or the exploratory fix in PR #2272? (I guess building AND installing only the latter would get around the permission option problem, as this is the only NUT source which "knows" the new ID.) Did you try with the subdriver option?

@electroflame
Copy link

I tried the package in the repository first (2.8.0 -ish, I think). Then I wiped it again and built 2.8.1 (but I forgot to try your PR). It takes a while to build on a Raspberry Pi 4, so I didn't do it again (I have to have the Pi up and running during the day, so I can only take it down to test during a short window).

Things get way more complicated to debug when I build from source (and increases the odds of me doing something wrong), so I might just have to wait for 2.8.1 to make it into the normal Debian/Raspberry repositories. Again, with the vendorid and productid specified NUT can see the UPS and pull the name, make, model, manufacturer, etc. -- so I think adding the IDs in the PR is safe if you were waiting on me for that.

@jimklimov
Copy link
Member

Well, name/model/etc. were the basics per USB HID, so the interesting part is if it pulls the actual UPS power device info :)

If you followed the Wiki article (and config prereqs that it references), you would have ccache installed and used by ci_build.sh script, which should speed up rebuilds of files where the sources did not change.

@electroflame
Copy link

I'm going to wipe the SD card back to a fresh install and try building from your PR fork. I'll see if I can get any more data out of it that way and let you know.

@electroflame
Copy link

Okay, some good news.

After compiling again, running nut-scanner -U does return some data:

[nutdev-usb1]
	driver = "usbhid-ups"
	port = "auto"
	vendorid = "10AF"
	productid = "0002"
	product = "Liebert PSI5"
	serial = "0000000000000000"
	vendor = "Vertiv Co."
	# bus = "001"
	# device = "003"
	# busport = "003"

# WARNING: all-same character "serial" with 16 copies of '0' (0x30) reported in some devices: nutdev-serial1

Next, running usbhid-ups -s ups -DDDD -d1 -x port=auto -u root

Network UPS Tools - Generic HID driver 0.52 (2.8.0-3567-g0d26c892a)
USB communication driver (libusb 1.0) 0.46
   0.000000	[D1] upsdrv_makevartable...
   0.000174	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000250	[D3] main_arg: var='port' val='auto'
   0.000312	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.000366	[D1] Network UPS Tools version 2.8.0-3567-g0d26c892a (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.000451	[D1] debug level is '4'
   0.001678	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.001760	[D1] upsdrv_initups (non-SHUT)...
   0.001813	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.46')
   0.016971	[D2] Checking device 1 of 4 (1D6B/0003)
   0.041944	[D1] nut_libusb_open: invalid libusb bus number 0
   0.042500	[D2] - VendorID: 1d6b
   0.042531	[D2] - ProductID: 0003
   0.042556	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.042580	[D2] - Product: xHCI Host Controller
   0.042604	[D2] - Serial Number: 0000:01:00.0
   0.042629	[D2] - Bus: 002
   0.042653	[D2] - Bus Port: unknown
   0.042680	[D2] - Device: 001
   0.042705	[D2] - Device release number: 0601
   0.042729	[D2] Trying to match device
   0.042757	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.042798	[D2] match_function_subdriver (non-SHUT mode): failed to match a subdriver to vendor and/or product ID
   0.042825	[D2] Device does not match - skipping
   0.043172	[D2] Checking device 2 of 4 (10AF/0002)
   0.051267	[D2] - VendorID: 10af
   0.051298	[D2] - ProductID: 0002
   0.051324	[D2] - Manufacturer: Vertiv Co.
   0.051348	[D2] - Product: Liebert PSI5
   0.051373	[D2] - Serial Number: 0000000000000000
   0.051397	[D2] - Bus: 001
   0.051421	[D2] - Bus Port: 003
   0.051445	[D2] - Device: 003
   0.051469	[D2] - Device release number: 0002
   0.051493	[D2] Trying to match device
   0.051518	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.051549	[D3] match_function_regex: matching a device...
   0.051577	[D2] Device matches
   0.051605	[D2] Reading configuration descriptor 1 of 1
   0.051650	[D3] libusb_kernel_driver_active() returned 1 (driver active)
   0.051678	[D2] successfully set kernel driver auto-detach flag
   0.052996	[D2] Claimed interface 0 successfully
   0.053052	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 0, 0)
   0.054322	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.054375	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.054404	[D3] HID descriptor length (method 1) 27
   0.054432	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.054462	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.054497	[D3] HID descriptor length (method 2) 27
   0.054522	[D2] HID descriptor length 27
   0.057796	[D2] Report Descriptor size = 27
   0.057847	[D3] Report Descriptor: (27 bytes) => 06 00 ff 09 01 a1 01 09 02 15 00 26 ff 00
   0.057878	[D3]  75 08 95 08 81 82 09 02 95 08 91 82 c0
   0.058034	Using subdriver: Belkin/Liebert HID 0.19
   0.058063	[D1] 2 HID objects found
   0.058096	[D4] Entering libusb_get_report
   0.060577	nut_libusb_get_report: Success
   0.060642	[D1] Can't retrieve Report 00: Success
   0.060679	[D1] Path: ff000001.ff000002, Type: Input, ReportID: 0x00, Offset: 0, Size: 8
   0.061475	[D4] Entering libusb_get_report
   0.063320	nut_libusb_get_report: Success
   0.063385	[D1] Can't retrieve Report 00: Success
   0.063424	[D1] Path: ff000001.ff000002, Type: Output, ReportID: 0x00, Offset: 0, Size: 8
   0.063483	[D2] Report descriptor retrieved (Reportlen = 27)
   0.063510	[D2] Found HID device
   0.063540	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.063613	[D4] string_to_path: depth = 3
   0.063705	[D4] string_to_path: depth = 3
   0.063790	[D4] string_to_path: depth = 3
   0.063873	[D4] string_to_path: depth = 3
   0.063964	[D4] string_to_path: depth = 3
   0.064044	[D4] string_to_path: depth = 3
   0.064122	[D4] string_to_path: depth = 3
   0.064209	[D4] string_to_path: depth = 4
   0.064287	[D4] string_to_path: depth = 3
   0.064366	[D4] string_to_path: depth = 3
   0.064445	[D4] string_to_path: depth = 3
   0.064534	[D4] string_to_path: depth = 3
   0.064613	[D4] string_to_path: depth = 3
   0.064691	[D4] string_to_path: depth = 3
   0.064774	[D4] string_to_path: depth = 3
   0.064852	[D4] string_to_path: depth = 3
   0.064933	[D4] string_to_path: depth = 4
   0.065008	[D4] string_to_path: depth = 3
   0.065054	[D4] string_to_path: depth = 4
   0.065135	[D4] string_to_path: depth = 4
   0.065216	[D4] string_to_path: depth = 3
   0.065299	[D4] string_to_path: depth = 3
   0.065358	[D4] string_to_path: depth = 3
   0.065388	[D4] string_to_path: depth = 3
   0.065418	[D4] string_to_path: depth = 3
   0.065447	[D4] string_to_path: depth = 3
   0.065476	[D4] string_to_path: depth = 3
   0.065545	[D4] string_to_path: depth = 4
   0.065574	[D4] string_to_path: depth = 3
   0.065606	[D4] string_to_path: depth = 3
   0.065650	[D4] string_to_path: depth = 3
   0.065732	[D4] string_to_path: depth = 3
   0.065813	[D4] string_to_path: depth = 3
   0.065912	[D4] string_to_path: depth = 3
   0.065993	[D4] string_to_path: depth = 3
   0.066074	[D4] string_to_path: depth = 3
   0.066137	[D4] string_to_path: depth = 3
   0.066169	[D4] string_to_path: depth = 3
   0.066199	[D4] string_to_path: depth = 3
   0.066229	[D4] string_to_path: depth = 3
   0.066259	[D4] string_to_path: depth = 3
   0.066290	[D4] string_to_path: depth = 3
   0.066322	[D4] string_to_path: depth = 3
   0.066367	[D4] string_to_path: depth = 3
   0.066449	[D4] string_to_path: depth = 3
   0.066536	[D4] string_to_path: depth = 4
   0.066635	[D4] string_to_path: depth = 4
   0.066717	[D4] string_to_path: depth = 4
   0.066800	[D4] string_to_path: depth = 4
   0.066899	[D4] string_to_path: depth = 4
   0.066983	[D4] string_to_path: depth = 4
   0.067064	[D4] string_to_path: depth = 3
   0.067164	[D4] string_to_path: depth = 3
   0.067243	[D4] string_to_path: depth = 3
   0.067343	[D4] string_to_path: depth = 3
   0.067423	[D4] string_to_path: depth = 3
   0.067503	[D4] string_to_path: depth = 3
   0.067600	[D4] string_to_path: depth = 3
   0.067679	[D4] string_to_path: depth = 3
   0.067757	[D4] string_to_path: depth = 3
   0.067852	[D4] string_to_path: depth = 3
   0.067931	[D4] string_to_path: depth = 3
   0.068010	[D4] string_to_path: depth = 3
   0.068104	[D4] string_to_path: depth = 3
   0.068183	[D4] string_to_path: depth = 3
   0.068260	[D4] string_to_path: depth = 3
   0.068354	[D4] string_to_path: depth = 3
   0.068432	[D4] string_to_path: depth = 3
   0.068511	[D4] string_to_path: depth = 3
   0.068607	[D4] string_to_path: depth = 3
   0.068685	[D4] string_to_path: depth = 3
   0.068764	[D4] string_to_path: depth = 3
   0.068820	[D4] string_to_path: depth = 3
   0.068870	[D2] find_nut_info: unknown info type: load.off.delay
   0.068942	[D2] find_nut_info: unknown info type: load.on.delay
   0.069019	[D2] find_nut_info: unknown info type: load.off.delay
   0.069117	[D1] upsdrv_initinfo...
   0.069200	[D1] upsdrv_updateinfo...
   0.819807	[D2] nut_libusb_get_interrupt: Connection timed out
   0.819899	[D1] Got 0 HID objects...
   0.819955	[D1] Quick update...
   0.820067	Running as foreground process, not saving a PID file
   0.820141	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.820195	[D1] upsdrv_updateinfo...
   1.570810	[D2] nut_libusb_get_interrupt: Connection timed out
   1.570907	[D1] Got 0 HID objects...
   1.570973	[D1] Quick update...
   1.571050	[D1] upsdrv_updateinfo...
   2.321658	[D2] nut_libusb_get_interrupt: Connection timed out
   2.321753	[D1] Got 0 HID objects...
   2.321808	[D1] Quick update...
   2.321884	[D3] Entering dstate_dump
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.state: dumping
driver.version: 2.8.0-3567-g0d26c892a
driver.version.data: Belkin/Liebert HID 0.19
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OB
ups.vendorid: 10af
   2.322544	[D1] upsdrv_cleanup...

It definitely sees more info, but still doesn't have anything usable from the UPS. I'll try the subdrivers next, but I wanted to post this in case you see anything immediately wrong.

@electroflame
Copy link

Here are the results from the subdrivers you recommended earlier (neither worked):

Phoenixtec/Liebert

Network UPS Tools - Generic HID driver 0.52 (2.8.0-3567-g0d26c892a)
USB communication driver (libusb 1.0) 0.46
   0.000000	[D1] upsdrv_makevartable...
   0.000179	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000247	[D3] main_arg: var='port' val='auto'
   0.000306	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.000373	[D3] main_arg: var='subdriver' val='Phoenixtec/Liebert'
   0.000436	[D3] main_arg: var='vendorid' val='10af'
   0.000496	[D3] main_arg: var='productid' val='0002'
   0.000557	[D1] Network UPS Tools version 2.8.0-3567-g0d26c892a (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.000703	[D1] debug level is '4'
   0.001894	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.001970	[D1] upsdrv_initups (non-SHUT)...
   0.002022	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.46')
   0.026082	[D2] Checking device 1 of 4 (1D6B/0003)
   0.052976	[D1] nut_libusb_open: invalid libusb bus number 0
   0.053537	[D2] - VendorID: 1d6b
   0.053568	[D2] - ProductID: 0003
   0.053593	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.053619	[D2] - Product: xHCI Host Controller
   0.053644	[D2] - Serial Number: 0000:01:00.0
   0.053668	[D2] - Bus: 002
   0.053693	[D2] - Bus Port: unknown
   0.053717	[D2] - Device: 001
   0.053743	[D2] - Device release number: 0601
   0.053767	[D2] Trying to match device
   0.053797	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.053846	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.054032	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.054201	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.054236	[D3] match_function_regex: matching a device...
   0.054275	[D2] match_function_regex: failed match of VendorID: 1d6b
   0.054304	[D2] Device does not match - skipping
   0.054667	[D2] Checking device 2 of 4 (10AF/0002)
   0.061844	[D2] - VendorID: 10af
   0.061875	[D2] - ProductID: 0002
   0.061901	[D2] - Manufacturer: Vertiv Co.
   0.061926	[D2] - Product: Liebert PSI5
   0.061950	[D2] - Serial Number: 0000000000000000
   0.061975	[D2] - Bus: 001
   0.061999	[D2] - Bus Port: 003
   0.062027	[D2] - Device: 003
   0.062051	[D2] - Device release number: 0002
   0.062075	[D2] Trying to match device
   0.062101	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.062131	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.062311	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.062489	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.062521	[D3] match_function_regex: matching a device...
   0.062609	[D2] Device matches
   0.062636	[D2] Reading configuration descriptor 1 of 1
   0.062688	[D3] libusb_kernel_driver_active() returned 0: Success
   0.062753	[D2] Claimed interface 0 successfully
   0.062784	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 0, 0)
   0.064859	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.064899	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.064925	[D3] HID descriptor length (method 1) 27
   0.064951	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.064981	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.065011	[D3] HID descriptor length (method 2) 27
   0.065037	[D2] HID descriptor length 27
   0.068345	[D2] Report Descriptor size = 27
   0.068382	[D3] Report Descriptor: (27 bytes) => 06 00 ff 09 01 a1 01 09 02 15 00 26 ff 00
   0.068413	[D3]  75 08 95 08 81 82 09 02 95 08 91 82 c0
   0.068588	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.068620	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.068832	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.069006	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.069036	Using subdriver: Phoenixtec/Liebert HID 0.41
   0.069063	[D1] 2 HID objects found
   0.069095	[D4] Entering libusb_get_report
   0.071101	nut_libusb_get_report: Success
   0.071144	[D1] Can't retrieve Report 00: Success
   0.071179	[D1] Path: ff000001.ff000002, Type: Input, ReportID: 0x00, Offset: 0, Size: 8
   0.071205	[D4] Entering libusb_get_report
   0.073843	nut_libusb_get_report: Success
   0.073877	[D1] Can't retrieve Report 00: Success
   0.073908	[D1] Path: ff000001.ff000002, Type: Output, ReportID: 0x00, Offset: 0, Size: 8
   0.073958	[D2] Report descriptor retrieved (Reportlen = 27)
   0.073984	[D2] Found HID device
   0.074015	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.074060	[D4] string_to_path: depth = 3
   0.074093	[D4] string_to_path: depth = 3
   0.074124	[D4] string_to_path: depth = 3
   0.074154	[D4] string_to_path: depth = 3
   0.074183	[D4] string_to_path: depth = 3
   0.074214	[D4] string_to_path: depth = 3
   0.074242	[D4] string_to_path: depth = 3
   0.074278	[D4] string_to_path: depth = 4
   0.074307	[D4] string_to_path: depth = 4
   0.074335	[D4] string_to_path: depth = 3
   0.074363	[D4] string_to_path: depth = 4
   0.074394	[D4] string_to_path: depth = 4
   0.074422	[D4] string_to_path: depth = 4
   0.074454	[D4] string_to_path: depth = 4
   0.074484	[D4] string_to_path: depth = 4
   0.074513	[D4] string_to_path: depth = 4
   0.074543	[D4] string_to_path: depth = 5
   0.074575	[D4] string_to_path: depth = 5
   0.074607	[D4] string_to_path: depth = 4
   0.074637	[D4] string_to_path: depth = 4
   0.074669	[D4] string_to_path: depth = 4
   0.074700	[D4] string_to_path: depth = 4
   0.074731	[D4] string_to_path: depth = 4
   0.074760	[D4] string_to_path: depth = 4
   0.074792	[D4] string_to_path: depth = 4
   0.074823	[D4] string_to_path: depth = 4
   0.074853	[D4] string_to_path: depth = 4
   0.074882	[D4] string_to_path: depth = 4
   0.074910	[D4] string_to_path: depth = 4
   0.074939	[D4] string_to_path: depth = 4
   0.074971	[D4] string_to_path: depth = 6
   0.075003	[D4] string_to_path: depth = 6
   0.075030	[D4] string_to_path: depth = 3
   0.075058	[D4] string_to_path: depth = 3
   0.075086	[D4] string_to_path: depth = 4
   0.075115	[D4] string_to_path: depth = 3
   0.075142	[D4] string_to_path: depth = 3
   0.075170	[D4] string_to_path: depth = 3
   0.075199	[D4] string_to_path: depth = 3
   0.075230	[D2] find_nut_info: unknown info type: load.off.delay
   0.075257	[D2] find_nut_info: unknown info type: load.on.delay
   0.075284	[D2] find_nut_info: unknown info type: load.off.delay
   0.075327	[D1] upsdrv_initinfo...
   0.075365	[D1] upsdrv_updateinfo...
   0.826007	[D2] nut_libusb_get_interrupt: Connection timed out
   0.826084	[D1] Got 0 HID objects...
   0.826134	[D1] Quick update...
   0.826259	Running as foreground process, not saving a PID file
   0.826332	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.826386	[D1] upsdrv_updateinfo...
   1.576963	[D2] nut_libusb_get_interrupt: Connection timed out
   1.577047	[D1] Got 0 HID objects...
   1.577099	[D1] Quick update...
   1.577172	[D1] upsdrv_updateinfo...
   2.327753	[D2] nut_libusb_get_interrupt: Connection timed out
   2.327846	[D1] Got 0 HID objects...
   2.327898	[D1] Quick update...
   2.327974	[D3] Entering dstate_dump
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0002
driver.parameter.subdriver: Phoenixtec/Liebert
driver.parameter.synchronous: auto
driver.parameter.vendorid: 10af
driver.state: dumping
driver.version: 2.8.0-3567-g0d26c892a
driver.version.data: Phoenixtec/Liebert HID 0.41
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OB
ups.vendorid: 10af
   2.328778	[D1] upsdrv_cleanup...

MGE

Network UPS Tools - Generic HID driver 0.52 (2.8.0-3567-g0d26c892a)
USB communication driver (libusb 1.0) 0.46
   0.000001	[D1] upsdrv_makevartable...
   0.000606	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000784	[D3] main_arg: var='port' val='auto'
   0.001150	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.001580	[D3] main_arg: var='subdriver' val='MGE'
   0.001634	[D3] main_arg: var='vendorid' val='10af'
   0.001679	[D3] main_arg: var='productid' val='0002'
   0.001749	[D1] Network UPS Tools version 2.8.0-3567-g0d26c892a (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.002132	[D1] debug level is '4'
   0.003734	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.003874	[D1] upsdrv_initups (non-SHUT)...
   0.004305	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.46')
   0.023179	[D2] Checking device 1 of 4 (1D6B/0003)
   0.049137	[D1] nut_libusb_open: invalid libusb bus number 0
   0.050249	[D2] - VendorID: 1d6b
   0.050370	[D2] - ProductID: 0003
   0.050807	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.050847	[D2] - Product: xHCI Host Controller
   0.050905	[D2] - Serial Number: 0000:01:00.0
   0.051019	[D2] - Bus: 002
   0.051494	[D2] - Bus Port: unknown
   0.051959	[D2] - Device: 001
   0.052381	[D2] - Device release number: 0601
   0.052442	[D2] Trying to match device
   0.052515	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'MGE'...
   0.052557	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.053123	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.053521	[D2] match_function_subdriver_name: found a match: MGE HID 1.46
   0.053642	[D3] match_function_regex: matching a device...
   0.054073	[D2] match_function_regex: failed match of VendorID: 1d6b
   0.054137	[D2] Device does not match - skipping
   0.054972	[D2] Checking device 2 of 4 (10AF/0002)
   0.062309	[D2] - VendorID: 10af
   0.062431	[D2] - ProductID: 0002
   0.062862	[D2] - Manufacturer: Vertiv Co.
   0.062902	[D2] - Product: Liebert PSI5
   0.062961	[D2] - Serial Number: 0000000000000000
   0.063074	[D2] - Bus: 001
   0.063404	[D2] - Bus Port: 003
   0.063873	[D2] - Device: 003
   0.063988	[D2] - Device release number: 0002
   0.064396	[D2] Trying to match device
   0.064462	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'MGE'...
   0.064578	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.065251	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.065659	[D2] match_function_subdriver_name: found a match: MGE HID 1.46
   0.065781	[D3] match_function_regex: matching a device...
   0.066544	[D2] Device matches
   0.066660	[D2] Reading configuration descriptor 1 of 1
   0.067112	[D3] libusb_kernel_driver_active() returned 0: Success
   0.067200	[D2] Claimed interface 0 successfully
   0.067265	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 0, 0)
   0.069325	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.069455	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.069865	[D3] HID descriptor length (method 1) 27
   0.069929	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.070003	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.070065	[D3] HID descriptor length (method 2) 27
   0.070567	[D2] HID descriptor length 27
   0.072814	[D2] Report Descriptor size = 27
   0.072945	[D3] Report Descriptor: (27 bytes) => 06 00 ff 09 01 a1 01 09 02 15 00 26 ff 00
   0.073358	[D3]  75 08 95 08 81 82 09 02 95 08 91 82 c0
   0.073780	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'MGE'...
   0.073826	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.073935	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.074401	[D2] match_function_subdriver_name: found a match: MGE HID 1.46
   0.074446	Using subdriver: MGE HID 1.46
   0.074484	[D1] 2 HID objects found
   0.074525	[D4] Entering libusb_get_report
   0.075574	nut_libusb_get_report: Success
   0.075633	[D1] Can't retrieve Report 00: Success
   0.075683	[D1] Path: ff000001.ff000002, Type: Input, ReportID: 0x00, Offset: 0, Size: 8
   0.075719	[D4] Entering libusb_get_report
   0.078404	nut_libusb_get_report: Success
   0.078455	[D1] Can't retrieve Report 00: Success
   0.078499	[D1] Path: ff000001.ff000002, Type: Output, ReportID: 0x00, Offset: 0, Size: 8
   0.078593	[D4] string_to_path: depth = 3
   0.079071	[D4] string_to_path: depth = 4
   0.079138	[D2] Report descriptor retrieved (Reportlen = 27)
   0.079174	[D2] Found HID device
   0.079216	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.079662	[D4] string_to_path: depth = 3
   0.079800	[D4] string_to_path: depth = 3
   0.080215	[D4] string_to_path: depth = 3
   0.080273	[D4] string_to_path: depth = 3
   0.080320	[D4] string_to_path: depth = 3
   0.080399	[D4] string_to_path: depth = 4
   0.080767	[D4] string_to_path: depth = 3
   0.081195	[D4] string_to_path: depth = 3
   0.081242	[D4] string_to_path: depth = 7
   0.081278	[D4] string_to_path: depth = 3
   0.081313	[D4] string_to_path: depth = 4
   0.081595	[D4] string_to_path: depth = 3
   0.081681	[D4] string_to_path: depth = 3
   0.081958	[D4] string_to_path: depth = 3
   0.081994	[D4] string_to_path: depth = 3
   0.082029	[D4] string_to_path: depth = 3
   0.082062	[D4] string_to_path: depth = 4
   0.082349	[D4] string_to_path: depth = 5
   0.082447	[D4] string_to_path: depth = 5
   0.082681	[D4] string_to_path: depth = 6
   0.082916	[D4] string_to_path: depth = 5
   0.083149	[D4] string_to_path: depth = 5
   0.083381	[D4] string_to_path: depth = 4
   0.083672	[D4] string_to_path: depth = 4
   0.083711	[D4] string_to_path: depth = 4
   0.083743	[D4] string_to_path: depth = 3
   0.083776	[D4] string_to_path: depth = 3
   0.083816	[D4] string_to_path: depth = 4
   0.084089	[D4] string_to_path: depth = 3
   0.084126	[D4] string_to_path: depth = 3
   0.084160	[D4] string_to_path: depth = 3
   0.084193	[D4] string_to_path: depth = 3
   0.084478	[D4] string_to_path: depth = 3
   0.084568	[D4] string_to_path: depth = 4
   0.084869	[D4] string_to_path: depth = 4
   0.084912	[D4] string_to_path: depth = 4
   0.084950	[D4] string_to_path: depth = 3
   0.084985	[D4] string_to_path: depth = 3
   0.085022	[D4] string_to_path: depth = 4
   0.085063	[D4] string_to_path: depth = 6
   0.085117	[D4] string_to_path: depth = 6
   0.085188	[D4] string_to_path: depth = 6
   0.085231	[D4] string_to_path: depth = 4
   0.085268	[D4] string_to_path: depth = 4
   0.085307	[D4] string_to_path: depth = 4
   0.085362	[D4] string_to_path: depth = 6
   0.085405	[D4] string_to_path: depth = 6
   0.085487	[D4] string_to_path: depth = 6
   0.085530	[D4] string_to_path: depth = 4
   0.085581	[D4] string_to_path: depth = 5
   0.085621	[D4] string_to_path: depth = 5
   0.085666	[D4] string_to_path: depth = 4
   0.085705	[D4] string_to_path: depth = 4
   0.085737	[D4] string_to_path: depth = 3
   0.085769	[D4] string_to_path: depth = 3
   0.085832	[D4] string_to_path: depth = 3
   0.085871	[D4] string_to_path: depth = 4
   0.085951	[D4] string_to_path: depth = 6
   0.085991	[D4] string_to_path: depth = 4
   0.086040	[D4] string_to_path: depth = 4
   0.086075	[D4] string_to_path: depth = 4
   0.086136	[D4] string_to_path: depth = 4
   0.086205	[D4] string_to_path: depth = 7
   0.086256	[D4] string_to_path: depth = 7
   0.086315	[D4] string_to_path: depth = 4
   0.086365	[D4] string_to_path: depth = 4
   0.086416	[D4] string_to_path: depth = 6
   0.086463	[D4] string_to_path: depth = 6
   0.086508	[D4] string_to_path: depth = 6
   0.086553	[D4] string_to_path: depth = 6
   0.086634	[D4] string_to_path: depth = 6
   0.086672	[D4] string_to_path: depth = 4
   0.086751	[D4] string_to_path: depth = 6
   0.086817	[D4] string_to_path: depth = 6
   0.086882	[D4] string_to_path: depth = 6
   0.086929	[D4] string_to_path: depth = 4
   0.086969	[D4] string_to_path: depth = 5
   0.087008	[D4] string_to_path: depth = 5
   0.087073	[D4] string_to_path: depth = 5
   0.087117	[D4] string_to_path: depth = 6
   0.087154	[D4] string_to_path: depth = 5
   0.087210	[D4] string_to_path: depth = 5
   0.087265	[D4] string_to_path: depth = 6
   0.087303	[D4] string_to_path: depth = 4
   0.087340	[D4] string_to_path: depth = 4
   0.087378	[D4] string_to_path: depth = 4
   0.087424	[D4] string_to_path: depth = 4
   0.087493	[D4] string_to_path: depth = 6
   0.087527	[D4] string_to_path: depth = 4
   0.087562	[D4] string_to_path: depth = 5
   0.087616	[D4] string_to_path: depth = 5
   0.087655	[D4] string_to_path: depth = 5
   0.087708	[D4] string_to_path: depth = 5
   0.087755	[D4] string_to_path: depth = 7
   0.087813	[D4] string_to_path: depth = 7
   0.087859	[D4] string_to_path: depth = 7
   0.087928	[D4] string_to_path: depth = 7
   0.087994	[D4] string_to_path: depth = 7
   0.088062	[D4] string_to_path: depth = 7
   0.088104	[D4] string_to_path: depth = 4
   0.088172	[D4] string_to_path: depth = 5
   0.088231	[D4] string_to_path: depth = 7
   0.088279	[D4] string_to_path: depth = 7
   0.088336	[D4] string_to_path: depth = 7
   0.088376	[D4] string_to_path: depth = 4
   0.088456	[D4] string_to_path: depth = 5
   0.088509	[D4] string_to_path: depth = 4
   0.088549	[D4] string_to_path: depth = 4
   0.088583	[D4] string_to_path: depth = 4
   0.088646	[D4] string_to_path: depth = 4
   0.088682	[D4] string_to_path: depth = 4
   0.088718	[D4] string_to_path: depth = 4
   0.088772	[D4] string_to_path: depth = 4
   0.088806	[D4] string_to_path: depth = 4
   0.088841	[D4] string_to_path: depth = 4
   0.088875	[D4] string_to_path: depth = 4
   0.088916	[D4] string_to_path: depth = 5
   0.088992	[D4] string_to_path: depth = 7
   0.089039	[D4] string_to_path: depth = 7
   0.089111	[D4] string_to_path: depth = 7
   0.089159	[D4] string_to_path: depth = 7
   0.089235	[D4] string_to_path: depth = 7
   0.089295	[D4] string_to_path: depth = 7
   0.089335	[D4] string_to_path: depth = 4
   0.089377	[D4] string_to_path: depth = 5
   0.089423	[D4] string_to_path: depth = 7
   0.089480	[D4] string_to_path: depth = 7
   0.089559	[D4] string_to_path: depth = 7
   0.089620	[D4] string_to_path: depth = 4
   0.089684	[D4] string_to_path: depth = 5
   0.089735	[D4] string_to_path: depth = 4
   0.089783	[D4] string_to_path: depth = 4
   0.089825	[D4] string_to_path: depth = 6
   0.089866	[D4] string_to_path: depth = 6
   0.089955	[D4] string_to_path: depth = 6
   0.089999	[D4] string_to_path: depth = 6
   0.090040	[D4] string_to_path: depth = 6
   0.090093	[D4] string_to_path: depth = 6
   0.090156	[D4] string_to_path: depth = 4
   0.090194	[D4] string_to_path: depth = 4
   0.090235	[D4] string_to_path: depth = 6
   0.090290	[D4] string_to_path: depth = 6
   0.090353	[D4] string_to_path: depth = 6
   0.090393	[D4] string_to_path: depth = 4
   0.090429	[D4] string_to_path: depth = 4
   0.090494	[D4] string_to_path: depth = 4
   0.090530	[D4] string_to_path: depth = 4
   0.090572	[D4] string_to_path: depth = 5
   0.090624	[D4] string_to_path: depth = 5
   0.090670	[D4] string_to_path: depth = 6
   0.090744	[D4] string_to_path: depth = 5
   0.090788	[D4] string_to_path: depth = 5
   0.090859	[D4] string_to_path: depth = 5
   0.090902	[D4] string_to_path: depth = 5
   0.090964	[D4] string_to_path: depth = 5
   0.091017	[D4] string_to_path: depth = 5
   0.091058	[D4] string_to_path: depth = 5
   0.091113	[D4] string_to_path: depth = 6
   0.091197	[D4] string_to_path: depth = 6
   0.091249	[D4] string_to_path: depth = 4
   0.091292	[D4] string_to_path: depth = 5
   0.091332	[D4] string_to_path: depth = 5
   0.091371	[D4] string_to_path: depth = 5
   0.091434	[D4] string_to_path: depth = 5
   0.091488	[D4] string_to_path: depth = 5
   0.091541	[D4] string_to_path: depth = 5
   0.091591	[D4] string_to_path: depth = 5
   0.091633	[D4] string_to_path: depth = 5
   0.091696	[D4] string_to_path: depth = 5
   0.091742	[D4] string_to_path: depth = 6
   0.091820	[D4] string_to_path: depth = 6
   0.091879	[D4] string_to_path: depth = 6
   0.091943	[D4] string_to_path: depth = 5
   0.091987	[D4] string_to_path: depth = 5
   0.092027	[D4] string_to_path: depth = 5
   0.092079	[D4] string_to_path: depth = 5
   0.092153	[D4] string_to_path: depth = 5
   0.092225	[D4] string_to_path: depth = 5
   0.092267	[D4] string_to_path: depth = 5
   0.092303	[D4] string_to_path: depth = 4
   0.092349	[D4] string_to_path: depth = 4
   0.092406	[D4] string_to_path: depth = 4
   0.092442	[D4] string_to_path: depth = 3
   0.092500	[D4] string_to_path: depth = 3
   0.092536	[D4] string_to_path: depth = 3
   0.092571	[D4] string_to_path: depth = 3
   0.092604	[D4] string_to_path: depth = 3
   0.092638	[D4] string_to_path: depth = 3
   0.092684	[D4] string_to_path: depth = 4
   0.092752	[D4] string_to_path: depth = 3
   0.092809	[D4] string_to_path: depth = 4
   0.092855	[D4] string_to_path: depth = 3
   0.092890	[D4] string_to_path: depth = 4
   0.092923	[D4] string_to_path: depth = 3
   0.092965	[D4] string_to_path: depth = 5
   0.093026	[D4] string_to_path: depth = 5
   0.093080	[D4] string_to_path: depth = 5
   0.093122	[D4] string_to_path: depth = 5
   0.093168	[D2] find_nut_info: unknown info type: load.off.delay
   0.093196	[D2] find_nut_info: unknown info type: load.on.delay
   0.093223	[D2] find_nut_info: unknown info type: load.off.delay
   0.093301	[D1] upsdrv_initinfo...
   0.093340	[D1] upsdrv_updateinfo...
   0.843944	[D2] nut_libusb_get_interrupt: Connection timed out
   0.844024	[D1] Got 0 HID objects...
   0.844077	[D1] Quick update...
   0.844184	Running as foreground process, not saving a PID file
   0.844258	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.844313	[D1] upsdrv_updateinfo...
   1.594881	[D2] nut_libusb_get_interrupt: Connection timed out
   1.594959	[D1] Got 0 HID objects...
   1.595010	[D1] Quick update...
   1.595085	[D1] upsdrv_updateinfo...
   2.345611	[D2] nut_libusb_get_interrupt: Connection timed out
   2.345685	[D1] Got 0 HID objects...
   2.345735	[D1] Quick update...
   2.345806	[D3] Entering dstate_dump
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0002
driver.parameter.subdriver: MGE
driver.parameter.synchronous: auto
driver.parameter.vendorid: 10af
driver.state: dumping
driver.version: 2.8.0-3567-g0d26c892a
driver.version.data: MGE HID 1.46
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OB
ups.vendorid: 10af
   2.346543	[D1] upsdrv_cleanup...

@jimklimov
Copy link
Member

For kicks, can you try adding a pollonly flag to usbhid-ups driver settings?

@electroflame
Copy link

Sure, I hope I did it right.

usbhid-ups -s ups -DDDD -d1 -x port=auto -u root -x pollonly

Network UPS Tools - Generic HID driver 0.52 (2.8.0-3567-g0d26c892a)
USB communication driver (libusb 1.0) 0.46
   0.000000	[D1] upsdrv_makevartable...
   0.000164	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000232	[D3] main_arg: var='port' val='auto'
   0.000289	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.000354	[D3] main_arg: var='pollonly' val='<null>'
   0.000416	[D1] Network UPS Tools version 2.8.0-3567-g0d26c892a (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.000500	[D1] debug level is '4'
   0.001634	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.001713	[D1] upsdrv_initups (non-SHUT)...
   0.001762	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.46')
   0.026076	[D2] Checking device 1 of 4 (1D6B/0003)
   0.051029	[D1] nut_libusb_open: invalid libusb bus number 0
   0.051955	[D2] - VendorID: 1d6b
   0.052010	[D2] - ProductID: 0003
   0.052055	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.052103	[D2] - Product: xHCI Host Controller
   0.052150	[D2] - Serial Number: 0000:01:00.0
   0.052197	[D2] - Bus: 002
   0.052241	[D2] - Bus Port: unknown
   0.052284	[D2] - Device: 001
   0.052328	[D2] - Device release number: 0601
   0.052370	[D2] Trying to match device
   0.052420	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.052485	[D2] match_function_subdriver (non-SHUT mode): failed to match a subdriver to vendor and/or product ID
   0.052532	[D2] Device does not match - skipping
   0.053017	[D2] Checking device 2 of 4 (10AF/0002)
   0.060446	[D2] - VendorID: 10af
   0.060484	[D2] - ProductID: 0002
   0.060510	[D2] - Manufacturer: Vertiv Co.
   0.060535	[D2] - Product: Liebert PSI5
   0.060559	[D2] - Serial Number: 0000000000000000
   0.060583	[D2] - Bus: 001
   0.060605	[D2] - Bus Port: 003
   0.060630	[D2] - Device: 003
   0.060654	[D2] - Device release number: 0002
   0.060678	[D2] Trying to match device
   0.060704	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.060733	[D3] match_function_regex: matching a device...
   0.060762	[D2] Device matches
   0.060787	[D2] Reading configuration descriptor 1 of 1
   0.060834	[D3] libusb_kernel_driver_active() returned 0: Success
   0.060898	[D2] Claimed interface 0 successfully
   0.060926	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 0, 0)
   0.063454	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.063491	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.063516	[D3] HID descriptor length (method 1) 27
   0.063541	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.063571	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 1b 00
   0.063601	[D3] HID descriptor length (method 2) 27
   0.063627	[D2] HID descriptor length 27
   0.066949	[D2] Report Descriptor size = 27
   0.066986	[D3] Report Descriptor: (27 bytes) => 06 00 ff 09 01 a1 01 09 02 15 00 26 ff 00
   0.067017	[D3]  75 08 95 08 81 82 09 02 95 08 91 82 c0
   0.067170	Using subdriver: Belkin/Liebert HID 0.19
   0.067198	[D1] 2 HID objects found
   0.067226	[D4] Entering libusb_get_report
   0.069698	nut_libusb_get_report: Success
   0.069739	[D1] Can't retrieve Report 00: Success
   0.069774	[D1] Path: ff000001.ff000002, Type: Input, ReportID: 0x00, Offset: 0, Size: 8
   0.069799	[D4] Entering libusb_get_report
   0.072446	nut_libusb_get_report: Success
   0.072477	[D1] Can't retrieve Report 00: Success
   0.072506	[D1] Path: ff000001.ff000002, Type: Output, ReportID: 0x00, Offset: 0, Size: 8
   0.072557	[D2] Report descriptor retrieved (Reportlen = 27)
   0.072583	[D2] Found HID device
   0.072612	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.072656	[D4] string_to_path: depth = 3
   0.072692	[D4] string_to_path: depth = 3
   0.072724	[D4] string_to_path: depth = 3
   0.072755	[D4] string_to_path: depth = 3
   0.072786	[D4] string_to_path: depth = 3
   0.072815	[D4] string_to_path: depth = 3
   0.072842	[D4] string_to_path: depth = 3
   0.072872	[D4] string_to_path: depth = 4
   0.072898	[D4] string_to_path: depth = 3
   0.072927	[D4] string_to_path: depth = 3
   0.072954	[D4] string_to_path: depth = 3
   0.072980	[D4] string_to_path: depth = 3
   0.073008	[D4] string_to_path: depth = 3
   0.073034	[D4] string_to_path: depth = 3
   0.073062	[D4] string_to_path: depth = 3
   0.073089	[D4] string_to_path: depth = 3
   0.073118	[D4] string_to_path: depth = 4
   0.073145	[D4] string_to_path: depth = 3
   0.073174	[D4] string_to_path: depth = 4
   0.073204	[D4] string_to_path: depth = 4
   0.073232	[D4] string_to_path: depth = 3
   0.073260	[D4] string_to_path: depth = 3
   0.073288	[D4] string_to_path: depth = 3
   0.073316	[D4] string_to_path: depth = 3
   0.073343	[D4] string_to_path: depth = 3
   0.073371	[D4] string_to_path: depth = 3
   0.073399	[D4] string_to_path: depth = 3
   0.073427	[D4] string_to_path: depth = 4
   0.073453	[D4] string_to_path: depth = 3
   0.073486	[D4] string_to_path: depth = 3
   0.073512	[D4] string_to_path: depth = 3
   0.073543	[D4] string_to_path: depth = 3
   0.073570	[D4] string_to_path: depth = 3
   0.073598	[D4] string_to_path: depth = 3
   0.073630	[D4] string_to_path: depth = 3
   0.073658	[D4] string_to_path: depth = 3
   0.073687	[D4] string_to_path: depth = 3
   0.073716	[D4] string_to_path: depth = 3
   0.073745	[D4] string_to_path: depth = 3
   0.073774	[D4] string_to_path: depth = 3
   0.073803	[D4] string_to_path: depth = 3
   0.073833	[D4] string_to_path: depth = 3
   0.073865	[D4] string_to_path: depth = 3
   0.073895	[D4] string_to_path: depth = 3
   0.073926	[D4] string_to_path: depth = 3
   0.073958	[D4] string_to_path: depth = 4
   0.073990	[D4] string_to_path: depth = 4
   0.074021	[D4] string_to_path: depth = 4
   0.074055	[D4] string_to_path: depth = 4
   0.074086	[D4] string_to_path: depth = 4
   0.074118	[D4] string_to_path: depth = 4
   0.074149	[D4] string_to_path: depth = 3
   0.074179	[D4] string_to_path: depth = 3
   0.074208	[D4] string_to_path: depth = 3
   0.074237	[D4] string_to_path: depth = 3
   0.074266	[D4] string_to_path: depth = 3
   0.074296	[D4] string_to_path: depth = 3
   0.074326	[D4] string_to_path: depth = 3
   0.074355	[D4] string_to_path: depth = 3
   0.074382	[D4] string_to_path: depth = 3
   0.074410	[D4] string_to_path: depth = 3
   0.074464	[D4] string_to_path: depth = 3
   0.074493	[D4] string_to_path: depth = 3
   0.074522	[D4] string_to_path: depth = 3
   0.074550	[D4] string_to_path: depth = 3
   0.074578	[D4] string_to_path: depth = 3
   0.074606	[D4] string_to_path: depth = 3
   0.074634	[D4] string_to_path: depth = 3
   0.074662	[D4] string_to_path: depth = 3
   0.074689	[D4] string_to_path: depth = 3
   0.074717	[D4] string_to_path: depth = 3
   0.074744	[D4] string_to_path: depth = 3
   0.074771	[D4] string_to_path: depth = 3
   0.074802	[D2] find_nut_info: unknown info type: load.off.delay
   0.074827	[D2] find_nut_info: unknown info type: load.on.delay
   0.074852	[D2] find_nut_info: unknown info type: load.off.delay
   0.074899	[D1] upsdrv_initinfo...
   0.074935	[D1] upsdrv_updateinfo...
   0.074961	[D1] Not using interrupt pipe...
   0.074987	[D1] Quick update...
   0.075038	Running as foreground process, not saving a PID file
   0.075075	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.075103	[D1] upsdrv_updateinfo...
   0.075127	[D1] Not using interrupt pipe...
   0.075152	[D1] Quick update...
   0.075184	[D1] upsdrv_updateinfo...
   0.075208	[D1] Not using interrupt pipe...
   0.075233	[D1] Quick update...
   0.075264	[D3] Entering dstate_dump
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.flag.pollonly: enabled
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.state: dumping
driver.version: 2.8.0-3567-g0d26c892a
driver.version.data: Belkin/Liebert HID 0.19
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OB
ups.vendorid: 10af
   0.075620	[D1] upsdrv_cleanup...

Unfortunately, still no extra UPS data.

@electroflame
Copy link

Interestingly, this log made me realize that this might be an HID index issue.

Here's lsusb:

Bus 001 Device 003: ID 10af:0002 Liebert Corp. PowerSure PST UPS
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x10af Liebert Corp.
  idProduct          0x0002 PowerSure PST UPS
  bcdDevice            0.02
  iManufacturer           3 Vertiv Co.
  iProduct                1 Liebert PSI5
  iSerial                 2 0000000000000000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      27
          Report Descriptor: (length is 27)
            Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
                            (null)
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x82 ] 130
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Volatile Bitfield
            Item(Local ): Usage, data= [ 0x02 ] 2
                            (null)
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Output, data= [ 0x82 ] 130
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Volatile Bitfield
            Item(Main  ): End Collection, data=none
      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               8
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     662
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               8
Device Status:     0x0003
  Self Powered
  Remote Wakeup Enabled

The second descriptor seems to be the one with Interrupt support, so I'm guessing that might actually be the UPS values.

I saw two issues #1840 and #2149 that might apply.

The log seems to imply that the driver is checking all of the HIDs, but I'm not sure -- maybe I'm getting bit by the multiple HID issue here?

@jimklimov
Copy link
Member

Interesting idea... There are some devices and drivers using a non-zero interface, etc. IIRC Arduino-based experiments were much of the recent context on this, and the different numbers became driver config fields (with no exposure yet via config files, I think). Maybe an id-based tweak could help in upsdrv_init() or similar... Can you experiment on that?

@electroflame
Copy link

Unfortunately I think this is about as far as I can take it. My experience with C is very, very limited, and a Raspberry Pi is super slow to work with. If this ends up as a config value I'll be glad to give it a test, but I don't think I can devote the time to noodling around in a language I'm not relatively confident in (especially as it's a driver connected to a powered device).

Thanks for the nudges so far, I appreciate it! I hope this gets worked out one day, but unfortunately I don't think I can be the one to do it.

@jimklimov jimklimov added the USB non-zero interface numbers Most UPSes serve USB interactions on interface 0 which is default. Recent "composite devices" differ label Mar 1, 2024
@jimklimov
Copy link
Member

Hello, can you please check if #2331 helps?

Follow https://github.com/networkupstools/nut/wiki/Building-NUT-for-in%E2%80%90place-upgrades-or-non%E2%80%90disruptive-tests with this branch for the build:

git clone https://github.com/jimklimov/nut -b issue-2149

@electroflame
Copy link

Sure, I've got a bit too much on my plate this week, but I can try and get this tested next week.

Any chance you can outline what flags you need me to use in the driver command?

@jimklimov
Copy link
Member

Similar to this, I guess: #1840 (comment)

@jimklimov
Copy link
Member

I've got a confirmation there, so maybe would just release this change once CI is happy with syntax nuances :D and then it would be part of NUT master branch builds (per Wiki).

@electroflame
Copy link

Ah, nice! I'll definitely try to get to this next week, whether it's on master or not.

@jimklimov jimklimov added this to the 2.8.2 milestone Mar 1, 2024
@jimklimov
Copy link
Member

Relevant PRs were merged to master by now, so "standard" text of https://github.com/networkupstools/nut/wiki/Building-NUT-for-in%E2%80%90place-upgrades-or-non%E2%80%90disruptive-tests would apply for testing.

@electroflame
Copy link

Just wanted to follow up on this. I recompiled from master and got these results:

nut-scanner

[nutdev-usb1]
	driver = "usbhid-ups"
	port = "auto"
	vendorid = "10AF"
	productid = "0002"
	product = "Liebert PSI5"
	serial = "0000000000000000"
	vendor = "Vertiv Co."
	# bus = "001"
	# device = "003"
	# busport = "003"

And running the actual driver:
usbhid-ups -s ups -DDDD -d1 -x port=auto -u root -x pollonly=enabled -x usb_hid_rep_index=1 -x usb_hid_desc_index=1

Network UPS Tools - Generic HID driver 0.52 (2.8.1-944-ga7e187350)
USB communication driver (libusb 1.0) 0.47
   0.000001	[D1] upsdrv_makevartable...
   0.000421	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000636	[D3] main_arg: var='port' val='auto'
   0.000890	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.001256	[D3] main_arg: var='pollonly' val='<null>'
   0.001468	[D3] main_arg: var='usb_hid_rep_index' val='1'
   0.001635	[D3] main_arg: var='usb_hid_desc_index' val='1'
   0.001742	[D1] Network UPS Tools version 2.8.1-944-ga7e187350 (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.001909	[D1] debug level is '4'
   0.003663	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.003861	[D1] upsdrv_initups (non-SHUT)...
   0.004589	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.47')
   0.022896	[D2] Checking device 1 of 4 (1D6B/0003)
   0.048581	[D1] nut_libusb_open: invalid libusb bus number 0
   0.049293	[D2] - VendorID: 1d6b
   0.049421	[D2] - ProductID: 0003
   0.049528	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.049630	[D2] - Product: xHCI Host Controller
   0.049716	[D2] - Serial Number: 0000:01:00.0
   0.049823	[D2] - Bus: 002
   0.049928	[D2] - Bus Port: unknown
   0.050022	[D2] - Device: 001
   0.050052	[D2] - Device release number: 0601
   0.050079	[D2] Trying to match device
   0.050112	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.050168	[D2] match_function_subdriver (non-SHUT mode): failed to match a subdriver to vendor and/or product ID
   0.050198	[D2] Device does not match - skipping
   0.050637	[D2] Checking device 2 of 4 (10AF/0002)
   0.058440	[D2] - VendorID: 10af
   0.058477	[D2] - ProductID: 0002
   0.058505	[D2] - Manufacturer: Vertiv Co.
   0.058533	[D2] - Product: Liebert PSI5
   0.058560	[D2] - Serial Number: 0000000000000000
   0.058587	[D2] - Bus: 001
   0.058653	[D2] - Bus Port: 003
   0.058743	[D2] - Device: 003
   0.058893	[D2] - Device release number: 0002
   0.058984	[D2] Trying to match device
   0.059031	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.059120	[D3] match_function_regex: matching a device...
   0.059153	[D2] Device matches
   0.059182	[D2] Reading configuration descriptor 1 of 1
   0.059259	[D3] libusb_kernel_driver_active() returned 1 (driver active)
   0.059458	[D2] successfully set kernel driver auto-detach flag
   0.065598	[D2] Claimed interface 1 successfully
   0.065663	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 1, 0)
   0.067486	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.067539	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 96 02
   0.067569	[D3] HID descriptor length (method 1) 662
   0.067622	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.068031	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 96 02
   0.068495	[D3] HID descriptor length (method 2) 662
   0.068864	[D2] HID descriptor length 662
   0.090789	[D2] Report Descriptor size = 662
   0.090869	[D3] Report Descriptor: (662 bytes) => 05 84 09 04 a1 01 09 24 a1 02 85 28 09 fe
   0.090917	[D3]  79 01 75 08 95 01 15 00 26 ff 00 b1 03 85 29 09 ff 79 02 b1 03 85 2b 09 fd
   0.090958	[D3]  79 03 b1 03 09 1a a1 02 85 30 09 40 67 21 d1 f0 00 55 07 b1 83 c0 85 11 09
   0.090999	[D3]  5a 75 08 15 01 25 03 65 00 55 00 b1 82 09 02 a1 02 85 32 75 01 95 07 15 00
   0.091039	[D3]  25 01 81 03 b1 03 09 62 95 01 b1 a2 09 62 81 a2 b1 01 81 01 09 69 b1 a2 09
   0.091078	[D3]  69 81 a2 95 06 b1 01 81 01 05 85 09 d0 95 01 81 a2 09 d0 b1 a2 81 01 b1 01
   0.091117	[D3]  95 06 09 42 09 46 09 44 09 45 09 47 09 4b 81 a2 09 42 09 46 09 44 09 45 09
   0.091572	[D3]  47 09 4b b1 a2 c0 85 2a 09 89 79 04 75 08 95 01 15 00 26 ff 00 b1 03 85 62
   0.091621	[D3]  09 8f 79 03 b1 03 85 33 09 2c b1 03 85 34 09 66 81 a2 09 66 b1 a2 85 37 09
   0.091659	[D3]  67 b1 03 85 36 09 83 b1 03 85 38 09 8c b1 a2 85 2c 09 8b b1 03 85 35 09 68
   0.091696	[D3]  75 10 27 ff ff 00 00 66 01 10 55 00 81 a2 09 68 b1 a2 c0 05 84 09 10 a1 02
   0.091733	[D3]  09 12 a1 02 85 04 09 40 67 21 d1 f0 00 55 07 b1 02 85 20 09 30 67 21 d1 f0
   0.091770	[D3]  00 55 01 b1 a2 09 02 a1 02 85 23 75 01 95 02 15 00 25 01 65 00 55 00 b1 01
   0.091807	[D3]  95 06 05 85 09 42 09 46 09 44 09 45 09 47 09 4b b1 82 c0 85 21 09 66 75 08
   0.091844	[D3]  95 01 25 64 b1 a2 85 10 05 84 09 58 25 06 b1 82 c0 c0 09 1e a1 00 85 01 09
   0.091880	[D3]  40 26 ff 00 67 21 d1 f0 00 55 07 b1 03 85 02 09 42 66 01 f0 55 00 b1 03 85
   0.091917	[D3]  03 09 43 75 10 27 ff ff 00 00 66 21 d1 55 07 b1 03 c0 09 16 a1 00 09 1a a1
   0.091956	[D3]  02 85 18 09 30 67 21 d1 f0 00 55 01 b1 82 85 19 09 32 66 01 f0 55 01 b1 82
   0.091993	[D3]  c0 09 1c a1 02 85 1b 09 30 67 21 d1 f0 00 55 01 b1 82 85 1c 09 32 66 01 f0
   0.092030	[D3]  55 01 b1 82 c0 09 02 a1 02 85 22 75 01 95 03 15 00 25 01 65 00 55 00 09 63
   0.092067	[D3]  09 6f 09 6e b1 82 95 01 b1 03 09 65 b1 82 09 6d b1 03 09 67 09 62 95 02 b1
   0.092104	[D3]  82 95 06 b1 03 95 01 09 72 b1 82 b1 01 c0 c0 09 18 a1 02 09 20 a1 02 85 15
   0.092142	[D3]  09 57 75 10 95 01 27 ff ff 00 00 66 01 10 55 00 b1 82 05 84 85 17 09 55 15
   0.092179	[D3]  00 27 ff ff 00 00 35 00 45 00 b1 82 85 1e 09 35 75 08 26 ff 00 65 00 b1 82
   0.092215	[D3]  06 ff ff 85 51 09 91 65 00 b1 82 c0 c0 06 ff ff 09 fe a1 02 75 08 95 01 15
   0.092271	[D3]  00 26 ff 00 85 0d 09 75 b1 03 85 0e 09 76 b1 03 85 0f 09 7c b1 82 85 43 09
   0.092312	[D3]  9c 75 08 26 ff 00 b1 82 85 6c 09 7d 75 10 27 ff ff 00 00 b1 03 c0 c0
   0.092818	Using subdriver: Belkin/Liebert HID 0.19
   0.092863	[D1] 68 HID objects found
   0.092898	[D4] Entering libusb_get_report
   0.095475	[D3] Report[get]: (2 bytes) => 28 01
   0.095527	[D1] Path: UPS.PowerSummary.iProduct, Type: Feature, ReportID: 0x28, Offset: 0, Size: 8, Value: 1
   0.095557	[D4] Entering libusb_get_report
   0.098222	[D3] Report[get]: (2 bytes) => 29 02
   0.098269	[D1] Path: UPS.PowerSummary.iSerialNumber, Type: Feature, ReportID: 0x29, Offset: 0, Size: 8, Value: 2
   0.098299	[D4] Entering libusb_get_report
   0.100984	[D3] Report[get]: (2 bytes) => 2b 03
   0.101038	[D1] Path: UPS.PowerSummary.iManufacturer, Type: Feature, ReportID: 0x2b, Offset: 0, Size: 8, Value: 3
   0.101068	[D4] Entering libusb_get_report
   0.103709	[D3] Report[get]: (2 bytes) => 30 78
   0.103761	[D1] Path: UPS.PowerSummary.Input.ConfigVoltage, Type: Feature, ReportID: 0x30, Offset: 0, Size: 8, Value: 120
   0.103792	[D4] Entering libusb_get_report
   0.106466	[D3] Report[get]: (2 bytes) => 11 02
   0.106510	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 2
   0.106541	[D4] Entering libusb_get_report
   0.109218	[D3] Report[get]: (4 bytes) => 32 00 00 19
   0.109266	[D1] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.109301	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109337	[D1] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Input, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.109371	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109405	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.109438	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109472	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.109504	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109540	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.109572	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109605	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.109638	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.109671	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.110018	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110057	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x32, Offset: 19, Size: 1, Value: 1
   0.110090	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110125	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.110157	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110191	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.110223	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110256	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x32, Offset: 22, Size: 1, Value: 0
   0.110287	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110321	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.110666	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110707	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.110741	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110777	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x32, Offset: 19, Size: 1, Value: 1
   0.110809	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110844	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.110876	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110911	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.110943	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.110977	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x32, Offset: 22, Size: 1, Value: 0
   0.111009	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.111043	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.111072	[D4] Entering libusb_get_report
   0.111959	[D3] Report[get]: (2 bytes) => 2a 04
   0.112003	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x2a, Offset: 0, Size: 8, Value: 4
   0.112033	[D4] Entering libusb_get_report
   0.114714	[D3] Report[get]: (2 bytes) => 62 03
   0.114761	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x62, Offset: 0, Size: 8, Value: 3
   0.114792	[D4] Entering libusb_get_report
   0.117457	[D3] Report[get]: (2 bytes) => 33 02
   0.117504	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x33, Offset: 0, Size: 8, Value: 2
   0.117535	[D4] Entering libusb_get_report
   0.120206	[D3] Report[get]: (2 bytes) => 34 64
   0.120294	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.120326	[D3] Report[buf]: (2 bytes) => 34 64
   0.120360	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.120389	[D4] Entering libusb_get_report
   0.122963	[D3] Report[get]: (2 bytes) => 37 64
   0.123009	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x37, Offset: 0, Size: 8, Value: 100
   0.123039	[D4] Entering libusb_get_report
   0.125706	[D3] Report[get]: (2 bytes) => 36 64
   0.125751	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x36, Offset: 0, Size: 8, Value: 100
   0.125781	[D4] Entering libusb_get_report
   0.128458	[D3] Report[get]: (2 bytes) => 38 14
   0.128501	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x38, Offset: 0, Size: 8, Value: 20
   0.128532	[D4] Entering libusb_get_report
   0.131214	[D3] Report[get]: (2 bytes) => 2c 01
   0.131256	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x2c, Offset: 0, Size: 8, Value: 1
   0.131285	[D4] Entering libusb_get_report
   0.134014	[D3] Report[get]: (3 bytes) => 35 38 13
   0.134085	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.134117	[D3] Report[buf]: (3 bytes) => 35 38 13
   0.134152	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.134181	[D4] Entering libusb_get_report
   0.137011	[D3] Report[get]: (3 bytes) => 04 18 00
   0.137117	[D1] Path: UPS.BatterySystem.Battery.ConfigVoltage, Type: Feature, ReportID: 0x04, Offset: 0, Size: 16, Value: 24
   0.137154	[D4] Entering libusb_get_report
   0.143865	[D3] Report[get]: (3 bytes) => 20 11 01
   0.144016	[D1] Path: UPS.BatterySystem.Battery.Voltage, Type: Feature, ReportID: 0x20, Offset: 0, Size: 16, Value: 0.000273
   0.144058	[D4] Entering libusb_get_report
   0.146509	[D3] Report[get]: (2 bytes) => 23 18
   0.146693	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x23, Offset: 2, Size: 1, Value: 0
   0.146735	[D3] Report[buf]: (2 bytes) => 23 18
   0.146774	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x23, Offset: 3, Size: 1, Value: 1
   0.146807	[D3] Report[buf]: (2 bytes) => 23 18
   0.146843	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.Charging, Type: Feature, ReportID: 0x23, Offset: 4, Size: 1, Value: 1
   0.146876	[D3] Report[buf]: (2 bytes) => 23 18
   0.146913	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.Discharging, Type: Feature, ReportID: 0x23, Offset: 5, Size: 1, Value: 0
   0.146945	[D3] Report[buf]: (2 bytes) => 23 18
   0.146980	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x23, Offset: 6, Size: 1, Value: 0
   0.147012	[D3] Report[buf]: (2 bytes) => 23 18
   0.147048	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x23, Offset: 7, Size: 1, Value: 0
   0.147079	[D4] Entering libusb_get_report
   0.149110	[D3] Report[get]: (2 bytes) => 21 64
   0.149206	[D1] Path: UPS.BatterySystem.Battery.RemainingCapacity, Type: Feature, ReportID: 0x21, Offset: 0, Size: 8, Value: 100
   0.149242	[D4] Entering libusb_get_report
   0.151806	[D3] Report[get]: (2 bytes) => 10 06
   0.151890	[D1] Path: UPS.BatterySystem.Battery.Test, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 6
   0.151925	[D4] Entering libusb_get_report
   0.154519	[D3] Report[get]: (2 bytes) => 01 78
   0.154589	[D1] Path: UPS.Flow.ConfigVoltage, Type: Feature, ReportID: 0x01, Offset: 0, Size: 8, Value: 120
   0.154620	[D4] Entering libusb_get_report
   0.157250	[D3] Report[get]: (2 bytes) => 02 3c
   0.157315	[D1] Path: UPS.Flow.ConfigFrequency, Type: Feature, ReportID: 0x02, Offset: 0, Size: 8, Value: 60
   0.157348	[D4] Entering libusb_get_report
   0.160000	[D3] Report[get]: (3 bytes) => 03 4c 04
   0.160061	[D1] Path: UPS.Flow.ConfigApparentPower, Type: Feature, ReportID: 0x03, Offset: 0, Size: 16, Value: 1100
   0.160094	[D4] Entering libusb_get_report
   0.162748	[D3] Report[get]: (3 bytes) => 18 bc 04
   0.162809	[D1] Path: UPS.PowerConverter.Input.Voltage, Type: Feature, ReportID: 0x18, Offset: 0, Size: 16, Value: 0.001212
   0.162838	[D4] Entering libusb_get_report
   0.165495	[D3] Report[get]: (3 bytes) => 19 58 02
   0.165556	[D1] Path: UPS.PowerConverter.Input.Frequency, Type: Feature, ReportID: 0x19, Offset: 0, Size: 16, Value: 6000
   0.165587	[D4] Entering libusb_get_report
   0.168268	[D3] Report[get]: (3 bytes) => 1b be 04
   0.168331	[D1] Path: UPS.PowerConverter.Output.Voltage, Type: Feature, ReportID: 0x1b, Offset: 0, Size: 16, Value: 0.001214
   0.168358	[D4] Entering libusb_get_report
   0.170996	[D3] Report[get]: (3 bytes) => 1c 58 02
   0.171061	[D1] Path: UPS.PowerConverter.Output.Frequency, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 6000
   0.171092	[D4] Entering libusb_get_report
   0.173715	[D3] Report[get]: (3 bytes) => 22 20 00
   0.173757	[D1] Path: UPS.PowerConverter.PresentStatus.VoltageOutOfRange, Type: Feature, ReportID: 0x22, Offset: 0, Size: 1, Value: 0
   0.173789	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.173820	[D1] Path: UPS.PowerConverter.PresentStatus.Buck, Type: Feature, ReportID: 0x22, Offset: 1, Size: 1, Value: 0
   0.173852	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.173885	[D1] Path: UPS.PowerConverter.PresentStatus.Boost, Type: Feature, ReportID: 0x22, Offset: 2, Size: 1, Value: 0
   0.173913	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.173944	[D1] Path: UPS.PowerConverter.PresentStatus.Overload, Type: Feature, ReportID: 0x22, Offset: 4, Size: 1, Value: 0
   0.173972	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.174005	[D1] Path: UPS.PowerConverter.PresentStatus.Used, Type: Feature, ReportID: 0x22, Offset: 5, Size: 1, Value: 1
   0.174034	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.174064	[D1] Path: UPS.PowerConverter.PresentStatus.OverTemperature, Type: Feature, ReportID: 0x22, Offset: 6, Size: 1, Value: 0
   0.174092	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.174122	[D1] Path: UPS.PowerConverter.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x22, Offset: 7, Size: 1, Value: 0
   0.174150	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.174180	[D1] Path: UPS.PowerConverter.PresentStatus.AwaitingPower, Type: Feature, ReportID: 0x22, Offset: 14, Size: 1, Value: 0
   0.174206	[D4] Entering libusb_get_report
   0.176458	[D3] Report[get]: (3 bytes) => 15 ff ff
   0.176500	[D1] Path: UPS.OutletSystem.Outlet.DelayBeforeShutdown, Type: Feature, ReportID: 0x15, Offset: 0, Size: 16, Value: 65535
   0.176530	[D4] Entering libusb_get_report
   0.179205	[D3] Report[get]: (3 bytes) => 17 ff ff
   0.179245	[D1] Path: UPS.OutletSystem.Outlet.DelayBeforeReboot, Type: Feature, ReportID: 0x17, Offset: 0, Size: 16, Value: 65535
   0.179274	[D4] Entering libusb_get_report
   0.181955	[D3] Report[get]: (2 bytes) => 1e 0b
   0.181994	[D1] Path: UPS.OutletSystem.Outlet.PercentLoad, Type: Feature, ReportID: 0x1e, Offset: 0, Size: 8, Value: 11
   0.182023	[D4] Entering libusb_get_report
   0.184712	[D3] Report[get]: (2 bytes) => 51 00
   0.184754	[D1] Path: UPS.OutletSystem.Outlet.ffff0091, Type: Feature, ReportID: 0x51, Offset: 0, Size: 8, Value: 0
   0.184784	[D4] Entering libusb_get_report
   0.187455	[D3] Report[get]: (2 bytes) => 0d 05
   0.187494	[D1] Path: UPS.ffff00fe.ffff0075, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 8, Value: 5
   0.187524	[D4] Entering libusb_get_report
   0.190205	[D3] Report[get]: (2 bytes) => 0e 05
   0.190244	[D1] Path: UPS.ffff00fe.ffff0076, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 5
   0.190273	[D4] Entering libusb_get_report
   0.192955	[D3] Report[get]: (2 bytes) => 0f 12
   0.192994	[D1] Path: UPS.ffff00fe.ffff007c, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 18
   0.193023	[D4] Entering libusb_get_report
   0.195705	[D3] Report[get]: (2 bytes) => 43 01
   0.195743	[D1] Path: UPS.ffff00fe.ffff009c, Type: Feature, ReportID: 0x43, Offset: 0, Size: 8, Value: 1
   0.195773	[D4] Entering libusb_get_report
   0.198456	[D3] Report[get]: (3 bytes) => 6c 01 80
   0.198495	[D1] Path: UPS.ffff00fe.ffff007d, Type: Feature, ReportID: 0x6c, Offset: 0, Size: 16, Value: 32769
   0.198561	[D2] Report descriptor retrieved (Reportlen = 662)
   0.198590	[D2] Found HID device
   0.198619	[D3] Using default, detected or customized USB HID numbers: usb_config_index=0 usb_hid_rep_index=1 usb_hid_desc_index=1 usb_hid_ep_in=1 usb_hid_ep_out=1
   0.198656	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.198710	[D4] string_to_path: depth = 3
   0.198757	[D4] string_to_path: depth = 3
   0.198796	[D4] string_to_path: depth = 3
   0.198832	[D3] Report[buf]: (2 bytes) => 38 14
   0.198864	[D2] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x38, Offset: 0, Size: 8, Value: 20
   0.198908	[D4] string_to_path: depth = 3
   0.198940	[D3] Report[buf]: (3 bytes) => 35 38 13
   0.198972	[D2] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.199017	[D4] string_to_path: depth = 3
   0.199049	[D3] Report[buf]: (2 bytes) => 2a 04
   0.199080	[D2] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x2a, Offset: 0, Size: 8, Value: 4
   0.202216	[D4] string_to_path: depth = 3
   0.202256	[D4] string_to_path: depth = 3
   0.202293	[D4] string_to_path: depth = 4
   0.202325	[D4] string_to_path: depth = 3
   0.202359	[D4] string_to_path: depth = 3
   0.202391	[D4] string_to_path: depth = 3
   0.202423	[D4] string_to_path: depth = 3
   0.202455	[D4] string_to_path: depth = 3
   0.202488	[D4] string_to_path: depth = 3
   0.202520	[D4] string_to_path: depth = 3
   0.202552	[D4] string_to_path: depth = 3
   0.202587	[D4] string_to_path: depth = 4
   0.202621	[D4] string_to_path: depth = 3
   0.202657	[D4] string_to_path: depth = 4
   0.202694	[D4] string_to_path: depth = 4
   0.202727	[D4] string_to_path: depth = 3
   0.202760	[D4] string_to_path: depth = 3
   0.202793	[D4] string_to_path: depth = 3
   0.202827	[D4] string_to_path: depth = 3
   0.202861	[D4] string_to_path: depth = 3
   0.202894	[D4] string_to_path: depth = 3
   0.202928	[D4] string_to_path: depth = 3
   0.202964	[D4] string_to_path: depth = 4
   0.202996	[D4] string_to_path: depth = 3
   0.203035	[D4] string_to_path: depth = 3
   0.203067	[D4] string_to_path: depth = 3
   0.203102	[D4] string_to_path: depth = 3
   0.203136	[D4] string_to_path: depth = 3
   0.203170	[D4] string_to_path: depth = 3
   0.203207	[D4] string_to_path: depth = 3
   0.203238	[D3] Report[buf]: (2 bytes) => 34 64
   0.203272	[D2] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.203313	[D4] string_to_path: depth = 3
   0.203347	[D4] string_to_path: depth = 3
   0.203381	[D4] string_to_path: depth = 3
   0.203416	[D4] string_to_path: depth = 3
   0.203450	[D4] string_to_path: depth = 3
   0.203485	[D4] string_to_path: depth = 3
   0.203521	[D4] string_to_path: depth = 3
   0.203558	[D4] string_to_path: depth = 3
   0.203595	[D4] string_to_path: depth = 3
   0.203632	[D4] string_to_path: depth = 3
   0.203669	[D4] string_to_path: depth = 4
   0.203703	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.203733	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.203772	[D4] string_to_path: depth = 4
   0.203804	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.203834	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.203871	[D4] string_to_path: depth = 4
   0.203903	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.203934	[D2] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.203973	[D4] string_to_path: depth = 4
   0.204006	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.204037	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.204074	[D4] string_to_path: depth = 4
   0.204108	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.204138	[D2] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.204175	[D4] string_to_path: depth = 4
   0.204207	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.204266	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.204304	[D4] string_to_path: depth = 3
   0.204340	[D4] string_to_path: depth = 3
   0.204375	[D4] string_to_path: depth = 3
   0.204410	[D4] string_to_path: depth = 3
   0.204445	[D4] string_to_path: depth = 3
   0.204479	[D4] string_to_path: depth = 3
   0.204514	[D4] string_to_path: depth = 3
   0.204548	[D4] string_to_path: depth = 3
   0.204582	[D4] string_to_path: depth = 3
   0.204615	[D4] string_to_path: depth = 3
   0.204647	[D4] string_to_path: depth = 3
   0.204680	[D4] string_to_path: depth = 3
   0.204713	[D4] string_to_path: depth = 3
   0.204748	[D4] string_to_path: depth = 3
   0.204781	[D4] string_to_path: depth = 3
   0.204814	[D4] string_to_path: depth = 3
   0.204848	[D4] string_to_path: depth = 3
   0.204881	[D4] string_to_path: depth = 3
   0.204913	[D4] string_to_path: depth = 3
   0.204948	[D4] string_to_path: depth = 3
   0.204982	[D4] string_to_path: depth = 3
   0.205016	[D4] string_to_path: depth = 3
   0.205051	[D2] find_nut_info: unknown info type: load.off.delay
   0.205081	[D2] find_nut_info: unknown info type: load.on.delay
   0.205111	[D2] find_nut_info: unknown info type: load.off.delay
   0.205158	[D1] upsdrv_initinfo...
   0.205200	[D1] upsdrv_updateinfo...
   0.205228	[D1] Not using interrupt pipe...
   0.205258	[D1] Quick update...
   0.205289	[D3] Report[buf]: (2 bytes) => 34 64
   0.205320	[D2] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.205356	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205386	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.205418	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205448	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.205478	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205509	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.205541	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205571	[D2] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.205602	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205632	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.205692	Running as foreground process, not saving a PID file
   0.205735	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.205768	[D1] upsdrv_updateinfo...
   0.205797	[D1] Not using interrupt pipe...
   0.205826	[D1] Quick update...
   0.205855	[D3] Report[buf]: (2 bytes) => 34 64
   0.205886	[D2] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.205919	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.205949	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.205981	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206012	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.206044	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206075	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.206107	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206138	[D2] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.206170	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206201	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.206239	[D1] upsdrv_updateinfo...
   0.206268	[D1] Not using interrupt pipe...
   0.206297	[D1] Quick update...
   0.206327	[D3] Report[buf]: (2 bytes) => 34 64
   0.206359	[D2] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.206394	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206425	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.206457	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206488	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.206520	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206550	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.206580	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206610	[D2] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.206641	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.206672	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.206709	[D3] Entering dstate_dump
battery.charge: 100
battery.charge.warning: 20
battery.runtime: 4920
battery.type: PbAc
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.flag.pollonly: enabled
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.parameter.usb_hid_desc_index: 1
driver.parameter.usb_hid_rep_index: 1
driver.state: dumping
driver.version: 2.8.1-944-ga7e187350
driver.version.data: Belkin/Liebert HID 0.19
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OL CHRG
ups.vendorid: 10af
   0.207205	[D1] upsdrv_cleanup...

Success! It looks like only the battery and status info is found (apcupsd gets the load status as well, so there may be room for improvement here).

For kicks I tried Phoenixtec/Liebert as well, and got a bit more data out of it (MGE reported similar data):

Network UPS Tools - Generic HID driver 0.52 (2.8.1-944-ga7e187350)
USB communication driver (libusb 1.0) 0.47
   0.000001	[D1] upsdrv_makevartable...
   0.000133	[D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
   0.000187	[D3] main_arg: var='port' val='auto'
   0.000236	[D1] Built-in default or configured user for drivers 'nut' was ignored due to 'root' specified on command line
   0.000274	[D3] main_arg: var='usb_hid_rep_index' val='1'
   0.000316	[D3] main_arg: var='usb_hid_desc_index' val='1'
   0.000358	[D3] main_arg: var='subdriver' val='Phoenixtec/Liebert'
   0.000407	[D3] main_arg: var='vendorid' val='10af'
   0.000448	[D3] main_arg: var='productid' val='0002'
   0.000490	[D1] Network UPS Tools version 2.8.1-944-ga7e187350 (release/snapshot of 2.8.1.1) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --includedir=/usr/include --mandir=/usr/share/man --infodir=/usr/share/info --sysconfdir=/etc/nut --localstatedir=/var --libexecdir=/usr/lib/nut --srcdir=. --enable-maintainer-mode --disable-silent-rules --libdir=/usr/lib/aarch64-linux-gnu --with-ssl --with-nss --with-cgi --with-dev --enable-static --with-statepath=/var/run/nut --with-altpidpath=/var/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/var/run/nut --datadir=/usr/share/nut --with-pkgconfig-dir=/usr/lib/aarch64-linux-gnu/pkgconfig --with-user=nut --with-group=nut --with-udev-dir=/lib/udev --with-systemdsystemunitdir=/lib/systemd/system
   0.000540	[D1] debug level is '4'
   0.001364	[D1] Succeeded to become_user(root): now UID=0 GID=0
   0.001421	[D1] upsdrv_initups (non-SHUT)...
   0.001458	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.47')
   0.018192	[D2] Checking device 1 of 4 (1D6B/0003)
   0.044181	[D1] nut_libusb_open: invalid libusb bus number 0
   0.044841	[D2] - VendorID: 1d6b
   0.044879	[D2] - ProductID: 0003
   0.044910	[D2] - Manufacturer: Linux 6.1.0-rpi7-rpi-v8 xhci-hcd
   0.044941	[D2] - Product: xHCI Host Controller
   0.044971	[D2] - Serial Number: 0000:01:00.0
   0.045002	[D2] - Bus: 002
   0.045035	[D2] - Bus Port: unknown
   0.045065	[D2] - Device: 001
   0.045096	[D2] - Device release number: 0601
   0.045126	[D2] Trying to match device
   0.045164	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.045201	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.045434	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.045632	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.045675	[D3] match_function_regex: matching a device...
   0.045732	[D2] match_function_regex: failed match of VendorID: 1d6b
   0.045765	[D2] Device does not match - skipping
   0.046164	[D2] Checking device 2 of 4 (10AF/0002)
   0.053158	[D2] - VendorID: 10af
   0.053196	[D2] - ProductID: 0002
   0.053227	[D2] - Manufacturer: Vertiv Co.
   0.053259	[D2] - Product: Liebert PSI5
   0.053289	[D2] - Serial Number: 0000000000000000
   0.053321	[D2] - Bus: 001
   0.053353	[D2] - Bus Port: 003
   0.053384	[D2] - Device: 003
   0.053415	[D2] - Device release number: 0002
   0.053444	[D2] Trying to match device
   0.053477	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.053513	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.053737	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.053944	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.053983	[D3] match_function_regex: matching a device...
   0.054068	[D2] Device matches
   0.054102	[D2] Reading configuration descriptor 1 of 1
   0.054161	[D3] libusb_kernel_driver_active() returned 0: Success
   0.054237	[D2] Claimed interface 1 successfully
   0.054274	[D3] nut_usb_set_altinterface: skipped libusb_set_interface_alt_setting(udev, 1, 0)
   0.056176	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.056225	[D3] HID descriptor, method 1: (9 bytes) => 09 21 10 01 00 01 22 96 02
   0.056259	[D3] HID descriptor length (method 1) 662
   0.056290	[D4] i=0, extra[i]=09, extra[i+1]=21
   0.056327	[D3] HID descriptor, method 2: (9 bytes) => 09 21 10 01 00 01 22 96 02
   0.056364	[D3] HID descriptor length (method 2) 662
   0.056396	[D2] HID descriptor length 662
   0.079456	[D2] Report Descriptor size = 662
   0.079519	[D3] Report Descriptor: (662 bytes) => 05 84 09 04 a1 01 09 24 a1 02 85 28 09 fe
   0.079565	[D3]  79 01 75 08 95 01 15 00 26 ff 00 b1 03 85 29 09 ff 79 02 b1 03 85 2b 09 fd
   0.079609	[D3]  79 03 b1 03 09 1a a1 02 85 30 09 40 67 21 d1 f0 00 55 07 b1 83 c0 85 11 09
   0.079653	[D3]  5a 75 08 15 01 25 03 65 00 55 00 b1 82 09 02 a1 02 85 32 75 01 95 07 15 00
   0.079697	[D3]  25 01 81 03 b1 03 09 62 95 01 b1 a2 09 62 81 a2 b1 01 81 01 09 69 b1 a2 09
   0.079741	[D3]  69 81 a2 95 06 b1 01 81 01 05 85 09 d0 95 01 81 a2 09 d0 b1 a2 81 01 b1 01
   0.079786	[D3]  95 06 09 42 09 46 09 44 09 45 09 47 09 4b 81 a2 09 42 09 46 09 44 09 45 09
   0.079854	[D3]  47 09 4b b1 a2 c0 85 2a 09 89 79 04 75 08 95 01 15 00 26 ff 00 b1 03 85 62
   0.079899	[D3]  09 8f 79 03 b1 03 85 33 09 2c b1 03 85 34 09 66 81 a2 09 66 b1 a2 85 37 09
   0.079945	[D3]  67 b1 03 85 36 09 83 b1 03 85 38 09 8c b1 a2 85 2c 09 8b b1 03 85 35 09 68
   0.079991	[D3]  75 10 27 ff ff 00 00 66 01 10 55 00 81 a2 09 68 b1 a2 c0 05 84 09 10 a1 02
   0.080036	[D3]  09 12 a1 02 85 04 09 40 67 21 d1 f0 00 55 07 b1 02 85 20 09 30 67 21 d1 f0
   0.080081	[D3]  00 55 01 b1 a2 09 02 a1 02 85 23 75 01 95 02 15 00 25 01 65 00 55 00 b1 01
   0.080124	[D3]  95 06 05 85 09 42 09 46 09 44 09 45 09 47 09 4b b1 82 c0 85 21 09 66 75 08
   0.080169	[D3]  95 01 25 64 b1 a2 85 10 05 84 09 58 25 06 b1 82 c0 c0 09 1e a1 00 85 01 09
   0.080212	[D3]  40 26 ff 00 67 21 d1 f0 00 55 07 b1 03 85 02 09 42 66 01 f0 55 00 b1 03 85
   0.080258	[D3]  03 09 43 75 10 27 ff ff 00 00 66 21 d1 55 07 b1 03 c0 09 16 a1 00 09 1a a1
   0.080301	[D3]  02 85 18 09 30 67 21 d1 f0 00 55 01 b1 82 85 19 09 32 66 01 f0 55 01 b1 82
   0.080345	[D3]  c0 09 1c a1 02 85 1b 09 30 67 21 d1 f0 00 55 01 b1 82 85 1c 09 32 66 01 f0
   0.080387	[D3]  55 01 b1 82 c0 09 02 a1 02 85 22 75 01 95 03 15 00 25 01 65 00 55 00 09 63
   0.080430	[D3]  09 6f 09 6e b1 82 95 01 b1 03 09 65 b1 82 09 6d b1 03 09 67 09 62 95 02 b1
   0.080474	[D3]  82 95 06 b1 03 95 01 09 72 b1 82 b1 01 c0 c0 09 18 a1 02 09 20 a1 02 85 15
   0.080518	[D3]  09 57 75 10 95 01 27 ff ff 00 00 66 01 10 55 00 b1 82 05 84 85 17 09 55 15
   0.080563	[D3]  00 27 ff ff 00 00 35 00 45 00 b1 82 85 1e 09 35 75 08 26 ff 00 65 00 b1 82
   0.080606	[D3]  06 ff ff 85 51 09 91 65 00 b1 82 c0 c0 06 ff ff 09 fe a1 02 75 08 95 01 15
   0.080650	[D3]  00 26 ff 00 85 0d 09 75 b1 03 85 0e 09 76 b1 03 85 0f 09 7c b1 82 85 43 09
   0.080694	[D3]  9c 75 08 26 ff 00 b1 82 85 6c 09 7d 75 10 27 ff ff 00 00 b1 03 c0 c0
   0.080991	[D2] match_function_subdriver_name: matching a subdriver by explicit name/regex: 'Phoenixtec/Liebert'...
   0.081034	[D2] match_function_subdriver_name: retry matching by regex 'as is'
   0.081247	[D2] match_function_subdriver_name: retry matching by regex with added '.*'
   0.081483	[D2] match_function_subdriver_name: found a match: Phoenixtec/Liebert HID 0.41
   0.081522	Using subdriver: Phoenixtec/Liebert HID 0.41
   0.081555	[D1] 68 HID objects found
   0.081593	[D4] Entering libusb_get_report
   0.084188	[D3] Report[get]: (2 bytes) => 28 01
   0.084237	[D1] Path: UPS.PowerSummary.iProduct, Type: Feature, ReportID: 0x28, Offset: 0, Size: 8, Value: 1
   0.084271	[D4] Entering libusb_get_report
   0.086922	[D3] Report[get]: (2 bytes) => 29 02
   0.086965	[D1] Path: UPS.PowerSummary.iSerialNumber, Type: Feature, ReportID: 0x29, Offset: 0, Size: 8, Value: 2
   0.086998	[D4] Entering libusb_get_report
   0.089750	[D3] Report[get]: (2 bytes) => 2b 03
   0.089795	[D1] Path: UPS.PowerSummary.iManufacturer, Type: Feature, ReportID: 0x2b, Offset: 0, Size: 8, Value: 3
   0.089828	[D4] Entering libusb_get_report
   0.092413	[D3] Report[get]: (2 bytes) => 30 78
   0.092458	[D1] Path: UPS.PowerSummary.Input.ConfigVoltage, Type: Feature, ReportID: 0x30, Offset: 0, Size: 8, Value: 120
   0.092488	[D4] Entering libusb_get_report
   0.095166	[D3] Report[get]: (2 bytes) => 11 02
   0.095204	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 2
   0.095233	[D4] Entering libusb_get_report
   0.097916	[D3] Report[get]: (4 bytes) => 32 00 00 19
   0.097954	[D1] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.097988	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098021	[D1] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Input, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.098052	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098085	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.098118	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098152	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.098184	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098219	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.098250	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098283	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.098315	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098348	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.098381	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098414	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x32, Offset: 19, Size: 1, Value: 1
   0.098446	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098479	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.098510	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098543	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.098572	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098604	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x32, Offset: 22, Size: 1, Value: 0
   0.098635	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098668	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.098698	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098732	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.098763	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098798	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x32, Offset: 19, Size: 1, Value: 1
   0.098829	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098861	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.098891	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098925	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.098957	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.098990	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x32, Offset: 22, Size: 1, Value: 0
   0.099021	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.099055	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x32, Offset: 23, Size: 1, Value: 0
   0.099084	[D4] Entering libusb_get_report
   0.100669	[D3] Report[get]: (2 bytes) => 2a 04
   0.100707	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x2a, Offset: 0, Size: 8, Value: 4
   0.100737	[D4] Entering libusb_get_report
   0.103416	[D3] Report[get]: (2 bytes) => 62 03
   0.103452	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x62, Offset: 0, Size: 8, Value: 3
   0.103480	[D4] Entering libusb_get_report
   0.106166	[D3] Report[get]: (2 bytes) => 33 02
   0.106202	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x33, Offset: 0, Size: 8, Value: 2
   0.106231	[D4] Entering libusb_get_report
   0.108917	[D3] Report[get]: (2 bytes) => 34 64
   0.108956	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.108986	[D3] Report[buf]: (2 bytes) => 34 64
   0.109019	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.109047	[D4] Entering libusb_get_report
   0.111666	[D3] Report[get]: (2 bytes) => 37 64
   0.111704	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x37, Offset: 0, Size: 8, Value: 100
   0.111733	[D4] Entering libusb_get_report
   0.114417	[D3] Report[get]: (2 bytes) => 36 64
   0.114455	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x36, Offset: 0, Size: 8, Value: 100
   0.114483	[D4] Entering libusb_get_report
   0.117168	[D3] Report[get]: (2 bytes) => 38 14
   0.117206	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x38, Offset: 0, Size: 8, Value: 20
   0.117234	[D4] Entering libusb_get_report
   0.119918	[D3] Report[get]: (2 bytes) => 2c 01
   0.119954	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x2c, Offset: 0, Size: 8, Value: 1
   0.119982	[D4] Entering libusb_get_report
   0.122668	[D3] Report[get]: (3 bytes) => 35 38 13
   0.122707	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.122737	[D3] Report[buf]: (3 bytes) => 35 38 13
   0.122771	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.122798	[D4] Entering libusb_get_report
   0.125418	[D3] Report[get]: (3 bytes) => 04 18 00
   0.125457	[D1] Path: UPS.BatterySystem.Battery.ConfigVoltage, Type: Feature, ReportID: 0x04, Offset: 0, Size: 16, Value: 24
   0.125486	[D4] Entering libusb_get_report
   0.128169	[D3] Report[get]: (3 bytes) => 20 11 01
   0.128209	[D1] Path: UPS.BatterySystem.Battery.Voltage, Type: Feature, ReportID: 0x20, Offset: 0, Size: 16, Value: 0.000273
   0.128238	[D4] Entering libusb_get_report
   0.130918	[D3] Report[get]: (2 bytes) => 23 18
   0.130956	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x23, Offset: 2, Size: 1, Value: 0
   0.130987	[D3] Report[buf]: (2 bytes) => 23 18
   0.131020	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x23, Offset: 3, Size: 1, Value: 1
   0.131050	[D3] Report[buf]: (2 bytes) => 23 18
   0.131083	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.Charging, Type: Feature, ReportID: 0x23, Offset: 4, Size: 1, Value: 1
   0.131114	[D3] Report[buf]: (2 bytes) => 23 18
   0.131147	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.Discharging, Type: Feature, ReportID: 0x23, Offset: 5, Size: 1, Value: 0
   0.131177	[D3] Report[buf]: (2 bytes) => 23 18
   0.131212	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x23, Offset: 6, Size: 1, Value: 0
   0.131242	[D3] Report[buf]: (2 bytes) => 23 18
   0.131276	[D1] Path: UPS.BatterySystem.Battery.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x23, Offset: 7, Size: 1, Value: 0
   0.131306	[D4] Entering libusb_get_report
   0.133669	[D3] Report[get]: (2 bytes) => 21 64
   0.133709	[D1] Path: UPS.BatterySystem.Battery.RemainingCapacity, Type: Feature, ReportID: 0x21, Offset: 0, Size: 8, Value: 100
   0.133739	[D4] Entering libusb_get_report
   0.136419	[D3] Report[get]: (2 bytes) => 10 06
   0.136456	[D1] Path: UPS.BatterySystem.Battery.Test, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 6
   0.136485	[D4] Entering libusb_get_report
   0.139169	[D3] Report[get]: (2 bytes) => 01 78
   0.139207	[D1] Path: UPS.Flow.ConfigVoltage, Type: Feature, ReportID: 0x01, Offset: 0, Size: 8, Value: 120
   0.139235	[D4] Entering libusb_get_report
   0.141919	[D3] Report[get]: (2 bytes) => 02 3c
   0.141957	[D1] Path: UPS.Flow.ConfigFrequency, Type: Feature, ReportID: 0x02, Offset: 0, Size: 8, Value: 60
   0.141985	[D4] Entering libusb_get_report
   0.144672	[D3] Report[get]: (3 bytes) => 03 4c 04
   0.144710	[D1] Path: UPS.Flow.ConfigApparentPower, Type: Feature, ReportID: 0x03, Offset: 0, Size: 16, Value: 1100
   0.144738	[D4] Entering libusb_get_report
   0.147421	[D3] Report[get]: (3 bytes) => 18 bd 04
   0.147460	[D1] Path: UPS.PowerConverter.Input.Voltage, Type: Feature, ReportID: 0x18, Offset: 0, Size: 16, Value: 0.001213
   0.147488	[D4] Entering libusb_get_report
   0.150171	[D3] Report[get]: (3 bytes) => 19 58 02
   0.150210	[D1] Path: UPS.PowerConverter.Input.Frequency, Type: Feature, ReportID: 0x19, Offset: 0, Size: 16, Value: 6000
   0.150238	[D4] Entering libusb_get_report
   0.152923	[D3] Report[get]: (3 bytes) => 1b bb 04
   0.152961	[D1] Path: UPS.PowerConverter.Output.Voltage, Type: Feature, ReportID: 0x1b, Offset: 0, Size: 16, Value: 0.001211
   0.152989	[D4] Entering libusb_get_report
   0.155671	[D3] Report[get]: (3 bytes) => 1c 58 02
   0.155709	[D1] Path: UPS.PowerConverter.Output.Frequency, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 6000
   0.155737	[D4] Entering libusb_get_report
   0.158441	[D3] Report[get]: (3 bytes) => 22 20 00
   0.158484	[D1] Path: UPS.PowerConverter.PresentStatus.VoltageOutOfRange, Type: Feature, ReportID: 0x22, Offset: 0, Size: 1, Value: 0
   0.158515	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158548	[D1] Path: UPS.PowerConverter.PresentStatus.Buck, Type: Feature, ReportID: 0x22, Offset: 1, Size: 1, Value: 0
   0.158578	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158610	[D1] Path: UPS.PowerConverter.PresentStatus.Boost, Type: Feature, ReportID: 0x22, Offset: 2, Size: 1, Value: 0
   0.158640	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158672	[D1] Path: UPS.PowerConverter.PresentStatus.Overload, Type: Feature, ReportID: 0x22, Offset: 4, Size: 1, Value: 0
   0.158703	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158737	[D1] Path: UPS.PowerConverter.PresentStatus.Used, Type: Feature, ReportID: 0x22, Offset: 5, Size: 1, Value: 1
   0.158766	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158802	[D1] Path: UPS.PowerConverter.PresentStatus.OverTemperature, Type: Feature, ReportID: 0x22, Offset: 6, Size: 1, Value: 0
   0.158834	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158867	[D1] Path: UPS.PowerConverter.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x22, Offset: 7, Size: 1, Value: 0
   0.158899	[D3] Report[buf]: (3 bytes) => 22 20 00
   0.158932	[D1] Path: UPS.PowerConverter.PresentStatus.AwaitingPower, Type: Feature, ReportID: 0x22, Offset: 14, Size: 1, Value: 0
   0.158961	[D4] Entering libusb_get_report
   0.161181	[D3] Report[get]: (3 bytes) => 15 ff ff
   0.161223	[D1] Path: UPS.OutletSystem.Outlet.DelayBeforeShutdown, Type: Feature, ReportID: 0x15, Offset: 0, Size: 16, Value: 65535
   0.161253	[D4] Entering libusb_get_report
   0.163924	[D3] Report[get]: (3 bytes) => 17 ff ff
   0.163964	[D1] Path: UPS.OutletSystem.Outlet.DelayBeforeReboot, Type: Feature, ReportID: 0x17, Offset: 0, Size: 16, Value: 65535
   0.163992	[D4] Entering libusb_get_report
   0.166674	[D3] Report[get]: (2 bytes) => 1e 0b
   0.166712	[D1] Path: UPS.OutletSystem.Outlet.PercentLoad, Type: Feature, ReportID: 0x1e, Offset: 0, Size: 8, Value: 11
   0.166740	[D4] Entering libusb_get_report
   0.169424	[D3] Report[get]: (2 bytes) => 51 00
   0.169462	[D1] Path: UPS.OutletSystem.Outlet.ffff0091, Type: Feature, ReportID: 0x51, Offset: 0, Size: 8, Value: 0
   0.169490	[D4] Entering libusb_get_report
   0.172175	[D3] Report[get]: (2 bytes) => 0d 05
   0.172213	[D1] Path: UPS.ffff00fe.ffff0075, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 8, Value: 5
   0.172241	[D4] Entering libusb_get_report
   0.174924	[D3] Report[get]: (2 bytes) => 0e 05
   0.174961	[D1] Path: UPS.ffff00fe.ffff0076, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 5
   0.174989	[D4] Entering libusb_get_report
   0.177675	[D3] Report[get]: (2 bytes) => 0f 12
   0.177714	[D1] Path: UPS.ffff00fe.ffff007c, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 18
   0.177742	[D4] Entering libusb_get_report
   0.180425	[D3] Report[get]: (2 bytes) => 43 01
   0.180462	[D1] Path: UPS.ffff00fe.ffff009c, Type: Feature, ReportID: 0x43, Offset: 0, Size: 8, Value: 1
   0.180490	[D4] Entering libusb_get_report
   0.183175	[D3] Report[get]: (3 bytes) => 6c 01 80
   0.183213	[D1] Path: UPS.ffff00fe.ffff007d, Type: Feature, ReportID: 0x6c, Offset: 0, Size: 16, Value: 32769
   0.183289	[D2] Report descriptor retrieved (Reportlen = 662)
   0.183319	[D2] Found HID device
   0.183348	[D3] Using default, detected or customized USB HID numbers: usb_config_index=0 usb_hid_rep_index=1 usb_hid_desc_index=1 usb_hid_ep_in=1 usb_hid_ep_out=1
   0.183386	[D1] Detected a UPS: Vertiv Co./Liebert PSI5
   0.183437	[D4] string_to_path: depth = 3
   0.183480	[D4] string_to_path: depth = 3
   0.183517	[D3] Report[buf]: (2 bytes) => 34 64
   0.183549	[D2] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x34, Offset: 0, Size: 8, Value: 100
   0.183592	[D4] string_to_path: depth = 3
   0.183624	[D3] Report[buf]: (2 bytes) => 37 64
   0.183655	[D2] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x37, Offset: 0, Size: 8, Value: 100
   0.183695	[D4] string_to_path: depth = 3
   0.183726	[D3] Report[buf]: (2 bytes) => 36 64
   0.183758	[D2] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x36, Offset: 0, Size: 8, Value: 100
   0.183822	[D4] string_to_path: depth = 3
   0.183857	[D3] Report[buf]: (3 bytes) => 35 38 13
   0.183888	[D2] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x35, Offset: 0, Size: 16, Value: 4920
   0.183930	[D4] string_to_path: depth = 3
   0.183963	[D3] Report[buf]: (2 bytes) => 2a 04
   0.183993	[D2] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x2a, Offset: 0, Size: 8, Value: 4
   0.186932	[D4] string_to_path: depth = 3
   0.186981	[D4] string_to_path: depth = 4
   0.187016	[D4] string_to_path: depth = 4
   0.187049	[D3] Report[buf]: (2 bytes) => 10 06
   0.187080	[D2] Path: UPS.BatterySystem.Battery.Test, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 6
   0.187120	[D4] string_to_path: depth = 3
   0.187152	[D3] Report[buf]: (2 bytes) => 11 02
   0.187181	[D2] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 2
   0.187219	[D4] string_to_path: depth = 4
   0.187252	[D3] Report[buf]: (3 bytes) => 1b bb 04
   0.187286	[D2] Path: UPS.PowerConverter.Output.Voltage, Type: Feature, ReportID: 0x1b, Offset: 0, Size: 16, Value: 0.001211
   0.187329	[D4] string_to_path: depth = 4
   0.187364	[D4] string_to_path: depth = 4
   0.187398	[D3] Report[buf]: (3 bytes) => 1c 58 02
   0.187428	[D2] Path: UPS.PowerConverter.Output.Frequency, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 6000
   0.187471	[D4] string_to_path: depth = 4
   0.187505	[D4] string_to_path: depth = 4
   0.187540	[D4] string_to_path: depth = 4
   0.187579	[D4] string_to_path: depth = 5
   0.187616	[D4] string_to_path: depth = 5
   0.187653	[D4] string_to_path: depth = 4
   0.187690	[D4] string_to_path: depth = 4
   0.187727	[D4] string_to_path: depth = 4
   0.187763	[D4] string_to_path: depth = 4
   0.187820	[D4] string_to_path: depth = 4
   0.187855	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.187889	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.187923	[D4] string_to_path: depth = 4
   0.187955	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.187987	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.188023	[D4] string_to_path: depth = 4
   0.188055	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.188083	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.188117	[D4] string_to_path: depth = 4
   0.188150	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.188181	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.188214	[D4] string_to_path: depth = 4
   0.188248	[D4] string_to_path: depth = 4
   0.188282	[D4] string_to_path: depth = 4
   0.188313	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.188343	[D2] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.188377	[D4] string_to_path: depth = 4
   0.188409	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.188438	[D2] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.188476	[D4] string_to_path: depth = 6
   0.188515	[D4] string_to_path: depth = 6
   0.188548	[D4] string_to_path: depth = 3
   0.188581	[D4] string_to_path: depth = 3
   0.188615	[D4] string_to_path: depth = 4
   0.188647	[D3] Report[buf]: (2 bytes) => 10 06
   0.188678	[D2] Path: UPS.BatterySystem.Battery.Test, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 6
   0.188707	[D3] Adding command 'test.battery.start' using Path 'UPS.BatterySystem.Battery.Test'
   0.188742	[D4] string_to_path: depth = 3
   0.188775	[D4] string_to_path: depth = 3
   0.188809	[D4] string_to_path: depth = 3
   0.188842	[D4] string_to_path: depth = 3
   0.188875	[D3] Report[buf]: (2 bytes) => 11 02
   0.188905	[D2] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 2
   0.188934	[D3] Adding command 'beeper.toggle' using Path 'UPS.PowerSummary.AudibleAlarmControl'
   0.188969	[D2] find_nut_info: unknown info type: load.off.delay
   0.188999	[D2] find_nut_info: unknown info type: load.on.delay
   0.189026	[D2] find_nut_info: unknown info type: load.off.delay
   0.189070	[D1] upsdrv_initinfo...
   0.189111	[D1] upsdrv_updateinfo...
   0.939723	[D2] nut_libusb_get_interrupt: Connection timed out
   0.939848	[D1] Got 0 HID objects...
   0.939904	[D1] Quick update...
   0.939964	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940017	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   0.940072	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940127	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   0.940181	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940231	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   0.940285	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940337	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   0.940388	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940438	[D2] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   0.940494	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   0.940546	[D2] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   0.940678	Running as foreground process, not saving a PID file
   0.940750	[D1] Driver initialization completed, beginning data dump (1 loops)
   0.940805	[D1] upsdrv_updateinfo...
   1.691435	[D2] nut_libusb_get_interrupt: Connection timed out
   1.691523	[D1] Got 0 HID objects...
   1.691578	[D1] Quick update...
   1.691632	[D4] Entering libusb_get_report
   1.693937	[D3] Report[get]: (4 bytes) => 32 00 00 19
   1.694004	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   1.694064	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   1.694118	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   1.694178	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   1.694234	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   1.694290	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   1.694345	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   1.694402	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   1.694457	[D2] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   1.694515	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   1.694570	[D2] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   1.694649	[D1] upsdrv_updateinfo...
   2.445235	[D2] nut_libusb_get_interrupt: Connection timed out
   2.445321	[D1] Got 0 HID objects...
   2.445373	[D1] Quick update...
   2.445436	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.445489	[D2] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x32, Offset: 16, Size: 1, Value: 1
   2.445543	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.445593	[D2] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x32, Offset: 18, Size: 1, Value: 0
   2.445645	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.445694	[D2] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x32, Offset: 20, Size: 1, Value: 1
   2.445749	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.445798	[D2] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x32, Offset: 21, Size: 1, Value: 0
   2.445852	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.445904	[D2] Path: UPS.PowerSummary.PresentStatus.InternalFailure, Type: Feature, ReportID: 0x32, Offset: 7, Size: 1, Value: 0
   2.445960	[D3] Report[buf]: (4 bytes) => 32 00 00 19
   2.446010	[D2] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x32, Offset: 9, Size: 1, Value: 0
   2.446082	[D3] Entering dstate_dump
battery.charge: 100
battery.runtime: 4920
battery.type: PbAc
device.mfr: Vertiv Co.
device.model: Liebert PSI5
device.serial: 0000000000000000
device.type: ups
driver.debug: 4
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.productid: 0002
driver.parameter.subdriver: Phoenixtec/Liebert
driver.parameter.synchronous: auto
driver.parameter.usb_hid_desc_index: 1
driver.parameter.usb_hid_rep_index: 1
driver.parameter.vendorid: 10af
driver.state: dumping
driver.version: 2.8.1-944-ga7e187350
driver.version.data: Phoenixtec/Liebert HID 0.41
driver.version.internal: 0.52
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
experimental.battery.capacity: 100
experimental.battery.capacity.nominal: 100
output.frequency: 6000.00
output.voltage: 0.0
ups.beeper.status: enabled
ups.mfr: Vertiv Co.
ups.model: Liebert PSI5
ups.productid: 0002
ups.serial: 0000000000000000
ups.status: OL CHRG
ups.test.result: No test initiated
ups.vendorid: 10af
   2.447106	[D1] upsdrv_cleanup...

So it might be possible to get more data out of it, but I don't know enough about NUT to interpret the logs fully.

Let me know if you want some more data, but otherwise the work you did seems to work like a charm -- thank you!

@jimklimov
Copy link
Member

Thanks! The output.frequency: 6000.00 looks off by a couple of orders of magnitude. Are you in USA or another country with 60Hz-based utility power network? (Probably a data conversion model-dependent tweak in the subdriver mapping table can take care of that).

With output.voltage: 0.0, I am not sure this subdriver does report more than the other one :-}

@electroflame
Copy link

I am in the US, so 60Hz should be correct.

The output voltage at zero is incorrect, I think (unless it's off by some decimals and its rounding down) as the machine I'm typing this on is on the UPS. Unless that's for battery output? The actual output load/current power draw should be around 6% of the unit's max power, looking at the UPS's display.

@jrjparks
Copy link
Contributor

jrjparks commented Mar 5, 2024

I was able to get the below with this change. I was very hacky with liebert_line_voltage_fun to get the right value for me, so will definitely need to be done better to merge in.

diff --git a/drivers/belkin-hid.c b/drivers/belkin-hid.c
index 686dc9261..21f3c9729 100644
--- a/drivers/belkin-hid.c
+++ b/drivers/belkin-hid.c
@@ -183,7 +183,11 @@ static const char *liebert_config_voltage_fun(double value)
 static const char *liebert_line_voltage_fun(double value)
 {
        if( value < 1 ) {
-               if( fabs(value - 1e-7) < 1e-9 ) {
+               if( fabs(value - 1e-3) < 1e-3 ) {
+                       liebert_line_voltage_mult = 1e5;
+                       upsdebugx(2, "Input/OutputVoltage = %g -> assuming correction factor = %g",
+                               value, liebert_line_voltage_mult);
+               } else if( fabs(value - 1e-7) < 1e-9 ) {
                        liebert_line_voltage_mult = 1e7;
                        upsdebugx(2, "Input/OutputVoltage = %g -> assuming correction factor = %g",
                                value, liebert_line_voltage_mult);
@@ -480,6 +484,17 @@ static hid_info_t belkin_hid2nut[] = {
   { "battery.voltage", 0, 0, "UPS.PowerSummary.Voltage", NULL, "%s", 0, liebert_line_voltage_info },
   { "battery.voltage.nominal", 0, 0, "UPS.PowerSummary.ConfigVoltage", NULL, "%s", HU_FLAG_STATIC, liebert_config_voltage_info },
   { "ups.load", 0, 0, "UPS.Output.PercentLoad", NULL, "%.0f", 0, NULL },
+  /* Liebert PSI5 */
+  { "input.voltage.nominal", 0, 0, "UPS.Flow.ConfigVoltage", NULL, "%.0f", 0, NULL },
+  { "input.frequency", 0, 0, "UPS.PowerConverter.Input.Frequency", NULL, "%s", 0, divide_by_100_conversion },
+  { "input.voltage", 0, 0, "UPS.PowerConverter.Input.Voltage", NULL, "%s", 0, liebert_line_voltage_info },
+  { "output.voltage.nominal", 0, 0, "UPS.Flow.ConfigVoltage", NULL, "%.0f", 0, NULL },
+  { "output.frequency", 0, 0, "UPS.PowerConverter.Output.Frequency", NULL, "%s", 0, divide_by_100_conversion },
+  { "output.voltage", 0, 0, "UPS.PowerConverter.Output.Voltage", NULL, "%s", 0, liebert_line_voltage_info },
+  { "ups.load", 0, 0, "UPS.OutletSystem.Outlet.PercentLoad", NULL, "%.0f", 0, NULL },
+  { "battery.voltage", 0, 0, "UPS.BatterySystem.Battery.Voltage", NULL, "%s", 0, liebert_line_voltage_info },
+  { "battery.voltage.nominal", 0, 0, "UPS.BatterySystem.Battery.ConfigVoltage", NULL, "%.0f", 0, NULL },
+  { "battery.capacity", 0, 0, "UPS.Flow.ConfigApparentPower", NULL, "%.0f", 0, NULL },
   /* status */
   { "BOOL", 0, 0, "UPS.PowerSummary.Discharging", NULL, NULL, HU_FLAG_QUICK_POLL, liebert_discharging_info }, /* might not need to be liebert_* version */
   { "BOOL", 0, 0, "UPS.PowerSummary.Charging", NULL, NULL, HU_FLAG_QUICK_POLL, liebert_charging_info },
diff --git a/drivers/usbhid-ups.c b/drivers/usbhid-ups.c
index 4775d38fe..6481092c6 100644
--- a/drivers/usbhid-ups.c
+++ b/drivers/usbhid-ups.c
@@ -553,6 +553,22 @@ info_lkp_t divide_by_10_conversion[] = {
        { 0, NULL, divide_by_10_conversion_fun, NULL }
 };
 
+/* returns statically allocated string - must not use it again before
+   done with result! */
+static const char *divide_by_100_conversion_fun(double value)
+{
+       static char buf[20];
+
+       snprintf(buf, sizeof(buf), "%0.1f", value * 0.01);
+
+       return buf;
+}
+
+/* FIXME? Do we need an inverse "nuf()" here? */
+info_lkp_t divide_by_100_conversion[] = {
+       { 0, NULL, divide_by_100_conversion_fun, NULL }
+};
+
 /* returns statically allocated string - must not use it again before
    done with result! */
 static const char *kelvin_celsius_conversion_fun(double value)
diff --git a/drivers/usbhid-ups.h b/drivers/usbhid-ups.h
index 2e8a3fced..8bc1f94f2 100644
--- a/drivers/usbhid-ups.h
+++ b/drivers/usbhid-ups.h
@@ -114,6 +114,7 @@ extern info_lkp_t date_conversion[];
 extern info_lkp_t hex_conversion[];
 extern info_lkp_t stringid_conversion[];
 extern info_lkp_t divide_by_10_conversion[];
+extern info_lkp_t divide_by_100_conversion[];
 extern info_lkp_t kelvin_celsius_conversion[];
 
 /* ---------------------------------------------------------------------- */

image

image

@jimklimov jimklimov reopened this Mar 5, 2024
@jimklimov
Copy link
Member

Thanks for the suggested fixes. Actually does not look as "bad" as you made believe :)

One thing that looks like it needs more attention is the ordering of if clauses in liebert_line_voltage_fun() so the bigger delta does not rule out processing of the smaller ones.

Also, for whatever reason the original code went with two orders of magnitude in the difference, e.g. if (fabs(value - 1e-7) < 1e-9) { liebert_line_voltage_mult = 1e7; ... } and yours goes if (fabs(value - 1e-3) < 1e-3) { liebert_line_voltage_mult = 1e5; ... }

I think this needs a bit more investigation in git blame comments for the commit history of this line/function (scrolling on Github should be helpful, easier than in command line) or some spec. Even (or especially) if the different approaches for the earlier handled devices and your new one are the correct way to go, a comment in code would be helpful so nobody "fixes" it as a loose thread in the world later :)

@jimklimov
Copy link
Member

@jrjparks : would you please care to open a pull request with this change (and revise my earlier comment, if it does make sense or not)?

@jrjparks
Copy link
Contributor

Yeah I can make one this weekend

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
impacts-release-2.8.1 Issues reported against NUT release 2.8.1 (maybe vanilla or with minor packaging tweaks) liebert USB non-zero interface numbers Most UPSes serve USB interactions on interface 0 which is default. Recent "composite devices" differ USB
Projects
Status: Todo
Development

Successfully merging a pull request may close this issue.

4 participants