EaSun · ESP32-Grid-Load-Vypocet · vývojový manuál

Spotové ceny elektřiny — možnosti a další vývoj

Kompletní popis, co už firmware umí (OTE + ČNB), k čemu slouží limity na /spot-config, jak řídit odběr od distributora při nízké FVE výrobě, a jak pokračovat v Cursor IDE připravenými prompty.

1. Aktuální stav (co už funguje)

HOTOTO Stažení cen OTE, kurz ČNB, webové stránky Spot, SPIFFS cache kurzu.
CHYBÍ Limity Low / Medium / High z /spot-config se ukládají, ale zatím neřídí PWM ani povolení odběru od distributora.
ČástStavPoznámka
OTE denní / zítřejší ceny OK URL pw-data/chart-data/01?report_date=YYYY-MM-DD&time_resolution=PT15M&language=cs (date= OTE ignoruje — bug opraven 2026-07)
Kurz EUR/CZK z ČNB OK denni_kurz.txt?date=DD.MM.YYYY → SPIFFS /eurczk_cache.ea
Web /spot, /spot-ote, /spot-config OK Přehled, tabulka, nastavení limitu + kurz
Periodické stahování OTE OK Jen když Spot_enabled=1; ruční update vždy
Brána „síťové topení podle Kč/MWh“ TODO Hlavní další krok vývoje
Stupně výkonu Low/Med/High TODO Varianta B níže

Soubory: spotove_ceny.h, hlavní sketch ESP32-Grid-Load-Vypocet601.ino, navigace obsahuje odkaz Spot.

2. Tok dat (diagram)

Od internetu přes ESP32 až po rozhodnutí „smí / nesmí topit ze sítě“.

OTE-CR.cz EUR/MWh · 24/96 ČNB cnb.cz kurz CZK/EUR ESP32 firmware spotove_ceny.h RAM ceny SPIFFS kurz /spot-config Web UI /spot · /spot-ote Spot Gate: Spot_isGridHeatAllowed() cena Kč ≤ limit ∧ přebytek FVE OK → povolit; AI jen ±% SSR / PWM / AI Gate hard · AI soft
Plné čáry = hotové (včetně Spot Gate + AI soft korekce). Další: stupně Low/Med/High faktor, napojení Distr. SSR.

3. Webové cesty aplikace

Po WiFi (např. http://192.168.1.244) — v menu je odkaz Spot.

URLÚčel
/ (Home)Při Spot ON: karta SPOT (cena Kč, limit, Gate ANO/NE + důvod)
/spotPřehled aktuální ceny, graf OTE, odkazy
/spot-oteTabulka dnešních cen OTE
/spot-ote-zitraZítřejší ceny (pokud publikovány)
/spot-configZapnutí Spot, kurz ČNB, limity Low/Med/High
/spot-eurczk-updateRuční stažení kurzu z ČNB → SPIFFS
/spot-updating / /spot/updateRuční aktualizace OTE (+ kurz)

4. Limity Low / Medium / High (Kč/MWh)

Uživatel na /spot-config nastaví tři prahy v Kč/MWh (příklad: Low 900, Medium 1600, High 2800). Cena pro porovnání = OTE EUR × kurz ČNB.

Pozor: relativní pásmo OTE (low/medium/high v rámci dne) není totéž jako absolutní limity uživatele. Relativní pásmo říká „je dnes levná hodina“; limity říkají „smím topit ze sítě do X Kč/MWh“.
≤ Low plný Distr. ≤ Medium omezený výkon ≤ High minimum / bojler > High síť OFF 900 1600 2800 Kč/MWh
Příklad stupňů (varianta B) — hodnoty si nastavíte na /spot-config.
Chcete-li použít jen jedno pásmo (Low) a Medium/High nevyužívat — viz §5a · Jen Low pásmo.

5. UX pro laiky (cíl po Spot Gate)

Pro běžného uživatele má být nastavení krátké: teploty + jedna (nebo tři) ceny Kč/MWh. Nemusí denně přepínat Distr.Ano / Max % na /teplota. Detailní Distr. zůstane pro pokročilé (pojistka / strop výkonu).

Vrstvy rozhodnutí (pořadí)

VrstvaKde nastavitCo dělá
Spot Gate /spot-config Hard: smí / nesmí topit ze sítě podle ceny (Kč/MWh) + málo FVE
Distr. + Max % / W /teplota Hard: strop výkonu; Distr.Ne = nikdy síť (i při levném spotu)
Teploty Min/Max /teplota Hard: komfort (kdy topit / kdy vypnout)
AI ASSIST/AUTO /system-modes Soft: jemné PWM jen uvnitř toho, co Gate + Distr dovolí

/spot-config nepřepisuje políčka Distr. na /teplota. Řídí povolení v čase (Ano/Ne podle ceny). Čísla Max % / Min–Max W = „jak moc“.

Jednoduchý profil (doporučeno pro laiky)

  1. /spot-config — zapnout Spot; limity Kč/MWh; Distr.Ano/Ne u T1–T3 + Max odběr % > 0 (stejné SPIFFS jako /teplota: Distr1–3 + společný Max %).
  2. /teplota — Min/Max teploty (Distr lze i odtud; zůstane synchronní).
  3. /system-modes — SHADOW → později ASSIST/AUTO.
Distr.Ne = absolutní zákaz sítě. Spot Gate pak síťové topení neotevře (pojistka „jen FVE přebytek“). Pro „topení ze sítě podle ceny“ musí být Distr. povolen a Max odběr > 0 % — obojí lze nastavit přímo na /spot-config.

Jen 1 pásmo (Low) — Medium a High nevyužívat

Chcete topit ze sítě jen když je cena opravdu nízká (např. Low = 900 Kč/MWh) a nechcete střední/vyšší „dražší“ stupně? Nastavte na /spot-config:

PoleHodnotaVýznam
Low pásmo 900 (váš strop) Jediný práh: cena ≤ 900 → smí síť (plný Distr. / faktor 1.0)
Medium pásmo 900 (= stejné jako Low) Žádné „střední“ pásmo navíc — nepřidá povolení při dražší ceně
High pásmo 900 (= stejné jako Low) Stejně; cena > 900 → síť OFF
Proč Low = Medium = High? U varianty B platí ≤Low plný výkon, ≤Medium ~50 %, ≤High minimum, >High OFF. Když jsou všechna tři čísla stejná (900), existuje jen jeden práh: ≤900 = plný (jako Low), >900 = OFF. Medium/High se prakticky nevyužijí.
Nedávejte Medium/High vyšší než Low (např. Med 1600, High 2800), pokud nechcete při dražší elektřině stále topit ze sítě (byť omezeně).
Nedávejte Medium/High = 0 bez úpravy firmware — 0 by mohlo znamenat „vždy ≤ limit“ nebo chybnou logiku; bezpečný laikovský postup je Medium = High = Low.

Budoucí UX (TODO): na /spot-config režim „Jednoduché: jedno max Kč/MWh“ → UI ukáže jedno políčko a do SPIFFS zapíše stejnou hodnotu do Low/Medium/High (varianta A). Pokročilí uvidí tři pásma.

Příklad (jen Low @ 900 Kč/MWh):
  Spot_maxPriceLow    = 900
  Spot_maxPriceMedium = 900
  Spot_maxPriceHigh   = 900
  → cena 700  → Gate ANO (síť v limitech Distr.)
  → cena 1200 → Gate NE  (jako Distr.Ne pro síťové topení)

6. Doporučená logika: Spot Gate + málo FVE

Hlavní smysl: ze sítě topit jen když je spot levný a solární výroba nestačí. Při slušné FVE zůstává stávající řízení podle přebytku.

Spot_enabled? NE → Distr. jako dřív SolarW < práh? (málo FVE) NE → jen přebytek FVE cena Kč ≤ limit? ANO povolit Distr. PWM NE zakázat síťové topení SSR s „Distr. Ano“ + teplota Min/Max beze změny teplotní logiky
Rozhodovací strom doporučené první implementace (fáze 1).

7. Variantní směry vývoje

A — Jeden práh

Jedno „max Kč/MWh pro síť“. Low/Med/High sloučit nebo Medium = hlavní.

Pro: nejjednodušší, rychlé. Proti: méně jemnosti.

B — Tři stupně výkonu

≤Low plný Distr.Max · ≤Medium ~50 % · ≤High minimum · >High OFF.

Pro: sedí k 900/1600/2800. Proti: více testování.

C — Relativní pásmo OTE

Řídit podle low/medium/high v rámci dne + zvlášť max Kč.

Pro: „nejlevnější hodiny“. Proti: méně předvídatelné.

Další nápady (fáze 3+)

  • Nabíjení baterie ze sítě jen pod limitem
  • Predikce: za 2–3 h levněji → teď držet
  • Jen vybrané SSR (bojler ano, přímotop ne)
  • Home: karta SPOT (cena Kč, limit, Síť POVOLENA/ZAKÁZÁNA) — hotovo v 604 při Spot ON
Doporučené pořadí: Fáze 1 = Gate A (1 práh + málo FVE) → Fáze 2 = varianta B (3 stupně) → Fáze 3 = baterie / predikce / per-SSR.

8. Roadmap — jak pokračovat

Fáze 0 — hotovo
OTE download, ČNB kurz + Serial [CNB EUR/CZK], web Spot, limity uložené v SPIFFS.
Fáze 1 — Spot Gate (hotovo v 604)
Funkce Spot_isGridHeatAllowed(): Spot_enabled ∧ cena Kč ≤ max(Low,Med,High) ∧ přebytek FVE (solarW−loadW, viz spot-gate-prebytek-fve.html) — dříve absolutní SolarW < 200 W. AI (ASSIST/AUTO) respektuje Gate jako hard clamp; jemné ±% uvnitř — viz ai-rozvoj.html Fáze 3. OTE/ČNB beze změny.
Fáze 2 — Stupně Low/Med/High (faktor PWM)
Místo ano/ne vrátit faktor výkonu 1.0 / 0.5 / 0.25 / 0.0 a omezit max PWM Distr.
Fáze 3 — Rozšíření
Per-SSR limity, baterie, predikce zítřejších cen, MQTT publish spot stavu.
  1. Otevřete tento manuál a vyberte fázi (začněte Fází 1).
  2. V Cursoru otevřete složku projektu ESP32-Grid-Load-Vypocet601.
  3. Zkopírujte odpovídající prompt z kapitoly níže do chatu agenta.
  4. Po změnách zkompilujte (ESP32 / ESP32-S3), flashněte, ověřte Serial + web.
  5. Teprve pak jděte na další fázi stejným způsobem.

9. Manuál pro Cursor IDE — prompty k dalšímu vývoji

Pracujte po jedné fázi. Do promptu vždy uveďte cestu projektu a odkaz na tento soubor. Agent má měnit jen to, co prompt žádá.

Tip: v Cursoru můžete napsat „řiď se souborem spotove-ceny.html, fáze 1“ a přiložit / zmínit tento HTML jako kontext.

Prompt 0 — audit (volitelné, před Fází 1)

# Zkopíruj do Cursor Agent
V projektu ESP32-Grid-Load-Vypocet601 projdi, kde se rozhoduje o odběru od distributora
u SSR/PWM (Distr. Ano, Min/Max W). Manuál: spotove-ceny.html.

Napiš stručný seznam:
1) funkce / místa v kódu, kam zapojit Spot Gate
2) jak se bere SolarW / přebytek
3) jestli se Spot_maxPriceLow/Medium/High někde už používají v řízení

Nic neimplementuj — jen audit.

Prompt 1 — Fáze 1: Spot Gate (doporučeno jako další krok)

# Zkopíruj do Cursor Agent — FÁZE 1
Řiď se manuálem spotove-ceny.html, kapitola „Spot Gate“ a Roadmap Fáze 1.

Úkol:
1) Přidej funkci Spot_isGridHeatAllowed() (nebo ekvivalent v .ino / spotove_ceny.h):
   - false pokud !Spot_enabled nebo nejsou platná OTE data
   - spočítej aktuální cenu v Kč/MWh = OTE EUR × EUR_CZK_Rate
   - povol síťové topení jen pokud cena ≤ Spot_maxPriceMedium
     (zatím jeden práh = Medium; Low/High zatím neřeš)
   - povol jen pokud SolarW < práh (konstanta např. 200 W, nebo SPIFFS později)
2) Napoj výsledek tam, kde se povoluje odběr od distributora pro SSR/PWM.
   Teplotní Min/Max neměň. Při dostatku FVE nech stávající přebytkové řízení.
3) Serial: tag [SPOT GATE] s cenou Kč, limitem, SolarW, povolen=ANO/NE.
4) Na /spot nebo Home krátce zobraz stav brány.

Po dokončení vypiš: změněné soubory, jak otestovat, co zůstalo na Fázi 2.

Prompt 2 — Fáze 2: tři stupně výkonu

# Zkopíruj do Cursor Agent — FÁZE 2 (až po hotové Fázi 1)
Řiď se spotove-ceny.html, varianta B a Roadmap Fáze 2.

Rozšiř Spot Gate:
- cena ≤ Spot_maxPriceLow → faktor 1.0 (plný Distr. max W)
- cena ≤ Spot_maxPriceMedium → faktor 0.5
- cena ≤ Spot_maxPriceHigh → faktor 0.25 (nebo jen vybrané SSR později)
- cena > High → faktor 0.0 (síťové topení OFF)

Faktor aplikuj na max povolený výkon ze sítě. FVE přebytek neměň.
Uprav text nápovědy na /spot-config ať odpovídá stupňům.
Serial [SPOT GATE] vypisuj i faktor.
Neměň OTE/ČNB stahování.

Prompt 3 — Fáze 3a: info na Home + MQTT (volitelné)

# Zkopíruj do Cursor Agent — FÁZE 3a
Podle spotove-ceny.html (Další nápady):
Na hlavní stránce / zobraz stav Spot Gate (cena Kč, limit, povolen/zakázán, faktor).
Volitelně přidej MQTT topic se stejným stavem (jen pokud už MQTT běží v projektu).
Bez změny regulační logiky kromě zobrazení/publish.

Prompt 3b — per-SSR limity

# Zkopíruj do Cursor Agent — FÁZE 3b
Podle spotove-ceny.html: umožni u SSR1–3 volbu „smí topit ze sítě podle Spot“
(checkbox + uložení SPIFFS). Spot Gate pak platí jen pro označené SSR;
ostatní Distr. Ano se chovají jako dřív (nebo vždy zakázat síť — upřesni v odpovědi
a zeptej se před implementací, pokud je nejasné).

Prompt 3c — baterie ze sítě při levném spotu

# Zkopíruj do Cursor Agent — FÁZE 3c
Navrhni a po mém schválení implementuj: nabíjení baterie ze sítě jen když
Spot Gate povolí (cena ≤ limit). Nejprve napiš, kde v kódu se řídí charge ze sítě,
pak krátký plán, čekej na OK, teprve potom kód.

Jak psát vlastní follow-up v Cursoru

10. Serial Monitor — hledané tagy

Tag (Ctrl+F)Význam
[CNB EUR/CZK]Stažení / cache kurzu z ČNB
=== Stahování z OTE-CR.cz ===Stažení spotových cen
oteAvailable=ANO/NE po startu nebo update
[SPOT GATE]po Fázi 1 — rozhodnutí o síťovém topení

11. Checklist před / po flashi

Před implementací Fáze 1

Po Fázi 1 (Gate + AI soft)