[Nut-upsuser] Using 'dummy.ups' for a real application, not just testing...
Charles Lepple
clepple at gmail.com
Mon Feb 20 02:05:46 GMT 2023
> On Feb 19, 2023, at 8:18 AM, Tom via Nut-upsuser <nut-upsuser at alioth-lists.debian.net> wrote:
>
> Good Morning,
>
> I am working on setting up a 12V DC UPS that will power a NAS and a router for a few hours. It contains some lithium-ion batteries, and a BMS to control charging. Since it is just a dumb box with batteries, it has no intelligence to inform the NAS of its status. This is where NUT comes in...
>
> I would like to incorporate a Raspberry Pi NUT server into this scheme. The Rpi can measure input voltage, and output voltage & current to determine the status of this simple UPS.
>
> With some of the excellent documentation online, I have gotten a NUT server running on the Rpi, and my NAS (a Qnap) has been able to read the status. I used the 'dummy-ups' driver for testing this and it worked great.
>
> Now, for the real business - Since this is entirely homebrew, there is not an appropriate driver available. I read about creating my own driver using 'skel.c' as a template. But, nobody else would have any interest in my very specialized driver.
You'd be surprised, especially if you are using a more common battery management chip.
> Plus - it seems overwhelming to me when I attempt to understand how to build NUT and I fear getting totally bogged down in all the minutiae of that.
While it looks somewhat intimidating at first glance, we do have instructions for building a version of NUT from source that matches a lot of the paths that are in the Raspbian (Debian) package: https://github.com/networkupstools/nut/wiki/Building-NUT-on-Debian,-Raspbian-and-Ubuntu
> But, it occurred to me - Why can't I just use 'dummy-ups' for this as-is? I can have a simple 'c' or Python program to read my values (to determine status) and then just write a few relevant lines into a '.dev' file to be served out to the LAN with the factory NUT server tools? My file would contain something like this:
For what it's worth, I think using dummy-ups for prototyping is a good idea, especially if you put the .dev file on a RAM-based filesystem (as Greg suggested), like /run or /dev/shm. (I forget whether Raspbian usually puts /tmp on the SD card.)
There are also a few i2c-based drivers in the NUT tree, such as https://github.com/networkupstools/nut/blob/master/drivers/pijuice.c and https://github.com/networkupstools/nut/blob/master/drivers/asem.c
I have some notes on interfacing to an i2c-based battery pack from a few years ago: https://www.ghz.cc/charles/NUT/OpenElectrons_SmartUPS.html The code is pretty old, and the rest of NUT has been updated since then, but it's probably helpful for estimating the scope of converting a standalone C-based i2c program into a NUT driver. (I ended up not merging that driver into NUT.)
>
> ups.mfr: Tom
> ups.model: My Contraption
> battery.charge: 100
> ups.status: OL
> input.voltage: 1.02
> battery.voltage: 11.5
> output.voltage: 11.2
> output.current: 3.4
> battery.runtime: 1000
>
> I write this file periodically (maybe every 15-60 seconds) and the Rpi NUT server would be none the wiser and just keep supplying the constantly updated contents of this file to the NAS.
I think the NAS is probably only looking at ups.status (OL/OB/LB) to trigger shutdown (barring any custom "shut down when variable X gets below a threshold), but it certainly can't hurt to publish the other values if you have something to log them.
--
Charles Lepple
clepple at gmail
More information about the Nut-upsuser
mailing list