EaSun-EPEX — popis aplikace (ESP32)

Právě se nacházíte: Home / vyvoj / 

Účel

Zajistit spolehlivé pravidelné stahování cen (15minutová rozlišení, 96 hodnot na den) pro aktuální a následující obchodní den, případně doplnění historie den za dnem, bez nutnosti ručního spouštění na PC.

Zdroj dat

  • Oficiální zdroj: OTE-CR.cz — výsledky denního trhu, stejná data, která podkládají veřejné grafy na webu (odpověď ve formátu JSON).
  • Dotaz se týká zvoleného kalendářního dne, rozlišení 15 minut a jazyka rozhraní; starší technická adresa z webu OTE může přesměrovávat (HTTP 301) — firmware volá aktuální cíl přímo, aby stahování na ESP32 fungovalo i bez sledování přesměrování.
  • Ceny jsou v EUR za MWh; v odpovědi jsou i množství (MWh) — firmware pro spotřebitelské zobrazení a archiv primárně využívá 15minutové ceny.
  • Pro jeden kalendářní den se stáhnou 96 intervalů (24 hodin × 4 čtvrt hodiny).
  • Kromě „dnešního“ dne firmware typicky žádá i zítřejší výsledky — ty jsou na straně OTE často dostupné až po uzavření denního trhu (orientačně odpoledne); pokud ještě neexistují, zařízení to bere jako běžný stav, ne jako chybu.

Síť WiFi

  • Při prvním spuštění nebo při neplatné konfiguraci se ESP32 může chovat jako přístupový bod (AP) s názvem v řadě EaSun-EPEX, aby šlo zadat SSID a heslo domácí sítě.
  • Po uložení údajů následuje restart, poté běží v režimu klienta v síti.
  • Konfigurace WiFi je dostupná přes vestavěný webový server na portu 80 (např. stránka konfigurace pod cestou /config).

Webové rozhraní

  • Konfigurace WiFi (hlavní stránka / /config) — výběr sítě, heslo, aktualizace seznamu sítí.
  • Konfigurace OTE (oddělená stránka) — archivace, čas denní aktualizace, historický režim, počáteční datum, interval mezi dny v historii, uložení s následným restartem.
  • Na obou těchto stránkách je zobrazen blok technických informací o Task Watchdog (TWDT): stav hlídače, nastavený timeout, popis sledovaných jader (jedno vs. dvě podle typu ESP32), uptime zařízení, volná paměť (heap) a stručná diagnostika — hodnoty se při každém načtení nebo obnovení stránky přepočítají.
  • Přístup je z lokální sítě v prohlížeči na IP adresu zařízení (často ji najdete na sériové lince po připojení WiFi).

Čas a plánování (NTP)

Zařízení používá synchronizaci času přes internet (NTP), aby platily kalendářní dny a naplánovaná hodina stažení. Bez správného času nefunguje spolehlivě určení „dneška“ ani rozvrh historického stahování.

Normální provoz (denní aktualizace)

  • Uživatel nastaví hodinu a minutu denního stažení. Stahování se spustí jednou denně v okamžiku, kdy je aktuální čas alespoň v této plánované chvíli a pro tento kalendářní den ještě neproběhlo — není tedy vázané na jedinou minutu, kterou by smyčka programu musela „trefit“ (odolnější vůči zátěži a webovému serveru na čipu).
  • Při změně data (nový den podle NTP) se uvolní další plánované stažení.
  • Po startu zařízení je krátká prodleva (řád sekund) před prvním plánovaným stažením kvůli ustálení WiFi a webové služby.

Historický režim (pokročilé)

  • Slouží k postupnému doplnění minulých dnů: v jednom kroku se stáhne jeden kalendářní den; další den následuje po uplynutí nastaveného intervalu v minutách (nebo při prvním spuštění po krátké prodlevě od bootu).
  • Počáteční datum se volí v kalendáři prohlížeče a ukládá se jako standardní zápis rok–měsíc–den.
  • Checkpoint v paměti zařízení (SPIFFS) uchovává poslední úspěšně stažený den. Po restartu se pokračuje dnem následujícím po checkpointu. Pokud je v konfiguraci novější počátek než tento „další den“, použije se pozdější z obou — lze tak začít například od dubna i tehdy, kdy ve flash zůstal starý checkpoint z předchozí série.
  • Checkpoint se zapisuje po úspěšném stažení z OTE, i když je archivace na vlastní server vypnutá, aby nepřišla o průběh po výpadku proudu nebo restartu.
  • Při prvním stažení po startu se na další den přejde až po úspěchu; při chybě zůstane fronta na stejném datu a další pokus přijde po intervalu.
  • Pokud je podle NTP ještě dříve než počáteční datum, zařízení čeká (historie se nespustí předčasně ani „neskončí omylem“).
  • Jako historické lze stahovat jen dny, které už nejsou „dnes“ ani budoucnost — aktuální obchodní den se v této větvi záměrně nestahuje jako historický.
  • Režim zatěžuje server OTE opakovanými požadavky — používejte rozumný interval a historii po doplnění vypněte.

Archivace na vlastní server

  • Lze zapnout nebo vypnout; vyžaduje zadání adresy serveru a cesty skriptu, který data přijme.
  • Data se odesílají jako HTTP požadavek s JSON obsahem (mimo jiné dnešní a případně zítřejší čtvrt hodiny, pokud jsou k dispozici).
  • Při historickém režimu se archivuje právě stažený historický den.
  • Úspěšná archivace na server může souviset s potvrzením uložení na straně backendu; samotný postup ve frontě historie se ukládá i po úspěšném stažení z OTE, aby šlo po výpadku archivu pokračovat v doplnění dnů.

Návrh tabulek MySQL (archiv na serveru)

Ke stejnému projektu patří soubor skriptu otecz_spot_archive_hourly.sql (export z MySQL 8, kódování UTF-8). Definuje tři tabulky vhodné pro ukládání dat po zpracování na straně webového backendu, který přijímá JSON z ESP32. Níže je význam polí a vazeb; kompletní příkazy CREATE TABLE, indexy a kollace jsou v uvedeném souboru.

Tabulka otecz_spot_archive_hourly

Primární úložiště v 15minutovém rozlišení (soulad s 96 intervaly za den z OTE). InnoDB, kollace s podporou češtiny u vybraných textových sloupců.

Sloupec Účel
id Technický primární klíč, auto increment.
date Kalendářní den záznamu (obchodní den trhu).
hour, minute Čas začátku intervalu; u 15min jsou u minute typicky hodnoty 0, 15, 30, 45.
price_czk Cena (deklarovaná v Kč v schématu; při importu z OTE v EUR je potřeba na serveru sjednotit přepočet nebo význam s aplikací).
price_level Kategorie pásma: low / medium / high.
level_number Číselná úroveň (doplňující klasifikace v rámci logiky archivu).
created_at, updated_at Čas vložení a poslední úpravy řádku.
ote-cr Příznak / zdroj (v názvu sloupce zkratka OTE-CR; v dotazech je třeba sloupec escapovat kvůli pomlčce).
interval Vypočtený sloupec (0–95): odvozeno z hodiny a minuty jako pořadí 15min intervalu v dni — vhodné pro indexaci a spojování s daty z čipu.

Jedinečnost řádku: kombinace date + hour + minute. V souboru jsou dále indexy pro dotazy podle data, ceny, úrovně a spojení date + interval.

Tabulka spot_archive_hourly

Zjednodušená varianta s rozlišením typicky po hodinách (unikátní pár date + hour; minuta může být vždy 0). Sloupce odpovídají obdobnému významu jako u 15min tabulky (cena, úroveň, časové značky, příznak ote-cr), bez generovaného sloupce interval. Lze ji použít pro agregované nebo starší zápisy.

Tabulka spot_archive_log

Provozní log odeslání / importu po dnech: počet záznamů, stav (success / error / partial), případná chybová zpráva a čas záznamu. Slouží k dohledání problémů při zápisu z ESP32 nebo při batch zpracování.

Implementace: Názvy sloupců a příznaků přesně zkopírujte ze souboru SQL — zejména sloupec ote-cr vyžaduje v SQL zpětné apostrofy. Po změně struktury JSON na čipu zkontrolujte mapování do těchto tabulek ve vašem přijímacím skriptu (ASP, PHP, …).

Spolehlivost (hardwarový watchdog)

Je aktivní Task Watchdog (TWDT) nad rámec běžné smyčky programu: hlídá, že systém nestál na místě tak dlouho, že by přestaly běžet idle úlohy FreeRTOS. Nastaven je delší časový limit (řád dvou minut), aby vyhověl dvojitému stahování z OTE, archivaci a historickému režimu s opakováním při chybě. Při závažném zaseknutí následuje restart ESP32. Stav a související údaje jsou čitelné i v prohlížeči na konfiguračních stránkách (viz výše).

Diagnostika

  • Podrobné textové výstupy na sériové lince (typicky 115200 baud): průběh stahování, datum ve frontě, HTTP chyby, archivace, historický checkpoint.
  • Přibližně jednou za minutu krátký řádek se stavem watchdogu, volnou heap a provozní dobou.
  • Na webové konfiguraci lze bez kabelu zkontrolovat živé údaje o watchdogu a paměti (obnovením stránky).
Změny na straně OTE: Starší odkaz na grafová JSON data z webu mohl začít vracet jen přesměrování (HTTP 301). Jednoduchý HTTP klient na ESP32 často přesměrování nesleduje, takže stahování „najednou přestalo fungovat“. Aktuální firmware volá přímo aktuální cíl rozhraní pro grafy. Při další úpravě webu OTE může být znovu nutná aktualizace firmware.

Shrnutí

EaSun-EPEX na ESP32 je specializovaný klient pro OTE: WiFi, přesný čas (NTP), denní plán stažení dnešních a případně zítřejších cen v 15min krocích, volitelná archivace na vlastní server a historický režim s rozumným řazením dnů, checkpointem v paměti a zobrazením stavu na webu včetně technických údajů o watchdogu.

Dokument popisuje chování aplikace z pohledu uživatele; neobsahuje zdrojový kód firmware. Úplná definice tabulek MySQL je v souboru otecz_spot_archive_hourly.sql v projektu hardware.
OTE a další názvy jsou ochranné známky / označení příslušných subjektů.