From f91bdc5c378365f7c9290a78a8a385c8720a0ba7 Mon Sep 17 00:00:00 2001 From: Nik Cubrilovic Date: Wed, 23 Sep 2026 15:46:46 +1000 Subject: [PATCH 1/4] docs(renewables): compare renewable proportion with aemo and explain the records --- guides/renewables.mdx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/guides/renewables.mdx b/guides/renewables.mdx index 1b47c4f..51cbad3 100644 --- a/guides/renewables.mdx +++ b/guides/renewables.mdx @@ -73,6 +73,25 @@ AEMO publishes two renewable share figures in their Quarterly Energy Dynamics re Our `renewable_proportion` differs from AEMO's storage-adjusted metric in that we include battery discharge and non-hybrid pumped hydro in the renewable numerator, while AEMO excludes all storage from their adjusted figure. Our approach counts battery and pumped hydro discharge as renewable since the stored energy originated from the grid's renewable mix. +### Instantaneous renewable share + +AEMO's real-time headline figures, such as renewables supplying 80% of the NEM for the first time on 19 September 2026, are renewable generation as a share of **total generation**. Our `renewable_proportion` is renewable generation as a share of **gross demand**. Across the whole NEM the two usually agree to within 1 to 2 percentage points. They differ for three reasons: + +- **Denominator.** Total generation measures what is produced; gross demand measures what is consumed. Within a region the difference is mostly imports and exports, so a region that exports can supply more than its own demand from renewables and show a proportion above 100%, as South Australia and Tasmania regularly do. We show this deliberately. Across the whole NEM, interconnector flows between regions cancel out and the two denominators are close. +- **Numerator.** We count battery discharge and pumped hydro generation as renewable (see above). At the midday peaks where renewable share records are set, storage is mostly charging, so this adds little. +- **Interval noise.** Operational demand can move by several hundred megawatts from one 5-minute interval to the next, while generation changes smoothly. A peak record takes the highest single interval, which tends to be one where demand briefly dipped, so our interval record for an event can sit 1 to 2 points above the figure AEMO reports for it. + +## Renewable Proportion Records + +The [records](https://openelectricity.org.au/records) feed tracks the highest and lowest `renewable_proportion` for the NEM, each NEM region and the WEM, over 5-minute intervals, days, months, quarters and years. + +- **Interval records** use a single 5-minute interval. The NEM figure is total renewable generation across all five regions divided by their total gross demand, not an average of the regional percentages. +- **Day, month, quarter and year records** divide total renewable generation by total gross demand across every interval in the period. This is an energy-weighted share, not an average of interval percentages. +- **Complete data only.** A value is only calculated when every input it needs is present for every region and every interval in the period: operational demand, generation and, in the NEM since late October 2015, rooftop solar. If any input is missing, that interval or period is skipped rather than calculated on partial data, so a gap in rooftop or demand data can't produce a false record. +- **Rooftop delay.** Rooftop solar estimates arrive 30 minutes to 2 hours after the interval they cover, so a new renewable proportion record can appear up to a couple of hours after it happened. +- **History.** Records start in June 2007. NEM rooftop solar data starts in late October 2015, so earlier records leave rooftop out of both the numerator and the denominator. WEM periods before the October 2023 move to 5-minute data use the 30-minute data as it is. +- **Bounds.** Values are rounded to two decimal places. Anything above 200% is treated as a data error and discarded. + ## Available API Metrics | Metric | Unit | Description | From 7eff29e76c83c27d7ce1196a309b24785eaa595c Mon Sep 17 00:00:00 2001 From: Nik Cubrilovic Date: Wed, 23 Sep 2026 15:49:52 +1000 Subject: [PATCH 2/4] docs(renewables): state records are built from confirmed data --- guides/renewables.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/guides/renewables.mdx b/guides/renewables.mdx index 51cbad3..8c2b11d 100644 --- a/guides/renewables.mdx +++ b/guides/renewables.mdx @@ -87,10 +87,10 @@ The [records](https://openelectricity.org.au/records) feed tracks the highest an - **Interval records** use a single 5-minute interval. The NEM figure is total renewable generation across all five regions divided by their total gross demand, not an average of the regional percentages. - **Day, month, quarter and year records** divide total renewable generation by total gross demand across every interval in the period. This is an energy-weighted share, not an average of interval percentages. -- **Complete data only.** A value is only calculated when every input it needs is present for every region and every interval in the period: operational demand, generation and, in the NEM since late October 2015, rooftop solar. If any input is missing, that interval or period is skipped rather than calculated on partial data, so a gap in rooftop or demand data can't produce a false record. -- **Rooftop delay.** Rooftop solar estimates arrive 30 minutes to 2 hours after the interval they cover, so a new renewable proportion record can appear up to a couple of hours after it happened. -- **History.** Records start in June 2007. NEM rooftop solar data starts in late October 2015, so earlier records leave rooftop out of both the numerator and the denominator. WEM periods before the October 2023 move to 5-minute data use the 30-minute data as it is. -- **Bounds.** Values are rounded to two decimal places. Anything above 200% is treated as a data error and discarded. +- **Confirmed data.** Every record is calculated from confirmed data for every region and every interval in the period: operational demand, generation and, in the NEM since October 2015, rooftop solar. +- **Timing.** Records are published once rooftop solar estimates for the interval are in, usually 30 minutes to 2 hours after it. +- **History.** Records start in June 2007. NEM records include rooftop solar from October 2015. WEM records before October 2023 are calculated from 30-minute data. +- **Precision.** Values are shown to two decimal places. ## Available API Metrics From 14cb34b58bc5f230442564d90b3b20788f97ff52 Mon Sep 17 00:00:00 2001 From: Nik Cubrilovic Date: Wed, 23 Sep 2026 16:27:17 +1000 Subject: [PATCH 3/4] docs(renewables): aemo's figure is half-hourly and counts battery generation --- guides/renewables.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/guides/renewables.mdx b/guides/renewables.mdx index 8c2b11d..b365023 100644 --- a/guides/renewables.mdx +++ b/guides/renewables.mdx @@ -75,11 +75,10 @@ Our `renewable_proportion` differs from AEMO's storage-adjusted metric in that w ### Instantaneous renewable share -AEMO's real-time headline figures, such as renewables supplying 80% of the NEM for the first time on 19 September 2026, are renewable generation as a share of **total generation**. Our `renewable_proportion` is renewable generation as a share of **gross demand**. Across the whole NEM the two usually agree to within 1 to 2 percentage points. They differ for three reasons: +AEMO's instantaneous renewable penetration, the figure behind headlines such as renewables supplying 80% of the NEM for the first time on 19 September 2026, is renewable generation as a share of **total generation** (NEM generation plus estimated rooftop solar), calculated for each half hour. Our `renewable_proportion` is renewable generation as a share of **gross demand**, calculated for each 5-minute interval. Both count wind, utility and rooftop solar, hydro, bioenergy and battery discharge as renewable, and neither counts battery charging or hydro pumping. They differ in two ways: - **Denominator.** Total generation measures what is produced; gross demand measures what is consumed. Within a region the difference is mostly imports and exports, so a region that exports can supply more than its own demand from renewables and show a proportion above 100%, as South Australia and Tasmania regularly do. We show this deliberately. Across the whole NEM, interconnector flows between regions cancel out and the two denominators are close. -- **Numerator.** We count battery discharge and pumped hydro generation as renewable (see above). At the midday peaks where renewable share records are set, storage is mostly charging, so this adds little. -- **Interval noise.** Operational demand can move by several hundred megawatts from one 5-minute interval to the next, while generation changes smoothly. A peak record takes the highest single interval, which tends to be one where demand briefly dipped, so our interval record for an event can sit 1 to 2 points above the figure AEMO reports for it. +- **Granularity.** AEMO's figure is a half-hourly value, the granularity of its rooftop solar estimates. Our interval records use 5-minute intervals, with rooftop solar interpolated to 5 minutes. Demand moves more within a half hour than generation does, so the highest 5-minute interval in an event sits above that half hour's average, typically by 1 to 2 percentage points. ## Renewable Proportion Records From 55ddef5c006e1f1d2d62cab06b537357e2bef34a Mon Sep 17 00:00:00 2001 From: Nik Cubrilovic Date: Wed, 23 Sep 2026 16:33:31 +1000 Subject: [PATCH 4/4] docs(demand): define gross demand and link it from renewables --- guides/demand.mdx | 33 +++++++++++++++++++++++++-------- guides/renewables.mdx | 4 ++-- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/guides/demand.mdx b/guides/demand.mdx index 683cdf0..390dbf9 100644 --- a/guides/demand.mdx +++ b/guides/demand.mdx @@ -4,10 +4,6 @@ icon: 'chart-line' sidebarTitle: 'Demand' --- - -We're working on a new **gross demand** metric and **renewable proportion** calculation. Track progress in [#398](https://github.com/opennem/opennem/issues/398). - - time of day chart on open electricity @@ -42,18 +38,20 @@ As more rooftop solar gets installed, and more home batteries rolled out, the ga ## Demand Metrics in Open Electricity -Open Electricity sources demand from AEMO's `DISPATCHREGIONSUM` table: +Open Electricity sources demand from AEMO's `DISPATCHREGIONSUM` table and AEMO's rooftop solar estimates: | Metric | AEMO Source Field | Description | |---|---|---| | `demand` | `TOTALDEMAND` | Scheduled demand, met by scheduled + semi-scheduled generation and interconnector flows | | `demand_energy` | Calculated | Energy derived from demand over the interval (MWh) | +| `demand_gross` | `DEMAND_AND_NONSCHEDGEN` + rooftop solar | [Gross demand](#gross-demand): operational demand plus rooftop solar generation | +| `demand_gross_energy` | Calculated | Energy derived from gross demand over the interval (MWh) | ### Scheduled vs operational vs underlying demand "Demand" means different things depending on how much generation you can see: -- **Scheduled demand** (`TOTALDEMAND`) is what NEMDE dispatches against. It only includes load visible to the dispatch engine: large industrial consumers and distribution network load as seen at transmission connection points. This is the demand figure Open Electricity uses. +- **Scheduled demand** (`TOTALDEMAND`) is what NEMDE dispatches against. It only includes load visible to the dispatch engine: large industrial consumers and distribution network load as seen at transmission connection points. This is Open Electricity's `demand` metric. - **Operational demand** (`DEMAND_AND_NONSCHEDGEN`) adds non-scheduled generation that AEMO has telemetry for (smaller wind and solar farms). It's the total demand being met by all grid-connected generation AEMO can observe. @@ -63,6 +61,25 @@ The gap between scheduled and underlying demand has grown as more rooftop solar --- +## Gross demand + +**Metric:** `demand_gross` (MW) / `demand_gross_energy` (MWh) + +Gross demand is Open Electricity's measure of total electricity consumption in a region: operational demand plus rooftop solar generation. + +$$ +\text{demand\_gross} = \text{operational demand} + \text{rooftop solar} +$$ + +- **Operational demand** is AEMO's `DEMAND_AND_NONSCHEDGEN`: demand met by scheduled, semi-scheduled and non-scheduled generation, net of interconnector flows. +- **Rooftop solar** is AEMO's estimate of rooftop solar output for each half hour, interpolated to 5-minute intervals. + +Adding rooftop solar brings back the consumption met behind the meter, so gross demand sits close to underlying demand. Gross demand is the denominator of [renewable proportion](/guides/renewables#renewable-proportion). + +In the WEM, gross demand is total generation from WEM facilities (see [NEM vs WEM demand](#nem-vs-wem-demand)) and does not include rooftop solar. + +--- + ## How AEMO calculates TOTALDEMAND AEMO calculates `TOTALDEMAND` per region per 5-minute dispatch interval. It combines two inputs: @@ -122,7 +139,7 @@ Demand data is available via the market endpoint: POST /v4/market/network/{network_code} ``` -Available demand metrics: `demand`, `demand_energy` +Available demand metrics: `demand`, `demand_energy`, `demand_gross`, `demand_gross_energy` @@ -167,5 +184,5 @@ const { datatable } = await client.getMarket("NEM", ["demand", "demand_energy"], | Network | Interval | Source | |---|---|---| -| NEM | 5 min | AEMO `DISPATCHREGIONSUM` (`TOTALDEMAND`) | +| NEM | 5 min | AEMO `DISPATCHREGIONSUM` (`TOTALDEMAND`); gross demand adds AEMO rooftop solar estimates (half-hourly, interpolated to 5 min) | | WEM | 30 min | Derived from `facility_scada` generation totals | diff --git a/guides/renewables.mdx b/guides/renewables.mdx index b365023..f3942b1 100644 --- a/guides/renewables.mdx +++ b/guides/renewables.mdx @@ -46,7 +46,7 @@ $$ \text{renewable\_proportion} = \frac{\text{generation\_renewable}}{\text{demand\_gross}} \times 100 $$ -Where `demand_gross` = operational demand + rooftop solar generation. +Where `demand_gross` is [gross demand](/guides/demand#gross-demand): operational demand plus rooftop solar generation. ## Renewable with Storage Proportion @@ -75,7 +75,7 @@ Our `renewable_proportion` differs from AEMO's storage-adjusted metric in that w ### Instantaneous renewable share -AEMO's instantaneous renewable penetration, the figure behind headlines such as renewables supplying 80% of the NEM for the first time on 19 September 2026, is renewable generation as a share of **total generation** (NEM generation plus estimated rooftop solar), calculated for each half hour. Our `renewable_proportion` is renewable generation as a share of **gross demand**, calculated for each 5-minute interval. Both count wind, utility and rooftop solar, hydro, bioenergy and battery discharge as renewable, and neither counts battery charging or hydro pumping. They differ in two ways: +AEMO's instantaneous renewable penetration, the figure behind headlines such as renewables supplying 80% of the NEM for the first time on 19 September 2026, is renewable generation as a share of **total generation** (NEM generation plus estimated rooftop solar), calculated for each half hour. Our `renewable_proportion` is renewable generation as a share of [**gross demand**](/guides/demand#gross-demand), calculated for each 5-minute interval. Both count wind, utility and rooftop solar, hydro, bioenergy and battery discharge as renewable, and neither counts battery charging or hydro pumping. They differ in two ways: - **Denominator.** Total generation measures what is produced; gross demand measures what is consumed. Within a region the difference is mostly imports and exports, so a region that exports can supply more than its own demand from renewables and show a proportion above 100%, as South Australia and Tasmania regularly do. We show this deliberately. Across the whole NEM, interconnector flows between regions cancel out and the two denominators are close. - **Granularity.** AEMO's figure is a half-hourly value, the granularity of its rooftop solar estimates. Our interval records use 5-minute intervals, with rooftop solar interpolated to 5 minutes. Demand moves more within a half hour than generation does, so the highest 5-minute interval in an event sits above that half hour's average, typically by 1 to 2 percentage points.