EaSun · ESP32-Grid-Load-Vypocet620 · katalog funkcí

EaSunNávod › Katalog funkcí Vypocet620

Katalog funkcí firmwaru EaSun ESP32-Grid-Load-Vypocet620

Tato stránka popisuje funkce firmwaru EaSun pro ESP32 / ESP32-S3 (ESP32-Grid-Load-Vypocet620.ino, verze typicky S3.0626 / 32.0626). Firmware řídí ohřev a topení z přebytků FVE (přetoky) přes PWM a SSR, podporuje režimy AI SHADOW, ASSIST a AUTO, MQTT, Spot ceny OTE, teploty Dallas / ESP-NOW a vzdálenou správu přes Easun Analyza na api.easun.eu.

U každé položky je název funkce v kódu a stručný popis, co dělá. Související: porovnání 601 vs 620, easun.eu, powmr.eu.

Katalog pokrývá veřejné a provozní funkce modulů firmwaru (jádro, SPIFFS, web/TSSR, AI log, sync nastavení, PWM/SSR, AI, teploty, MQTT, Spot, Solar API, průvodce a testy). Interní static helpery jsou uvedeny jen tam, kde jsou důležité.

1. Jádro aplikace ESP32 EaSun (setup / loop)

Soubor: ESP32-Grid-Load-Vypocet 626

setup()
Inicializace hardwaru, SPIFFS, WiFi, web serveru, MQTT, RTC, teplot, režimů a remote stavů po startu ESP.
loop()
Hlavní smyčka: síť, MQTT/HTTP data, TSSR poll, měření PZEM, PWM/AI/optimalizace, teploty, SSR, AI log flush, sync nastavení, remote příkazy, watchdog.
enforceSystemModeExclusivity()
Zajistí, že AI režim a automatická optimalizace baterie se vzájemně nevylučují špatně (jeden aktivní směr řízení).
checkSystemHealth()
Kontrola zdraví systému (heap, síť, dlouhodobé chyby) pro případný odložený restart.
resetPageVariables()
Vynuluje globální HTML buffery a pomocné proměnné stránek.
performMemoryCleanup() / quickMemoryDefrag() / autoCleanupBeforeMainPage()
Úklid RAM před generováním webu; ochrana proti vyčerpání heapu.
deepSleepIfNight()
Volitelný deep-sleep podle nočního režimu (úspora).
TestWiFi()
Připojení / obnova WiFi; při selhání fallback AP režim.
manageFallbackAPMode() / setupSoftAPForFallback()
Konfigurační Access Point, když nelze připojit STA WiFi.
wifiZkontrolujAOdlozenyRestart() / wifiVratStrankuUlozenoAPak()
Po změně WiFi nastavení odložený restart a potvrzovací stránka.
HlaskaRestart()
Zobrazí hlášku a naplánuje / provede restart ESP.
spiffsZkontrolujAOdlozenyRestart()
Po importu SPIFFS ZIP naplánuje restart.
notFound()
HTTP 404 handler AsyncWebServeru.
action()
POST akce (např. mazání kWh měření energie).

2. SPIFFS a soubory

read_file(fs, path)
Načte textový soubor ze SPIFFS; při chybě vrací "null".
write_file(fs, path, message)
Zapíše nastavení do SPIFFS; u *.ea nejdřív zajistí místo, starý soubor smaže a zapíše nový. Dočasně nastaví UkladamWeb.
write_file2(...)
Jednoduchý zápis / touch souboru bez plné logiky rezervy.
spiffsFreeBytes()
Vrátí volné bajty SPIFFS (total − used).
spiffsEnsureFreeForSettings(needBytes)
Uvolní místo (legacy AI logy, ZIP, event logy) a ověří, že je dost místa pro zápis nastavení.
spiffsCleanupNonSettingsJunk()
Smaže dočasné ZIP a legacy AI logy — ne konfiguraci *.ea.
createSpiffsZipSnapshot() / streamSpiffsZip() / collectSpiffsZipEntries()
Export celé SPIFFS do ZIP (záloha nastavení).
importSpiffsFromZipFile()
Import nastavení ze ZIP uploadu; po úspěchu restart.
ZIP helpery (zipCrc32Update, zipAppendU16/U32, …)
Nízkoúrovňová stavba a čtení ZIP formátu ve SPIFFS.

3. Web server EaSun — HTML, /web a TSSR priorita SSR

processor(var)
Template engine: nahrazuje %promenna% v HTML hodnotami z RAM/SPIFFS.
SkladamHtml()
Sestaví HTML hlavní stránky měření (karty PWM, solar, load/grid, teploty, Spot, TSSR).
sendHtmlPageChunked() / sendHtmlTemplateChunked() / sendHtmlChunkedFromOutput3()
Odeslání velké HTML odpovědi po částech (šetří RAM).
appendHtmlFooterNavod(html, chapterAsp)
Připojí patičku s odkazem na návod easun.eu.
appendMereniSubnav(html, active)
Podmenu měření / teploty / baterie / OLED.
buildWebSettingsHtml(showSavedBanner)
HTML stránky /web (API KEY, URL, čas, TSSR, přepínač sledování).
handleWebUrlSave(request)
Uložení formuláře /getweb: nejdřív RAM, pak SPIFFS, bez povinného restartu.
applyWebUrlSettingsToRam(...)
Aplikuje zeasun1..5 a tssrEnabled do globálních proměnných okamžitě.
normalizeTssrBaseUrl(url)
Ořízne koncové /tssr a lomítka — firmware cestu doplní sám.
tssrPeerConfigured()
true, pokud je nastavená platná adresa peer zařízení.
tssrTrackingOn()
true, pokud je peer nastaven a sledování TSSR zapnuto.
refreshTssrExportCode()
Aktualizuje textovou hodnotu pro endpoint /tssr (priorita SSR pro sekundární zařízení).
requestGetParamValue(request, name, out)
Bezpečné čtení POST/GET parametru z AsyncWebServer requestu.
buildTeplotaPageAndSettings() / rebuildTeplotaPageHtmlOnly()
Sestavení / obnovení stránky teplot a souvisejících limitů.
rebuildBattPageHtmlOnly() / rebuildOledPageHtmlOnly()
Obnova HTML stránek baterie a OLED/barvy bez plného rebuildu všeho.
freeMereniHtmlCachesForOte()
Uvolní cached HTML měření před náročným Spot/OTE renderem.
generujTeplotniKartu(...)
HTML karta jedné teplotní zóny (min/max, SSR, průměr).
generujSpotKartuHome() / generateOTESpotBarsGraph()
Spot karta na Home a sloupcový graf OTE cen.
generateLogsPageContent() / generateResetPageContent()
HTML stránky event logů a resetu.
pwmWebLoadFromSpiffs() / pwmWebSaveState()
Ruční PWM režim z webu — načtení/uložení do SPIFFS.

4. AI provozní log remote (Easun Analyza / api.easun.eu)

Log se neukládá do SPIFFS; jde POST-em na /api_ai_run_log.php.

aiRunLogRemoteNormalizeHost(host)
Z uživatelského vstupu vytáhne jen IP/doménu (ne celou URL).
aiRunLogRemoteBuildUrl()
Složí http://{host}/api_ai_run_log.php.
aiRunLogRemoteIsConfigured() / aiRunLogRemoteWanted()
Je nastavený host / je zapnuté odesílání (i při dočasném výpadku).
aiRunLogRemoteProbe(disableOnFail)
GET ?probe=1; očekává EASUN_AI_RUN_INGEST_OK.
aiRunLogRemoteMarkUnreachable(reason) / aiRunLogRemotePeriodicCheck()
Označí server nedostupný a periodicky zkouší znovu.
aiRunLogRemotePostBatch(lines, includeCfg)
POST dávky řádků (+ volitelně # cfg) na Analyza server.
aiRunLogStartNewSession() / aiRunLogSyncFile() / aiRunLogEnsureDay()
Nová session, sync cfg snapshot, rotace dne.
aiRunLogAppendLine(line, force)
Zařadí AI20 řádek do RAM fronty (throttling ~30 s, force obejde interval).
aiRunLogAppendEvent(kind, payload)
Urgentní AIERR / EVT ihned do fronty.
aiRunLogFlushPending()
Odešle frontu po dávkách na server.
aiRunLogBuildCfgText()
Sestaví # cfg snapshot nastavení (AI, limity, Spot, baterie…) pro archiv/admin.
aiRunLogIsActive() / aiRunLogModeLabel() / aiRunLogDownloadFilename()
Stav logování, text režimu (SHADOW/ASSIST/AUTO), jméno souboru pro info stránky.
Fronta: aiRunLogQueuePush / TakeBatch / RestoreFront / DropOldest
Kruhová RAM fronta při výpadku serveru.

5. Sync nastavení a remote příkazy (Analyza)

deviceSettingsSyncBuildUrl()
URL http://{host}/api_device_settings_sync.php.
formsMapBuildConfigValuesJson(sectionFilter)
JSON aktuálních hodnot nastavení podle mapy formulářů (pro sync i /api/config-values).
deviceSettingsSyncRequest() / deviceSettingsSyncTick() / deviceSettingsSyncFlushNow()
Požadavek / periodický tick / okamžitý push snapshotu na server.
deviceSettingsSyncPostSnapshot()
POST celého snapshotu sekcí nastavení na Analyza.
deviceSettingsPullAndApply() / deviceSettingsPullTick()
Stáhne pending změny z serveru a aplikuje je.
deviceSettingsApplySectionsJson(json) / deviceSettingsApplyFieldToRam(id, val)
Aplikace JSON sekcí / jednotlivých polí do RAM (a dle potřeby SPIFFS).
deviceSettingsAckPush()
Potvrzení (ACK), že změny z Analyza byly přijaty.
deviceSettingsShowUserInfo(msg)
Zobrazí uživateli info o výsledku sync (web/displej).
deviceRemoteCmdTick() / deviceRemotePullAndApply()
Periodické stažení a vykonání remote příkazů (standby, emergency, resume, restart).
deviceRemoteEnterStandby(emergency) / deviceRemoteResume()
Vstup / výstup z vzdálené pohotovosti; emergency = tvrdé vypnutí.
deviceRemoteApplyOutputsOff()
Vypne PWM/SSR výstupy při standby.
deviceRemoteLoadFromSpiffs()
Načte příznak standby ze /remoteStandby.ea po restartu.
deviceRemoteReportStatus(cmdAck)
Nahlásí serveru stav po vykonání příkazu.
formsMapBuildJson() (forms_map.h)
Kanonická mapa sekcí/polí pro GET /api/forms-map.

6. PWM a SSR řízení z přetoků FVE — vypocet01.h

OvladaniPwmSSR()
Hlavní řízení PWM výstupu: ruční režim, AI, fallback výpočet, remote standby, limity.
VypocetSolarSpotrebaRefactored()
Souhrnný výpočet cílového PWM z přebytku FVE / spotřeby.
LogikaSolarPrebytekFunkce(currentPwm)
Zvýšení PWM při solárním přebytku.
LogikaGridNeboSolarNedostatekFunkce(currentPwm)
Snížení PWM při odběru ze sítě / nedostatku FVE.
RegulacePwmPodleBaterieFunkce(currentPwm)
Omezení PWM podle SOC / nabíjení baterie.
RegulacePwmPodleDistributoraFunkce(currentPwm)
Respektuje režim distributora (Ano/Ne) a limity odběru ze sítě.
FinalniUpravyARegulacePwmFunkce(currentPwm)
Finální ořez, ramping, SSR min. fyzické PWM, safety.
EasunEnergy() / EasunEnergyPwm()
Doplňková energie / PWM logika (historický/exportní výpočet).
SSRRele() / ZapninamRelePodleTeploty()
Spínání SSR relé 1–3 podle teplotních pásem a TSSR priority.
StavLCD()
Aktualizace LCD stavového řádku (z vypocet01 / LCD cesty).

7. AI výpočty SHADOW / ASSIST / AUTO — vypocet02.h / vypocet03.h

aiIsFiniteNumber / aiSafeNumber / aiSafeNonNegative / aiClampPercent
Bezpečné číselné helpery pro AI vstupy.
aiIsKeyPowerDataFresh()
Kontrola čerstvosti MQTT/HTTP dat potřebných pro AI rozhodnutí.
aiLimitPwmStep(current, target, maxStep)
Omezí skok PWM za krok (plynulost).
aiBuildEnergy2Query(...) / aiParsePwmPayload(...)
Sestavení / parsování HTTP dotazu na externí AI PWM (energy2 styl).
aiComputeLocalTargetPwm(in)
Lokální návrh PWM z naměřených výkonů, lux, teplot.
aiApplySafetyRules(targetPwm, ...)
Bezpečnostní limity (teplota, data, Spot gate, …).
aiResolveFinalPwm(aiMode, ...)
Finální PWM podle režimu SHADOW (jen návrh) / ASSIST (mix) / AUTO (řízení).
applySolarAmaxPwmLimit(currentPwm) (spotove_ceny.h)
Omezí PWM při překročení max. proudu FVE (solarAmax).
getEffectiveSolarW()
Efektivní solární výkon (raw vs odhad PV).

8. Teploty, Dallas, ESP-NOW — teploty-esp-now.h + .ino

initializeTemperatureSensors() / aktualizujMereniTeplotDallas()
Init a periodické čtení DS18B20 na busu.
initTemperatureESPNow() / deinitTemperatureESPNow() / resetTemperatureESPNow()
Start / stop / reset ESP-NOW teplotní komunikace.
onTemperatureDataReceive(...)
Callback příjmu teploty/lux z vysílačů.
loadTempSenders() / saveTempSenders() / addTempSender() / addTemperatureSender()
Správa seznamu MAC vysílačů ve SPIFFS.
loadPMKKey() / savePMKKey() / tempParseHexStringToPMK()
Šifrovací PMK klíč pro ESP-NOW.
loadTempESPNOWMode() / saveTempESPNOWMode()
Režim Auto / STA / AP pro ESP-NOW.
updateGlobalTemperaturesFromMapping() / updateGlobalTemperaturesFromSSRMapping()
Mapování vysílačů na T1/T2/T3 / SSR logiku.
resolveSenderMappedTemperature() / mappingToLabel()
Převod mapování vysílače na teplotu a popisek.
espNowLuxAggregate(...)
Agregace lux z ESP-NOW senzorů pro AI.
teplotaMereniPlatne(t) / webTeplotaInvalid() / webDisplayTeplota()
Validace teplot (−999 atd.) a zobrazení průměru na webu.
generateTempSenderList() / buildTempEspNowWifiVerifyHtml()
HTML správa vysílačů a ověření WiFi kanálu.
printTemperatureStats() / isTemperatureESPNowWorking()
Diagnostika a stav ESP-NOW teplot.

9. MQTT, LCD/OLED, RTC

onMqttMessage(messageSize)
Zpracování příchozí MQTT zprávy (solarW, loadW, cezW, battery…).
MqttLCDdata() / TeplotaNaLCD() / StavLCD() / StavLCD3Radek()
Výpis MQTT a teplot na LCD.
showStatusOn242(...)
4řádkový status na OLED 2.42" / sdílený displej.
showFirmwareUpdateOnDisplays()
Hláška aktualizace FW na LCD/OLED.
initializeRTC() / testRTC() / getRTCTime() / syncRTCWithNTP()
RTC init, test, čtení času, synchronizace s NTP.
hour() / getCurrentTimeString()
Aktuální hodina / textový čas pro logy a Spot.
resetReasonToStr(reason)
Převod důvodu restartu ESP na čitelný text.

10. Spotové ceny elektřiny OTE — spotove_ceny.h

initializeSpotSources() / Spot_updateCurrentValues() / Spot_updateCurrentValuesFromOTE()
Init zdrojů Spot a aktualizace aktuální ceny/hladiny.
Spot_fetchOTEData() / Spot_fetchSpotovaelektrinaData() / Spot_fetchSpotPrices()
Stažení cen z OTE / spotovaelektrina / primárního API.
Spot_parseOTEData / Spot_parseOTEDataTomorrow / Spot_parseOTEPricesArray / quarter-hour varianty
Parsování JSON/cenových řad (hodiny i čtvrthodiny).
Spot_switchToBackupSource() / Spot_switchToPrimarySource() / Spot_fetchBothSources()
Přepínání záložního zdroje cen při výpadku.
Spot_fetchEURCZKRate() / Spot_getEURCZKRate() / Spot_convertEURtoCZK()
Kurz EUR/CZK (ČNB cache) a převod cen.
Spot_getCurrentPriceCzkPerMWh() / Spot_isGridHeatAllowed()
Aktuální cena v Kč/MWh a Gate: smí se topit ze sítě podle Spot limitů?
Spot_sendSpotDataToArchive() / hourly / daily
Volitelná archivace Spot dat na externí endpoint.
Spot_tryGetRTCDate() / Spot_getCurrentDate() / Yesterday / Tomorrow
Datumové helpery pro cache a grafy.

11. Solar API, počasí, baterie

solar_aplikace.h

generateSolarApiUrl() / processSolarApiData() / testSolarApiConnection()
Volání solární předpovědi / test spojení.
parseAndStoreSolarData() / loadSolarDataFromCSV() / convertJsonToCsv()
Uložení a načtení hodinových dat FVE.
analyzeSolarForecast() / detectWeatherWarning() / autoAdjustParameters()
Vyhodnocení předpovědi a úprava parametrů.
runBatteryOptimization() / optimizeBatteryCharging() / calculateBatteryChargePriority()
Automatická optimalizace nabíjení a priority baterie vs topení.
applyBatteryOptimization(currentPwm) / predictiveLoadControl(...)
Úprava PWM podle predikce zátěže / baterie.
getOptimizedSolarWMin() / getOptimizedSolarPMax() / getOptimizedBatteryChargePower() / getRecommendedBatteryChargePower()
Optimalizované limity pro provoz.
generateSolarHistoryPage() / generateSolarHistoryManagePage() / grafy W
Web historie FVE a grafy.
saveDailySolarHistory() / cleanupOldSolarHistoryFiles() / permanent history
Denní historie a údržba souborů.

weather_aplikace.h / weather_solar.h

processWeatherApiData() / generateWeatherApiUrl() / parseAndStoreWeatherData()
OpenWeather (nebo obdobné) stažení a uložení.
generateWeatherPage() / generateWeatherGraph() / errors / raw
Webové stránky počasí.
checkDailyApiCallLimit() / incrementApiCallCount()
Denní limit volání weather API.
weatherSolarProcessApiData() a stránky weatherSolarGenerate*
Solární weather endpointy a HTML výstupy.

12. Průvodce nastavení a provozu

nastaveni.h — první spuštění

nastaveniPruvodceEfektivneAktivni()
Je průvodce aktivní (blokuje běžné menu)?
nastaveniPruvodceRegistrujOMezenouKonfiguraci() / nastaveniPruvodceRegistrujKrok6Routes()
Registrace web routes kroků průvodce.
nastaveniPruvodceOverIdApiProWeb(...)
Ověření ID API proti api.easun.eu/api/.
nastaveniPruvodceVykresliOledLcd(...)
Stavové obrazovky průvodce na displejích.
provedSmazaniVsechDatSPIFFSAPZEM()
Factory reset SPIFFS (+ volitelně PZEM energie).
HTML buildery kroků (nastaveniPruvodceSestavKrok2IdApiHtml, MQTT, teploty, režim, SSR…)
Sestaví HTML jednotlivých kroků průvodce.

provoz_pruvodce.h — provozní profil

provozPruvodceRegistrujRoutes()
Routes /provoz, /provoz1… pro Spot / Distr. / FVE limity.
provozApplyProfile(profile) / provozSaveDistr / provozSaveSpotPrices / provozSaveFve
Uložení a aplikace provozního profilu.

13. Testovací režimy a síť

testovaci_rezim.h

TestRezim_Init / Start / Stop / Reset / Timer
Řízení simulovaného provozu bez reálných MQTT dat.
TestRezim_NastavSolarW / Load / Cez / Battery…
Ruční nastavení simulovaných vstupů.
TestRezim_VypocetSolarSpotrebaRefactored / logiky PWM / TestRezim_OvladaniPwmSSR
Stejná PWM logika nad simulovanými hodnotami.
TestRezim_GenerateHtmlPage() / logování
Web UI a log testovacího režimu.

TestRezim_WiFi_AP.h

TestRezim_SimpleNetworkTest() / CompleteNetworkCheck() / BackgroundNetworkCheck()
Průběžná kontrola internetu/DNS bez blokování UI.
TestRezim_QuickInternetTest() / QuickDNSTest() / AutoRecovery()
Rychlé testy a pokus o obnovu sítě.
TestRezim_SmartDataSend(url, data)
Odeslání dat s ohledem na stav sítě.
TestRezim_setupWiFiAP() / fullWiFiAPTest()
Test AP režimu a klientů.

14. Ostatní — pajo, RGB, event log

pajo.h

httpGETRequest(mqttserver)
HTTP stažení výkonových dat (alternativa k MQTT) a naplnění solar/load/grid.
hFloat / hInt / middle
Formátování čísel a středění textu na LCD.

Event log (.ino)

logEvent(severity, type, message, info)
Zapíše řádek do denního event logu ve SPIFFS (elog_YYYYMMDD.txt).
eventLogEnsureToday() / eventLogTodayKey() / eventLogPathForToday()
Rotace denních logů.
clearEventLogs() / eventLogDeleteOthers()
Smazání všech / starých event logů.

RGB stavová LED

initRGB() / setRGBColor / turnOffRGB
Základní ovládání RGB.
setRGBRed/Green/Blue/Yellow/…
Přednastavené barvy stavů.
updateRGBStatus() / Dynamic / Advanced / Pulsing / setRGBEffect / setRGBBlink
Stavové efekty podle provozu (WiFi, chyba, topení…).
calculateDynamicBrightness() / Advanced
Jas podle okolí / času.
safeDelayWithWDT(ms)
Delay s krmením watchdogu.

Legacy AI shadow (kompatibilita)

aiShadowLogSyncFile() / aiShadowLogAppendLine() / aiShadowLogIsActive()
Zastaralé API — AI log jde remote; SPIFFS shadow se typicky nemažé/nezapisuje aktivně.

Poznámka k rozsahu katalogu funkcí Vypocet620

Aplikace má stovky funkcí včetně úzkých static helperů v HTML builderech průvodce, Spot cache a ZIP exportu. Tento katalog pokrývá veřejné a provozní funkce, které tvoří chování zařízení vůči uživateli a vůči api.easun.eu (Easun Analyza).

Webové route handlery (server.on("/…")) nejsou samostatné pojmenované funkce — volají výše uvedené buildery a save handlery (např. handleWebUrlSave, SkladamHtml, deviceSettings*, aiRunLog*).