Most "how big should my home battery be?" calculators online use one rule of thumb, something like "take your daily consumption and multiply by 1.5". We wanted to replace that with a real year: every hour of household demand and every hour of solar output, run through a simple battery model. It runs client-side in the browser, the input data is public, and the result has a clear knee in the curve.
Some context on why this matters right now: the Netherlands ends net metering (salderingsregeling) on 1 January 2027. From then on, solar power you export is no longer offset 1:1 against power you import. That makes every kWh you consume yourself worth more, which is exactly what a battery is for. (What changes on 1 January 2027 has the legal references.)
The data
Two open sources, both hourly:
- Demand: the NEDU / Energiedatawijzer standard profile for 2026 (v1.00), column
E1B_AZI_A. This is a small consumer with a smart meter and no feed-in, so it describes gross household demand without solar. The profile comes in 15-minute fractions. We sum those into 8,760 hourly fractions that add up to 1, then scale them to any annual consumption. - Solar: PVGIS v5.3
seriescalcfrom the EU Joint Research Centre, database PVGIS-SARAH3, location De Bilt (52.101, 5.178), 1 kWp, 14% system loss. We have two orientations: south at 35°, and east-west at 15° (the average of 0.5 kWp east plus 0.5 kWp west). There are three weather years, 2021, 2022 and 2023, and all timestamps are converted from UTC to CET.
https://re.jrc.ec.europa.eu/api/v5_3/seriescalc?lat=52.101&lon=5.178&peakpower=1&loss=14 &angle=35&aspect=0&startyear=2021&endyear=2023&pvcalculation=1&outputformat=json &raddatabase=PVGIS-SARAH3 One kWp in De Bilt produced 959 kWh (2021), 1,128 kWh (2022) and 1,006 kWh (2023) facing south. Facing east-west it produced 802, 918 and 851 kWh. The preprocessed files are small JSON arrays of integers and are publicly served by the site (/data/batterij/profiel-2026.json, /data/batterij/pv-2023.json).
The model
The rules are deliberately simple. The battery only charges from solar surplus and only discharges into the house's own demand. There's no grid charging and no trading. Round-trip efficiency is split evenly over charge and discharge (√η each way), and there's a power limit in kW.
export function simulate({ demandKWh, solarKWh, profile, pv, cap, power, efficiency }: SimIn) { const kPv = solarKWh / pv.reduce((a, b) => a + b, 0); const kL = demandKWh / profile.reduce((a, b) => a + b, 0); const eta = Math.sqrt(efficiency); let soc = 0, direct = 0, fromBattery = 0, exported = 0, imported = 0; for (let h = 0; h < 8760; h++) { const load = profile[h] * kL, gen = pv[h] * kPv; const d = Math.min(load, gen); let surplus = gen - d, deficit = load - d, out = 0; if (cap > 0) { const charge = Math.min(surplus, power, (cap - soc) / eta); soc += charge * eta; surplus -= charge; out = Math.min(deficit, power, soc * eta); soc -= out / eta; deficit -= out; } direct += d; fromBattery += out; exported += surplus; imported += deficit; } return { direct, fromBattery, exported, imported, selfConsumption: (direct + fromBattery) / solarKWh, cycles: cap > 0 ? fromBattery / cap : 0 }; } A full year is only 8,760 loop iterations, cheap enough in a browser that we can simulate every capacity from 0 to 20 kWh on each slider move and draw the full curve, not just one point.
Results for a typical Dutch household
Inputs: 3,500 kWh demand, 3,500 kWh solar yield, a 3 kW battery, 90% round-trip efficiency. The battery sizes are usable capacity.
| Weather year / orientation | No battery | 5 kWh | 8 kWh | 20 kWh | "Knee" (90% of max gain) |
|---|---|---|---|---|---|
| 2021, south | 36.8% | 65.7% | 69.1% | 72.7% | 8 kWh |
| 2022, south | 36.6% | 66.6% | 69.5% | 71.5% | 6 kWh |
| 2023, south | 36.2% | 64.1% | 67.2% | 69.7% | 7 kWh |
| 2023, east-west | 38.0% | 61.8% | 63.2% | 63.9% | 5 kWh |
Share of solar output consumed on site. Recomputed on 11 Nov 2026 from the public data files.
Three takeaways:
- The first kWh are worth a lot, the later ones barely anything. In 2023 with south-facing panels, going from 5 to 6 kWh adds about 51 kWh per year of self-consumed solar. Going from 10 to 11 kWh adds about 10 kWh.
- The knee sits at 5-8 kWh. Above it, all the extra capacity up to 20 kWh adds only the last ~10% of the possible gain. The reason: a battery charged only from solar cycles at most about once a day, the evening and night demand of a 3,500 kWh household is limited, and in winter there's hardly any surplus to store.
- East-west panels need less storage. Their output is spread more evenly over the day, so more is used directly (38% vs 36%) and there's less surplus to shift. The knee falls at 5 kWh.
One number that sanity-checks the model: a 5 kWh battery does about 196 full cycles a year in this setup. That's far below the several thousand cycles LFP battery datasheets typically quote. For home use, calendar ageing will usually matter more than cycle ageing.
Limitations (we say so on the page too)
- A standard profile is an average. A household with a heat pump or an EV has a different shape, especially in winter.
- There's no dynamic tariffs and no grid charging. Those strategies can earn money with a battery even without solar surplus, and this model ignores them on purpose.
- It uses one location (De Bilt). For the Netherlands that's a reasonable proxy, but it's not your roof.
Try it / reuse it
The interactive version, with sliders for demand, yield, orientation, weather year, power and efficiency, runs on Opslagraad: home battery capacity simulator (Dutch). The data files are open, so you can rebuild them from NEDU and PVGIS with the steps above.
Written by Mosaic Solutions, the Dutch publisher of Opslagraad and other independent comparison sites. Opslagraad earns from installer quote requests. The simulator works the same whether or not you request a quote.