Skip to content
stromFitStart analysis

Methodology

This page documents how stromFit arrives at its results: what goes in, what is assumed when something is missing, and where the calculation stops. Every figure below is read from the modules that run the calculation — none of it is transcribed here.

The principle behind it: a missing input is never estimated without the estimate being marked in the result, and an unknown quantity is never treated as zero. Where an assumption is needed it goes against the result — not knowing something should never make a system look better than it is.

Solar yield

Yield comes from PVGIS, the European Commission's Photovoltaic Geographical Information System — not from a rule of thumb like "x kWh per kWp". We query API version v5_2 against the PVGIS-SARAH2 radiation database, module technology crystSi, mounting free (free-standing, well ventilated) and 14 % system losses, which PVGIS applies itself. The reference year is 2019 — a non-leap year, so exactly 8.760 hourly values for your coordinates.

Your answers become two angles: tilt from the mounting style (vertical 90°, angled 60°) and orientation as a PVGIS azimuth.

Orientation → PVGIS azimuth (0° = south, negative = east)
S0°
SE-45°
E-90°
NE-135°
N180°
NW135°
W90°
SW45°

A roof facing two ways has no single orientation angle. For “East and west”, stromFit therefore runs PVGIS twice at half the power each — once east, once west — and adds the hourly values together. The 50/50 split is an assumption rather than an input: an uneven split shifts the shape of the day, but barely moves the annual total.

A missing answer is replaced conservatively and flagged as an assumption in the result. Unknown tilt → 75°. Unknown orientation → 90°, i.e. west rather than south: if you do not know your orientation, you are shown too little yield rather than too much.

Near-field shading — a neighbouring balcony, a tree, a roof overhang — is the one factor PVGIS does not know about and we apply ourselves, as a multiplier across the whole hourly profile:

Shading → yield factor
AnswerYield retainedReduction
None100 %0 %
Slight95 %5 %
Moderate85 %15 %
Heavy70 %30 %
Unknown (assumed)90 %10 %

Limit of this calculation: a single factor across the whole year is a simplification. Real shading depends on time of day and season — a tree to the south costs more in December than in June. A horizon-line shading model would capture that; we do not have one, which is why there is a factor here and not a simulation. Systems from 50 to 20.000 Wp are supported.

Household electricity consumption

The basis is the H0 standard load profile from VDEW/BDEW — the profile German households without interval metering are billed on (carried in the calculation as H0 (VDEW/BDEW representative household)). On top of it sits a shaping step for your daily routine. The profile shares the yield profile's time axis (reference year 2019, hourly) so the two can be netted hour by hour.

Season, day type and hour are determined in Europe/Berlin, not in UTC — otherwise the summer evening peak would land an hour out. The H0 dynamisation, which weights winter consumption against summer, is active.

If you know your annual consumption, that exact figure is used. If you do not, it comes from the Stromspiegel für Deutschland (co2online) — Mehrfamilienhaus, edition 2024 — apartment, water heating not electric:

Household size → assumed annual consumption (kWh)
1 person1.200
2 people1.900
3 people2.400
4 people2.600
5+ people3.100
Household size unknown too2.400

When it is estimated, the result says so — consumption has the strongest leverage of any input on the economics, and an estimated number must not look like a measured one.

Working from home shifts consumption into the middle of the day, which is exactly when a balcony system delivers. The uplift applies between 9:00 and 17:00:

Home office → daytime consumption factor
Almost never× 1
1–2 days a week× 1,08
3–4 days a week× 1,2
Almost daily× 1,35

Limit of this calculation: H0 is a representative profile, not a measured one. Heat pumps, electric cars and night-storage heating are not in it, and the daily-routine shaping is a plausibility assumption rather than a measurement. The daytime share we report counts 8:00 to 18:00.

Self-consumption

Self-consumption is determined hour by hour, not as an annual quota. That is the decisive difference: averaged over a year every system looks good, because generation and consumption cancel out on paper. In reality electricity at 13:00 is no use if the consumption happens at 20:00.

The two profiles are joined by timestamp, not by index. If a timestamp does not match, the calculation aborts rather than quietly returning a result shifted by hours.

Per hour:

  • Direct consumption = the smallest of generation, consumption, and what the system is allowed to deliver at all.
  • Grid import = consumption − direct consumption.
  • Surplus = whatever is left.

Two limits are handled separately because they act in different places: the DC input limit, above which the inverter does not accept module power in the first place, and the AC output limit — in Germany usually the 800 W feed-in limit. Both bite within the hour, not as an after-the-fact annual deduction: a system that hits its ceiling at midday loses it then, not pro rata across the year.

What happens to the power above the AC limit depends on the battery. Without one it is lost — there is nowhere for it to go. With one it is retained on the DC side and can charge. That is the actual reason a battery is worth anything on a balcony system, and it disappears from any calculation that works with annual totals.

Battery economics

The battery is simulated hour by hour (1-hour steps), not from an assumed cycle count. It charges from solar surplus only — charging from the grid is not modelled; it discharges only to avoid grid import.

The simulation starts with an empty battery (start-at-minimum-soc). A battery starting full would report January returns it never had.

Charge and discharge losses are counted on both sides and do not count as self-consumption: only what actually reaches the household counts, directly or from the battery. Discharge to the household is also capped by the AC output limit, less whatever direct consumption already used in the same hour.

Economically the battery is compared against the same system without one — never against an estimated standalone effect. And the comparison counts both directions: the battery lowers grid import (good) and simultaneously lowers the exported amount (a real loss wherever export is paid for). Both sit in the same balance, so the battery is never flattered.

Limit of this calculation: one year at constant capacity. Battery ageing is not modelled here, and a battery whose charge and discharge power we do not know is not simulated at all — the result then says no payback is shown, rather than giving a number with an invented basis.

Payback

The saving is the difference between two annual bills:

  • Without the system: annual consumption × price + standing charge
  • With the system: grid import × price + standing charge

Simple payback is purchase price ÷ annual saving. If the saving is zero or negative there is no figure — not "infinite", and not some very large number that looks like a calculation.

For the 10-year view, three dials are deliberately set to zero:

Long-run assumptions
Electricity price growth0 % per year
Module degradation0 % per year
Export compensation0 € per kWh

This is not a forecast but a refusal. An assumed 3 % annual price rise shortens every payback by years and nobody can substantiate it — it would only make the calculation prettier. Export compensation is zero because plug-in systems are generally not paid for what they export; if you do get paid, you are understated here rather than overstated.

If you do not know your electricity price we use 0,35 € per kWh and report that it was estimated. An unknown standing charge enters as zero — it is identical in both annual bills and cancels out of the saving.

Price assumptions

Prices come from the vendors' own pages and each carries a verification date. The system price shown is the known minimum: the advertised price plus every mandatory part whose price we know.

An unknown price is never treated as zero. If a mandatory part has no price, the system price is a lower bound and is marked as one — and where a payback would be built on it, the payback is withheld instead.

Whether a price is complete depends on the household, not on the product. The same kit is fully costed for someone who needs no mount and incompletely costed for someone with a balcony railing the vendor prices nowhere. So completeness is determined per request rather than stored on the product.

A verified price is valid for 30 days. After that it is not shown anyway and quietly ageing — it is withheld from the static pages until it has been re-checked. Several vendors run permanent promotions; those kits are flagged separately.

Prices are purchase prices excluding shipping and excluding any installation service.

Recommendation logic

Calculation and recommendation are separate. The engines produce facts — yield, saving, payback. The recommendation layer interprets those facts and computes nothing itself. Commission or affiliate signals enter the assessment at no point.

Payback → verdict (policy recPolicy.v2)
up to 5 yearsclearly worth it
up to 10 yearsworth it
up to 20 yearsa long-term option — shown, not hidden
under 10 € saved per yearno purchase recommendation

The third row is a deliberate decision. A system paying back in 10–20 years pays back slowly, but it does pay back — and someone with a north-facing balcony is better served by "this takes 14 years" than by an empty results page.

The battery is judged separately, and only on its incremental effect against the same system without one: recommended up to 8 years, optional up to 12 years, and below 5 € of additional annual saving it adds nothing meaningful. A battery verdict never hides the system itself.

Versions

Every calculation carries the version of the engine that produced it, so an older result stays attributable to a specific method: yield solar-v1, load profile load-v1, battery battery-v1, economics econ-v1, recommendation policy recPolicy.v2.

Other sections

Diese Seite gibt es auch auf Deutsch.