EaSun · ESP32-Grid-Load-Vypocet · vývojový manuál
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.
/spot-config se ukládají, ale
zatím neřídí PWM ani povolení odběru od distributora.
| Část | Stav | Pozná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.
Od internetu přes ESP32 až po rozhodnutí „smí / nesmí topit ze sítě“.
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) |
/spot | Přehled aktuální ceny, graf OTE, odkazy |
/spot-ote | Tabulka dnešních cen OTE |
/spot-ote-zitra | Zítřejší ceny (pokud publikovány) |
/spot-config | Zapnutí Spot, kurz ČNB, limity Low/Med/High |
/spot-eurczk-update | Ruční stažení kurzu z ČNB → SPIFFS |
/spot-updating / /spot/update | Ruční aktualizace OTE (+ kurz) |
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.
/teplota.
Detailní Distr. zůstane pro pokročilé (pojistka / strop výkonu).
| Vrstva | Kde nastavit | Co 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“.
/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 %)./teplota — Min/Max teploty (Distr lze i odtud; zůstane synchronní)./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.
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:
| Pole | Hodnota | Vý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 |
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í)
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.
Jedno „max Kč/MWh pro síť“. Low/Med/High sloučit nebo Medium = hlavní.
Pro: nejjednodušší, rychlé. Proti: méně jemnosti.
≤Low plný Distr.Max · ≤Medium ~50 % · ≤High minimum · >High OFF.
Pro: sedí k 900/1600/2800. Proti: více testování.
Řídit podle low/medium/high v rámci dne + zvlášť max Kč.
Pro: „nejlevnější hodiny“. Proti: méně předvídatelné.
[CNB EUR/CZK], web Spot, limity uložené v SPIFFS.
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.
ESP32-Grid-Load-Vypocet601.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á.
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.
| 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í |
/spot-ote (HTTP 200, ne 301)/spot-config uložené (např. Medium 1600)Spot_enabled zapnuto, pokud chcete bránu aktivníSpot_isGridHeatAllowed() = ANO/NE podle ceny a SolarWSpot_enabled=0 = Gate vypnutá (vždy allow)