[Nut-upsdev] [Nut-upsuser] APC Modbus support is finally here!

Jim Klimov jimklimov+nut at gmail.com
Mon Nov 27 14:30:27 GMT 2023


Thanks again,

  Great to see confirmations of more and more things working!

> I wonder what's the fastest method to test the function (previously I
setup the ups and unplug the utility from the ups for testing).
> is "upsrw driver.flag.allow_killpower=1" then "upscmd driver.killpower"
the correct testing procedure?

At least by intent of this new feature -- yes. Normally the drivers are not
allowed to pass these dangerous commands unless started specifically for
killpower handling late in the system shutdown. Since NUT v2.8.1 however
there's this safety switch to toggle and then an instant command should be
usable. But as this is a relatively recent addition to the codebase and it
is not integrated with practical shutdowns in any packages yet (AFAIK) to
avoid killing a driver daemon to restart it as the driver tool just for the
killpower command, it has not seen much real-life testing -- so it is
possible that some bugs lurk here too.

Regarding shutdowns triggered due to calibration - the `CAL` state should
be specially handled with regard to `OB`/`LB` in `upsmon` since recently.
However this driver seems to use `TEST` here? Raised a question in
https://github.com/networkupstools/nut/pull/2184 discussion (also
referenced your replies there). Actually, now I wonder (did not test) how
`upsmon` interacts with `upssched` in case of calibrations, if this is
suppressed or not...

Jim




On Mon, Nov 27, 2023 at 1:50 PM d tbsky <tbskyd at gmail.com> wrote:

> Jim Klimov <jimklimov+nut at gmail.com>
> >
> > I believe some fixes were applied to the branch since your report (most
> visibly, about battery time settings), are you in position to test how it
> behaves now? :)
>
> Hi:
>    I got another ups for testing. so I test the new commit for both
> APC SRT3000XL and SMT2200RM2U. the results below:
>
> 1. I get the new attribute "ups.test.result" for both ups and it is fine.
>
> 2. upsrw battery.date works fine for both UPS. and the modified result
> shows immediately. no need to restart the driver. (I still need to
> restart the driver to get correct battery.date.maintenance. but I
> think that's not very important. there's not even that attribute at
> apcupsd.)
>
> 3. test.battery.stop works fine at SRT3000XL. but it is not working at
> SMT2200RM2U (same experience as the driver author). I think it is not
> important. BTW, at program "apctest" from apcupsd, the function
> "test.battery.start" is called "self test", and the physical ups panel
> also shows "self test". the function "test.panel.start" is called
> "alarm test" at apctest. what bothers me is when testing, the ups
> status will become "OB TEST". "OB" will cause the system shutdown when
> I configured upssched for early shutdown. I had only saw one very old
> APC ups which will show "OB" when testing/calibration. most will show
> like "OL DISCHRG". but I think the information is from ups and can not
> change?
>
> 4. almost all the power-related upscmd command(load.* outlet.*
> shutdown.*) are not working. there is only one exception: ouetlet1.*
> works at SMT2200RM2U (I test outlet.1.load.off). nothing works at
> SRT3000XL. the new driver detect there are two outlet groups for both
> UPS(outlet.group.count: 2). but SMT2200RM2U has only one outlet group.
> since the new driver can not shutdown the ups, I wonder what's the
> fastest method to test the function (previously I setup the ups and
> unplug the utility from the ups for testing). is "upsrw
> driver.flag.allow_killpower=1" then "upscmd driver.killpower" the
> correct testing procedure?
>
> 5. the default/actual shutdown delay for both ups is 90 seconds(when
> real testing under apcupsd). the "upsrw -l myups" has value "90" for
> the attribute "outlet.group.1.delay.shutdown". but other attributes
> related to the shutdown delay are all "0". BTW, apcupsd also shows "0"
> shutdown delay although it can correctly shutdown ups.
>
> below are the raw data for SMT2200RM2U:
>
> >upsc myups
> battery.charge: 100.00
> battery.date: 2023-11-25
> battery.date.maintenance: 2028-05-25
> battery.runtime: 22320
> battery.temperature: 24.69
> battery.voltage: 54.53
> device.mfr: American Power Conversion
> device.model: Smart-UPS 2200
> device.serial: AS1848260180
> device.type: ups
> driver.debug: 0
> driver.flag.allow_killpower: 0
> driver.name: apc_modbus
> driver.parameter.pollinterval: 10
> driver.parameter.port: /dev/ttyS0
> driver.parameter.synchronous: yes
> driver.state: quiet
> driver.version: 2.8.1.1
> driver.version.internal: 0.10
> experimental.output.energy: 0
> input.transfer.high: 127
> input.transfer.low: 106
> input.transfer.reason: AcceptableInput
> input.voltage: 109.39
> outlet.group.0.delay.reboot: 8
> outlet.group.0.delay.shutdown: 0
> outlet.group.0.delay.start: 0
> outlet.group.0.name: UPS Outlets
> outlet.group.1.delay.reboot: 8
> outlet.group.1.delay.shutdown: 90
> outlet.group.1.delay.start: 0
> outlet.group.1.name: Outlet Group 1
> outlet.group.2.delay.reboot: -1
> outlet.group.2.delay.shutdown: -1
> outlet.group.2.delay.start: -1
> outlet.group.2.name:
> outlet.group.3.delay.reboot: -1
> outlet.group.3.delay.shutdown: -1
> outlet.group.3.delay.start: -1
> outlet.group.3.name:
> outlet.group.count: 2
> output.current: 0.00
> output.frequency: 59.95
> output.voltage: 109.39
> ups.delay.reboot: 8
> ups.delay.shutdown: 0
> ups.delay.start: 0
> ups.efficiency: LoadTooLow
> ups.firmware: UPS 15.0
> ups.id: APCUPS
> ups.load: 0.00
> ups.mfr: American Power Conversion
> ups.mfr.date: 2018-11-26
> ups.model: Smart-UPS 2200
> ups.power: 0.00
> ups.power.nominal: 2200
> ups.realpower: 0.00
> ups.realpower.nominal: 1980
> ups.serial: AS1848260180
> ups.status: OL HE
> ups.test.result: Passed, Source: Protocol
> ups.timer.reboot: -1
> ups.timer.shutdown: -1
> ups.timer.start: -1
>
> >upsrw -l myups
> [battery.date]
> Battery change date
> Type: NUMBER
> Value: 2023-11-25
>
> [driver.debug]
> Current debug verbosity level of the driver program
> Type: NUMBER
> Value: 0
>
> [driver.flag.allow_killpower]
> Safety flip-switch to allow the driver daemon to send UPS shutdown
> command (accessible via driver.killpower)
> Type: NUMBER
> Value: 0
>
> [input.transfer.high]
> High voltage transfer point (V)
> Type: NUMBER
> Value: 127
>
> [input.transfer.low]
> Low voltage transfer point (V)
> Type: NUMBER
> Value: 106
>
> [outlet.group.0.delay.reboot]
> Description unavailable
> Type: NUMBER
> Value: 8
>
> [outlet.group.0.delay.shutdown]
> Description unavailable
> Type: NUMBER
> Value: 0
>
> [outlet.group.0.delay.start]
> Description unavailable
> Type: NUMBER
> Value: 0
>
> [outlet.group.0.name]
> Description unavailable
> Type: STRING
> Maximum length: 16
> Value: UPS Outlets
>
> [outlet.group.1.delay.reboot]
> Description unavailable
> Type: NUMBER
> Value: 8
>
> [outlet.group.1.delay.shutdown]
> Description unavailable
> Type: NUMBER
> Value: 90
>
> [outlet.group.1.delay.start]
> Description unavailable
> Type: NUMBER
> Value: 0
>
> [outlet.group.1.name]
> Description unavailable
> Type: STRING
> Maximum length: 16
> Value: Outlet Group 1
>
> [outlet.group.2.delay.reboot]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.2.delay.shutdown]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.2.delay.start]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.2.name]
> Description unavailable
> Type: STRING
> Maximum length: 16
> Value:
>
> [outlet.group.3.delay.reboot]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.3.delay.shutdown]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.3.delay.start]
> Description unavailable
> Type: NUMBER
> Value: -1
>
> [outlet.group.3.name]
> Description unavailable
> Type: STRING
> Maximum length: 16
> Value:
>
> [ups.delay.reboot]
> Interval to wait before rebooting the UPS (seconds)
> Type: NUMBER
> Value: 8
>
> [ups.delay.shutdown]
> Interval to wait after shutdown with delay command (seconds)
> Type: NUMBER
> Value: 0
>
> [ups.delay.start]
> Interval to wait before (re)starting the load (seconds)
> Type: NUMBER
> Value: 0
>
> [ups.id]
> UPS system identifier
> Type: STRING
> Maximum length: 16
> Value: APCUPS
>
> >upscmd -l myups
> beeper.mute - Temporarily mute the UPS beeper
> bypass.start - Put the UPS in bypass mode
> bypass.stop - Take the UPS out of bypass mode
> calibrate.start - Start run time calibration
> calibrate.stop - Stop run time calibration
> driver.killpower - Tell the driver daemon to initiate UPS shutdown;
> should be unlocked with driver.flag.allow_killpower option or variable
> setting
> driver.reload - Reload running driver configuration from the file
> system (only works for changes in some options)
> driver.reload-or-error - Reload running driver configuration from the
> file system (only works for changes in some options); return an error
> if something changed and could not be applied live (so the caller can
> restart it with new options)
> driver.reload-or-exit - Reload running driver configuration from the
> file system (only works for changes in some options); exit the running
> driver if something changed and could not be applied live (so service
> management framework can restart it with new options)
> 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)
> outlet.0.load.cycle - Description unavailable
> outlet.0.load.off - Description unavailable
> outlet.0.load.on - Description unavailable
> outlet.0.shutdown.return - Description unavailable
> outlet.1.load.cycle - Description unavailable
> outlet.1.load.off - Turn off the load on outlet 1 immediately
> outlet.1.load.on - Turn on the load on outlet 1 immediately
> outlet.1.shutdown.return - Turn off the outlet 1 and return when power is
> back
> outlet.2.load.cycle - Description unavailable
> outlet.2.load.off - Turn off the load on outlet 2 immediately
> outlet.2.load.on - Turn on the load on outlet 2 immediately
> outlet.2.shutdown.return - Turn off the outlet 2 and return when power is
> back
> outlet.3.load.cycle - Description unavailable
> outlet.3.load.off - Description unavailable
> outlet.3.load.on - Description unavailable
> outlet.3.shutdown.return - Description unavailable
> shutdown.reboot - Shut down the load briefly while rebooting the UPS
> shutdown.reboot.graceful - Delay briefly then shut down the load while
> rebooting the UPS
> shutdown.return - Turn off the load and return when power is back
> shutdown.stayoff - Turn off the load and remain off
> test.battery.start - Start a battery test
> test.battery.stop - Stop the battery test
> test.panel.start - Start testing the UPS panel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/nut-upsdev/attachments/20231127/25c74c2b/attachment-0001.htm>


More information about the Nut-upsdev mailing list