Skip to content

Dashboard cards

Spot Forecast ships no Lovelace card of its own. It ships two dashboards for the Plotly Graph Card (custom:plotly-graph), written for and tested on v4.0.2.

  1. Install Plotly Graph Card from HACS (category Dashboard) and reload the browser.
  2. On a dashboard: Add card → Manual, and paste one of the YAML files.

Both cards read only the integration's fixed entity ids, so they work unchanged on any instance language. Their labels, numbers and dates follow the Home Assistant language: German when it starts with de, English otherwise. Every label sits in the table T at the top of each card's first filter. Below, labels are given in English with the German one in parentheses.

The cards are written for the zone DE-LU. For another zone, replace every de_lu in the YAML with the zone's id: nl, dk1, dk2 or no2 (as in sensor.spot_forecast_nl_price and spot_forecast:nl_price). Prices stay in EUR, as the integration reports them for every zone.

Forecast card

examples/plotly_forecast.yaml

The forecast card: known prices as a black step line, then six forecast days in blue with a hatched red peak-risk band above and a hatched green low-price band below, the dearest and cheapest hours of each day marked, and a peak warning above each forecast day.

One time axis from yesterday to the end of the forecast:

  • known prices (yesterday from the statistics, today and tomorrow from prices) as a solid step line in the theme's text colour;
  • the forecast (expected price) as a blue step line;
  • the peak risk hatched red from the expected price up to P90;
  • the low-price chance hatched green from P10 up to the expected price, so likely negative hours reach below the zero line;
  • per day the 4 dearest (▲) and 4 cheapest (▼) hours;
  • above each day its weekday, date and maximum, and "⚠ up to NN" ("⚠ bis NN") in red when the peak risk crosses the threshold of the peak-risk sensor; on a narrow card the header shortens step by step to "Mon 26" / "27 ct" / "⚠ 25" ("Mo 26." / …) and then to the weekday alone;
  • nights shaded from sun.sun, and a dotted "now" ("jetzt") line where the forecast begins;
  • with the option grid fees and taxes set, two buttons top right: "Exchange" ("Börse", the default) and "incl. fees" ("mit Abgaben"), which shows every price, band and day maximum as the total price: VAT on the exchange price plus the surcharge. The "⚠" warning still compares the exchange price with the threshold. The choice holds until the page is reloaded.

Prices are shown in ct/kWh (EUR/kWh × 100), with English or German number formatting ("3.2 ct" / "3,2 ct").

Look-back card

examples/plotly_lookback.yaml

The look-back card: the actual price as a dark line and the forecast made two days ahead in orange, the gap between them filled red, with buttons for the horizon and the range and the mean error above the plot.

How good were past forecasts on your install? The card draws the actual price against the forecast made h days before, from the long-term statistics:

  • the buttons on the left choose the horizon, D+1 … D+6, or all (alle: all six lines, no fill); with one horizon, the gap to the actual price is filled red;
  • the buttons on the right choose the range: 7 d, 30 d, 3 m, 6 m (7 T, 30 T, 3 M, 6 M);
  • above the plot: the mean absolute error of the shown horizon over the shown range, and the error in the hours above the peak threshold.

It has content from the first day, thanks to the backfill. The horizon choice holds until the page is reloaded and is shared by all look-back cards on the page.

How the screenshots are made

The images in the README, on the website and on this page are rendered by tools/gen_card_screenshots.py: it mounts the shipped YAML in the released Plotly Graph Card bundle, in English and in German, against the states and long-term statistics of a real installation: a snapshot taken on 2 November 2026 with tools/snapshot_live.py. That moment lies a month after the model's training cutoff, so the forecast in it is out of sample. Before publishing, the snapshot drops personal values: the surcharge is set to 0 and the sun times are those of the middle of Germany. The edge cases (clock changes, a stale forecast, a fresh install, the fees view) are rendered from scenarios that the integration's own code computes from the bundled model and research data (tools/card_scenarios.py).