So, I’m happy enough with the driver now that I’ll collapse down the commits and throw it up onto the Github repository. I might take another look at kernel 4.18, but for now, you’ll find them on the ts7670-4.14.67 branch.
Two things I observe about this voltage monitor:
- The voltage output is not what you’d call, accurate. I think it’s only a 10-bit ADC, which is still plenty good enough for this application, but the reading I think is “high” by about 50mV.
- There’s significant noise on the reading, with noticeable quantisation steps.
Owing to these, and to thwart the possibility of using this data in side-channel attacks using power analysis, I’ve put a 40-sample moving-average filter on the “public” data.
Never the less, it’s a handy party trick, and not one I expected these devices to be able to do. My workplace manages a big fleet of these single-board computers in the residential towers at Barangaroo where they spend all day polling Modbus and M-Bus meters. In the event we’re at all suspicious about DC power supplies though, it’s a simple matter to load this kernel tree (they already run U-Boot) and configure collectd (which is also installed).
I also tried briefly switching off the mains power to see that I was indeed reading the battery voltage and not just a random number that looked like the voltage. That yielded an interesting effect:
You can see where I switched the mains supply off, and back on again. From about 8:19PM the battery voltage predictably fell until about 8:28PM where it was at around 12.6V.
Then it did something strange, it rose about 100mV before settling at 12.7V. I suspect if I kept it off all night it’d steadily decrease: the sun has long set. I’ve turned the mains charger back on now, as you can see by the step-rise shortly after 8:44PM.
The bands on the above chart are the alert zones. I’ll get an email if the battery voltage strays outside of that safe region of 12-14.6V. Below 12V, and I run the risk of deep-cycling the batteries. Above 14.6V, and I’ll cook them!
The IPMI BMCs on the nodes already sent me angry emails when the battery got low, so in that sense, Grafana duplicates that, but does so with pretty charts. The BMCs don’t see when the battery gets too high though, for the simple matter that what they see is regulated by LDOs.