Round-Trip Efficiency and Why Your Battery Loses 12% You Didn’t Budget For
Your solar app says you exported 4,200 kWh last year and imported 3,900 kWh. So a battery big enough to shuffle that surplus into the evening would have saved you the import cost, minus the export income. Multiply, subtract, and the payback looks like seven years.
It isn’t seven years. The number you just calculated assumes that a kilowatt-hour going into the battery comes back out as a kilowatt-hour. It doesn’t. Somewhere between the surplus your panels produce and the power your kettle actually draws, roughly an eighth of the energy disappears, and almost every DIY model I’ve seen silently assumes it doesn’t.
What round-trip efficiency actually measures
Battery round trip efficiency for a solar installation is the ratio of energy delivered to your household loads to energy diverted from generation into the battery. Full stop. Not the cell efficiency. Not the number on the datasheet.
Manufacturers quote round-trip efficiency at the DC battery terminals, under lab conditions, at a moderate discharge rate, at 25°C. Lithium iron phosphate cells genuinely do hit 96-97% there. That figure is true and almost useless, because your house doesn’t consume DC at the battery terminals.
Here’s the actual chain for a typical UK AC-coupled retrofit, the kind where a Givenergy or Fox ESS battery gets bolted on next to an existing string inverter:
Panel DC output
→ string inverter (DC→AC) ~97% [you pay this anyway]
────────── surplus AC at the consumer unit: 100% baseline ──────────
→ battery inverter (AC→DC) 95.0%
→ cell charge acceptance 97.5%
→ cell discharge 98.0%
→ battery inverter (DC→AC) 94.5%
───────────────────────────────────────────────────────────
Multiplied: 85.9%
→ standby draw over the cycle -1.8 pp
→ thermal derate (winter garage) -0.6 pp
───────────────────────────────────────────────────────────
Delivered to load: 83.5%
That’s 16.5% gone. The commonly quoted “you’ll lose about 10%” is the conversion chain alone with a generous inverter. The extra losses are the ones nobody budgets for.
Where each slice goes
The double conversion is the big one. An AC-coupled battery converts twice: AC to DC to charge, DC back to AC to discharge. Hybrid inverters (Sunsynk, Solis S6, Givenergy Gen 3) charge the battery from the panels’ DC directly, skipping one conversion when the sun is the source. That’s worth about 4 percentage points on solar-charged cycles, though they lose it back on grid-charged cycles, which matters enormously if you’re on Octopus Intelligent Go and filling the battery at 7p overnight.
Conversion efficiency is also not a constant. It’s a curve. Your 5 kW battery inverter hits its rated 96% somewhere around 60-80% load. At 300W, which is exactly where a UK house sits at 2am with a fridge and a router running, that same inverter is doing 88-90%. If your battery discharges slowly overnight across a low base load, you spend most of the discharge in the inferior part of the efficiency curve. This is the loss that never shows up in any model, because models multiply by a single number.
Standby draw is relentless. The battery management system, the inverter’s control board, the comms module, the cooling fans: 20-40W continuously for most residential units. A Tesla Powerwall 2 idles around 25W. Some hybrid inverters with active cooling idle closer to 50W. Take 30W as a working figure and that’s 0.72 kWh every single day, 263 kWh a year, drawn whether you cycled the battery or not.
Against a battery doing 300 full cycles of 9.5 kWh, that’s 2,850 kWh throughput and 263 kWh of parasitic load: 9.2% of throughput, before a single conversion loss. In summer when you’re cycling hard, it amortises down to maybe 5%. In January when the battery sits at 20% state of charge for a fortnight because there’s nothing to charge it with, standby draw is pure loss with no cycle to spread it across, and it shows up on your bill as import you can’t explain.
Thermal effects cut both ways, and the UK’s are unhelpful. Charge acceptance on LFP degrades below about 10°C. Below 0°C most BMS units restrict charge current hard or block charging entirely. A battery in an unheated garage in Yorkshire in February spends a lot of hours refusing to take the charge rate you modelled. It’s not catastrophic, maybe half a percentage point across the year, but it clusters in exactly the months when imported electricity costs you most. Meanwhile a battery in a hot loft in July is derating the other direction.
The worked example, with real numbers
Take a specific house. Kent, 4.8 kWp array facing south-southwest, 4,450 kWh generated a year, 2,900 kWh of that exported because nobody’s home during the day. Annual import 3,650 kWh. On Octopus Flux: import 25.8p peak, 15.9p day, 9.4p off-peak; export 23.9p at peak hours, 8.2p otherwise. A 9.5 kWh Givenergy AIO, installed, £6,200.
The naive model, the one that sits in most spreadsheets:
| kWh | Rate | Value | |
|---|---|---|---|
| Surplus captured by battery | 2,150 | ||
| Import avoided | 2,150 | 22.1p avg | £475.15 |
| Export income lost | 2,150 | 9.6p avg | −£206.40 |
| Net annual saving | £268.75 |
Payback: 23 years. Already marginal, and that’s before the losses.
The honest model. Apply 84% round-trip to the delivered energy, and keep standby draw as a separate line, because it happens whether or not you cycle:
| kWh | Rate | Value | |
|---|---|---|---|
| Surplus diverted to battery | 2,150 | ||
| Delivered to load at 85.8% conversion | 1,845 | 22.1p avg | £407.75 |
| Export income lost on full 2,150 | 2,150 | 9.6p avg | −£206.40 |
| Standby draw, 30W × 8,760h | 263 | 18.4p avg | −£48.39 |
| Net annual saving | £152.96 |
That’s a 43% haircut on the naive figure, and the reason it’s so much worse than the 16% efficiency loss suggests is that you lose export income on the whole 2,150 kWh but only get import savings on the 1,845 that survives. The margin between import and export price is what pays for the battery, and losses eat the margin disproportionately. This is the structural point most models miss: efficiency losses don’t scale your savings by 0.84, they scale your gross benefit by 0.86 while leaving your costs untouched.
Grid-charging arbitrage is even less forgiving. Buy 9.5 kWh at 7p on Intelligent Go, that’s 66.5p. Get 8.0 kWh back out at 84% round trip and displace peak import at 28p: £2.24. Spread is £1.58, not the £1.99 the raw arithmetic promises, and the daily standby cost of about 13p brings it to £1.45. Over 300 cycles that’s £435 rather than £597. Fine, still positive, but it’s the difference between a nine-year payback and a twelve-year one.
How to measure your own, rather than guessing
Don’t take my 84%. Measure it. Every major UK battery system exposes the numbers you need, though you’ll have to assemble them.
If you’re on Home Assistant, the Givenergy, Solax, Sunsynk and SolarEdge integrations all publish cumulative battery_charge_energy_total and battery_discharge_energy_total sensors. Create a template sensor dividing one by the other over a rolling 30-day window. That gives you cell-level round trip, which is the optimistic figure, but the trend is what you want: if it drifts downward over 18 months, your cells are ageing.
For the honest number, you need a meter on the AC side. A Shelly EM or Emporia Vue clamped on the battery inverter’s AC feed logs both directions at the point that actually matters. Charge energy in, discharge energy out, both AC. Divide. That’s your real round-trip efficiency, and on most retrofits it lands between 82% and 87%.
Standby draw takes one evening. Fully charge the battery, set it to hold, note the state of charge, come back 12 hours later. Divide the drop by 12. Or watch your import meter at 3am with the battery inhibited: whatever the house draws above its genuine base load is the inverter idling.
A useful sanity check with pandas on a year of half-hourly data from your smart meter (Octopus will hand you this via their API, or n3rgy for free if you’re not with them):
# battery-attributable losses, half-hourly
df['charge_kwh'] = df['batt_ac_in'] / 2
df['discharge_kwh'] = df['batt_ac_out'] / 2
rte = df['discharge_kwh'].sum() / df['charge_kwh'].sum()
print(f"AC round-trip: {rte:.1%}")
# standby: consumption during periods with no charge, no discharge
idle = df[(df.charge_kwh < 0.01) & (df.discharge_kwh < 0.01)]
print(f"Idle hours/yr: {len(idle)/2:.0f}, "
f"mean draw {idle.house_kw.min()*1000:.0f}W floor")
The .min() on that last line is deliberate: your true base load is the floor of your consumption distribution, and anything the battery adds sits above it.
What to change in your model
Three edits, and your spreadsheet stops lying to you.
Split efficiency from standby. They behave completely differently: one scales with throughput, the other with time. Bundling them into a single percentage means your model gets winter badly wrong, because winter is when throughput collapses and standby doesn’t.
Use 84% as your AC-coupled default and 88% for a DC-coupled hybrid charging from solar, then replace both with measured figures as soon as you have three months of data. If your supplier quotes 95%, ask which terminals they measured at. The honest ones will tell you.
Model the export income loss on gross charge energy, not delivered energy. This single line is worth more than the efficiency correction in most UK tariff structures, and it’s the one I most often see missing. The pillar on battery and tariff optimisation works through how the import-export spread interacts with time-of-use bands, which is where this correction bites hardest.
There’s a reason installers quote round-trip efficiency at the cells. It makes the payback look four years shorter than it is. Whether a twelve-year payback is worth £6,200 to you is a separate question, and a perfectly reasonable one to answer yes to. But you should answer it knowing the actual number, not one built on an assumption nobody told you they’d made.