Your inverter app knows exactly how many kWh you made and nothing whatsoever about the sky that made them, which is why it can never tell you whether today was a good day. To close that gap you need a second number (what your roof should have produced given the weather), and the practical way to get it is a PVGIS table for your own location, tilt and orientation, held against what your app reports. An expected solar output calculator is exactly that second number, and PVGIS is the one to use.
Hardly anyone does even the easy version of this. In the Which? member survey of April 2024 (n>2,000), “Monitoring day-to-day performance - 22% do this”.
How to calculate solar output: the two numbers you need
Every useful judgement about a solar array is a ratio between two numbers:
- Actual: the kWh your inverter reports for a day, a week or a month. Your app has this.
- Expected: the kWh that much sunshine, on your roof, at your tilt and orientation, should have produced. Your app does not have this, because it has no model of what the weather should have produced on your roof. It measures your output, not the irradiance that made it.
Once you have the second number, the comparison is arithmetic: actual ÷ expected. A ratio near 1 means the system is behaving. A ratio that sits well below 1 across a month of ordinary weather means kWh are going missing somewhere between the sun and your meter. That ratio is what underperforming means here.
The faults worth catching do not announce themselves. A total failure is easy to spot, because the graph goes flat and stays flat:
my SE 5000H inverter failed last summer (15 months from install) so a bit easier to spot when production fell off a cliff.
A partial failure looks like weather. One string down, one dead optimiser or microinverter, an inverter throttling on high grid voltage: each of those takes a slice off the top and leaves a curve that still looks like a solar curve. Owners say plainly where their own detection threshold sits:
I’d certainly not notice a 10% reduction, however 40%-60% would stand out like a sore thumb
That is the band this method covers. The causes themselves, in order of likelihood, are in solar panels producing less than expected.
Expected solar output calculator: the PVGIS walkthrough
PVGIS is the Photovoltaic Geographical Information System, published by the European Commission’s Joint Research Centre. It is free, it needs no account, and it will give you a monthly energy table for your specific roof.
You need four things, all of which are in your installation paperwork:
- Location. Search your postcode, then drag the marker onto the roof itself.
- Installed peak power, in kWp. This is the sum of the module ratings (14 panels at 400 W is 5.6 kWp), not the inverter’s rating. The inverter’s rating is a different number, and using it gives you a wrong reference.
- Slope (tilt), in degrees from horizontal. Your tilt is on the installation paperwork; a flat roof with a mounting frame is whatever the frame sets.
- Azimuth (orientation), in degrees from south. Due south is 0°, and PVGIS labels the sign of the east/west axis on screen: read the field label rather than assuming, then confirm by watching the estimate fall as you move away from south. An east-west split array is really two arrays: run it twice, once per half, with the kWp of each half, and add the results.
There is one more field worth setting deliberately: system loss, which PVGIS pre-fills with a default percentage covering cabling, inverter conversion and soiling. How much of that default percentage is soiling, on its own, is answered in do solar panels need cleaning, along with the arithmetic for when a dirty roof is worth paying to clean. Leave it at the default unless you have a reason, and use the same setting every time, so that your reference does not move under you.
Then read off the monthly energy output table in kWh. Write those twelve numbers down once. That table is your yardstick for the whole year. Its month-by-month shape is set by your latitude, tilt and orientation rather than by any rule of thumb, and it is what makes a fixed alarm threshold useless, as the section below shows.
The worked example, arithmetic shown
Take a 4 kWp roof, and suppose PVGIS returns 480 kWh for July. Substitute your own figures.
- 480 kWh ÷ 31 days = 15.5 kWh/day expected on an average July day.
- Your app reports 322 kWh for the month.
- 322 ÷ 480 = 0.67, so the month came in about 33% below the modelled figure.
Assumptions, stated: PVGIS gives a long-run climate average for your location, not a forecast for this specific July; the 4 kWp is module nameplate power; system losses are at the PVGIS default; and shading from a chimney, a dormer or a tree is not in the model unless you added a horizon profile. A third missing across a full month is well outside anything ordinary weather explains. A tenth missing is not; see the error bars below.
Why “producing less than last year” is the weakest test
Last year is the comparison everybody reaches for first, and it is the weakest of the three references here, because last year had different weather. A dull June and a bright June are not comparable measurements, so a drop against the same month last year proves nothing on its own, and an apparent match can hide a fault that is being masked by a sunnier year.
There is a second trap: if the fault started early in the previous year, last year is already contaminated, and you are comparing a broken system with a broken system and finding no change. That is how multi-year drifts survive: each year looks like the last.
And “it must have been the weather” is the story owners tell themselves while something real runs on underneath. This one had an entire string producing nothing:
Since installation the generation figures have been slightly lower than before but I put this down to cloudier weather and deterioration of the solar panels. However when I checked the inverter I noticed that whilst string 2 was working fine, string 1 had the correct voltage (360v) … but the ampage was zero and hence not generating any output. The inverter appeared to be working fine and had no error messages.
Compare against a model of the weather instead, and the same month stops being ambiguous.
Year-on-year is still a good sanity check once you already suspect something, and it is free. Just do not let it be the only reference.
Why a fixed kWh alarm is wrong in both directions
The obvious do-it-yourself alert is a threshold: tell me when production drops below n kWh in a day. It fails, and the reason is worth working through, because it is the same reason your brand app cannot do this job either.
Read the shape of your own PVGIS monthly table and you will see the problem. On northern European roofs, December can come in at a tenth of June. Read the actual ratio off your own PVGIS table before using the arithmetic below. Call the best month’s daily average B. December’s daily average is then about B ÷ 10. The same gap matters most for anyone weighing solar against a heat pump, since heating load peaks in exactly the months when the roof is producing least: a heat pump and solar panels has the monthly PVGIS numbers for that comparison.
Now try to pick a threshold.
- Set it near the summer figure, say half of B, to catch anything serious in the season that produces. Half of B is five times a normal December day. Midwinter days trip it continuously. You get an alert storm, you learn to ignore it, and the mechanism is dead by March.
- Set it low enough to be quiet in December, say B ÷ 20, below a normal December day. A June day producing half of what it should is still ten times that threshold. The alarm stays silent through the entire loss.
A threshold quiet enough for December is blind to a real fault in June, and one sensitive enough for June cries wolf every day of the winter. The only threshold that works is one that moves with the season and the actual weather, so the reference has to be recomputed every day. That is what Solmiro does: every day it works out what the weather over your roof allowed, and it e-mails you when production falls well short of that or stops. Connecting is free.
This is the same reason “the app will tell me” does not hold on its own. None of the three brands alerts an owner on gradual underperformance without installer configuration: SolarEdge and Growatt have no expected-yield alert at all, and Enphase’s fires only against a Production Threshold an installer has set. If that installer is no longer trading, the account behind the configuration is its own problem: your solar panel company has gone bust.
What irradiance is, and where expected yield comes from
The physical quantity underneath all of this is irradiance: the solar power arriving on a surface, in watts per square metre. Multiply it over time and you get irradiation, in kWh per square metre, which is energy rather than power. The two words differ by a syllable and by a whole dimension, and it is worth keeping them apart when you read a datasheet. A PV array converts a fraction of the irradiation falling on the plane of the modules into AC kWh, and the size of that fraction is what your system loss setting stands for.
The number that matters is irradiance in the plane of the array rather than on the horizontal, which is why PVGIS asks for tilt and azimuth. A 5 kWp east-west roof and a 5 kWp south roof see different irradiation from the same sky, on the same day, in the same street.
So where does the expected yield figure come from? Two sources, and you should know which one you are using:
- A model. PVGIS turns long-run solar radiation records for your coordinates into an expected monthly output, published with the tool by the Joint Research Centre. It answers “what does a typical year look like here”, not “what happened last Tuesday”.
- A neighbour. PVOutput is a public database where owners upload their own daily production. A comparable system a few streets away saw the same sky you did, so its day curve removes the weather question entirely. The catch is that it depends on somebody near you having bothered to upload, and on their system being comparable in size, tilt and orientation. Divide both systems’ kWh by their kWp before comparing anything.
If you have a neighbour with panels and an app, that is the same comparison without the website: ask for one clear day’s kWh and their kWp, and compare kWh per kWp.
How far to trust the comparison
This method has real limits.
A single day is noise. A day’s output is dominated by that day’s cloud cover, so a day that comes in low is not evidence of anything. Do not act on one.
A week starts to mean something. Weather averages out across seven days far better than one, and a week that runs consistently below the modelled figure is worth opening the app for.
A month is the right unit for a PVGIS comparison, because PVGIS gives you a climate average and a month is roughly the timescale on which real weather converges towards its average. A cloudy fortnight will fall short of the model with nothing wrong at all.
The model is not a promise, and neither was the sales estimate. Different estimates for the same roof do not agree, and owners notice:
the offers I got the estimated generation differs +/- 12% for the same panels … Therefore I am wondering, how accurate was the estimate you were provided compared with the actual?
Shading is the biggest single source of error. PVGIS does not know about your chimney, the neighbour’s extension or the tree that has grown since 2018 unless you feed it a horizon. A roof with a real shading problem will sit below its modelled figure every year, permanently and correctly.
A steady offset is not a fault; a change is. If your roof has always run a bit under the model for a structural reason, note the offset once and compare against your own history from then on. What you are hunting is the step down, or the slow drift, not the constant.
What each app actually compares your output against
Checking your solar panel output online means opening one of these portals, so it helps to know what each one compares your output against. Who receives which message is set out in who gets your solar alerts.
SolarEdge. SolarEdge has no alert that compares your output with what you should have made. Its production alerts only fire on hard faults: “Production issue – inverter overheated” and “String is not producing”. Even total silence is only flagged after at least three hours without communication, by default in a daily digest, and an e-mail reaches you at all only if the installer has given you permission to receive alerts. The codes it does raise are decoded in the SolarEdge error-code guide; the account side is on the SolarEdge monitoring page.
Enphase. The only one of the three with a soft-production alert, and it compares against a number a human typed in, not against the weather: site production falling below a Production Threshold, “if one has been set”. If your installer never set one, there is no soft-underperformance alerting on your site. The same condition is named “Low Solar Production” in the Enphase app and “Production Issue” in the Installer Portal. For silence rather than shortfall, the documented thresholds are a Warning when at least one microinverter has not reported for 12 hours during daylight (in-app only, no push), and an Error when at least 10% of microinverters have not reported for five consecutive days, at which point homeowners and installers are notified by text, email or push, “depending on their selected preferences”. How those not-reporting thresholds play out panel by panel is in Enphase microinverter not reporting. More on the Enphase monitoring page.
Growatt. No expected-yield comparison. Its alerts are tick-boxes in the ShineServer web portal, for alerts and for daily and monthly reports, and they go to the mailbox the plant was set up with, normally the installer’s. Log in and check whether they are ticked. Growatt documents no alerting in the owner app. Codes are decoded in the Growatt error-code guide; the account side is on the Growatt monitoring page.
All three know what your inverter reported. None of them knows what the sky did, so none of them can tell you that 322 kWh was a bad July.
How to monitor solar panel output, month by month
The method above is worth doing once, properly, and then repeating cheaply.
- Once: run PVGIS, write down the twelve monthly figures, and divide each by the number of days in the month. You now have a daily expectation for every month of the year on a single sheet of paper.
- Monthly: take the month’s total from your app, divide by the PVGIS figure for that month, and note the ratio. A column of ratios over a year is a far better fault detector than any single reading, because the thing you are looking for is the month where the ratio steps down and stays down.
- When the ratio drops: first rule out the boring explanations (a dull month, snow, a new obstruction), then work the causes list in solar panels producing less than expected. If production is not merely low but zero or missing, start with the triage in inverter offline or not producing.
- If you have never checked anything at all: the four point-in-time checks in how do I know if my solar panels are working come first. They tell you about this minute; the ratio above tells you about the month.
The weakness of a monthly habit is the obvious one: a fault that starts in early May is found in early June at best, and the arithmetic in the cost box says what that month is worth. The shorter the interval between comparisons, the smaller that window gets.
Questions owners ask
How do you calculate annual solar production?
Take your installed peak power in kWp, your tilt and your orientation, and run them through PVGIS, the European Commission's Joint Research Centre tool. It returns an estimated annual and monthly energy table in kWh for your exact location. Multiplying kWp by a rule-of-thumb yield figure gets you a rough national average; PVGIS gets you your own roof, including the effect of pointing east-west rather than south.
Is there an expected solar output calculator I can trust?
PVGIS is free, needs no account, and is published by the European Commission's Joint Research Centre. Treat its output as a long-run climate average for your location rather than a forecast for this particular month: a cloudy fortnight will fall short of it with nothing wrong at all, which is why the comparison only means something over a week or, better, a whole month.
How do I check solar panel output online?
Your brand portal or app gives you the actual kWh, by day and by month. That is one half of the comparison. The other half — what the weather should have produced on your roof — is not in the app, and you get it from a PVGIS monthly table you write down once, or from a nearby system publishing on PVOutput that saw the same sky on the same day.
Does my inverter app compare my production with the weather?
No. SolarEdge has no alert that compares your output with what you should have made; its production alerts only fire on hard faults. Enphase has a low-production alert, but it fires against a Production Threshold only "if one has been set" by the installer. Growatt's alerts are tick-boxes in its web portal, sent to the mailbox the plant was registered with, and none of them compares your output with the weather.
How much of a shortfall is worth investigating?
A single day tells you almost nothing — a day's output is dominated by that day's cloud cover, so one low day is not evidence of anything. A week is worth a look. A full month running well below your PVGIS figure, through decent weather, is a fault until proven otherwise. Small deviations of a few percent are the noise floor of this method, not a finding.