Measuring Solar Generation on a Fronius Inverter
Currently, I have four ways to monitor the total power generated by my solar panels.
- Check the meter. This is the most accurate way - but it is located inside a cupboard.
- Read the total from the Fronius API. Unfortunately, this rounds off to the nearest kWh, so isn't brilliantly accurate.
- Use the Fronius API to check the power being generated every minute, then convert to kWh. That seems accurate, but show discrepancies when compared with...
- Solar.web takes a reading every five minutes from the solar panels, and then graphs them.
Obviously, the meter in the cupboard is the one that counts. Those are the numbers which I submit back to the electricity company in order to get a payment. What I'm curious about is which method for accessing the API is the most accurate and whether I need to modify my open source code.
Let's take a look at how each one performs.
The Meter
I took a photo before sunrise, and another before sunset. 869.81 - 853.36 = 16.45kWh.
So, that's what I'm aiming at.
Fronius Total API
The Fronius API is really easy to access - here are the (truncated) results.
{
"Body" : {
"Data" : {
"DAY_ENERGY" : {
"Value" : 17000,
"Unit" : "Wh"
},
"TOTAL_ENERGY" : {
"Value" : 880000,
"Unit" : "Wh"
},
"YEAR_ENERGY" : {
"Value" : 812000,
"Unit" : "Wh"
}
}
}
}
The "Day Energy" has been rounded to the nearest kWh. It's broadly accurate, but not spectacular.
(The "Total Energy" is a little higher than the current meter reading - that's fine, it was installed shortly before the meter so it's quite usual to have a discrepancy.)
Minute by Minute Readings
I wrote some code to query the API and store the current value. It does this every minute and then produces a graph at sunset.
The calculation is pretty simple
// Calculate the total kWh generated.
// Sum the readings and divide by 60. (Because we read every minute & there are 60 minutes in an hour).
// Divide by 1,000 to get kWh
// Only need 2 decimal places of precision
$kWh = round( (array_sum($currentPowerArray) / 60 / 1000), 2);
In this case, the reading of 16.45kWh was exactly accurate.
Solar.Web
Fronius offer the Solar.Web system for a pretty nifty remote view of your systems.
Yesterday's reading was 16.89kWh and looked like this:
Taking a look on my system, it appears that the logging is done every 5 minutes.
I don't know if it's reading an average every five minutes, or it's an instantaneous read which just happens to be at the high point. Every reading from Solar.Web was a few hundred Wh higher.
Conclusions
Source | Reading | Deviation from meter |
Meter | 16.45 | - |
API Total | 17 | +3.3% |
Minute-by-Minute | 16.45 | 0% |
Solar.web | 16.89 | +2.4% |
Long story short? The most accurate programmatic reading is from my minute-by-minute script - but there's not much in it. Interestingly, the Fronius API is the most inaccurate. There's a firmware update available, so I'll see if that fixes things.
Chris Neale says:
With my older Fronius Inverter and 1 decimal place export meter I have fewer choices for data; I still haven’t sorted out the serial connection to poll for generation data (RS–422/485)
Terence Eden says:
Depending on the unit, you may be able to get an expansion board which offers 3G connectivity, WiFi, etc. Worth looking into.
Chris Neale says:
I irregularly take the CSV from a fitted USB drive (again 5 minute intervals), and I have the charts that https://app.net/314 creates from a clamp meter… I’m not without an impression of generation.
I cannot remember what add–on is required for an IG–TL 3.6—I think that’s a) expensive and b) RS–4xx