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.
- HACS-integrasjon: oppsett via en dialog i Home Assistant, egne entiteter, foreløpig som egendefinert repository (ikke i HACS' standardliste ennå)
- REST-sensor: ett endepunkt for pris, CO2 og nyttige tidsvinduer, ingen HACS nødvendig
- NO1, NO2, NO3, NO4 og NO5 må velges eksplisitt - likt på begge veier
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.
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.
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.
- 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.
- Erstatt alle tre
sensor.CHANGE_MEmed 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=4flat.current_price og flat.cheapest_window_*.flat.current_co2_g_kwh og flat.greenest_window_*.flat.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
| Marked | hourly-forecast | home-assistant/summary | co2-live | retail-forecast |
|---|---|---|---|---|
| NO1 | ja | ja | ja | beta |
| NO2 | ja | ja | ja | beta |
| NO3 | ja | ja | ja | beta |
| NO4 | ja | ja | ja | beta |
| NO5 | ja | ja | ja | beta |
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.