> On Feb 19, 2023, at 8:18 AM, Tom via Nut-upsuser 
> <nut-upsuser@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@gmail


_______________________________________________
Nut-upsuser mailing list
Nut-upsuser@alioth-lists.debian.net
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser

Reply via email to