USV PowerWalker Basic VI 650 SB#

Aka. my first USV. :D

Here’s a Github issue I created to give back to the community: networkupstools/nut#2777

Hardware Setup#

  • connect plugs

  • power on (blue LED)

  • connect USB

kernel: [  128.963322] usb 3-3.3: new full-speed USB device number 4 using xhci_hcd
kernel: [  129.080843] usb 3-3.3: New USB device found, idVendor=0764, idProduct=0601, bcdDevice= 2.00
kernel: [  129.081178] usb 3-3.3: New USB device strings: Mfr=3, Product=1, SerialNumber=2
kernel: [  129.081504] usb 3-3.3: Product: 650
kernel: [  129.081828] usb 3-3.3: Manufacturer: 1
kernel: [  129.082151] usb 3-3.3: SerialNumber: 000000000000
kernel: [  129.100441] hid: raw HID events driver (C) Jiri Kosina
kernel: [  129.106791] usbcore: registered new interface driver usbhid
kernel: [  129.107203] usbhid: USB HID core driver
kernel: [  129.112425] hid-generic 0003:0764:0601.0001: hiddev0,hidraw0: USB HID v1.11 Device [1  650 ] on usb-0000:00:14.0-3.3/input0

Monitoring with nut#

https://thomas-leister.de/powerwalker-ups-debian-stretch/

sed -i -e 's/^MODE=none/MODE=standalone/' /etc/nut/nut.conf

Check compatibility list: https://networkupstools.org/stable-hcl.html

The PowerWalker VI 650 SH is closest to my VI 650 SB.

So let’s grab the config

mv /etc/nut/ups.conf /etc/nut/ups.conf.bak

cat <<'EOF'> /etc/nut/ups.conf
[pw]
driver = usbhid-ups
desc = "PowerWalker VI 650 SB"
port = auto
ignorelb
override.battery.charge.warning = 30
override.battery.charge.low = 15
override.battery.runtime.low = 180
override.ups.model = "PowerWalker VI 650 SB"
EOF

Let’s have a look at the services

# journalctl --since '2h ago' -u nut-driver-enumerator.service
Jan 20 15:36:46 enterprise systemd[1]: Starting nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances...
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: Error reading the '/etc/nut/ups.conf' file or it does not declare any device configurations: nothing left after normalization
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: Error reading the list of systemd service instances for UPS drivers, or none are defined - before manipulations
Jan 20 15:36:46 enterprise nut-driver-enumerator[13311]: Error reading the '/etc/nut/ups.conf' file or it does not declare any device configurations: nothing left after normalization
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: Mon Jan 20 02:36:46 PM UTC 2025 : Detected changes in global section of '/etc/nut/ups.conf', will restart all drivers
Jan 20 15:36:46 enterprise nut-driver-enumerator[13326]: Error reading the '/etc/nut/ups.conf' file or it does not declare any device configurations: nothing left after normalization
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: OK
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: Error reading the list of systemd service instances for UPS drivers, or none are defined
Jan 20 15:36:46 enterprise nut-driver-enumerator[13287]: Mon Jan 20 02:36:46 PM UTC 2025 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Jan 20 15:36:46 enterprise systemd[1]: nut-driver-enumerator.service: Deactivated successfully.
Jan 20 15:36:46 enterprise systemd[1]: Finished nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances.
Jan 20 15:43:17 enterprise systemd[1]: Starting nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances...
Jan 20 15:43:17 enterprise nut-driver-enumerator[14771]: FATAL: The '/etc/nut/ups.conf' file does not exist or is not readable
Jan 20 15:43:17 enterprise systemd[1]: nut-driver-enumerator.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Jan 20 15:43:17 enterprise systemd[1]: nut-driver-enumerator.service: Failed with result 'exit-code'.
Jan 20 15:43:17 enterprise systemd[1]: Failed to start nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances.
Jan 20 15:43:20 enterprise systemd[1]: Starting nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances...
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: Error reading the list of systemd service instances for UPS drivers, or none are defined - before manipulations
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: Adding new systemd service instance for power device [pw]...
Jan 20 15:43:20 enterprise systemctl[14832]: Created symlink /etc/systemd/system/nut-driver.target.wants/nut-driver@pw.service → /lib/systemd/system/nut-driver@.service.
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: Enabled instance: 'nut-driver@pw' for NUT configuration section 'pw'
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: Adding 'Wants'+After dependency for 'pw' on 'systemd-udev.service systemd-udev-settle.service'...
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: OK
Jan 20 15:43:20 enterprise nut-driver-enumerator[14794]: OK
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: Started instance: 'nut-driver@pw' for NUT configuration section 'pw'
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: === The currently defined service instances are:
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: pw
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: === The currently defined configurations in '/etc/nut/ups.conf' are:
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: pw
Jan 20 15:43:21 enterprise nut-driver-enumerator[14794]: Mon Jan 20 02:43:21 PM UTC 2025 : OK: No more changes to reconcile between systemd service instances and device configurations in '/etc/nut/ups.conf'
Jan 20 15:43:21 enterprise systemd[1]: nut-driver-enumerator.service: Deactivated successfully.
Jan 20 15:43:21 enterprise systemd[1]: Finished nut-driver-enumerator.service - Network UPS Tools - enumeration of configure-file devices into systemd unit instances.

OK, so nut-driver-enumerator.service looked at /etc/nut/ups.conf and created nut-driver@pw.service.

# journalctl --since '2h ago' -u nut-driver@pw.service
Jan 20 15:43:21 enterprise systemd[1]: Starting nut-driver@pw.service - Network UPS Tools - device driver for NUT device 'pw'...
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: HIDParse: LogMax is less than LogMin. Vendor HID report descriptor may be incorrect; interpreting LogMax -1 as 65535 in ReportID: 0x0f
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: HIDParse: LogMax is less than LogMin. Vendor HID report descriptor may be incorrect; interpreting LogMax -1 as 255 in ReportID: 0x12
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: HIDParse: LogMax is less than LogMin. Vendor HID report descriptor may be incorrect; interpreting LogMax -1 as 255 in ReportID: 0x13
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: Using subdriver: CyberPower HID 0.6
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: Network UPS Tools - Generic HID driver 0.47 (2.8.0)
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: USB communication driver (libusb 1.0) 0.43
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: using 'battery.charge' to set battery low state
Jan 20 15:43:22 enterprise nut-driver@pw[14968]: using 'battery.runtime' to set battery low state
Jan 20 15:43:22 enterprise usbhid-ups[14968]: using 'battery.charge' to set battery low state
Jan 20 15:43:22 enterprise usbhid-ups[14968]: using 'battery.runtime' to set battery low state
Jan 20 15:43:22 enterprise usbhid-ups[14974]: Startup successful
Jan 20 15:43:22 enterprise nut-driver@pw[14967]: Network UPS Tools - UPS driver controller 2.8.0
Jan 20 15:43:22 enterprise systemd[1]: Started nut-driver@pw.service - Network UPS Tools - device driver for NUT device 'pw'.

Restart the server

# journalctl --since '2h ago' -u nut-server.service
Jan 20 15:36:44 enterprise systemd[1]: Started nut-server.service - Network UPS Tools - power devices information server.
Jan 20 15:36:44 enterprise nut-server[13180]: upsd disabled, please adjust the configuration to your needs
Jan 20 15:36:44 enterprise nut-server[13180]: Then set MODE to a suitable value in /etc/nut/nut.conf to enable it
Jan 20 15:36:44 enterprise systemd[1]: nut-server.service: Deactivated successfully.

# systemctl restart nut-server.service

# journalctl --since '2h ago' -u nut-server.service
Jan 20 15:48:25 enterprise systemd[1]: Started nut-server.service - Network UPS Tools - power devices information server.
Jan 20 15:48:25 enterprise nut-server[16256]: fopen /run/nut/upsd.pid: No such file or directory
Jan 20 15:48:25 enterprise nut-server[16256]: Could not find PID file '/run/nut/upsd.pid' to see if previous upsd instance is already running!
Jan 20 15:48:25 enterprise nut-server[16256]: listening on 127.0.0.1 port 3493
Jan 20 15:48:25 enterprise nut-server[16256]: listening on ::1 port 3493
Jan 20 15:48:25 enterprise upsd[16256]: listening on 127.0.0.1 port 3493
Jan 20 15:48:25 enterprise upsd[16256]: listening on ::1 port 3493
Jan 20 15:48:25 enterprise nut-server[16256]: Connected to UPS [pw]: usbhid-ups-pw
Jan 20 15:48:25 enterprise upsd[16256]: Connected to UPS [pw]: usbhid-ups-pw
Jan 20 15:48:25 enterprise upsd[16256]: Running as foreground process, not saving a PID file
Jan 20 15:48:25 enterprise nut-server[16256]: Running as foreground process, not saving a PID file

Test commands based on networkupstools/nut#483

# upsc pw
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 15
battery.charge.warning: 30
battery.mfr.date: 1
battery.runtime: 1260
battery.runtime.low: 180
battery.type: PbAcid
battery.voltage: 13.6
battery.voltage.nominal: 12
device.mfr: 1
device.model: PowerWalker VI 650 SB
device.serial: 000000000000
device.type: ups
driver.flag.ignorelb: enabled
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.version: 2.8.0
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.frequency: 50.0
input.transfer.high: 290
input.transfer.low: 162
input.voltage: 227.0
input.voltage.nominal: 0
output.frequency: 50.0
output.voltage: 22.2
ups.beeper.status: disabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 14
ups.mfr: 1
ups.model: PowerWalker VI 650 SB
ups.productid: 0601
ups.realpower.nominal: 360
ups.serial: 000000000000
ups.status: OL
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764
# upscmd -l pw
Instant commands supported on UPS [pw]:

beeper.disable - Disable the UPS beeper
beeper.enable - Enable the UPS beeper
beeper.mute - Temporarily mute the UPS beeper
beeper.off - Obsolete (use beeper.disable or beeper.mute)
beeper.on - Obsolete (use beeper.enable)
load.off - Turn off the load immediately
load.off.delay - Turn off the load with a delay (seconds)
load.on - Turn on the load immediately
load.on.delay - Turn on the load with a delay (seconds)
shutdown.return - Turn off the load and return when power is back
shutdown.stayoff - Turn off the load and remain off
shutdown.stop - Stop a shutdown in progress
test.battery.start.deep - Start a deep battery test
test.battery.start.quick - Start a quick battery test
test.battery.stop - Stop the battery test
# upsrw pw
[input.transfer.high]
High voltage transfer point (V)
Type: STRING
Maximum length: 10
Value: 290

[input.transfer.low]
Low voltage transfer point (V)
Type: STRING
Maximum length: 10
Value: 162

[ups.delay.shutdown]
Interval to wait after shutdown with delay command (seconds)
Type: STRING
Maximum length: 10
Value: 20

[ups.delay.start]
Interval to wait before (re)starting the load (seconds)
Type: STRING
Maximum length: 10
Value: 30