Skip to content

NEM – Dispatch SCADA & Spot Price

Introduction & Context

This dashboard tracks two critical signals in the National Electricity Market (NEM):

  • Spot Price – the Regional Reference Price (RRP) 5‑minute wholesale price of electricity in each region.
  • SCADA Demand – the real‑time measured demand from Supervisory Control and Data Acquisition systems.
    Together, these values provide a clear picture of short‑term market dynamics, showing how demand fluctuations drive price volatility

We can now visualises near real-time spot prices and SCADA demand across the National Electricity Market (NEM). It provides a state-by-state breakdown of current prices and demand, using AEMO’s dispatch datasets. The goal is to surface short-term volatility, demand spikes, and regional dynamics in a format that supports operational monitoring and recruiter-facing storytelling.

Problem / Observation Goal

Spot prices and SCADA demand are published separately by AEMO, making it difficult to correlate price volatility with real-time demand. This dashboard was built to combine both datasets into a unified view, enabling anomaly detection, regional comparison, and short-term forecasting.

Data Sources & Collection

  • Source: AEMO RRP spot price and SCADA datasets via NEMWeb
  • ETL: Python scripts scheduled on Raspberry Pi 5
  • Database: PostgreSQL storing timestamped dispatch and SCADA records
  • Visualisation: Grafana dashboards with region-level panels and trend overlays
  • Hardware: Raspberry Pi 5 acting as edge node and orchestration server

Design Philosophy & Dashboard Approach

The dashboard is designed for clarity and short-term trend visibility. Each region has its own panel showing:

  • Spot price (5-minute resolution)
  • SCADA demand in MW
  • Time-series graph of price and demand correlation
  • Real-time single-value panels for current readings

This layout supports fast anomaly detection and operational storytelling across NSW, QLD, SA, TAS, and VIC.

System Architecture

Data flow: NEMWeb → Python ETL → PostgreSQL → Grafana

  • Python scripts fetch dispatch and SCADA files from NEMWeb
  • SQL queries extract region-level spot prices and aggregate SCADA demand
  • PostgreSQL stores structured records with indexed timestamps
  • Grafana queries the database and renders dashboards in real time

Dashboard Showcase

  • Real-time panels show current spot price and SCADA demand for each region
  • Time-series graphs overlay price and demand, highlighting short-term volatility
  • Panels are colour-coded for instant anomaly detection and regional comparison
  • Supports operational monitoring and recruiter-facing insights into energy market dynamics

Outcomes & Insights

  • Price-demand correlation: Spot price spikes often align with SCADA demand surges
  • Regional volatility: NSW and QLD show sharper swings compared to TAS and VIC
  • Operational reliability: Raspberry Pi 5 and PostgreSQL setup ingests and serves data continuously
  • SQL efficiency: Queries are optimised for Grafana panels with 24-hour rolling windows

Lessons Learned

  • Time zone handling is critical — all timestamps are normalised to UTC for Grafana compatibility
  • SCADA aggregation requires careful JOIN logic to avoid duplication or null values
  • Visual clarity matters — region-level panels outperform multi-region overlays for recruiter storytelling
  • Modular ingestion pipelines scale — same structure can be reused for FCAS, interconnectors, and forecasts

Future Development & Fixes

  • Add Prometheus exporters for alerting on price spikes and demand surges
  • Integrate weather overlays to explain demand anomalies
  • Expand dashboard to include FCAS prices and interconnector flows
  • Refactor SQL to support dynamic region selection and longer time windows