Honest battery payback

Backtest against real 2023-24 EPEX + load data, side-by-side with the cracked thuisbatterijgids.nl formula. Inputs left, results right.

Best honest payback

{% if initial.best %}

{{ initial.best.title }}

Annual savings (year-1)
€{{ '%.0f' % initial.best.lp_year1 }}/yr
Payback
{{ '%.1f' % initial.best.lp_payback }} years
Battery
{{ '%.2f' % initial.best.capacity_kwh }} kWh / {{ '%.1f' % initial.best.power_kw }} kW · €{{ '%.0f' % initial.best.price_eur }}
Store quote
€{{ '%.0f' % initial.best.store_year1 }}/yr ({{ '%.1f' % initial.best.store_payback }} yr) — overstates by {{ '%.2f' % initial.best.overstatement }}×
{% endif %}

Full leaderboard ({{ initial.batteries|length }} batteries · {{ initial.elapsed_seconds }}s · existing PV exports at the meter (capturable by a battery): {{ '%.0f' % initial.total_surplus_kwh }} kWh/yr)

{# rendered cells start below; legend follows the table. #} {% for r in initial.batteries %} {% endfor %}
# Battery kWh kW LP €/yr LP yr 10-yr net cycles kWh capt % capt % full % sat
{{ loop.index }} {{ r.title }} {{ '%.2f' % r.capacity_kwh }} {{ '%.1f' % r.power_kw }} €{{ '%.0f' % r.price_eur }} €{{ '%.0f' % r.lp_year1 }} {% if r.lp_payback %}{{ '%.1f' % r.lp_payback }}{% else %}—{% endif %} €{{ '%.0f' % r.ten_year_profit_eur }} {{ '%.0f' % r.cycles_per_year }} {{ '%.0f' % r.captured_kwh }} {{ '%.0f' % r.captured_pct }}% {{ '%.0f' % r.pct_hours_battery_full }}% {{ '%.0f' % r.pct_hours_charge_saturated }}%
LP €/yr
Honest year-1 savings from our linear-program oracle (perfect 24h foresight).
LP yr
Years until cumulative savings (with the chosen inflation rate) recoup the battery cost.
10-yr net
Total profit over 10 years: cumulative savings (compounded by inflation) minus the battery cost. Red = doesn't break even within 10 yr.
cycles
Total discharge throughput per year, divided by capacity. Includes both surplus capture and grid arbitrage (charging during cheap hours from the grid even when no surplus is exporting). Useful as a "how busy is the battery" metric.
kWh capt
kWh of meter-export (existing PV pushing back) that this battery absorbs before it crosses the meter.
% capt
That, as a percentage of the scenario's existing-PV meter-export shown in the heading. Note: solar that's directly self-consumed during sunny hours never crosses the meter and is invisible to a battery.
% full
Of all export hours, the % when the battery was already full and couldn't store more — capacity-bottlenecked.
% sat
Of all export hours, the % when charging was pegged at max kW and couldn't keep up — power-bottlenecked.