Logging solar photovoltaic output with Arduino
Using a kilowatt meter with S0 contacts to log Voltage pulses via MQTT.
I want to build a power plug that only works when the solar panels on the roof are generating electricity, useful for charging a phone or my e-bike. I can leave the bike plugged in and it would only charge when there is a surplus of electricity. When it’s cloudy the power should shut off until the PV installation is back, producing clean electricity again. The first step for this long-term goal is to know if the PV panels are generating electricity. My 10+-year-old solar installation and the inverter, a Diehl AKO PLATINUM 2100 S, did not come with nice graphs to monitor the solar output. The inverter does have an EIA485 network port that can be used to attach a monitor device, but it’s so old even though the website is no longer available.
Luckily, I do have a single-phase digital kW meter in the fuse box, as is often the case in Belgium for our “groenestroomcertificaten” (link in Dutch). The kilowatt meter flashes every time a watt-hour of power passes the meter. This sums up to 1.000 pulses per kWh. The meter also has two S0 pins which act as a switch every time the LED flashes. The Arduino can detect these voltage changes and count the pulses, and thus learn the generated power from the solar installation. I used an old Arduino Ethernet, a 10kΩ resistor, some wires—all found in my “big ol’ pile of electronics”—and loaded the sketch on the Arduino. The sketch waits for an interrupt (= Voltage change) on pin 2 and fires an MQTT message to the broker when it when it does.
WARNING! The Arduino and S0 pins are low voltage but a fuse box also has high voltage wires. These can cause injury or even death. Be careful when handling high voltages!
I can now subscribe, using MQTT Explorer for example, to the MQTT topic configured in the sketch and count the pulses. A recently received MQTT message means the solar panels are working hard and doing their job.
What is next?
The Arduino Ethernet needs a power and ethernet cable and my proof-of-concept is a bit messy. I am thinking of porting the sketch to an ESP8266 using Wi-Fi and a battery to see if I can clean up the wiring a bit. I also need a local MQTT broker and some database to store the logs. Maybe a Grafana dashboard would be nice as well?