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