EaSun-EPEX — popis aplikace (ESP32)

Jedná se o firmware pro mikrokontrolér ESP32, který přes WiFi stahuje spotové ceny elektřiny z veřejných dat OTE ČR, zobrazuje je v prostém webovém rozhraní a volitelně je odesílá na vlastní server (archiv). Autor firmware: Pavel Kunor; projekt je uzpůsoben řadě EaSun-EPEX.

Úč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

Síť WiFi

Webové rozhraní

Č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)

Historický režim (pokročilé)

Archivace na vlastní server

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
idTechnický primární klíč, auto increment.
dateKalendář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_czkCena (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_levelKategorie 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-crPříznak / zdroj (v názvu sloupce zkratka OTE-CR; v dotazech je třeba sloupec escapovat kvůli pomlčce).
intervalVypoč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

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.