Skip to content

Energy Storage & Battery

Grid-scale battery energy storage systems (BESS) are now a significant and growing part of the NEM. Australia has deployed more than 3 GW of grid-scale battery capacity, with the Hornsdale Power Reserve (South Australia) being the world’s most studied large-scale battery project. Energy Copilot provides comprehensive analytics for BESS operators, investors, and market analysts.

FacilityStateCapacityDurationOwner
Victorian Big Battery (Moorabool)VIC300 MW / 450 MWh1.5hAGL/Neoen
Hornsdale Power ReserveSA150 MW / 193.5 MWh1.3hNeoen
Capital Battery (Canberra)ACT50 MW / 50 MWh1hActewAGL
Waratah Super Battery (proposed)NSW850 MW / 1,680 MWh2hAkaysha
Eraring Battery (under const.)NSW460 MW / 920 MWh2hOrigin Energy

BESS Dispatch Overview (/front-office/battery-dispatch)

Section titled “BESS Dispatch Overview (/front-office/battery-dispatch)”
  • Current charge/discharge status for all registered BESS DUIDs
  • State of charge (SOC) estimates based on dispatch history
  • Charge/discharge cycle count (daily, monthly, cumulative)
  • Revenue breakdown: energy arbitrage vs FCAS vs network services

Battery Economics (/front-office/battery-economics)

Section titled “Battery Economics (/front-office/battery-economics)”
  • Arbitrage P&L calculator: model expected returns based on historical price spreads
  • LCOE comparison: levelised cost of storage vs spot price revenue
  • Revenue stack: energy, FCAS (8 services), RERT, network services
  • Payback analysis: configurable capex, opex, degradation rate, discount rate

Degradation Modelling (/front-office/battery-degradation)

Section titled “Degradation Modelling (/front-office/battery-degradation)”

The platform models battery degradation using a cycle-based and calendar-based approach:

Capacity_remaining(%) = 100 - (Cycle_Degradation_pct × Cycles) - (Calendar_Degradation_pct × Years)

Where:

  • Cycle_Degradation_pct: typically 0.003–0.008% per full cycle for NMC chemistry
  • Calendar_Degradation_pct: typically 1–2% per year depending on operating temperature

Users can input actual degradation observations to calibrate the model against real performance data.

The platform provides a simplified arbitrage optimisation analysis:

# Optimal charge/discharge schedule for a 4-hour battery
# Given price forecast for next 24 hours
def calculate_arbitrage_schedule(
prices_24h: list[float],
capacity_mw: float,
duration_h: float,
efficiency: float = 0.92
) -> dict:
"""
Returns optimal charge/discharge schedule maximising revenue.
Uses dynamic programming over discretised state of charge.
"""
...

The Middle Office Battery Optimisation page provides the full operational optimisation tool with real-time price data.

Batteries are particularly well-suited to FCAS markets because:

  1. They can respond in milliseconds (vs minutes for thermal generators)
  2. They can simultaneously provide multiple FCAS services (regulation + contingency)
  3. Their FCAS availability is not limited by fuel supply

Screenshot: Hornsdale Power Reserve FCAS enablement timeline showing simultaneous regulation raise, regulation lower, and contingency services enabled.

Terminal window
GET /api/battery/fcas-revenue?duid=HPRL1&start=2025-03-14&end=2025-03-21
# Response
{
"duid": "HPRL1",
"period": {"start": "2025-03-14", "end": "2025-03-21"},
"fcas_revenue_aud": 142350,
"energy_revenue_aud": 28940,
"total_revenue_aud": 171290,
"fcas_services_enabled": ["RAISE6SEC", "LOWER6SEC", "RAISE60SEC", "LOWER60SEC", "RAISEREG", "LOWERREG"]
}

As the first generation of large-scale BESS approaches end of warranty (~10 years), second-life analysis becomes commercially important. The platform includes:

  • Remaining useful life (RUL) estimation based on degradation model
  • Second-life use case matching: grid services, off-grid, EV charging infrastructure
  • Repurposing economics: cost of refurbishment vs value of remaining capacity
  • Carbon accounting: embodied carbon in manufacturing vs lifecycle extension
Terminal window
# Current BESS dispatch across NEM
GET /api/battery/dispatch/latest
# BESS for specific DUID
GET /api/battery/dispatch?duid=HPRL1&period=7d
# Arbitrage opportunity analysis
GET /api/battery/arbitrage?region=SA1&capacity_mw=100&duration_h=2
# Degradation projection
POST /api/battery/degradation
Content-Type: application/json
{
"initial_capacity_mwh": 193.5,
"current_cycles": 1842,
"age_years": 6.5,
"chemistry": "NMC",
"avg_dod_pct": 85
}