Jazyk

Home Assistant · cena elektřiny a CO2

Dvě rovnocenné cesty k datům o ceně a CO2 v Home Assistantu

Energy Price Forecast EU nabízí dvě plně podporované cesty do Home Assistantu: nativní integraci HACS s nastavením v rozhraní, nebo klasický balíček YAML s REST senzorem. Obě používají stejné API a dodávají aktuální hodnoty, průběžné stavy a nejdůležitější časová okna.

Která cesta se vám hodí?

Obě cesty používají stejný endpoint summary a dodávají obsahově stejná data. Rozdíl je v nastavení a údržbě.

Otevřený repozitář integrace HACS: github.com/BackupBaTTerY/energypriceforecast-home-assistant. Obě cesty mohou běžet i souběžně, pokud nevytvoříte dvakrát stejná ID entit.

Začněte zdarma, podle potřeby plánujte dál

Přístup pro Home Assistant zůstává použitelný bez API klíče a obvykle dodává až 48 hodin. Chcete-li plánovat větší spotřebiče na několik dní, můžete si Private Pro s až 120 hodinami vyzkoušet 14 dní zdarma.

Důležitá poznámka k API

Nová nastavení by měla používat adresu https://api.energypriceforecast.eu/api/v1/... jako základ. API summary nevrací úplnou cenovou řadu, ale kompaktní blok pro automatizace s aktuální cenou, aktuální hodnotou CO2, nejlepším možným oknem a metainformacemi o vašem přístupu.

Jak nastavit integraci HACS

Integrace je ve výchozím obchodě HACS, takže už nic nemusíte přidávat ručně.

  1. V HACS vyhledejte „Energy Price Forecast EU“ a stáhněte integraci, poté Home Assistant restartujte.
  2. Nastavení → Zařízení a služby → Přidat integraci, vyhledejte „Energy Price Forecast EU“ a zvolte trh a případná volitelná nastavení.

Tlačítko nahoře („Přidat integraci HACS“) otevře integraci přímo v HACS, pokud je HACS už nainstalovaný.

Porovnejte prognózu se zveřejněnými cenami

Zelená zobrazuje zveřejněné day-ahead ceny, oranžová aktuální prognózu a modrá přerušovaná čára první uloženou prognózu. Ta zůstane viditelná i po zveřejnění oficiálních cen.

  1. Aktualizujte Energy Price Forecast EU v HACS alespoň na verzi 1.12.0 a restartujte Home Assistant. Nainstalujte také ApexCharts Card 2.1.0 nebo novější přes HACS.
  2. Nahraďte všechny tři sensor.CHANGE_ME stejnou entitou cenové řady z Vývojářské nástroje → Stavy. Pro nastavenou celkovou cenu použijte entitu aktuální koncové ceny. Vložte YAML v Přehled → Upravit → Přidat kartu → Ručně.

Ukládání začíná po aktualizaci a přežije restarty. Hodnoty zůstávají do konce příslušného tržního dne; starší prognózy nelze zpětně vytvořit. captured_at je čas přijetí v Home Assistantu, nikoli čas běhu modelu. Nejde o měření kvality s pevnou délkou prognózy ani o neomezený archiv.

Jednotka osy musí odpovídat senzoru, například CZK/kWh nebo EUR/kWh, ne haléře/kWh. Vypočtená koncová cena není zaručená faktura. Bez klíče zůstává API-horizont nejvýše 48 hodin; pro nejvýše 120 hodin použijte odpovídající přístup a graph_span: 6d. Karta je pro integraci HACS, nikoli příklad REST-summary níže, a nepřidává API požadavky.

YAML ke zkopírování
type: custom:apexcharts-card
header:
  show: true
  title: Energy Price Forecast EU
graph_span: 3d
span:
  start: day
now:
  show: true
  label: Nyní
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: Oficiální (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: Aktuální prognóza
    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: Uložená prognóza (první přijatá)
    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;
Volitelně: upravit kartu pomocí AI
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 Czech.

Výsledek za 5 minut (balíček YAML)

Pokud jste zvolili cestu YAML, vezměte si tyto tři soubory. Soubor balíčku načítá data, karta Lovelace je zobrazuje a ukázková automatizace předvádí vlastní použití.

Záměrně jednoduchéSoubor balíčku používá jen endpoint summary. Není potřeba HACS, doplněk ani skript v Pythonu.
Určeno pro skutečné řízeníDůležité tu nejsou jen časy začátku, ale také stavy jako is_cheapest_window_now a zbývající minuty.
Šetrné dotazováníPříklad se ve výchozím nastavení dotazuje každých 30 minut. Pro day-ahead a prognózu to obvykle zcela stačí.

Jak vypadá výsledek

Náhled karty Lovelace s aktuální cenou, hodnotou CO2 a cenovými okny.
Karta Lovelace zobrazuje přímo entity ze souboru balíčku, aniž byste si nejdřív museli stavět vlastní dashboardy.
Náhled jednoduché automatizace Home Assistantu spouštěné nejlevnějším cenovým oknem.
Ukázková automatizace začíná záměrně jednoduše a pak ji lze upravit pro wallbox, tepelné čerpadlo nebo spínač.

Jak balíček zapojit

  1. Stáhněte soubor balíčku a uložte ho jako /config/packages/energypriceforecast.yaml.
  2. Pokud ještě nemáte povolené packages, doplňte do souboru configuration.yaml tento blok.
  3. Načtěte Home Assistant znovu nebo ho jednou restartujte.
  4. Poté importujte kartu Lovelace a případně ukázkovou automatizaci.
homeassistant:
  packages: !include_dir_named packages

Kartu Lovelace vložíte do dashboardu přes typ karty Ručně v seznamu. Automatizaci můžete v automatizacích také importovat jako YAML, nebo ji prostě použít jako předlohu.

Jaké entity potom získáte?

Soubor balíčku vytvoří jeden surový zdroj a nad ním přímo použitelné entity. Hned tak vidíte, zda API běží správně, a vlastní automatizace postavíte bez parsování JSON.

Entita Význam Typické použití
sensor.energypriceforecast_apiSurová odpověď endpointu summary včetně flat, price, co2 a meta.Ladění a základ pro další šablony.
sensor.epf_current_priceAktuální cena v probíhajícím intervalu. Zdrojem může být day-ahead nebo prognóza.Cenou řízený wallbox, tepelné čerpadlo, bojler.
sensor.epf_current_co2_intensityAktuální hodnota CO2 v probíhajícím intervalu.Přesun spotřeby podle CO2.
binary_sensor.epf_cheapest_price_window_activeon, pokud vypočtené nejlepší cenové okno už běží.Přímé rozhodnutí o běhu bez vlastního porovnávání časů.
sensor.epf_cheapest_price_window_remaining_minutesZbývající doba aktuálně nejlepšího cenového okna.Odhad, jak dlouho může spotřebič ještě běžet.
sensor.epf_next_full_price_windowNejbližší úplné budoucí okno pro cenu.Pozdější spuštění nebo plánování.
sensor.epf_api_key_statusStav uloženého API klíče.Rychle zjistit, zda opravdu platí 48 h, nebo 120 h.
sensor.epf_allowed_horizonHorizont v hodinách povolený na straně serveru.Ověřit, zda vaše nastavení skutečně dostává požadovanou délku.

Jaké období API přesně dodává?

Pro Home Assistant není rozhodující jen URL, ale i logika za ní. Právě ta má být průhledná.

Bez API klíčePříklad používá hours=48. Získáte tak jednoduchý testovací horizont, který je bez dalšího klíče veřejný.
S API klíčemKdyž v hlavičce nastavíte Bearer token, můžete horizont v balíčku zvýšit až na hours=120 tedy na 5 dní.
Rozlišení cenDay-ahead může být v 15minutových intervalech. Prognóza mimo něj zůstává hodinová. Summary obojí interně čistě spojuje.
Nejdřív day-aheadJakmile jsou k dispozici oficiální ceny day-ahead, mají přednost. Hodnoty prognózy se použijí jen pro zbývající období.
CO2 zůstává hodinovéData o CO2 se uměle nepřepočítávají na čtvrthodiny. Pro summary hodinový pohled na CO2 zpravidla stačí.
Hotová vypočtená oknaAPI nedodává jen surové hodnoty, ale rovnou nejlevnější okno, nejzelenější okno a nejbližší úplné budoucí okno.

Kam zadat API klíč a jak prodloužit horizont?

Obojí se dělá přímo v souboru balíčku. Nepotřebujete druhý endpoint, stačí aktivovat hlavičku Authorization a upravit počet hodin.

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

Zda se váš klíč opravdu používá, pak uvidíte v entitách sensor.epf_api_key_status, sensor.epf_allowed_horizon a sensor.epf_used_horizon.

Co konkrétně přináší endpoint summary?

Cesta summary je záměrně postavená pro automatizace. Ušetří vám spoustu vlastní logiky, protože nemusíte nejdřív parsovat dlouhé hodinové řady, abyste udělali jednoduché rozhodnutí.

Pole Význam Proč je užitečné
flat.current_priceAktuální cena v probíhajícím intervalu.Přímý aktuální stav pro cenovou logiku.
flat.current_co2_g_kwhAktuální hodnota CO2 v probíhajícím intervalu.Přímý aktuální stav pro logiku CO2.
flat.is_cheapest_window_nowUkazuje, zda je nejlepší cenové okno už aktivní.Důležitější než pouhý čas začátku.
flat.cheapest_window_remaining_minutesZbývající doba probíhajícího nejlepšího cenového okna.Užitečné pro rozhodování o době běhu.
price.next_full_window.startNejbližší úplné budoucí okno pro cenu.Plánování, když chcete záměrně začít později.
meta.api_key_stateStav uloženého klíče.Hledání chyb a testovací fáze.
meta.allowed_horizon_hoursCo je pro tento přístup povoleno na straně serveru.Jasná průhlednost limitů.
meta.used_horizon_hoursCo API skutečně dodalo.Tato stránka a backend tak zůstávají poctivě v souladu.

Oficiální reference polí pro home-assistant/summary

Endpoint summary je záměrně kompaktní. Pro mnoho automatizací stačí už blok flat. Kdo chce řídit přesněji nebo stavět vizualizace, může navíc použít strukturovanější bloky price, co2, combined a source.

Pole Význam Typické použití
flat.current_priceAktuální cena v EUR/kWh. Pro probíhající interval automaticky použije nejlepší dostupný veřejný zdroj.Jednoduchý cenový senzor pro automatizace.
flat.current_price_sourceOznačení zdroje aktuální ceny, například day_ahead.Ověřit, zda je hodnota už oficiální, nebo ještě z prognózy.
flat.current_co2_g_kwhAktuální intenzita CO2 v gCO2/kWh.Přesun flexibilní spotřeby podle CO2.
flat.cheapest_window_*Začátek, konec a průměr nejlevnějšího časového okna v požadovaném horizontu.Nabíjení elektromobilu, bojler, tepelné čerpadlo.
flat.greenest_window_*Začátek, konec a průměr časového okna s nejnižším CO2.Plánování s nízkým CO2.
flat.combined_window_*Kompromisní okno mezi cenou a CO2.Když záleží na obojím a nechcete definovat vlastní váhy.
price.currentObjekt s start, end, value, unit a source pro aktuální cenový interval.Dashboardy a přesnější stavová logika.
price.cheapest_window_next_horizonStrukturovaný blok nejlevnějšího okna včetně délky a počtů podle zdroje.Když potřebujete začátek, konec a kontext pohromadě.
co2.currentObjekt s aktuální hodnotou CO2 a příslušným časovým oknem.Zobrazení CO2 bez parsování bloku flat.
co2.greenest_window_next_horizonStrukturovaný blok nejzelenějšího okna.Logika nabíjení nebo vytápění s nízkým CO2.
combined.best_window_next_horizonKombinované doporučení s hodnotami ceny, CO2 a skóre.Jediné rozhodnutí „nejlépe teď“ bez vlastního skóre.
source.priceMetadata o cenovém zdroji včetně dokumentu Firestore, poskytovatele day-ahead a počtu dostupných záznamů.Ladění, monitoring a kontrola kvality.
source.co2Metadata o zdroji CO2.Ladění a dohledatelnost.
Důležité k cenovým polímSummary nevrací úplnou surovou řadu všech cenových variant. Pro Home Assistant dodává především aktuální stav a už vypočtená okna. Pro úplné časové řady je vhodnější endpoint hourly-forecast.
Aktuální neznamená skutečnou historickou cenuflat.current_price je veřejná cena, kterou lze právě teď použít pro probíhající interval. Může pocházet z oficiální aukce day-ahead nebo z jiného uvolněného zdroje, pokud tržní výsledek ještě není úplný.
Celková cena jen pro vybrané trhyEndpoint retail-forecast je zatím veřejně určen jen pro vybrané trhy. U ostatních trhů zůstává summary záměrně u tržních, respektive základních hodnot.

Příklad: nabíjet auto jen v levném okně

Přesně k tomu je přiložená ukázková automatizace. Záměrně používá logickou hodnotu binary_sensor.epf_cheapest_price_window_active místo spouštění jen podle času. Je to robustnější, protože nejlepší okno už může běžet.

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"

Chcete-li místo oznámení rovnou spustit wallbox nebo spínač, nahradíte v posledním kroku jen službu vlastní cílovou službou, například switch.turn_on.

Přizpůsobení vašemu nastavení pomocí AI

Tento prompt pomůže AI postavit z endpointu summary vhodnou automatizaci pro Home Assistant. Nenahrazuje jednoduchý začátek zkopírováním výše, ale je určen pro vlastní spotřebiče, časové limity a bezpečnostní pravidla.

Chraňte API klíč

Nikdy nedávejte AI svůj skutečný API klíč. Ve výsledku vždy ponechte YOUR_API_KEY jako zástupný text a klíč zadejte až lokálně v Home Assistantu.

Zobrazit prompt ke zkopírování
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 Czech.

Strojově čitelný základ: kontrakt OpenAPI integračních endpointů.

Kdy stačí summary a kdy potřebujete víc?

summary stačí pro většinu automatizací v Home Assistantu

Pokud potřebujete aktuální hodnoty, nejlepší okno a jednoduché stavy, je endpoint summary správná cesta. Přesně pro to je postavený i soubor balíčku.

Pro vlastní cenové řady nebo grafy je lepší endpoint se surovou řadou

Pokud později budete chtít stavět vlastní bodovací logiku, grafy nebo podrobné časové řady, endpoint summary záměrně není maximálně podrobný. Vhodnější cestou je pak endpoint forecast se surovou řadou.

Jsou to přesné ceny elektřiny pro domácnosti?

Ne automaticky. Summary pracuje především s tržními, respektive základními cenami. Vaše přesná cena pro domácnost závisí navíc na distribuci, daních, poplatcích a přirážkách dodavatele.

Co dělat, když se po vložení neobjeví žádné hodnoty?

Typické příčiny: složka packages není zapojená, chyba v odsazení YAML, Home Assistant nebyl znovu načten nebo chybná hodnota parametru country. Nejrychleji to uvidíte v logech Home Assistantu a ve vývojářských nástrojích.

Které zóny dostávají zveřejněné ceny day-ahead?

Zveřejněné ceny day-ahead předáváme jen tam, kde to zdroj dovoluje. Pro NO1, NO3, NO4, NO5, SE1, SE2, FI, RO, SK, GR, BG a italské zóny kromě Severu proto endpointy od 24. října 2026 vracejí pro každou hodinu naši prognózu a senzory tyto hodiny označují jako prognózu. Zveřejněné ceny tam získáte přes integraci Nord Pool v Home Assistantu; pro SK, GR, BG a Itálii přes integraci ENTSO-E s vlastním tokenem.

Související: evcc s prognózou ceny elektřiny a CO2.

Další informace