-
-
Notifications
You must be signed in to change notification settings - Fork 420
Description
On an APC SMT1500C device using the rtu_usb version of libmodbus and a USB cable, reads fail with a timeout.
Since support for USB based APC Modbus is not mainlined, I am building the required RTU_USB version of libmodbus and compiling the main branch of NUT with usb and modbus support per the https://github.com/networkupstools/nut/wiki/APC-UPS-with-Modbus-protocol wiki page. The build appears to be successful but I am not able to at get the apc_modbus driver to communicate with the UPS.
I have attached build logs and included the apc_modbus output below. I have tested the connection using APC's PowerChute program (on a different system) and PowerChute is able to collect all of the ModBus only fields (like load and temperatures, etc). So I am fairly confident it is not a physical connection issue. Also when using the standard Debian bookworm build of NUT I am able to reliably communicate using the usbhid-ups driver but as it only provides a few fields, the Modbus driver is prefered.
Any pointers would be appreciated but I am not sure where to go from here.
NUT configuration indicating the new RTU USB features are included in the NUT build
checking for libmodbus version via pkg-config... 3.1.10 found
checking for libmodbus cflags... -I/usr/include/modbus
checking for libmodbus ldflags... -lmodbus
checking for modbus.h... yes
checking for modbus_new_rtu... yes
checking for modbus_new_tcp... yes
checking for modbus_set_byte_timeout... yes
checking for modbus_set_response_timeout... yes
checking for modbus_new_rtu_usb... yes
checking types of arguments for modbus_set_byte_timeout... sec_usec_uint32_cast_timeval_fields
Found types to use for modbus_set_byte_timeout: sec_usec_uint32_cast_timeval_fields
Using apc_modbus to probe the unit this is the output:
$ sudo ./apc_modbus -DDDDDD -s ups -x port=auto
0.000001 [D5] send_to_all: SETINFO driver.state "init.starting"
Network UPS Tools driver 2.8.2.989-989-g4bf05e115 (development iteration after 2.8.2) - NUT APC Modbus driver 0.10
0.000408 [D5] send_to_all: SETINFO driver.version.usb "libusb-1.0.26 (API: 0x1000109)"
0.000447 [D1] Using USB implementation: libusb-1.0.26 (API: 0x1000109)
0.000504 [D3] main_arg: var='port' val='auto'
0.000533 [D6] testinfo_reloadable: var=port, infoname=driver.parameter.port, newval=auto, reloadable=0, reload_flag=0
0.000561 [D6] testinfo_reloadable: verdict for (re)loading var=port value: 1
0.000604 [D5] send_to_all: SETINFO driver.parameter.port "auto"
0.000624 [D1] Network UPS Tools version 2.8.2.989-989-g4bf05e115 (development iteration after 2.8.2) built with gcc (Debian 12.2.0-14) 12.2.0 and configured with flags: --prefix=/usr --with-doc=no --with-drivers=apc_modbus,usbhid-ups --with-usb --with-modbus --sysconfdir=/etc/nut --includedir=/usr/include --mandir=/usr/share/man --libdir=/usr/lib/aarch64-linux-gnu --libexecdir=/usr/libexec --with-ssl --with-nss --with-cgi --with-dev --with-statepath=/run/nut --with-altpidpath=/run/nut --with-drvpath=/lib/nut --with-cgipath=/usr/lib/cgi-bin/nut --with-htmlpath=/usr/share/nut/www --with-pidpath=/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 --with-systemdshutdowndir=/lib/systemd/system-shutdown --with-systemdtmpfilesdir=/usr/lib/tmpfiles.d
0.000695 [D1] debug level is '6'
0.000724 [D5] send_to_all: SETINFO driver.debug "6"
0.000754 [D5] send_to_all: SETFLAGS driver.debug RW NUMBER
0.001755 [D1] Succeeded to become_user(nut): now UID=106 GID=112
0.001830 [D1] Signalling UPS [ups]: driver.exit (quietly, no fuss if no driver is running or responding)
0.001900 Can't open /run/nut/apc_modbus-ups: No such file or directory
0.001938 [D1] Request for other driver to exit returned code -1
0.001967 [D1] Socket dialog with the other driver instance (may be absent) failed: No such file or directory
0.002003 [D5] send_to_all: SETINFO device.type "ups"
0.002034 [D5] send_to_all: SETINFO driver.state "init.device"
Number of USB devices: 5
Considering device #0 (051d:0003)
0.047244 [D2] _apc_modbus_usb_callback: Matched American Power Conversion Smart-UPS_1500 FW:UPS 15.5 / ID=1015 (USB VID/PID 051d:0003)
0.047332 [D2] _apc_modbus_usb_callback: Checking American Power Conversion Smart-UPS_1500 FW:UPS 15.5 / ID=1015 (USB VID/PID 051d:0003) report descriptors
0.048073 [D1] _apc_modbus_usb_callback: Found report ids RX=0x90 TX=0x89
0.048160 [D5] send_to_all: SETINFO ups.vendorid "051d"
0.048223 [D5] send_to_all: SETINFO ups.productid "0003"
Found Device 0 (Path 1-1.1.2):
Vendor ID: 0x051d
Product ID: 0x0003
Bytes flushed (0)
0.058556 [D5] send_to_all: SETINFO driver.state "init.quiet"
0.058602 [D5] send_to_all: SETINFO driver.version "2.8.2.989-989-g4bf05e115"
0.058623 [D5] send_to_all: SETINFO driver.version.internal "0.10"
0.058645 [D5] send_to_all: SETINFO driver.name "apc_modbus"
0.058663 [D5] send_to_all: SETINFO driver.state "init.info"
[01][03][02][04][00][78]
Waiting for a confirmation...
ERROR Connection timed out: select
0.567189 _apc_modbus_read_registers: Read of 516:636 failed: Connection timed out (auto)
Bytes flushed (0)
1.577519 Can't read inventory information from the UPS
1.577610 [D5] send_to_all: SETINFO driver.state "cleanup.upsdrv"
1.578214 [D5] send_to_all: SETINFO driver.state "cleanup.exit"
1.578280 upsnotify: notify about state 4 with libsystemd: was requested, but not running as a service unit now, will not spam more about it
1.578310 upsnotify: failed to notify about state 4: no notification tech defined, will not spam more about it
Host Details
* Hardware: Raspberry Pi 3B+
* OS: Raspberry Pi OS Lite (64-bit)
* Kernel version: 6.6
* Debian version: 12 (bookworm)
* uname: Linux rpi 6.6.31+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux
ups.conf
[ups]
driver = "apc_modbus"
port = "auto"
upsd.conf
LISTEN 0.0.0.0 3493
nut.conf
MODE=netserver
Metadata
Metadata
Assignees
Labels
Type
Projects
Status