Dispatch SCADA data records the actual power output of generators in the National Electricity Market (NEM). Observing the SCADA data is essential for understanding near real‑time grid dynamics.
By analyzing Dispatch SCADA data, we can track generator performance, compare fuel mixes, generation technology types and understand how different regions share power amongst themselves and contribute to Australia’s energy supply. This forms the foundation for deeper dashboards insights and ongoing monitoring experiments in my IT lab.
The Dispatch_SCADA data source is the most granular view of how Australia’s energy system responds in near real time and can be sourced from here:
- Current data: https://nemweb.com.au/Reports/CURRENT/Dispatch_SCADA/
- Archived data: https://nemweb.com.au/Reports/ARCHIVE/Dispatch_SCADA/
For my home IT Lab project my PostgreSQL database ingests the SCADA data into the “NEM” database. The below queries can be used to understand the schemas and column as well as the underlying data.
1. Dispatch SCADA Table Schema
This query lists all columns and their data types in the dispatch_scada table. It’s a quick way to see the structure including key fields like settlement_date, duid, and scada_value before running deeper analysis.
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'dispatch_scada'
ORDER BY ordinal_position
;Output…
column_name | data_type
-----------------+--------------------------
settlement_date | timestamp with time zone
duid | text
scada_value | numeric
last_changed | timestamp with time zone
filename | text
fetched_at | timestamp with time zone
(6 rows)
2. Dataset Span: Earliest and Latest Records
This query checks the overall coverage of the Dispatch SCADA dataset by returning the total number of records ingested, along with the earliest and latest timestamps. It validates that the ingestion pipeline is working correctly as well as understanding the time window of data available for analysis. In practice, this confirms both the historical depth and the most recent updates captured in the NEM DB.
SELECT COUNT(*) AS total, MIN(settlement_date), MAX(settlement_date)
FROM dispatch_scada
;Output…
total | min | max
----------+------------------------+------------------------
66389023 | 2024-07-30 00:05:00+10 | 2025-12-07 07:00:00+11
(1 row)3. Daily Record Counts and Active DUID’s
This query provides a day‑to‑day snapshot of how much Dispatch SCADA data has been ingested and how many generating units (DUIDs) were active. By grouping records per day, it highlights both dataset scale and coverage, while the first and last timestamps confirm the time span captured for each day. This is a quick way to validate ingestion completeness and generator participation across the NEM
SELECT
date_trunc('day', settlement_date) AS day,
COUNT(*) AS total_records,
COUNT(DISTINCT duid) AS active_duids,
MIN(settlement_date) AS first_ts,
MAX(settlement_date) AS last_ts
FROM dispatch_scada
GROUP BY day
ORDER BY day DESC
LIMIT 30
;Output…
day | total_records | active_duids | first_ts | last_ts
------------------------+---------------+--------------+------------------------+------------------------
2025-07-24 00:00:00+10 | 79287 | 472 | 2025-07-24 00:00:00+10 | 2025-07-24 13:55:00+10
2025-07-23 00:00:00+10 | 135923 | 472 | 2025-07-23 00:00:00+10 | 2025-07-23 23:55:00+10
2025-07-22 00:00:00+10 | 135929 | 472 | 2025-07-22 00:00:00+10 | 2025-07-22 23:55:00+10
...
...
2025-06-27 00:00:00+10 | 135520 | 471 | 2025-06-27 00:00:00+10 | 2025-06-27 23:55:00+10
2025-06-26 00:00:00+10 | 135542 | 471 | 2025-06-26 00:00:00+10 | 2025-06-26 23:55:00+10
2025-06-25 00:00:00+10 | 135565 | 471 | 2025-06-25 00:00:00+10 | 2025-06-25 23:55:00+10
(30 rows)
4. List largest SCADA value and DUID
Using this query we can see that “Tumut 3” (hydro) station peaks at nearly 1,800 MW (scada_value), highlighting the scale of hydro generation in NSW.
SELECT
settlement_date,
duid,
filename,
scada_value
FROM dispatch_scada
ORDER BY scada_value DESC
LIMIT 20
;Output…
settlement_date | duid | filename | scada_value
------------------------+--------+-----------------------------------+-------------
2025-03-20 18:20:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1798.679930
2025-03-20 17:35:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1797.799930
2025-03-20 18:30:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1797.25
2025-03-20 18:00:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1797.190060
2025-03-31 17:20:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250331.zip | 1796.589970
...
...
2025-03-20 18:35:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1787.550050
2025-03-20 18:05:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1787.219850
2025-03-20 18:15:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250320.zip | 1786.859860
2025-05-14 16:15:00+10 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250514.zip | 1785.950070
2025-03-14 17:45:00+11 | TUMUT3 | PUBLIC_DISPATCHSCADA_20250314.zip | 1785.530030
(20 rows)
5. Adding Context with DUID Metadata
This query enriches raw SCADA records by joining them with duid_metadata, turning generator IDs into meaningful station names and regions. It provides recent output values with clear context, making the data easier to interpret. The metadata can be downloaded from the AEMO Registration page.
SELECT
ds.settlement_date,
ds.duid,
md.station_name,
md.region,
ds.scada_value
FROM dispatch_scada ds
JOIN duid_metadata md ON ds.duid = md.duid
WHERE ds.settlement_date >= NOW() - INTERVAL '3 hours'
ORDER BY ds.settlement_date DESC
LIMIT 100
;Output…
settlement_date | duid | station_name | region | scada_value
------------------------+----------+------------------------------------+--------+-------------
2025-07-24 15:30:00+10 | YWPS4 | EnergyAustralia Yallourn Pty Ltd | VIC1 | 204.1875
2025-07-24 15:30:00+10 | YWPS3 | EnergyAustralia Yallourn Pty Ltd | VIC1 | 203.343750
2025-07-24 15:30:00+10 | YWPS2 | EnergyAustralia Yallourn Pty Ltd | VIC1 | 202.75
2025-07-24 15:30:00+10 | YWPS1 | EnergyAustralia Yallourn Pty Ltd | VIC1 | 203
2025-07-24 15:30:00+10 | YSWF1 | Pacific Hydro Yaloak South Pty Ltd | VIC1 | 3.80
2025-07-24 15:30:00+10 | YENDWF1 | Lal Lal Wind Farms Nom Co Pty Ltd | VIC1 | 20.89
2025-07-24 15:30:00+10 | YATSF1 | Yatpool Sun Farm Pty Ltd | VIC1 | 27.86
2025-07-24 15:30:00+10 | YARWUN_1 | RTA Yarwun Pty Ltd | QLD1 | 119.35
2025-07-24 15:30:00+10 | YARANSF1 | Yarranlea Solar Pty Ltd | QLD1 | 71.70
2025-07-24 15:30:00+10 | YAMBUKWF | Energy Pacific (Vic) Pty Ltd | VIC1 | 6.30
(10 rows)6. Top 10 Stations by Average SCADA Output
This query ranks the ten stations (DUID) with the highest average SCADA values over the past 24 hours, showing which generators contributed the most power during that period.
SELECT
md.station_name,
ROUND(AVG(ds.scada_value), 2) AS avg_output
FROM dispatch_scada ds
JOIN duid_metadata md ON ds.duid = md.duid
WHERE ds.settlement_date >= NOW() - INTERVAL '1 day'
GROUP BY md.station_name
ORDER BY avg_output DESC
LIMIT 10
;Output…
station_name | avg_output
--------------------------------------------------------------------------+------------
AGL Loy Yang Marketing Pty Ltd | 501.30
Delta Electricity | 451.88
AGL Macquarie Pty Limited | 388.93
Callide Power Trading Pty Limited | 304.61
PARF Company 10 Pty Limited as The Trustee for Coopers Gap Project Trust | 280.54
Millmerran Energy Trader Pty Ltd | 273.39
EnergyAustralia Yallourn Pty Ltd | 261.04
MacIntyre UJV Operator Pty Ltd | 194.01
Alinta Energy Retail Sales Pty Ltd | 192.49
Pelican Point Power Limited | 191.31
(10 rows)
7. Regional SCADA Contributions
This query aggregates SCADA values by region, showing the total megawatts generated in each state over the past 24 hours. By grouping outputs at the regional level, it highlights how different parts of the NEM contribute to overall supply. The results make it easy to compare states side‑by‑side, revealing which regions are carrying the largest share of generation during the period.
SELECT
md.region,
ROUND(SUM(ds.scada_value), 2) AS total_mw
FROM dispatch_scada ds
JOIN duid_metadata md ON ds.duid = md.duid
WHERE ds.settlement_date >= NOW() - INTERVAL '1 day'
GROUP BY md.region
ORDER BY total_mw DESC
;Output…
region | total_mw
--------+------------
NSW1 | 2383326.63
QLD1 | 2030496.71
VIC1 | 1916553.35
SA1 | 427334.80
TAS1 | 382792.01
(5 rows)
8. Fuel Mix Breakdown
This query groups SCADA output by each generator’s primary fuel type, summing contributions over the past 24 hours. It highlights how different sources such as coal, gas, wind, hydro, solar, and batteries collectively shape the energy mix. The results provide a clear snapshot of the relative share of each fuel type in total generation.
SELECT
md.fuel_primary,
ROUND(SUM(ds.scada_value), 2) AS total_output_mw
FROM dispatch_scada ds
JOIN duid_metadata md ON ds.duid = md.duid
WHERE ds.settlement_date >= NOW() - INTERVAL '1 day'
GROUP BY md.fuel_primary
ORDER BY total_output_mw DESC
;Output…
fuel_primary | total_output_mw
---------------------------------------+-----------------
Fossil | 4786717.67
Wind | 1187819.81
Hydro | 572929.41
Solar | 547058.41
[null] | 36524.85
Renewable/ Biomass / Waste | 18565.90
Renewable/ Biomass / Waste and Fossil | -373.50
Battery storage | -13388.11
(8 rows)