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.
- Integrace HACS: nastavení přes dialog, vlastní entity, ve výchozím obchodě HACS
- Balíček YAML: REST senzor a šablonové senzory ke zkopírování, funguje i bez HACS
- bez API klíče obvyklý test na 48 hodin, s API klíčem až 120 hodin – u obou cest stejně
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ě.
packages/ a je hotovo. HACS není potřeba, konfiguraci YAML máte plně pod kontrolou – dobrá cesta, pokud konfiguraci Home Assistantu stejně spravujete v Gitu.
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.
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.
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ě.
- V HACS vyhledejte „Energy Price Forecast EU“ a stáhněte integraci, poté Home Assistant restartujte.
- 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.
- 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.
- Nahraďte všechny tři
sensor.CHANGE_MEstejnou 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í.
is_cheapest_window_now a zbývající minuty.Jak vypadá výsledek
Jak balíček zapojit
- Stáhněte soubor balíčku a uložte ho jako
/config/packages/energypriceforecast.yaml. - Pokud ještě nemáte povolené packages, doplňte do souboru
configuration.yamltento blok. - Načtěte Home Assistant znovu nebo ho jednou restartujte.
- 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_api | Surová odpověď endpointu summary včetně flat, price, co2 a meta. | Ladění a základ pro další šablony. |
sensor.epf_current_price | Aktuá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_intensity | Aktuální hodnota CO2 v probíhajícím intervalu. | Přesun spotřeby podle CO2. |
binary_sensor.epf_cheapest_price_window_active | on, 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_minutes | Zbý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_window | Nejbližší úplné budoucí okno pro cenu. | Pozdější spuštění nebo plánování. |
sensor.epf_api_key_status | Stav uloženého API klíče. | Rychle zjistit, zda opravdu platí 48 h, nebo 120 h. |
sensor.epf_allowed_horizon | Horizont 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á.
hours=48. Získáte tak jednoduchý testovací horizont, který je bez dalšího klíče veřejný.hours=120 tedy na 5 dní.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_price | Aktuální cena v probíhajícím intervalu. | Přímý aktuální stav pro cenovou logiku. |
flat.current_co2_g_kwh | Aktuální hodnota CO2 v probíhajícím intervalu. | Přímý aktuální stav pro logiku CO2. |
flat.is_cheapest_window_now | Ukazuje, zda je nejlepší cenové okno už aktivní. | Důležitější než pouhý čas začátku. |
flat.cheapest_window_remaining_minutes | Zbý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.start | Nejbližší úplné budoucí okno pro cenu. | Plánování, když chcete záměrně začít později. |
meta.api_key_state | Stav uloženého klíče. | Hledání chyb a testovací fáze. |
meta.allowed_horizon_hours | Co je pro tento přístup povoleno na straně serveru. | Jasná průhlednost limitů. |
meta.used_horizon_hours | Co 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_price | Aktuá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_source | Označ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_kwh | Aktuá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.current | Objekt s start, end, value, unit a source pro aktuální cenový interval. | Dashboardy a přesnější stavová logika. |
price.cheapest_window_next_horizon | Strukturovaný blok nejlevnějšího okna včetně délky a počtů podle zdroje. | Když potřebujete začátek, konec a kontext pohromadě. |
co2.current | Objekt s aktuální hodnotou CO2 a příslušným časovým oknem. | Zobrazení CO2 bez parsování bloku flat. |
co2.greenest_window_next_horizon | Strukturovaný blok nejzelenějšího okna. | Logika nabíjení nebo vytápění s nízkým CO2. |
combined.best_window_next_horizon | Kombinované doporučení s hodnotami ceny, CO2 a skóre. | Jediné rozhodnutí „nejlépe teď“ bez vlastního skóre. |
source.price | Metadata 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.co2 | Metadata o zdroji CO2. | Ladění a dohledatelnost. |
hourly-forecast.flat.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ý.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.
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.