Jim Klimov
2023-Nov-12 22:37 UTC
[Nut-upsdev] What is the arduino sub-driver intended to be used for?
Well, the intention generally is to use it as a driver, so the more abilities the merrier (PR would be welcome) :) Per comments to initial PR that added it, https://github.com/networkupstools/nut/pull/1044 :> The idea of introducing this driver is to enable creation and prototypingof smart UPS based on Arduino, which is inexpensive versatile platform very much suitable for custom fully open-source UPS development. I don't think it was supposed to end and be finished work at that point, but distractions happen... It might be worth asking @abratchik if he has something tinkered over this time and ready to upstream, as well. Jim Klimov On Sun, Nov 12, 2023, 22:46 Kelly Byrd <kbyrd at memcpy.com> wrote:> I posted earlier on this list about getting an Arduino Pro Micro using > https://github.com/abratchik/HIDPowerDevice in a simple sketch to > monitor a DIY UPS I have built. With the changes from that thread (I had a > PR merged), I was able to get usbhid-ups to recognize my device and could > setup NUT the rest of the way. My intended configuration is to run NUT on a > Raspberry Pi, have that device be master and then have clients of that NUT > install take action when ACPresent goes from true to false. > > The problem I ran into is `upsc diyups at locahost` was always showing > ups.status as "OB". I ran tests and confirmed the raw reports > included "UPS.PowerSummary.PresentStatus.ACPresent correctly showing 1 and > 0 as appropriate as well as correctly reporting the > UPS.PowerSummary.PresentStatus.Charging > and UPS.PowerSummary.PresentStatus.Discharging bitfields. > > I traced the problem down to drivers/arduino.c. Apparently the Arduino > subdriver doesn't have an entry > for "UPS.PowerSummary.PresentStatus.ACPresent" in it's arduino_hid2nut[] > definition. The only sections present are commented as: > /* USB HID PDC defaults */ > > I my local source tree, I made changes to these entries copied from > another USB HID-based subdriver, to add: > /* USB HID UPS Status*/ > {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.Charging", NULL, > NULL, HU_FLAG_QUICK_POLL, charging_info}, > {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.Discharging", NULL, > NULL, HU_FLAG_QUICK_POLL, discharging_info}, > {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.NeedReplacement", > NULL, NULL, 0, replacebatt_info}, > {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.ACPresent", NULL, > NULL, HU_FLAG_QUICK_POLL, online_info}, > > and now everything works as expected! My question for this list is why > there were not included in the Arduino subdriver already? AFAICT, the > author of the HIDPowerDevice Arduino library added the Arduino subdriver > via a PR a few years ago along with basic support for the common Arduino > VID:PID combinations in other parts of the code. But, that same library > definitely reports more than > UPS.PowerSummary.DelayBeforeShutdown, UPS.PowerSummary.DelayBeforeStartup, > etc. > and the example code he gives primarily demonstrates how to report > ACPresent, Charging, and also remaining run time. > > Am I missing something? Is there a runtime config based way to instruct > NUT how to map ACPresent, Charging, etc HID statuses to NUT's specific > structure? Over on the GitHub for the other project, others have reported > success with NUT and Arduinos using that library, but I don't know what > "success" means to them. I can't see how it's actually useful without the > addition of the above lines. I'm probably missing the original intent. > > Any insight or advice is appreciated. If I'm on the right track, I'll do > another PR to add the above status flags (and others you all think are > important) to Arduino.c > > _______________________________________________ > Nut-upsdev mailing list > Nut-upsdev at alioth-lists.debian.net > https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://alioth-lists.debian.net/pipermail/nut-upsdev/attachments/20231112/4d170c2a/attachment.htm>
Kelly Byrd
2023-Nov-13 15:41 UTC
[Nut-upsdev] What is the arduino sub-driver intended to be used for?
oh! Ok, I'll go look at all the HID objects reported by the sample code @abratchik has on top-of-tree of his repo and see what makes sense to add to NUT. PR coming this week. On Sun, Nov 12, 2023 at 2:38?PM Jim Klimov <jimklimov+nut at gmail.com> wrote:> Well, the intention generally is to use it as a driver, so the more > abilities the merrier (PR would be welcome) :) > > Per comments to initial PR that added it, > https://github.com/networkupstools/nut/pull/1044 : > > > The idea of introducing this driver is to enable creation and > prototyping of smart UPS based on Arduino, which is inexpensive versatile > platform very much suitable for custom fully open-source UPS development. > > I don't think it was supposed to end and be finished work at that point, > but distractions happen... > > It might be worth asking @abratchik if he has something tinkered over this > time and ready to upstream, as well. > > Jim Klimov > > On Sun, Nov 12, 2023, 22:46 Kelly Byrd <kbyrd at memcpy.com> wrote: > >> I posted earlier on this list about getting an Arduino Pro Micro using >> https://github.com/abratchik/HIDPowerDevice in a simple sketch to >> monitor a DIY UPS I have built. With the changes from that thread (I had a >> PR merged), I was able to get usbhid-ups to recognize my device and could >> setup NUT the rest of the way. My intended configuration is to run NUT on a >> Raspberry Pi, have that device be master and then have clients of that NUT >> install take action when ACPresent goes from true to false. >> >> The problem I ran into is `upsc diyups at locahost` was always showing >> ups.status as "OB". I ran tests and confirmed the raw reports >> included "UPS.PowerSummary.PresentStatus.ACPresent correctly showing 1 and >> 0 as appropriate as well as correctly reporting the >> UPS.PowerSummary.PresentStatus.Charging >> and UPS.PowerSummary.PresentStatus.Discharging bitfields. >> >> I traced the problem down to drivers/arduino.c. Apparently the Arduino >> subdriver doesn't have an entry >> for "UPS.PowerSummary.PresentStatus.ACPresent" in it's arduino_hid2nut[] >> definition. The only sections present are commented as: >> /* USB HID PDC defaults */ >> >> I my local source tree, I made changes to these entries copied from >> another USB HID-based subdriver, to add: >> /* USB HID UPS Status*/ >> {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.Charging", NULL, >> NULL, HU_FLAG_QUICK_POLL, charging_info}, >> {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.Discharging", >> NULL, NULL, HU_FLAG_QUICK_POLL, discharging_info}, >> {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.NeedReplacement", >> NULL, NULL, 0, replacebatt_info}, >> {"BOOL", 0, 0, "UPS.PowerSummary.PresentStatus.ACPresent", NULL, >> NULL, HU_FLAG_QUICK_POLL, online_info}, >> >> and now everything works as expected! My question for this list is why >> there were not included in the Arduino subdriver already? AFAICT, the >> author of the HIDPowerDevice Arduino library added the Arduino subdriver >> via a PR a few years ago along with basic support for the common Arduino >> VID:PID combinations in other parts of the code. But, that same library >> definitely reports more than >> UPS.PowerSummary.DelayBeforeShutdown, UPS.PowerSummary.DelayBeforeStartup, >> etc. >> and the example code he gives primarily demonstrates how to report >> ACPresent, Charging, and also remaining run time. >> >> Am I missing something? Is there a runtime config based way to instruct >> NUT how to map ACPresent, Charging, etc HID statuses to NUT's specific >> structure? Over on the GitHub for the other project, others have reported >> success with NUT and Arduinos using that library, but I don't know what >> "success" means to them. I can't see how it's actually useful without the >> addition of the above lines. I'm probably missing the original intent. >> >> Any insight or advice is appreciated. If I'm on the right track, I'll do >> another PR to add the above status flags (and others you all think are >> important) to Arduino.c >> >> _______________________________________________ >> Nut-upsdev mailing list >> Nut-upsdev at alioth-lists.debian.net >> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsdev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://alioth-lists.debian.net/pipermail/nut-upsdev/attachments/20231113/2cbc0a25/attachment.htm>