[Nut-upsuser] Synthesize low batt (LB) fron SNMP UPS which does not support this?

Greg Troxel gdt at lexort.com
Fri May 26 13:36:55 BST 2023


Willcox David via Nut-upsuser <nut-upsuser at alioth-lists.debian.net>
writes:

> In status_init(), if “driver.flag.ignorelb” is set in the driver state, the “ignorelb” flag is set.
> In status_set(), if ignorelb is set, and the status being set
> (presumably from the UPS) is LB, it’s ignored. In other words, LB
> reported by the UPS is ignored.
> In status_commit(), if ignorelb is set, there’s code to compare
> battery.charge against battery.charge.low and battery.runtime against
> battery.runtime.low. If either is below the “low” setting, “ LB” is
> added to the status. (So “OL” would become “OL LB” and “OB" would
> become “OB LB”. And note that the two “.low” settings can be
> overridden in the config.

Interesting.  Perhaps the runtime check to set LB should be in
status_set also.  However I think it's more subtle than that.

Read

  https://networkupstools.org/docs/developer-guide.chunked/ar01s04.html

and also look at some other drivers.


I think there's an assumption baked in that changing values like
battery% and line voltage is a different thing from changing flags, but
"set LB if battery <= X" crosses those.   So it may be necessary to
understand how this init/set interacts with everything else.

Perhaps we need a "update cycle done" call that is made every time
regardless of if the drive thinks it changed flags.  Or perhaps a driver
is supposed to call status_commit when it is done no matter what.  Some
code reading is in order!

> (I tried setting this but it didn’t seem to work. But then, I’m not
> sure how the NUT I installed from a package on my RPI compares with
> the source I downloaded.)

If you are trying to debug or to develop new things, you really have to
build from source and run that, rather than running old code from a
packaging system.  Nobody should run 2.7.4, pretty much for any reason.

> (I surmise from the way that code works that there must be a seperate
> process for each driver. Otherwise all of those static variables are
> scary.)

Yes, each driver runs as a process, as ps will show you, and this is
essentially the driver library from which a device-specific driver is
constructed.



More information about the Nut-upsuser mailing list