David, do you have any information on the build of your system? I'd like to try something like this.
Well, if I was building it now I’d look seriously at OpenPlotter, which seems to do many of the things my custom setup does. I built mine before OpenPlotter was really a thing, and before there were web services that would help data logging and graphing. Having said that, here’s the setup I have:
I have two Atmega 328’s (the microprocessors from Arduinos), each with an Adafruit ADS1115 analog/digital converter and a RFM69HCW short range radio. Those are mounted near my battery banks. One reads the voltage of the battery banks, and the other reads the voltage across a shunt (which came with the boat) to monitor current draw. A better electrical engineer could probably consolidate those two setups into one, but I was having problems with interference and voltage drops trying to read the very small voltage across the shunt, so I just split them out to isolate them. One of those is also tied into the tachometer sense wire, and counts the pulses on that wire to get RPMs. They use the radios to send their readings to an Arduino behind my circuit breaker panel. That arduino gets the data, and uses its own analog/digital converter to read the voltages on the tank sensor wires that go into our existing monitor panel. It takes all that data and sends it via USB to the Pi. On the Pi I built a little Java app to grab the data from the Arduino and write it to a log file. The Pi is also connected to an ADXL345 accelerometer to get heel angle and three DS18B20 thermometers to get the temperature readings. I ran an Ethernet cable from the Pi my B&G chart plotter. The plotter puts out all of its NMEA data as NMEA0183 strings, so the Pi can grab them over the network and save them to the log file along with all the other data. One of the pins on the Pi is also connected a wire that runs to the input side of the bilge pump, so my app can sense if the bilge pump powers up. For connectivity the Pi has a WiFi adapter for when I’m at my home marina. For when I’m not I have it connected to an Adafruit Fona cell mode that uses Ting cellular. Ting charges about $11/month for up to 100MB, which is more than enough. The Pi uses that to send the data back to my house where I wrote another Java web app to receive the data and put it into a webpage for me to see. That app also sends me an email if the bilge pump runs or if the batteries stop charging.
All in all I like how it works. I could almost certainly make it all work with less Arduinos, maybe none, if I were more clever with the engineering. The Java app that runs on the Pi is under 1500 lines of code. I’m re-writing it in Python this winter as a chance to learn python and streamline it a bit. It does help that the boat had a shunt, tank monitors, and a handy bilge pump wire in the right place to begin with, so it was just a matter of splicing into those and not needing to build those parts from scratch.
The Pi is powered by a 12V to 5V buck converter and an Adafruit Powerboost 1000 with a small rechargeable battery as a backup in case a circuit breaker accidentally gets shut off. The other Atmega 328’s are just powered by 12V to 5V converters.