<div dir="ltr"><div>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? :)</div><div><br></div><div>Thanks in advance,</div><div>Jim Klimov</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 22, 2023 at 3:20 PM Jim Klimov <<a href="mailto:jimklimov%2Bnut@gmail.com">jimklimov+nut@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Great! Thanks for the info, and hope the driver author can address the nits (forwarding now...)<div dir="auto"><br></div><div dir="auto">Jim </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 22, 2023, 15:05 d tbsky <<a href="mailto:tbskyd@gmail.com" target="_blank">tbskyd@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Jim Klimov via Nut-upsuser <<a href="mailto:nut-upsuser@alioth-lists.debian.net" rel="noreferrer" target="_blank">nut-upsuser@alioth-lists.debian.net</a>><br>
><br>
> Got an update for APC Modbus users: a new PR is waiting for real-life testing for settable variables and instant commands support.<br>
><br>
> <a href="https://github.com/networkupstools/nut/pull/2184" rel="noreferrer noreferrer" target="_blank">https://github.com/networkupstools/nut/pull/2184</a><br>
><br>
> As before, a custom build of libmodbus may be needed for USB support (detailed in the earlier PR), but Serial and TCP may already be well served by a distro near you!<br>
<br>
Hi:<br>
   I got a new APC SRT3000XL and tested the new driver "apc_modbus".<br>
the ups works fine with nut+apcupsd.  the new driver "apc_modbus" has<br>
result below:<br>
<br>
1.  upsrw can write the variable "battery.date". but the new value<br>
will only show after restarting apc_modbus. and in my case the written<br>
data will shift one day. eg the command "upsrw -s<br>
battery.date=2023-09-13" will return "2023-09-12" later.<br>
2. the upscmd power-off related commands (like load.*, outlet.*,<br>
shutdown.*) can not work. so it can not shutdown the ups. (I think<br>
this is the most important feature which needs to be fixed)<br>
3. upscmd command works: beeper.mute, bypass.start, bypass.stop,<br>
test.battery.start, test.battery.stop, test.panel.start<br>
4. I can't  attach any load so I can not test calibrate.start. but I<br>
found the new driver seems missing an import item which apcupsd have:<br>
"ups.test.result"<br>
<br>
below are some raw data:<br>
> data read from  nut+apcupsd (for reference):<br>
battery.charge: 99.0<br>
battery.charge.low: 5<br>
battery.date: 2023-11-21<br>
battery.runtime: 57000.0<br>
battery.runtime.low: 180<br>
battery.voltage: 109.0<br>
device.mfr: APC<br>
device.model: Smart-UPS SRT    3000<br>
device.serial: AS2032296523<br>
device.type: ups<br>
driver.debug: 0<br>
driver.flag.allow_killpower: 0<br>
<a href="http://driver.name" rel="noreferrer noreferrer" target="_blank">driver.name</a>: apcupsd-ups<br>
driver.parameter.pollinterval: 10<br>
driver.parameter.port: localhost<br>
driver.parameter.synchronous: auto<br>
driver.state: quiet<br>
driver.version: 2.8.1<br>
driver.version.internal: 0.71<br>
input.frequency: 60.0<br>
input.voltage: 224.7<br>
output.current: 0.00<br>
output.frequency: 60.0<br>
output.voltage: 207.6<br>
output.voltage.nominal: 208<br>
power.percent: 0.0<br>
ups.date: 2023-11-22<br>
ups.delay.shutdown: 0<br>
ups.delay.start: 0<br>
ups.firmware: UPS 15.5<br>
ups.firmware.aux: 00.5<br>
<a href="http://ups.id" rel="noreferrer noreferrer" target="_blank">ups.id</a>: APC UPS<br>
ups.load: 0.0<br>
ups.mfr: APC<br>
ups.mfr.date: 2020-08-10<br>
ups.model: Smart-UPS SRT    3000<br>
ups.power.nominal: 3000<br>
ups.realpower.nominal: 2700.0<br>
ups.serial: AS2032296523<br>
ups.status: OL<br>
ups.temperature: 27.0<br>
ups.test.result: OK<br>
ups.time: 17:24:25<br>
<br>
> data read from new driver "apc_modbus"<br>
battery.charge: 99.00<br>
battery.date: 2023-11-21<br>
battery.date.maintenance: 2028-05-21<br>
battery.runtime: 57425<br>
battery.temperature: 29.00<br>
battery.voltage: 108.69<br>
device.mfr: American Power Conversion<br>
device.model: Smart-UPS SRT    3000<br>
device.serial: AS2032296523<br>
device.type: ups<br>
driver.debug: 0<br>
driver.flag.allow_killpower: 0<br>
<a href="http://driver.name" rel="noreferrer noreferrer" target="_blank">driver.name</a>: apc_modbus<br>
driver.parameter.pollinterval: 10<br>
driver.parameter.port: /dev/ttyS0<br>
driver.parameter.synchronous: yes<br>
driver.state: quiet<br>
driver.version: 2.8.1<br>
driver.version.internal: 0.10<br>
experimental.output.energy: 7<br>
input.transfer.high: 220<br>
input.transfer.low: 184<br>
input.transfer.reason: TestEnded<br>
input.voltage: 224.77<br>
outlet.group.0.delay.reboot: 8<br>
outlet.group.0.delay.shutdown: 0<br>
outlet.group.0.delay.start: 0<br>
<a href="http://outlet.group.0.name" rel="noreferrer noreferrer" target="_blank">outlet.group.0.name</a>: Unswitched Group<br>
outlet.group.1.delay.reboot: 8<br>
outlet.group.1.delay.shutdown: 90<br>
outlet.group.1.delay.start: 0<br>
<a href="http://outlet.group.1.name" rel="noreferrer noreferrer" target="_blank">outlet.group.1.name</a>: Outlet Group 1<br>
outlet.group.2.delay.reboot: 8<br>
outlet.group.2.delay.shutdown: 90<br>
outlet.group.2.delay.start: 0<br>
<a href="http://outlet.group.2.name" rel="noreferrer noreferrer" target="_blank">outlet.group.2.name</a>: Outlet Group 2<br>
outlet.group.3.delay.reboot: 8<br>
outlet.group.3.delay.shutdown: 90<br>
outlet.group.3.delay.start: 0<br>
<a href="http://outlet.group.3.name" rel="noreferrer noreferrer" target="_blank">outlet.group.3.name</a>: Outlet Group 3<br>
outlet.group.count: 2<br>
output.current: 0.00<br>
output.frequency: 60.00<br>
output.voltage: 207.62<br>
ups.delay.reboot: 8<br>
ups.delay.shutdown: 0<br>
ups.delay.start: 0<br>
ups.efficiency: LoadTooLow<br>
ups.firmware: UPS 15.5<br>
<a href="http://ups.id" rel="noreferrer noreferrer" target="_blank">ups.id</a>: APC UPS<br>
ups.load: 0.00<br>
ups.mfr: American Power Conversion<br>
ups.mfr.date: 2020-08-10<br>
ups.model: Smart-UPS SRT    3000<br>
ups.power: 0.00<br>
ups.power.nominal: 3000<br>
ups.realpower: 0.00<br>
ups.realpower.nominal: 2700<br>
ups.serial: AS2032296523<br>
ups.status: OL<br>
ups.timer.reboot: -1<br>
ups.timer.shutdown: -1<br>
ups.timer.start: -1<br>
<br>
>upsrw -l myups<br>
[battery.date]<br>
Battery change date<br>
Type: NUMBER<br>
Value: 2023-11-21<br>
<br>
[driver.debug]<br>
Current debug verbosity level of the driver program<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[driver.flag.allow_killpower]<br>
Safety flip-switch to allow the driver daemon to send UPS shutdown<br>
command (accessible via driver.killpower)<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[input.transfer.high]<br>
High voltage transfer point (V)<br>
Type: NUMBER<br>
Value: 220<br>
<br>
[input.transfer.low]<br>
Low voltage transfer point (V)<br>
Type: NUMBER<br>
Value: 184<br>
<br>
[outlet.group.0.delay.reboot]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 8<br>
<br>
[outlet.group.0.delay.shutdown]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[outlet.group.0.delay.start]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[<a href="http://outlet.group.0.name" rel="noreferrer noreferrer" target="_blank">outlet.group.0.name</a>]<br>
Description unavailable<br>
Type: STRING<br>
Maximum length: 16<br>
Value: Unswitched Group<br>
<br>
[outlet.group.1.delay.reboot]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 8<br>
<br>
[outlet.group.1.delay.shutdown]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 90<br>
<br>
[outlet.group.1.delay.start]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[<a href="http://outlet.group.1.name" rel="noreferrer noreferrer" target="_blank">outlet.group.1.name</a>]<br>
Description unavailable<br>
Type: STRING<br>
Maximum length: 16<br>
Value: Outlet Group 1<br>
<br>
[outlet.group.2.delay.reboot]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 8<br>
<br>
[outlet.group.2.delay.shutdown]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 90<br>
<br>
[outlet.group.2.delay.start]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[<a href="http://outlet.group.2.name" rel="noreferrer noreferrer" target="_blank">outlet.group.2.name</a>]<br>
Description unavailable<br>
Type: STRING<br>
Maximum length: 16<br>
Value: Outlet Group 2<br>
<br>
[outlet.group.3.delay.reboot]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 8<br>
<br>
[outlet.group.3.delay.shutdown]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 90<br>
<br>
[outlet.group.3.delay.start]<br>
Description unavailable<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[<a href="http://outlet.group.3.name" rel="noreferrer noreferrer" target="_blank">outlet.group.3.name</a>]<br>
Description unavailable<br>
Type: STRING<br>
Maximum length: 16<br>
Value: Outlet Group 3<br>
<br>
[ups.delay.reboot]<br>
Interval to wait before rebooting the UPS (seconds)<br>
Type: NUMBER<br>
Value: 8<br>
<br>
[ups.delay.shutdown]<br>
Interval to wait after shutdown with delay command (seconds)<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[ups.delay.start]<br>
Interval to wait before (re)starting the load (seconds)<br>
Type: NUMBER<br>
Value: 0<br>
<br>
[<a href="http://ups.id" rel="noreferrer noreferrer" target="_blank">ups.id</a>]<br>
UPS system identifier<br>
Type: STRING<br>
Maximum length: 16<br>
Value: APC UPS<br>
<br>
<br>
>upscmd -l myups<br>
Instant commands supported on UPS [ftups]:<br>
<br>
beeper.mute - Temporarily mute the UPS beeper<br>
bypass.start - Put the UPS in bypass mode<br>
bypass.stop - Take the UPS out of bypass mode<br>
calibrate.start - Start run time calibration<br>
calibrate.stop - Stop run time calibration<br>
driver.killpower - Tell the driver daemon to initiate UPS shutdown;<br>
should be unlocked with driver.flag.allow_killpower option or variable<br>
setting<br>
driver.reload - Reload running driver configuration from the file<br>
system (only works for changes in some options)<br>
driver.reload-or-error - Reload running driver configuration from the<br>
file system (only works for changes in some options); return an error<br>
if something changed and could not be applied live (so the caller can<br>
restart it with new options)<br>
driver.reload-or-exit - Reload running driver configuration from the<br>
file system (only works for changes in some options); exit the running<br>
driver if something changed and could not be applied live (so service<br>
management framework can restart it with new options)<br>
load.off - Turn off the load immediately<br>
load.off.delay - Turn off the load with a delay (seconds)<br>
load.on - Turn on the load immediately<br>
load.on.delay - Turn on the load with a delay (seconds)<br>
outlet.0.load.cycle - Description unavailable<br>
outlet.0.load.off - Description unavailable<br>
outlet.0.load.on - Description unavailable<br>
outlet.0.shutdown.return - Description unavailable<br>
outlet.1.load.cycle - Description unavailable<br>
outlet.1.load.off - Turn off the load on outlet 1 immediately<br>
outlet.1.load.on - Turn on the load on outlet 1 immediately<br>
outlet.1.shutdown.return - Turn off the outlet 1 and return when power is back<br>
outlet.2.load.cycle - Description unavailable<br>
outlet.2.load.off - Turn off the load on outlet 2 immediately<br>
outlet.2.load.on - Turn on the load on outlet 2 immediately<br>
outlet.2.shutdown.return - Turn off the outlet 2 and return when power is back<br>
outlet.3.load.cycle - Description unavailable<br>
outlet.3.load.off - Description unavailable<br>
outlet.3.load.on - Description unavailable<br>
outlet.3.shutdown.return - Description unavailable<br>
shutdown.reboot - Shut down the load briefly while rebooting the UPS<br>
shutdown.reboot.graceful - Delay briefly then shut down the load while<br>
rebooting the UPS<br>
shutdown.return - Turn off the load and return when power is back<br>
shutdown.stayoff - Turn off the load and remain off<br>
test.battery.start - Start a battery test<br>
test.battery.stop - Stop the battery test<br>
test.panel.start - Start testing the UPS panel<br>
</blockquote></div>
</blockquote></div>