Språk

Home Assistant · strømpris og CO2

To likeverdige veier til pris- og CO2-data i Home Assistant

Det finnes to fullt støttede veier: en nativ HACS-integrasjon med UI-oppsett, eller en vanlig REST-sensor i YAML. Begge bruker samme API og returnerer strømpris, CO2 og ferdig beregnede tidsvinduer for norske prisområder NO1 til NO5.

Hvilken vei passer for deg?

Åpen kildekode-repository for HACS-integrasjonen: github.com/BackupBaTTerY/energypriceforecast-home-assistant. I HACS under "Egendefinerte repositorier" (kategori Integration), installer så "Energy Price Forecast EU" og sett den opp via Innstillinger → Enheter & tjenester. Foretrekker du å styre alt via YAML, bruk REST-sensoren lenger ned på siden i stedet - begge veier gir samme data.

Kortversjonen

Hvis du bare trenger nåværende pris, nåværende CO2-verdi eller billigste/grønneste tidsvindu, bruk /api/v1/home-assistant/summary - via HACS-integrasjonen eller direkte som REST-sensor.

Viktig for Norge

Bruk alltid prisområdet direkte, for eksempel country=no1. Et generisk country=no er ikke presist nok for norske strømpriser.

Sammenlign prognosen med publiserte priser

Grønt viser publiserte day-ahead-priser, oransje den aktuelle prognosen og den blå stiplede linjen den først lagrede prognosen. Den tidligere prognosen blir stående når de offisielle prisene kommer.

  1. Oppdater Energy Price Forecast EU til minst 1.12.0 i HACS, og start Home Assistant på nytt. Installer også ApexCharts Card 2.1.0 eller nyere via HACS.
  2. Erstatt alle tre sensor.CHANGE_ME med samme prisserie-entitet fra Utviklerverktøy → Tilstander. Bruk entiteten for gjeldende sluttkundepris for din konfigurerte totalpris. Lim inn YAML under Dashbord → Rediger → Legg til kort → Manuelt.

Lagringen begynner etter oppdateringen og overlever omstarter. Verdiene beholdes til slutten av den aktuelle markedsdagen; tidligere prognoser kan ikke gjenopprettes. captured_at er mottakstidspunktet i Home Assistant, ikke tidspunktet for modellkjøringen. Dette er verken en kvalitetsmåling med fast prognoseavstand eller et ubegrenset arkiv.

Tilpass akseenheten til sensoren, for eksempel NOK/kWh eller EUR/kWh, ikke øre/kWh. En beregnet totalpris garanterer ikke strømregningen. Uten nøkkel er API-horisonten fortsatt opptil 48 timer; bruk riktig tilgang og graph_span: 6d for opptil 120 timer. Kortet gjelder HACS-integrasjonen, ikke REST-summary-eksemplet nedenfor, og gir ingen ekstra API-kall.

YAML klar til å kopiere
type: custom:apexcharts-card
header:
  show: true
  title: Energy Price Forecast EU
graph_span: 3d
span:
  start: day
now:
  show: true
  label: Nå
yaxis:
  - id: price
    decimals: 3
    apex_config:
      title:
        text: EUR/kWh
all_series_config:
  yaxis_id: price
  type: line
  curve: stepline
  extend_to: false
  stroke_width: 2
  float_precision: 4
  show:
    legend_value: false
series:
  # Replace ALL three placeholders with the SAME price or retail sensor.
  - entity: sensor.CHANGE_ME
    name: Offisiell (day-ahead)
    color: "#43a047"
    data_generator: |
      const raw = [...(entity.attributes.raw_today ?? []),
                   ...(entity.attributes.raw_tomorrow ?? [])];
      const slots = raw.map(e => ({
        start: Date.parse(e.start), end: Date.parse(e.end), value: e.value
      })).filter(e => Number.isFinite(e.start) && Number.isFinite(e.end)
        && e.end > e.start && typeof e.value === 'number' && Number.isFinite(e.value))
        .sort((a, b) => a.start - b.start);
      const points = [];
      let previousEnd = null;
      for (const slot of slots) {
        if (previousEnd !== null && slot.start > previousEnd) {
          points.push([previousEnd, null], [slot.start - 1, null]);
        }
        points.push([slot.start, slot.value], [slot.end - 1, slot.value]);
        previousEnd = slot.end;
      }
      return points;
  - entity: sensor.CHANGE_ME
    name: Aktuell prognose
    color: "#fb8c00"
    data_generator: |
      const raw = entity.attributes.raw_forecast ?? [];
      const slots = raw.map(e => ({
        start: Date.parse(e.start), end: Date.parse(e.end), value: e.value
      })).filter(e => Number.isFinite(e.start) && Number.isFinite(e.end)
        && e.end > e.start && typeof e.value === 'number' && Number.isFinite(e.value))
        .sort((a, b) => a.start - b.start);
      const points = [];
      let previousEnd = null;
      for (const slot of slots) {
        if (previousEnd !== null && slot.start > previousEnd) {
          points.push([previousEnd, null], [slot.start - 1, null]);
        }
        points.push([slot.start, slot.value], [slot.end - 1, slot.value]);
        previousEnd = slot.end;
      }
      return points;
  - entity: sensor.CHANGE_ME
    name: Lagret prognose (først mottatt)
    color: "#1e88e5"
    stroke_dash: 5
    data_generator: |
      const raw = entity.attributes.raw_forecast_reference ?? [];
      const slots = raw.map(e => ({
        start: Date.parse(e.start), end: Date.parse(e.end), value: e.value
      })).filter(e => Number.isFinite(e.start) && Number.isFinite(e.end)
        && e.end > e.start && typeof e.value === 'number' && Number.isFinite(e.value))
        .sort((a, b) => a.start - b.start);
      const points = [];
      let previousEnd = null;
      for (const slot of slots) {
        if (previousEnd !== null && slot.start > previousEnd) {
          points.push([previousEnd, null], [slot.start - 1, null]);
        }
        points.push([slot.start, slot.value], [slot.end - 1, slot.value]);
        previousEnd = slot.end;
      }
      return points;

Anbefalt endepunkt

Eksempel for NO1. Bytt bare country=no1 til no2, no3, no4 eller no5.

https://api.energypriceforecast.eu/api/v1/home-assistant/summary?country=no1&hours=48&window_hours=4
Prisflat.current_price og flat.cheapest_window_*.
CO2flat.current_co2_g_kwh og flat.greenest_window_*.
Kombinertflat.combined_window_* for kompromisset mellom pris og CO2.

Kopierbart Home Assistant-eksempel

Legg blokken i configuration.yaml eller i en package-fil som Home Assistant allerede laster. Start eller last inn på nytt etterpå.

rest:
  - resource: "https://api.energypriceforecast.eu/api/v1/home-assistant/summary?country=no1&hours=48&window_hours=4"
    scan_interval: 900
    sensor:
      - name: "EnergyPriceForecast current price NO1"
        value_template: "{{ value_json.flat.current_price }}"
        unit_of_measurement: "NOK/kWh"

      - name: "EnergyPriceForecast current CO2 NO1"
        value_template: "{{ value_json.flat.current_co2_g_kwh }}"
        unit_of_measurement: "gCO2/kWh"

      - name: "EnergyPriceForecast cheapest window NO1"
        value_template: "{{ value_json.flat.cheapest_window_start }}"

      - name: "EnergyPriceForecast greenest window NO1"
        value_template: "{{ value_json.flat.greenest_window_start }}"

For andre områder endrer du bare country=no1 og sensornavnene.

Støtte for norske områder

Markedhourly-forecasthome-assistant/summaryco2-liveretail-forecast
NO1jajajabeta
NO2jajajabeta
NO3jajajabeta
NO4jajajabeta
NO5jajajabeta

Retail-beregningen for Norge er en praktisk betaversjon. Den erstatter ikke din faktiske avtale, nettleie eller støtteordninger.

Viktige merknader

Er dette min eksakte strømregning?

Nei. Standardendepunktet viser markeds-/basisverdier og prognoser. Din faktiske sluttpris avhenger av avtale, nettleie, avgifter og eventuelle støtteordninger.

Når trenger jeg hourly-forecast?

Bruk hourly-forecast hvis du vil bygge egne grafer, egne scorer eller selv skille mellom publiserte day-ahead-priser og prognoseverdier.

Hva skjer hvis data mangler?

API-et skal gi tydelig feil i stedet for å late som gamle testdata er aktuelle. Det er viktig for automatiseringer.