I made this to serve my own need (which it does), to allow my Synology NAS a clean shutdown in case of a power cut. My UPS is not recognized if plugged into the NAS via USB, so it is plugged into a different (SBC) computer instead, which runs this.
Speaking of prior art, I am only aware of this one: https://github.com/luizluca/nut-snmpagent
I am not a fan of Ruby and I only trust software I wrote (a.k.a.: I prefer my own bugs in critical pieces of my infra), so here it is.
Posting in case someone else finds it useful, but will answer more general questions (should they come up) as well.
It never returns 1, and returns 4 in two cases. This varies from the comment before the function, which I presume documents return values (though at first glance I thought the "name(number)" format was a function call example).
The comment documents the interpretation (by the UPS MIB) of possible return values. The same is true for the surrounding few functions (upsAutoRestart, upsBeeperStatus and upsOutputSource) that are similar in form and purpose. Obviously, there is no requirement that all possible output values are generated (exactly once or at all).
The function upsBatteryStatus returns 4 in two cases, because in both of those cases the battery is deemed 'depleted'. And it does not return 1 because there is no input case from upsc (that I know of, at least) where it would make sense to report the battery status as 'unknown'.
Speaking of prior art, I am only aware of this one: https://github.com/luizluca/nut-snmpagent I am not a fan of Ruby and I only trust software I wrote (a.k.a.: I prefer my own bugs in critical pieces of my infra), so here it is.
Posting in case someone else finds it useful, but will answer more general questions (should they come up) as well.