Electricity prices, six days ahead.

The day-ahead auction only covers today and tomorrow. Spot Forecast adds the six days after that, hour by hour, for the DE-LU, NL, DK1, DK2 or NO2 zone, with a peak-risk band that says how high a price could go. It runs inside Home Assistant on open data.

  • Free, MIT licence
  • No account, no API key
  • Light enough for a Raspberry Pi
  • Home Assistant 2024.11+
  1. Today 
  2. Tomorrow 
  3. +2 days 
  4. +3 days 
  5. +4 days 
  6. +5 days 
  7. +6 days 
  8. +7 days 
  • Known from the auction
  • Forecast, with peak risk
The auction result for tomorrow is out, so the forecast covers the six days after it.
The Spot Forecast card in Home Assistant: known prices for 1 to 3 November 2026 as a black step line, then six forecast days to 9 November as a blue line with a hatched red peak-risk band above it and a hatched green low-price band below. Labels above each day give the maximum and, on every forecast day, the peak risk such as “⚠ 69”.
The forecast card on a live installation on 2 November 2026, a month after the model’s training cutoff, so this forecast is out of sample. The ink line is known, blue is the forecast, hatched red reaches up to the peak risk (P90), hatched green down to the low-price value (P10). ▲ and ▼ mark each day’s four dearest and cheapest hours. The cards follow Home Assistant’s language.

How good is it?

Every figure here is out of sample. The models were refit month by month on past data only and then forecast days they had never seen, with weather forecasts never fresher than, and up to a day older than, what a live install uses. Pick a horizon to see the forecast made that many days ahead against the price that came.

Forecast against the actual priceHourly, ct/kWh, the six months before the model’s training cutoff

Loading the chart…

Prices: Bundesnetzagentur | SMARD.de via Energy-Charts (CC BY 4.0). Forecasts: the bundled model’s walk-forward backfill, the same data a new install imports.

Mean absolute error in ct/kWh per horizon, bundled model de_lu-2026-10

Forecast made Apr 2025 – Sep 2026 Jul 2026 – Sep 2026 Above peak risk
ErrorNaive errorBetter than naive ErrorNaive errorBetter than naive
D+1 1 day ahead1.703.3950%1.994.2954%12%
D+2 2 days ahead1.783.3948%2.144.2950%12%
D+3 3 days ahead1.893.3944%2.294.2947%12%
D+4 4 days ahead2.043.3940%2.504.2942%12%
D+5 5 days ahead2.313.3932%2.924.2932%12%
D+6 6 days ahead2.433.3928%3.034.2929%12%

Naive repeats the price of the same hour a week before. “Better than naive” is 1 − error ÷ naive error, which depends far less on how wild the market was. The full period and the error of the last three months are the model’s own report. The model report has the naive error for the full period only, so for the last three months it is computed from the bundled backfill and Energy-Charts prices, on the same hours as the report’s error. “Above peak risk” covers the full period; the peak-risk value (P90) should be exceeded in about 1 hour in 10.

Peaks come out too low

The forecast gets the timing of price peaks right, not their height. In hours above 21.2 ct it is on average 7.5 ct too low one day ahead and 9.7 ct six days ahead. For peaks, read the peak-risk band: it is exceeded in about 12% of hours, and it is what the peak-risk sensor switches on.

Expensive gas, larger errors

The error depends on the market. Since July 2026 gas and electricity prices have been higher and more volatile, and the error rose to 2.0 ct one day ahead and 3.0 ct six days ahead. The naive forecast got worse too, so the lead over it held: 54% better than naive one day ahead and 29% six days ahead, against 50% and 28% over the full period. Models are retrained every month and reach your install without an update.

Supported zones

Each bidding zone has its own model, trained on its own prices and on the weather where its wind, sun and demand are. Pick the zone when you add the integration; several zones can run side by side.

Map of northern and central Europe with the supported bidding zones highlighted DE-LU – Germany and Luxembourg: 1.70 ct/kWh one day ahead NL – Netherlands: 1.75 ct/kWh one day ahead DK1 – Denmark West: 1.67 ct/kWh one day ahead DK2 – Denmark East: 1.82 ct/kWh one day ahead NO2 – Southern Norway: 1.50 ct/kWh one day ahead
Highlighted: the zones with a bundled model. Map: Natural Earth. Zone borders that follow the grid rather than regions are drawn approximately.

Mean absolute error in ct/kWh per horizon, bundled model of each zone

ZoneD+1D+2D+3D+4D+5D+6
DE-LU Germany and Luxembourg1.701.781.892.042.312.43
NL Netherlands1.751.851.932.052.222.31
DK1 Denmark West1.671.751.892.082.382.51
DK2 Denmark East1.821.922.022.212.502.62
NO2 Southern Norway1.501.581.661.731.791.85

Out of sample, over each model’s own walk-forward period. Price levels differ between zones, so compare a zone’s errors with its naive error in the documentation rather than with another zone.

How it works

A run needs nothing but numpy: on a Raspberry Pi 5 it takes about 1.2 seconds, downloads included. It repeats after each new weather model run, four times a day, and again when the auction result for tomorrow appears.

  1. Known pricesThe last 40 days of DE-LU day-ahead prices from Energy-Charts, in one request.
  2. Weather forecastECMWF from Open-Meteo for 10 points in Germany and 12 in neighbouring countries: wind at 100 m, sunshine, temperature, cloud and rain.
  3. Three tree modelsTrained every month on GitHub, run in numpy on your device: the expected price, a peak-risk value (P90) and a low-price value (P10) per hour.
  4. Calibrated on its recordEvery forecast is kept. The bands are shifted by how often they were crossed in the last 56 days, so peak risk stays near one hour in ten.
  5. Sensors and statisticsOne price sensor with known and forecast hours, a peak-risk and a negative-price warning, and long-term statistics of every forecast against the actual price.

Two cards for your dashboard

Both are YAML for the Plotly Graph Card, written for v4.0.2: paste one into a manual card. The forecast card is at the top of this page.

The look-back card in Home Assistant: the actual price as a dark line from 4 October to 2 November 2026 and the forecast made two days ahead in orange, with the gap between them filled red. Buttons above choose D+1 to D+6 or all, and 7 days to 6 months.
The look-back card: the forecast made two days ahead against the actual price, with the mean error over the shown range. It reads the long-term statistics, which the integration fills from the first day, backfill included.

What you get in Home Assistant

  • sensor.spot_forecast_de_lu_priceThe current price; the attribute prices holds every slot from today 00:00 to the end of the forecast.
  • binary_sensor.spot_forecast_de_lu_peak_riskOn when a price above your threshold is known or likely in the next 48 hours.
  • binary_sensor.spot_forecast_de_lu_negative_priceOn when a negative price is known or likely in the next 48 hours.
  • Day sensors, statistics, diagnosticsMean, minimum and maximum per day for automations; the forecast error of the last 30 days; the model in use.

Works with Smart Battery Pilot

Choose sensor.spot_forecast_de_lu_price as the price entity in Smart Battery Pilot. Its ENTSO-E adapter reads the prices attribute as it is. Hours past the auction are marked source: forecast and carry p90 and p10.

Install

Spot Forecast is in the HACS default store. It works right after setup with the bundled model and needs no account.

  1. Find Spot Forecast in HACS

    Use the button, or search for Spot Forecast in HACS.

  2. Download Spot Forecast and restart Home Assistant.

  3. Settings → Devices & services → Add integration → Spot Forecast.

    Choose the bidding zone. The first forecast is made right away, and the look-back starts with 60 days of backfill.

  4. Add the cards

    Install the Plotly Graph Card from HACS and paste the YAML from examples/.

Open data, credited

The price and weather sources are free and need no key. The integration names them in the sensor’s attribution.

Energy-Charts
Day-ahead prices DE-LU, NL, DK1, DK2 and NO2. Energy-Charts by Fraunhofer ISE, price data from Bundesnetzagentur | SMARD.de, licensed CC BY 4.0.
Open-Meteo
Weather forecasts from the ECMWF IFS model at 0.25°. Open-Meteo, licensed CC BY 4.0, free for non-commercial use.
Natural Earth
Country and region borders of the zone map, 1:10m, public domain.