Kieli

Home Assistant · sähkön hinta ja CO2

Kaksi samanarvoista tapaa tuoda hinta- ja CO2-tiedot Home Assistantiin

Energy Price Forecast EU:n saa Home Assistantiin kahdella täysin tuetulla tavalla: natiivilla HACS-integraatiolla, joka määritetään käyttöliittymässä, tai perinteisellä YAML-paketilla, jossa on REST-sensori. Molemmat käyttävät samaa rajapintaa ja tuottavat ajankohtaiset arvot, käynnissä olevat tilat ja tärkeimmät aikaikkunat.

Kumpi tapa sopii sinulle?

Molemmat tavat käyttävät samaa summary-päätepistettä ja tuottavat samat tiedot. Ero on käyttöönotossa ja ylläpidossa.

HACS-integraation avoin repositorio: github.com/BackupBaTTerY/energypriceforecast-home-assistant. Molemmat tavat voivat toimia myös rinnakkain, kunhan et luo samoja entiteettitunnuksia kahdesti.

Aloita ilmaiseksi, suunnittele tarvittaessa pidemmälle

Home Assistant -yhteys toimii edelleen ilman API-avainta ja tuottaa tavallisesti enintään 48 tuntia. Jos haluat suunnitella suurempia kuormia usealle päivälle, voit kokeilla Private Prota ja jopa 120 tunnin ennustetta 14 päivää ilmaiseksi.

Tärkeä huomio rajapinnasta

Uusissa asennuksissa kannattaa käyttää osoitetta https://api.energypriceforecast.eu/api/v1/... pohjana. Summary-rajapinta ei palauta täydellistä hintasarjaa vaan tiiviin automaatiolohkon, jossa ovat nykyinen hinta, nykyinen CO2-arvo, paras mahdollinen ikkuna ja käyttöoikeuttasi koskevat metatiedot.

Näin otat HACS-integraation käyttöön

Integraatio on HACS:n oletuskaupassa, joten mitään ei tarvitse lisätä käsin.

  1. Etsi HACS:sta ”Energy Price Forecast EU” ja lataa integraatio; käynnistä sitten Home Assistant uudelleen.
  2. Asetukset → Laitteet ja palvelut → Lisää integraatio, hae ”Energy Price Forecast EU” ja valitse markkina sekä mahdolliset lisäasetukset.

Sivun yläosan painike (”Lisää HACS-integraatio”) avaa integraation suoraan HACS:ssa, jos HACS on jo asennettu.

Vertaa ennustetta julkaistuihin hintoihin

Vihreä näyttää julkaistut day-ahead-hinnat, oranssi nykyisen ennusteen ja sininen katkoviiva ensimmäisen tallennetun ennusteen. Aiempi ennuste pysyy näkyvissä virallisten hintojen ilmestyessä.

  1. Päivitä Energy Price Forecast EU HACS:ssa vähintään versioon 1.12.0 ja käynnistä Home Assistant uudelleen. Asenna myös ApexCharts Card 2.1.0 tai uudempi HACS:n kautta.
  2. Korvaa kaikki kolme sensor.CHANGE_ME-kohtaa samalla hintasarjan entiteetillä kohdasta Kehittäjätyökalut → Tilat. Käytä nykyisen kuluttajahinnan entiteettiä, jos haluat määrittämäsi kokonaishinnan. Liitä YAML kohdassa Koontinäyttö → Muokkaa → Lisää kortti → Manuaalinen.

Tallennus alkaa päivityksen jälkeen ja säilyy uudelleenkäynnistyksissä. Arvot säilyvät kyseisen markkinapäivän loppuun; vanhoja ennusteita ei luoda jälkikäteen. captured_at on Home Assistantin vastaanottoaika, ei mallin ajoaika. Tämä ei ole kiinteän ennustepituuden laatumittaus eikä rajaton arkisto.

Varmista, että akselin yksikkö vastaa anturia, esimerkiksi EUR/kWh eikä snt/kWh. Laskettu kokonaishinta ei takaa sähkölaskun summaa. Ilman avainta API-horisontti on edelleen enintään 48 tuntia; käytä asianmukaista pääsyä ja graph_span: 6d enintään 120 tunnille. Kortti koskee HACS-integraatiota, ei alla olevaa REST-summary-esimerkkiä, eikä lisää API-kutsuja.

Kopioitava YAML
type: custom:apexcharts-card
header:
  show: true
  title: Energy Price Forecast EU
graph_span: 3d
span:
  start: day
now:
  show: true
  label: Nyt
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: Virallinen (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: Nykyinen ennuste
    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: Tallennettu ennuste (ensimmäinen vastaanotettu)
    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;
Valinnainen: muokkaa korttia tekoälyn avulla
Help me tailor an ApexCharts card for Energy Price Forecast EU. First ask for my exact entity ID, sensor unit, integration version, hourly/quarter-hourly settlement and whether I want market or retail prices. Do not ask for an API key.
From integration 1.12.0, Price forecast series and Current retail price expose:
- raw_today and raw_tomorrow: published day-ahead slots.
- raw_forecast: current forecast slots beyond official coverage.
These lists contain {start, end, value}.
- raw_forecast_reference: {start, end, value, captured_at}; the first forecast received for a then-future slot, saved locally. Later forecasts and official prices never overwrite it.
References accumulate only after updating, survive restarts and are removed after the target market day ends. captured_at is the HA observation time, not model creation.
Use green for official prices, orange for the current forecast and dashed blue for the saved forecast, on the same axis in the sensor's unit. Require ApexCharts Card 2.1.0 or newer. Use each series' data_generator and extend_to: false. Draw start through end, preserve gaps with null, and retain genuine zero/negative prices. Never copy official values into a forecast line. Use only the documented attributes.
Optionally ask about the hourly/weekend plan: its hours attribute contains {start, end, average_value}. Mark those times separately without changing the plan. Return complete YAML for a manual Lovelace card and explain where to paste it. A chart alone does not switch a charger.

Answer in Finnish.

Tulos viidessä minuutissa (YAML-paketti)

Jos valitsit YAML-tavan, ota nämä kolme tiedostoa. Pakettitiedosto hakee tiedot, Lovelace-kortti näyttää ne ja esimerkkiautomaatio havainnollistaa varsinaisen käytön.

Tarkoituksella yksinkertainenPakettitiedosto käyttää vain summary-päätepistettä. HACS:ia, lisäosaa tai Python-skriptiä ei tarvita.
Tehty oikeaan ohjaukseenTärkeitä eivät ole vain alkamisajat vaan myös tilat, kuten is_cheapest_window_now ja jäljellä olevat minuutit.
Palvelinta säästävä hakuEsimerkki hakee tiedot oletuksena 30 minuutin välein. Day-ahead-hinnoille ja ennusteelle se riittää yleensä hyvin.

Tältä tulos näyttää

Esikatselu Lovelace-kortista, jossa on nykyinen hinta, CO2-arvo ja hintaikkunat.
Lovelace-kortti näyttää pakettitiedoston entiteetit suoraan, eikä sinun tarvitse ensin rakentaa omia koontinäyttöjä.
Esikatselu yksinkertaisesta Home Assistant -automaatiosta, jonka edullisin hintaikkuna käynnistää.
Esimerkkiautomaatio alkaa tarkoituksella yksinkertaisena, ja sen voi sitten muokata latausasemalle, lämpöpumpulle tai kytkimelle.

Näin otat paketin käyttöön

  1. Lataa pakettitiedosto ja tallenna se nimellä /config/packages/energypriceforecast.yaml.
  2. Jos packages ei ole vielä käytössä, lisää tiedostoon configuration.yaml tämä lohko.
  3. Lataa Home Assistant uudelleen tai käynnistä se kerran uudelleen.
  4. Tuo sen jälkeen Lovelace-kortti ja halutessasi esimerkkiautomaatio.
homeassistant:
  packages: !include_dir_named packages

Lovelace-kortin voit lisätä koontinäyttöön korttityypillä Manuaalinen luettelosta. Automaation voit tuoda automaatioihin myös YAML-muodossa tai käyttää sitä pelkkänä mallina.

Mitkä entiteetit saat sen jälkeen?

Pakettitiedosto luo yhden raakalähteen ja sen päälle suoraan käytettäviä entiteettejä. Näet heti, toimiiko rajapinta kunnolla, ja voit rakentaa omia automaatioita jäsentämättä JSONia.

Entiteetti Merkitys Tyypillinen käyttö
sensor.energypriceforecast_apiSummary-päätepisteen raakavastaus, mukana flat, price, co2 ja meta.Vianetsintä ja pohja muille malleille.
sensor.epf_current_priceNykyinen hinta käynnissä olevalla jaksolla. Lähde voi olla day-ahead tai ennuste.Hinnan mukaan ohjattu latausasema, lämpöpumppu, lämminvesivaraaja.
sensor.epf_current_co2_intensityNykyinen CO2-arvo käynnissä olevalla jaksolla.Kuorman siirto CO2:n mukaan.
binary_sensor.epf_cheapest_price_window_activeon, kun laskettu paras hintaikkuna on jo käynnissä.Suora käyntipäätös ilman omia aikavertailuja.
sensor.epf_cheapest_price_window_remaining_minutesTämänhetkisen parhaan hintaikkunan jäljellä oleva kesto.Arvio siitä, kuinka kauan kuorma saa vielä käydä.
sensor.epf_next_full_price_windowSeuraava kokonainen tuleva hintaikkuna.Myöhempi käynnistys tai suunnittelu.
sensor.epf_api_key_statusTallennetun API-avaimen tila.Näet nopeasti, onko voimassa todella 48 vai 120 tuntia.
sensor.epf_allowed_horizonPalvelimen sallima horisontti tunteina.Tarkista, saako asennuksesi todella halutun pituuden.

Minkä ajanjakson rajapinta tarkalleen tuottaa?

Home Assistantin kannalta ratkaisevaa ei ole vain URL vaan myös sen takana oleva logiikka. Juuri sen pitää olla läpinäkyvää.

Ilman API-avaintaEsimerkki käyttää arvoa hours=48. Saat näin yksinkertaisen testihorisontin, joka on tarkoitettu julkiseksi ilman erillistä avainta.
API-avaimellaKun asetat bearer-tunnisteen otsakkeeseen, voit nostaa paketin horisontin enintään arvoon hours=120 eli viiteen päivään.
Hinnan tarkkuusDay-ahead-hinnat voivat olla 15 minuutin jaksoissa. Niiden ulkopuolella ennuste pysyy tuntikohtaisena. Summary yhdistää nämä sisäisesti siististi.
Day-ahead ensinHeti kun viralliset day-ahead-hinnat ovat saatavilla, niitä käytetään ensisijaisesti. Ennustearvoja käytetään vain jäljelle jäävälle jaksolle.
CO2 pysyy tuntikohtaisenaCO2-tietoja ei muunneta keinotekoisesti varttitunneiksi. Summarylle tuntikohtainen CO2-näkymä riittää yleensä.
Valmiiksi lasketut ikkunatRajapinta tuottaa raaka-arvojen lisäksi valmiiksi edullisimman ikkunan, vihreimmän ikkunan ja seuraavan kokonaisen tulevan ikkunan.

Mihin API-avain annetaan ja miten horisonttia pidennetään?

Molemmat tehdään suoraan pakettitiedostossa. Toista päätepistettä ei tarvita: otat vain Authorization-otsakkeen käyttöön ja muutat tuntimäärää.

rest:
  - resource: "https://api.energypriceforecast.eu/api/v1/home-assistant/summary?country=fi&hours=120&window_hours=4"
    scan_interval: 1800
    headers:
      Accept: "application/json"
      Authorization: "Bearer YOUR_API_KEY"

Sen, käytetäänkö avaintasi todella, näet sen jälkeen entiteeteistä sensor.epf_api_key_status, sensor.epf_allowed_horizon ja sensor.epf_used_horizon.

Mitä summary-päätepiste käytännössä antaa?

Summary-polku on rakennettu tarkoituksella automaatioita varten. Se säästää paljon omaa logiikkaa, koska sinun ei tarvitse ensin jäsentää pitkiä tuntisarjoja tehdäksesi yksinkertaisia päätöksiä.

Kenttä Merkitys Miksi se on hyödyllinen
flat.current_priceNykyinen hinta-arvo käynnissä olevalla jaksolla.Suora nykytila hintalogiikkaa varten.
flat.current_co2_g_kwhNykyinen CO2-arvo käynnissä olevalla jaksolla.Suora nykytila CO2-logiikkaa varten.
flat.is_cheapest_window_nowNäyttää, onko paras hintaikkuna jo aktiivinen.Tärkeämpi kuin pelkkä alkamisaika.
flat.cheapest_window_remaining_minutesKäynnissä olevan parhaan hintaikkunan jäljellä oleva kesto.Hyödyllinen käyntiaikaa koskevissa päätöksissä.
price.next_full_window.startSeuraava kokonainen tuleva hintaikkuna.Suunnittelu, kun haluat tietoisesti aloittaa myöhemmin.
meta.api_key_stateTallennetun avaimen tila.Vianetsintä ja testivaihe.
meta.allowed_horizon_hoursMitä palvelin sallii tälle käyttöoikeudelle.Selkeä läpinäkyvyys rajoista.
meta.used_horizon_hoursMitä rajapinta todella palautti.Näin tämä sivu ja taustajärjestelmä pysyvät rehellisesti samassa tahdissa.

Virallinen kenttäviite päätepisteelle home-assistant/summary

Summary-päätepiste on tarkoituksella tiivis. Moniin automaatioihin riittää jo lohko flat. Jos haluat ohjata tarkemmin tai rakentaa visualisointeja, voit käyttää lisäksi jäsennellympiä lohkoja price, co2, combined ja source.

Kenttä Merkitys Tyypillinen käyttö
flat.current_priceNykyinen hinta yksikössä EUR/kWh. Käyttää käynnissä olevalle jaksolle automaattisesti parasta saatavilla olevaa julkista lähdettä.Yksinkertainen hintasensori automaatioihin.
flat.current_price_sourceNykyisen hinnan lähdetunniste, esimerkiksi day_ahead.Tarkista, onko arvo jo virallinen vai vielä ennuste.
flat.current_co2_g_kwhNykyinen CO2-intensiteetti yksikössä gCO2/kWh.Joustavan kulutuksen siirto CO2:n mukaan.
flat.cheapest_window_*Edullisimman aikaikkunan alku, loppu ja keskiarvo pyydetyllä horisontilla.Sähköauton lataus, lämminvesivaraaja, lämpöpumppu.
flat.greenest_window_*Vähäpäästöisimmän aikaikkunan alku, loppu ja keskiarvo.Vähäpäästöinen ajoitus.
flat.combined_window_*Hinnan ja CO2:n välinen kompromissi-ikkuna.Kun molemmat ovat tärkeitä etkä halua määrittää omaa painotusta.
price.currentOlio, jossa on start, end, value, unit ja source nykyiselle hintajaksolle.Koontinäytöt ja tarkempi tilalogiikka.
price.cheapest_window_next_horizonJäsennelty lohko edullisimmalle ikkunalle, mukana kesto ja lähdekohtaiset määrät.Kun tarvitset alun, lopun ja kontekstin yhdessä.
co2.currentOlio, jossa on nykyinen CO2-arvo ja siihen kuuluva aikaikkuna.CO2-näyttö jäsentämättä lohkoa flat.
co2.greenest_window_next_horizonJäsennelty lohko vihreimmälle ikkunalle.Vähäpäästöinen lataus- tai lämmityslogiikka.
combined.best_window_next_horizonYhdistetty suositus, jossa ovat hinta-, CO2- ja pistearvot.Yksi ”paras nyt” -päätös ilman omaa pisteytystä.
source.priceHintalähteen metatiedot, muun muassa Firestore-dokumentti, day-ahead-toimittaja ja saatavilla olevien merkintöjen määrä.Vianetsintä, valvonta ja laadunvarmistus.
source.co2CO2-lähteen metatiedot.Vianetsintä ja jäljitettävyys.
Tärkeää hintakentistäSummary ei palauta kaikkien hintavaihtoehtojen täydellistä raakasarjaa. Home Assistantille se tuottaa ennen kaikkea nykytilan ja valmiiksi lasketut ikkunat. Täydellisiin aikasarjoihin sopii paremmin päätepiste hourly-forecast.
Nykyinen ei tarkoita toteutunutta hintaaflat.current_price on julkinen hinta-arvo, jota voi käyttää juuri nyt käynnissä olevalle jaksolle. Se voi tulla virallisesta day-ahead-huutokaupasta tai muusta julkaistusta lähteestä, kun markkinatulos ei ole vielä kokonaan saatavilla.
Kokonaishinta vain valituille markkinoillePäätepiste retail-forecast on toistaiseksi tarkoitettu julkiseksi vain valituille markkinoille. Muilla markkinoilla summary pysyy tarkoituksella markkina- eli perusarvoissa.

Esimerkki: lataa auto vain edullisessa ikkunassa

Juuri tätä varten esimerkkiautomaatio on mukana. Se käyttää tarkoituksella totuusarvoa binary_sensor.epf_cheapest_price_window_active eikä laukea pelkän kellonajan perusteella. Se on luotettavampaa, koska paras ikkuna voi olla jo käynnissä.

trigger:
  - platform: state
    entity_id: binary_sensor.epf_cheapest_price_window_active
    to: "on"

action:
  - service: persistent_notification.create
    data:
      title: "Cheapest price window active"

Jos haluat ilmoituksen sijaan käynnistää suoraan latausaseman tai kytkimen, vaihdat viimeisessä vaiheessa vain palvelun omaan kohdepalveluusi, esimerkiksi switch.turn_on.

Mukauta omaan asennukseesi tekoälyn avulla

Tämä kehote auttaa tekoälyä rakentamaan summary-päätepisteestä sopivan Home Assistant -automaation. Se ei korvaa yllä olevaa yksinkertaista kopioi ja liitä -aloitusta, vaan on tarkoitettu yksilöllisiin kuormiin, aikarajoihin ja turvasääntöihin.

Suojaa API-avaimesi

Älä koskaan anna tekoälylle oikeaa API-avaintasi. Jätä tulokseen aina paikkamerkki YOUR_API_KEY ja lisää avain vasta paikallisesti Home Assistantissa.

Näytä kopioitava kehote
Help me build a safe Home Assistant automation using the Energy Price Forecast EU API.

Read the API contract first:
https://energypriceforecast.eu/openapi/integration-api.json

Use /api/v1/home-assistant/summary and do not invent fields. The API uses official day-ahead prices wherever available and forecast values only for the remaining open horizon.

Before writing YAML, ask me no more than these questions, one at a time:
1. Country or bidding zone?
2. Which load should be controlled and which Home Assistant entity switches it?
3. Power, required runtime and latest completion time?
4. Optimise for price, CO2 or both?
5. Free without a key and up to 48 hours, or Private Pro with up to 120 hours?
6. Do I use packages or configuration.yaml?

Rules for your result:
- Free: hours=48 and no Authorization header.
- Private Pro: hours=120 and header Authorization: Bearer YOUR_API_KEY.
- Never ask me to paste the real key into the chat.
- Handle HTTP errors and check meta.api_key_state and meta.allowed_horizon_hours.
- Briefly explain every API property you use.
- Produce complete, correctly indented YAML and state exactly where it belongs.
- Start with a safe test mode using a notification or input_boolean. Put real load switching in a separate, clearly marked step.
- Define safe behaviour for stale, missing or implausible data. An API error must never switch the load on unexpectedly.
- Finish with a checklist: HTTP 200, sensors populated, allowed horizon correct and test mode triggered correctly.

Ask when information is missing. Do not silently assume entity names, tariffs or electrical limits.

Answer in Finnish.

Koneluettava pohja: integraatiopäätepisteiden OpenAPI-sopimus.

Milloin summary riittää ja milloin tarvitset enemmän?

summary riittää useimpiin Home Assistant -automaatioihin

Jos tarvitset ajankohtaiset arvot, parhaan ikkunan ja yksinkertaiset tilat, summary-päätepiste on oikea tapa. Juuri sitä varten myös pakettitiedosto on rakennettu.

Omiin hintasarjoihin tai kaavioihin sopii paremmin raakasarjan päätepiste

Jos haluat myöhemmin rakentaa omaa pisteytyslogiikkaa, kaavioita tai yksityiskohtaisia aikasarjoja, summary-päätepiste ei tarkoituksella ole mahdollisimman yksityiskohtainen. Silloin sopivampi on ennustepäätepiste, jossa on raakasarja.

Ovatko nämä kotitalouden tarkkoja sähkön hintoja?

Eivät automaattisesti. Summary käyttää ensisijaisesti markkina- eli perushintoja. Kotitaloutesi tarkka hinta riippuu lisäksi siirrosta, veroista, maksuista ja sähkönmyyjän lisistä.

Mitä tehdä, jos arvoja ei näy liittämisen jälkeen?

Tyypillisiä syitä: packages-kansiota ei ole otettu mukaan, YAMLissa on sisennysvirhe, Home Assistantia ei ole ladattu uudelleen tai väärä arvo parametrille country. Nopeimmin sen näkee Home Assistantin lokeista ja kehittäjätyökaluista.

Mille alueille julkaistut day-ahead-hinnat tulevat?

Välitämme julkaistut day-ahead-hinnat vain, jos lähde sen sallii. Alueille NO1, NO3, NO4, NO5, SE1, SE2, FI, RO, SK, GR, BG ja Italian alueet Pohjoista lukuun ottamatta rajapinnat palauttavat siksi 24. lokakuuta 2026 alkaen ennusteemme jokaiselle tunnille, ja anturit merkitsevät nämä tunnit ennusteeksi. Julkaistut hinnat saat siellä Home Assistantin Nord Pool -integraation kautta; SK:lle, GR:lle, BG:lle ja Italialle ENTSO-E-integraation kautta omalla tunnuksella.

Aiheeseen liittyvää: evcc sekä sähkön hinta- ja CO2-ennuste.

Lue lisää