Inverter Error Codes and What They Mean for Your Output
Your inverter is the only part of your solar array that talks back. The panels sit there silently degrading at 0.4% a year, the roof does nothing, but the inverter generates a log, and that log is where every unexplained dip in your generation data gets explained. The problem is that manufacturers treat error codes as a support-desk artefact rather than a data product. Solis prints “Fault Code 07” on a screen and expects you to ring your installer. SolarEdge shows you a red LED and a number. Nobody tells you whether the code cost you 0.2 kWh or 40 kWh.
This page is about closing that gap: reading UK inverter error codes as a time series, quantifying the output loss each one causes, and deciding which ones are worth acting on. It assumes you already log your generation somewhere and can do arithmetic on it. If you want the broader picture of how error logs fit alongside string-level anomaly detection and performance-ratio tracking, the Monitoring and Anomaly Detection pillar covers the full monitoring stack.
The Four Families of Error Code
Almost every code on a UK domestic inverter belongs to one of four families, and the family tells you more about the output impact than the specific number does.
Grid-protection trips (G98/G99 codes). These are the most common codes you will see and the least alarming. Under the UK’s G98/G99 connection standards, your inverter must disconnect if grid voltage strays outside roughly 216V to 253V, or if frequency leaves the 47.5–51.5 Hz band. The inverter didn’t fail. The grid moved, the inverter obeyed the rulebook, and it reconnected after a mandatory delay. On Solis inverters these appear as OV-G-V and UN-G-V. Growatt calls them Error 300 and Error 301 in some firmware, PV Isolation Low-adjacent messages in others. GivEnergy logs them as Grid Voltage High / Grid Voltage Low. Fronius uses codes in the 100 and 300 series (State 102: AC voltage too high).
Insulation and earth-fault codes. These matter. PV ISO Pro on Solis, Error 302 on Growatt, State 1083 on Fronius. The inverter measures the resistance between the DC array and earth, and if it drops below about 1 MΩ it refuses to start. Water in a connector, a nicked cable at a roof penetration, a cracked backsheet. These are the codes that cost you whole days.
DC-side and MPPT codes. Overvoltage on a string (DC-OVER-V, Error 200), reversed polarity, or an MPPT channel reporting zero. On a two-MPPT inverter with a 12-panel east string and a 10-panel west string, losing one channel costs you a predictable fraction of the day, not half of it.
Thermal and internal codes. OV-TEM on Solis, State 240 family on Fronius, the derating warnings on SolarEdge. These are the sneakiest, because the inverter does not stop. It throttles. You will never see a fault in the app, just a curve with a flat top.
Worked Example: Costing a Grid Voltage Trip
Here is a real pattern from a 4.2 kWp system with a Solis S6-GR1P3.6K on a rural single-phase supply in Somerset, reading from the inverter’s 5-minute Modbus register dump:
timestamp ac_voltage ac_power_w status
2026-06-14 12:35:00 251.8 3410 Generating
2026-06-14 12:40:00 253.4 3388 Generating
2026-06-14 12:45:00 254.9 0 OV-G-V
2026-06-14 12:50:00 249.1 0 Waiting
2026-06-14 12:55:00 248.6 3402 Generating
2026-06-14 13:20:00 255.2 0 OV-G-V
2026-06-14 13:25:00 250.0 0 Waiting
2026-06-14 13:30:00 247.9 3395 Generating
Two trips, each about ten minutes of lost production (the fault interval plus the reconnect delay). At roughly 3.4 kW that’s 3400 W × (20/60) h ≈ 1.13 kWh gone. At a 15p/kWh export rate under SEG, 17p. Trivially small.
Now run the same query across a whole summer. In that Somerset case the count was 94 OV-G-V events between May and August, clustered between 11:00 and 15:00, almost all on clear days. 94 events × roughly 10 minutes × an average 2.9 kW loss works out to about 45 kWh. Priced against self-consumption at 26p, that’s £11.70, and under an Agile-style export tariff with a summer-afternoon plunge it’s worth less still. The money is not the point. The pattern is the point: 94 trips clustered on sunny midday hours, all at 253V+, is the signature of a weak local supply where your own export is pushing voltage over the limit. That is a DNO matter. Under ESQCR your distribution operator must keep supply voltage within 230V +10%/-6%, and a logged export of trip events with timestamps and voltage readings is the single most effective thing you can hand them. National Grid Electricity Distribution and UK Power Networks both have voltage complaint processes, and both respond far better to a CSV than to a phone call.
A useful SQL-ish shape for this, if you keep your data in SQLite or DuckDB:
SELECT date(timestamp) AS day,
count(*) AS trips,
max(ac_voltage) AS peak_v,
round(sum(lost_w)/12000.0, 2) AS kwh_lost
FROM readings
WHERE status = 'OV-G-V'
GROUP BY 1 ORDER BY kwh_lost DESC;
The /12000.0 is the 5-minute-to-hours conversion combined with the watts-to-kilowatts one. Change it if your polling interval differs.
Insulation Faults Are the Expensive Ones
PV ISO Pro behaves nothing like a voltage trip. Voltage trips are brief, frequent and self-clearing. Insulation faults arrive in the morning, refuse to clear, and correlate with rain.
A 5.5 kWp array in Cumbria with a Growatt MIN 5000TL-XH logged Error 302 on 17 days between October and February. The tell was in the timestamps: every fault started within 40 minutes of dawn and cleared between 11:00 and 13:30, and every one of the 17 days had measurable overnight rainfall at the nearest Met Office station. Moisture in a DC connector was raising conductance overnight; a few hours of sun dried it out and the inverter restarted.
Cost of that: on each affected day the system produced roughly 55% of what comparable clear-ish winter days produced, so about 1.8 kWh lost per event on a 4 kWh winter day. Across 17 days, roughly 31 kWh. Small in kWh. But an insulation fault that is getting worse (clearing at 11:00 in October, 13:30 in February) is a fault that will eventually not clear at all, and by spring it would have been eating 15–20 kWh days. That is the trend to watch, and it only shows up if you log fault duration, not just fault occurrence.
Track it like this:
| Month | ISO events | Mean clear time | Mean kWh lost/event |
|---|---|---|---|
| Oct 2025 | 3 | 11:05 | 1.4 |
| Nov 2025 | 4 | 11:50 | 1.7 |
| Dec 2025 | 2 | 12:40 | 1.9 |
| Jan 2026 | 5 | 13:10 | 2.0 |
| Feb 2026 | 3 | 13:25 | 2.2 |
The clear time drifting later by two and a half hours over five months is the signal. The kWh column barely moves, which is exactly why a pure kWh-loss dashboard would have missed it.
Worth being blunt here: diagnosing and fixing a DC insulation fault involves live DC at several hundred volts on your roof. Logging it, trending it and handing a dated event list to an MCS-registered installer is analysis work. Opening a DC isolator or pulling MC4 connectors is not, and no amount of good data makes it so.
Thermal Derating: The Fault That Isn’t One
The most under-detected output loss on UK systems is thermal derating, because it rarely produces an error code at all. Most inverters log it as a status flag or nothing.
A garage-mounted 3.68 kW Fronius Primo in a Reading loft space showed this on 2 August:
11:30 dc_power 3810 ac_power 3640 temp 52.1
12:00 dc_power 3880 ac_power 3680 temp 58.4
12:30 dc_power 3890 ac_power 3510 temp 64.9
13:00 dc_power 3870 ac_power 3290 temp 69.2
13:30 dc_power 3840 ac_power 3180 temp 71.6
DC power is flat. AC power falls 500 W across two hours while the heatsink climbs 19°C. No fault, no notification, nothing in the app beyond a slightly rounded curve. The detection rule is simple: flag any interval where DC input is stable within 3% but AC output drops more than 5%, and check whether temperature is above roughly 45°C. On that system the rule caught 23 afternoons in July and August, totalling about 38 kWh. Moving the inverter out of an unventilated loft, or just fitting a vent, recovers that permanently.
Building Your Own Code Dictionary
The practical setup is a lookup table mapping manufacturer codes to a severity and an expected-loss model, then joining it against your fault log.
- Getting the log out. Solis and Growatt inverters expose Modbus TCP over the Wi-Fi dongle or Modbus RTU over RS485;
pysolarmanv5handles Solis dataloggers well,growattServercovers Growatt’s cloud API. GivEnergy has a documented REST API with a/inverter/{serial}/eventsendpoint. SolarEdge’s monitoring API gives you anequipment/{serial}/changeLogand inverter telemetry at 15-minute granularity. Fronius has a localGetInverterInfo.cgiandGetLoggerLEDInfo.cgion the device itself, which is the only one that needs no cloud account at all. Home Assistant plus the relevant integration, writing to InfluxDB or plain Parquet files, covers most of this with no custom code. - Severity, not alphabetical order. Rank codes by expected kWh loss per event, not by how scary the wording is.
OV-G-Vreads like a crisis and costs pennies. A silent derating flag reads like nothing and costs tens of kWh a summer. - Join on weather. The Met Office DataPoint and Open-Meteo’s free historical endpoint both give hourly rainfall and temperature for a postcode. Insulation faults correlate with rain, derating with ambient temperature, voltage trips with irradiance. A fault log without weather columns loses most of its diagnostic value.
- Let an LLM do the translation, not the arithmetic. Pasting a manufacturer PDF and your event log into Claude or ChatGPT and asking for a normalised severity table works well: these documents are inconsistent, badly OCR’d and full of near-duplicate codes, which is exactly the shape of problem language models handle. Do not ask it to compute your losses. Do that in SQL or pandas where you can check it.
Which Codes Actually Warrant a Phone Call
Three thresholds, roughly, from the cases above and similar UK domestic systems:
An insulation fault that fails to clear within the same day, or whose clear time is trending later month over month, goes to your installer now. A DC overvoltage code on a string that has never previously faulted suggests either a very cold clear morning pushing open-circuit voltage past the inverter’s ceiling (annoying but harmless, and worth checking against the datasheet’s max DC input) or a wiring change, and only the second needs a visit.
Grid voltage trips exceeding roughly 50 events a month, with peaks above 253V, go to your DNO rather than your installer, with a CSV attached. Your installer cannot fix your neighbour’s transformer tap setting.
Everything else, log it and let it accumulate. A single OV-TEM means the day was hot. Twenty-three of them across two months, with a flat DC curve underneath, means you have a ventilation problem worth £30 of aluminium ducting and 38 kWh a year.