ExcessEnergy.au

Methodology · how we calculate every number

How the calculators actually work

Most online solar calculators don't tell you what data they use, what they assume, or what they leave out. This page does. Every number in the calculators traces back to a named, dated source, and where we've had to assume something we say so. If you can't reproduce our numbers from what's on this page, that's a bug. Let us know.

The data layer

Every locality default you see in the calculators comes from a public, named, dated dataset. We don't make up "typical household" numbers; we pull from the best public AU source we can find for each state and tell you which one was used.

NSW

lga_hws_calibrated

Ausgrid LGA-level annual data (FY16–FY25)

32 NSW LGAs covering Sydney metro + Hunter region. Includes residential consumption, hot water consumption, customer counts, and rooftop solar adoption. Calibration is real: our calculator's HWS energy estimate is within ±15% of Ausgrid LGA medians for 60% of LGAs (n=32, FY25). Median bias: +5.6%. Routing: your postcode is mapped to its LGA via ABS allocation files (POA 2021 → LGA 2024, joined on Mesh Block), so if you live inside one of the 32 calibrated LGAs you get that LGA's specific defaults. Regional NSW postcodes outside the Ausgrid footprint fall through to a state-subset average (see the tier system below).

Source ↗

VIC

lga_consumption_solar

CitiPower/Powercor VPN data (2025)

50 LGAs across the Powercor + CitiPower networks. Includes residential consumption + solar adoption by LGA. Important caveat: VIC's published data has no HWS / off-peak breakdown, so we can't HWS-calibrate VIC directly. Our HWS estimate falls back to the same physical model used for NSW, with a VIC climate-zone adjustment. Cross-check: VIC residential consumption is +2.4% vs NSW median, well within tolerance, so the household-size formula generalises. Routing: postcode → LGA via ABS allocation files, same as NSW. Note that 10 of our 50 VIC LGAs (Melbourne CBD, Maribyrnong, Whitehorse, Hume, Mildura, Mitchell, Strathbogie, Swan Hill, Benalla, Gannawarra) have data quality issues flagged in our consolidator, so postcodes within those LGAs intentionally fall through to the VIC state-subset average instead of using the flagged LGA's data.

Source ↗

WA

state_solar_density

AEMO DER Register (2026 snapshot) + AEMO SWIS DPV (2020–2026)

Per-postcode census of solar + battery + EV + CL installs across all 314 real WA postcodes. Includes total PV installs (458,779), median system size (4.16 kVA/install), and battery adoption rate (0.31% of PV installs). Important: WA's Controlled Load column is uniformly zero in the AEMO data because Western Power's L1 hot-water program is administered outside the AEMO DER framework. Our HWS estimate uses the NSW-calibrated formula with WA climate-zone adjustment, with an explicit caveat shown in the UI when this applies.

Source ↗

QLD, SA, TAS, NT

national_default

National first-principles defaults

No state-specific dataset is integrated yet. The calculators use a national first-principles model based on AS/NZS 3500.4 cold-water inlet temperatures and household-size HWS demand. Per-state tariff defaults are rough averages from public retailer comparisons. Override them with your actual bill for an accurate answer. ACT note: ACT postcodes are currently routed to the NSW data layer for default lookup (Evoenergy operates within the NSW network footprint for residential energy), so ACT users see the NSW state-average row, not this fallback.

The calibration tier system

Every result you see is tagged with a calibration tier (the small italicised line under each calculator's output). The tier tells you how solid the locality data behind that result is.

lga_hws_calibratedYour specific LGA's calibrated defaults. The ±15% / +5.6% accuracy claim applies. You see this badge if your NSW postcode lives inside one of the 32 LGAs covered by the Ausgrid dataset (Sydney metro + Hunter).
lga_consumption_solarYour specific LGA's residential consumption + solar adoption defaults. HWS estimated from first principles with climate-zone adjustment; no LGA-specific HWS calibration. You see this badge if your VIC postcode lives inside one of the 50 LGAs covered by Powercor/CitiPower data, and the LGA isn't flagged for data-quality concerns.
state_solar_densityYour postcode's WA solar census data. HWS + consumption modelled from first principles. Currently: WA (314 postcodes from the AEMO DER Register).
state_subset_averageThe state-wide average of our calibrated dataset, used when your specific LGA isn't in the covered subset. Honest read: "we have an LGA-calibrated dataset but your specific LGA isn't in it: here's the average across the LGAs we do cover." You see this badge if you're in regional NSW (outside Sydney + Hunter), regional VIC (outside Powercor/CitiPower territory), in a flagged VIC LGA, or in the ACT (routed to NSW).
national_defaultPure first-principles physical model, no localisation. Bottom of the fallback chain. Currently: QLD, SA, TAS, NT. (ACT inherits the NSW tier; see the NSW row above.)

The HWS Diverter calculator

The ten-stage pipeline:

  1. Eligibility gate. Gas HWS, heat pump HWS, no HWS, non-homeowner, or no tank access: any of these returns a friendly rejection card instead of a calculation.
  2. Annual HWS energy need = household_size × 50 L × ΔT × specific_heat / heater_efficiency × 365. ΔT comes from your postcode's climate zone.
  3. Available solar surplus = daily_export × 365 × 0.85 (seasonal overlap factor: solar peaks summer, HWS demand peaks winter, the factor captures the mismatch).
  4. Tank absorption ceiling = tank_litres × 45°C ×specific_heat × 365. A small tank limits how much surplus you can store.
  5. Divertible = min of the three. The smallest number is the binding constraint.
  6. Battery interaction. If you have a battery, it consumes surplus before the diverter can.
  7. Capture factor = 0.75. Real-world inefficiency: you don't capture every theoretical kWh.
  8. Grid boost = HWS need − actual diverted. What you still pay for from the grid.
  9. Cost before/after, FiT income lost, net savings.
  10. Capex ($1,300 default), payback, lifetime savings, suitability score, warnings.

The exact Python source-of-truth lives in our open repo at excessenergy-validation/src/calculator.py. The TypeScript implementation that runs in production is parity-tested against it on every change: 8 hand-curated reference cases + 500 randomised scenarios must match within ±1 kWh on integers and ±0.05 yr on payback. CI rejects any drift.

The Export Worth calculator

First-principles arithmetic: annual_export × FiT vs annual_export × retail. The headline gap is what most AU solar households are effectively giving the grid for free every year at 2c FiT vs 33c retail. No calibration involved, just multiplication.

The Battery model

Deliberately conservative. We model solar self-consumption arbitrage only: the battery charges from your solar surplus (energy you'd otherwise export at FiT) and discharges later when you'd otherwise be importing at retail. Per-kWh value = retail − FiT. Net savings = cycled × value, after round-trip efficiency (0.9).

What we don't model (and why):

  • Time-of-use arbitrage on non-solar days. Varies by retailer plan, and modelling it honestly requires per-plan assumptions we can't make for you.
  • Backup power valuation. Subjective and household-specific. If backup matters to you, factor it in separately.
  • VPP enrolment revenue. Programme-specific and changes constantly.
  • Battery degradation. Modest impact (~5% over 10 years for LFP). We'll add it when the model gets more sophisticated.

Net effect: our battery savings number is a lower bound. A real installation may do better via the deferred items. We'd rather understate than overstate.

The federal Cheaper Home Batteries rebate is applied per usable kWh, following the 1 May 2026 taper: the full rate on the first 14 kWh, 60% on 14–28 kWh, 15% on 28–50 kWh, and nothing above 50. The first-tier rate is ~$252/kWh (6.8 STCs/kWh × ~$37), and it steps down as the STC factor reduces roughly every six months — so this figure drifts, and we update it at each step.

The solar production visualiser

The visualiser is the one tool here that doesn't use our own calculator. Monthly generation comes from PVWatts® v8 (NLR's National Solar Radiation Database, formerly NREL), run live against 2020 TMY (typical meteorological year) weather data. We send PVWatts your system size and a coordinate; it returns estimated kWh for each month.

The Australia map. Each state and territory is shaded by its capacity-normalised annual yield (kWh generated per kW of panels installed), so the colour shows the solar resource independent of system size (warmer = sunnier). Those numbers come from the same PVWatts model run at each capital city, on the same assumptions as the estimator. Clicking a region loads its capital as a representative point; enter your own postcode for your exact spot. The state outlines are simplified from ABS ASGS boundaries (CC BY 4.0) for display: a schematic map, not a survey-grade one.

How your postcode becomes a coordinate. We map your postcode to a single representative point (the average of its localities' coordinates) from the open australian-postcodes dataset. PVWatts then snaps that to the nearest cell in its ~4 km solar grid. If we don't have a precise point for your postcode, we fall back to your state capital and label the result as a rougher, state-level ballpark.

The fixed assumptions. Every estimate models a north-facing, roof-mounted array at a 20° tilt with 14% system losses: a reasonable typical Australian rooftop. North-facing is the equator-facing orientation that maximises output in the southern hemisphere. Your real numbers move with your roof's actual pitch, orientation, shading, and panel age, so treat the visualiser as an area-level "what's possible here" rather than a quote. Per-roof tilt and orientation inputs are on the roadmap.

The "Should I get solar?" estimator

The prospective-buyer tool is an explicit estimate, not a parity-grade calculator (same posture as Export Worth: first-principles arithmetic with nothing to calibrate against, so it stays out of the Python parity contract). It takes a postcode and a recent power bill (you pick the billing period: monthly, every 2 months, or quarterly) and does three things:

  1. Bill → annual usage. We subtract the daily supply charge (≈ the fixed part of your bill), divide what's left by your state's retail rate, and annualise. Retail rates and supply charges are state reference figures (AER Default Market Offer for NSW/SE-QLD/SA, ESC Victorian Default Offer for VIC, published regulated tariffs elsewhere), refreshed annually. The result is clamped to a sane 2,500–12,000 kWh/yr range.
  2. Usage → recommended size. We size to roughly match your annual usage (a bootstrap of ~1,400 kWh per kW), round to a common system size (3 / 5 / 6.6 / 8 / 10 / 13.2 kW), and cap it at 1.5× the average install in your area where we have that data. We then apply a market floor: as of 2026 the standard single-phase install is ~6.6 kW and installers rarely quote smaller, so the headline reflects what you'll actually be offered, with your usage-matched size shown alongside as context. (That floor is a dated assumption; it drifts upward and is network/phase-dependent.)
  3. Size → generation & saving. Generation is the real PVWatts figure for that size at your location. The saving values self-consumed energy at your retail rate and the rest at the feed-in tariff. Self-consumption is ~35% of generation (typical for a no-battery household), capped at 35% of your annual usage: a smaller household can't absorb as much of the output, and its saving is correspondingly lower.

Assumptions that matter most: the 35% self-consumption ratio (the biggest single swing factor; higher if you run big loads in daylight), and that feed-in tariffs are regulator benchmarks where they exist (NSW IPART, QLD QCA, WA DEBS) or market estimates where they don't (VIC, since the ESC stopped setting a minimum in July 2025). It's a ballpark to help you decide whether to get quotes. It deliberately ignores install cost, the federal STC discount, and your actual roof. Those are planned additions.

What every calculator gets wrong some of the time

The honest list of known weaknesses:

  • Single-occupant households are under-predicted by our HWS model by 20–33%, because the formula doesn't capture fixed standing tank losses that apply regardless of household size. If you live alone, treat the result as a lower bound.
  • Apartment dwellers are usually wrong-targeted. Most apartments have central building HWS the diverter can't reach. The eligibility gate catches this, but you may see a result that overstates feasibility if you have an unusual setup.
  • Real-world performance depends on weather, real solar generation, real export patterns, real HWS usage. We model the central case; your year will differ.
  • The "ground truth" is itself a model. Our HWS estimate is validated against Ausgrid LGA aggregates, which are themselves model-derived. We are not validating against real diverter installations, because that data doesn't exist publicly. The empirical claim has bounds.

The open-source side

The calculation engine is open source: Python validation, TS production, and the parity test suite that keeps them in sync. If you want to audit our maths line-by-line, the code is at github.com/levitatingletteropener/excessenergy. Bug reports and methodology PRs welcome.