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+
- Today
- Tomorrow
- +2 days
- +3 days
- +4 days
- +5 days
- +6 days
- +7 days
- Known from the auction
- Forecast, with peak risk

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.
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 | ||||
|---|---|---|---|---|---|---|---|
| Error | Naive error | Better than naive | Error | Naive error | Better than naive | ||
| D+1 1 day ahead | 1.70 | 3.39 | 50% | 1.99 | 4.29 | 54% | 12% |
| D+2 2 days ahead | 1.78 | 3.39 | 48% | 2.14 | 4.29 | 50% | 12% |
| D+3 3 days ahead | 1.89 | 3.39 | 44% | 2.29 | 4.29 | 47% | 12% |
| D+4 4 days ahead | 2.04 | 3.39 | 40% | 2.50 | 4.29 | 42% | 12% |
| D+5 5 days ahead | 2.31 | 3.39 | 32% | 2.92 | 4.29 | 32% | 12% |
| D+6 6 days ahead | 2.43 | 3.39 | 28% | 3.03 | 4.29 | 29% | 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.
Mean absolute error in ct/kWh per horizon, bundled model of each zone
| Zone | D+1 | D+2 | D+3 | D+4 | D+5 | D+6 |
|---|---|---|---|---|---|---|
| DE-LU Germany and Luxembourg | 1.70 | 1.78 | 1.89 | 2.04 | 2.31 | 2.43 |
| NL Netherlands | 1.75 | 1.85 | 1.93 | 2.05 | 2.22 | 2.31 |
| DK1 Denmark West | 1.67 | 1.75 | 1.89 | 2.08 | 2.38 | 2.51 |
| DK2 Denmark East | 1.82 | 1.92 | 2.02 | 2.21 | 2.50 | 2.62 |
| NO2 Southern Norway | 1.50 | 1.58 | 1.66 | 1.73 | 1.79 | 1.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.
- Known pricesThe last 40 days of DE-LU day-ahead prices from Energy-Charts, in one request.
- Weather forecastECMWF from Open-Meteo for 10 points in Germany and 12 in neighbouring countries: wind at 100 m, sunshine, temperature, cloud and rain.
- 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.
- 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.
- 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.

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.
Find Spot Forecast in HACS
Use the button, or search for Spot Forecast in HACS.
Download Spot Forecast and restart Home Assistant.
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.
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.