[Nut-upsuser] Synthesize low batt (LB) fron SNMP UPS which does not support this?
Willcox David
dwillcoxster at gmail.com
Mon May 22 17:31:26 BST 2023
Hmm. Is there maybe something there already that will do this? Maybe kind of back-handed.
In drivers/dstate.c, I see:
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.
So, I surmise that of the UPS config in ups.conf included:
driver.flag.ignorelb = 1
override.battery.charge.low = 50
would not that cause status to be returned as “OB LB” when charge dropped below 50%?
(I’d tried doing the override a while ago, but didn’t know about the “ignorelb” thing.)
Am I missing something?
(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.)
(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.)
> On May 22, 2023, at 6:12 AM, Greg Troxel <gdt at lexort.com> wrote:
>
> Carsten Aulbert <carsten.aulbert at aei.mpg.de> writes:
>
>> Hi all,
>>
>> On 5/19/23 15:11, Greg Troxel wrote:
>>> LB is baked in to nut behavior. So if a UPS doesn't report LB, then
>>> it makes sense to synthesize it. Synthetic LB is the cleanest fix at
>>> the earlier processing point.
>>
>> I fully agree and thus this ought to be done in/near uspd IMHO. I
>> glanced over the server/ directory and was not sure where even to
>> begin hooking this in. Should this be directly in upsd (upsd.c) or
>> rather in/near the driver level (driver/main.c)?
>
> I think it belongs in upsd someplace, as what I want is a way to make LB
> appear based on a rule instead of (or in addition) to the LB reported by
> the device. The 50% vs 10% example captures the need for %-LB on
> devices that actually do report LB perfectly, and I think it's a desire
> many will have.
>
>>> Yes, this could be in upsmon, but that's not synthetic LB, it's
>>> choosing to shutdown if battery is below X.
>>
>> Yeah, this should be independent and fully on the client side (and
>> thus upsmon) where each client can choose how to react to a UPS on
>> battery.
>
> It could also make sense to make upsmon smarter, but if we are really
> talking about defining "this UPS's battery is now low", that's what LB
> is supposed to mean and we should make it work that way.
>
>>> We should be clear on "critical" vs "LB" and clean up the language to
>>> be consistent.
>>
>> For upsmon, I would stay with critical as this is already mentioned in
>> upsmon(8) and I guess "LB" could stay for the server part as each user
>> could decide whether she wants to rely on LB from the UPS itself or on
>> the self-defined override.
>
> I think the difference is:
>
> LB is a state reported by a UPS (perhaps synthetic in upsd) that says
> that the battery is nearing empty and remaining runtime is limited
>
> critical is an opinion by upsmon that the UPS has reached a state
> where it is prudent to do an immediate shutdown. Typically LB implies
> critical but it could be more complicated.
>
>>> Beware that I'm a bit fuzzy on details beyond my comments and even
>>> some on things I commented on, so take them as such.
>>
>> Same here, quite at a loss what is handled where on the server and
>> always low on time due to other projects/tasks.
>>
>> Cheers and any pointers appreciated!
>
> I would look where input from drivers is processed, and basically add
>
> if (battery% <= 50 && ! set?(LB)) {
> log that we are doing synthetic LB
> set!(LB)
> }
>
> to mix C and scheme :) Then of course make it configurable. But it
> probably is that easy to just make it hard-coded 50.
>
> _______________________________________________
> Nut-upsuser mailing list
> Nut-upsuser at alioth-lists.debian.net
> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/nut-upsuser/attachments/20230522/58b8580a/attachment-0001.htm>
More information about the Nut-upsuser
mailing list