EaSun · ESP32-Grid-Load-Vypocet620 · katalog funkcí
EaSun › Návod › Katalog funkcí 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.
static helpery jsou uvedeny jen tam, kde jsou důležité.
Soubor: ESP32-Grid-Load-Vypocet 626
setup()loop()enforceSystemModeExclusivity()checkSystemHealth()resetPageVariables()performMemoryCleanup() / quickMemoryDefrag() / autoCleanupBeforeMainPage()deepSleepIfNight()TestWiFi()manageFallbackAPMode() / setupSoftAPForFallback()wifiZkontrolujAOdlozenyRestart() / wifiVratStrankuUlozenoAPak()HlaskaRestart()spiffsZkontrolujAOdlozenyRestart()notFound()action()read_file(fs, path)"null".write_file(fs, path, message)*.ea nejdřív zajistí místo, starý soubor smaže a zapíše nový. Dočasně nastaví UkladamWeb.write_file2(...)spiffsFreeBytes()total − used).spiffsEnsureFreeForSettings(needBytes)spiffsCleanupNonSettingsJunk()*.ea.createSpiffsZipSnapshot() / streamSpiffsZip() / collectSpiffsZipEntries()importSpiffsFromZipFile()zipCrc32Update, zipAppendU16/U32, …)processor(var)%promenna% v HTML hodnotami z RAM/SPIFFS.SkladamHtml()sendHtmlPageChunked() / sendHtmlTemplateChunked() / sendHtmlChunkedFromOutput3()appendHtmlFooterNavod(html, chapterAsp)appendMereniSubnav(html, active)buildWebSettingsHtml(showSavedBanner)/web (API KEY, URL, čas, TSSR, přepínač sledování).handleWebUrlSave(request)/getweb: nejdřív RAM, pak SPIFFS, bez povinného restartu.applyWebUrlSettingsToRam(...)tssrEnabled do globálních proměnných okamžitě.normalizeTssrBaseUrl(url)/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()/tssr (priorita SSR pro sekundární zařízení).requestGetParamValue(request, name, out)buildTeplotaPageAndSettings() / rebuildTeplotaPageHtmlOnly()rebuildBattPageHtmlOnly() / rebuildOledPageHtmlOnly()freeMereniHtmlCachesForOte()generujTeplotniKartu(...)generujSpotKartuHome() / generateOTESpotBarsGraph()generateLogsPageContent() / generateResetPageContent()pwmWebLoadFromSpiffs() / pwmWebSaveState()Log se neukládá do SPIFFS; jde POST-em na /api_ai_run_log.php.
aiRunLogRemoteNormalizeHost(host)aiRunLogRemoteBuildUrl()http://{host}/api_ai_run_log.php.aiRunLogRemoteIsConfigured() / aiRunLogRemoteWanted()aiRunLogRemoteProbe(disableOnFail)?probe=1; očekává EASUN_AI_RUN_INGEST_OK.aiRunLogRemoteMarkUnreachable(reason) / aiRunLogRemotePeriodicCheck()aiRunLogRemotePostBatch(lines, includeCfg)# cfg) na Analyza server.aiRunLogStartNewSession() / aiRunLogSyncFile() / aiRunLogEnsureDay()aiRunLogAppendLine(line, force)force obejde interval).aiRunLogAppendEvent(kind, payload)aiRunLogFlushPending()aiRunLogBuildCfgText()# cfg snapshot nastavení (AI, limity, Spot, baterie…) pro archiv/admin.aiRunLogIsActive() / aiRunLogModeLabel() / aiRunLogDownloadFilename()aiRunLogQueuePush / TakeBatch / RestoreFront / DropOldestdeviceSettingsSyncBuildUrl()http://{host}/api_device_settings_sync.php.formsMapBuildConfigValuesJson(sectionFilter)/api/config-values).deviceSettingsSyncRequest() / deviceSettingsSyncTick() / deviceSettingsSyncFlushNow()deviceSettingsSyncPostSnapshot()deviceSettingsPullAndApply() / deviceSettingsPullTick()deviceSettingsApplySectionsJson(json) / deviceSettingsApplyFieldToRam(id, val)deviceSettingsAckPush()deviceSettingsShowUserInfo(msg)deviceRemoteCmdTick() / deviceRemotePullAndApply()deviceRemoteEnterStandby(emergency) / deviceRemoteResume()deviceRemoteApplyOutputsOff()deviceRemoteLoadFromSpiffs()/remoteStandby.ea po restartu.deviceRemoteReportStatus(cmdAck)formsMapBuildJson() (forms_map.h)GET /api/forms-map.vypocet01.hOvladaniPwmSSR()VypocetSolarSpotrebaRefactored()LogikaSolarPrebytekFunkce(currentPwm)LogikaGridNeboSolarNedostatekFunkce(currentPwm)RegulacePwmPodleBaterieFunkce(currentPwm)RegulacePwmPodleDistributoraFunkce(currentPwm)FinalniUpravyARegulacePwmFunkce(currentPwm)EasunEnergy() / EasunEnergyPwm()SSRRele() / ZapninamRelePodleTeploty()StavLCD()vypocet02.h / vypocet03.haiIsFiniteNumber / aiSafeNumber / aiSafeNonNegative / aiClampPercentaiIsKeyPowerDataFresh()aiLimitPwmStep(current, target, maxStep)aiBuildEnergy2Query(...) / aiParsePwmPayload(...)aiComputeLocalTargetPwm(in)aiApplySafetyRules(targetPwm, ...)aiResolveFinalPwm(aiMode, ...)applySolarAmaxPwmLimit(currentPwm) (spotove_ceny.h)solarAmax).getEffectiveSolarW()teploty-esp-now.h + .inoinitializeTemperatureSensors() / aktualizujMereniTeplotDallas()initTemperatureESPNow() / deinitTemperatureESPNow() / resetTemperatureESPNow()onTemperatureDataReceive(...)loadTempSenders() / saveTempSenders() / addTempSender() / addTemperatureSender()loadPMKKey() / savePMKKey() / tempParseHexStringToPMK()loadTempESPNOWMode() / saveTempESPNOWMode()updateGlobalTemperaturesFromMapping() / updateGlobalTemperaturesFromSSRMapping()resolveSenderMappedTemperature() / mappingToLabel()espNowLuxAggregate(...)teplotaMereniPlatne(t) / webTeplotaInvalid() / webDisplayTeplota()generateTempSenderList() / buildTempEspNowWifiVerifyHtml()printTemperatureStats() / isTemperatureESPNowWorking()onMqttMessage(messageSize)MqttLCDdata() / TeplotaNaLCD() / StavLCD() / StavLCD3Radek()showStatusOn242(...)showFirmwareUpdateOnDisplays()initializeRTC() / testRTC() / getRTCTime() / syncRTCWithNTP()hour() / getCurrentTimeString()resetReasonToStr(reason)spotove_ceny.hinitializeSpotSources() / Spot_updateCurrentValues() / Spot_updateCurrentValuesFromOTE()Spot_fetchOTEData() / Spot_fetchSpotovaelektrinaData() / Spot_fetchSpotPrices()Spot_parseOTEData / Spot_parseOTEDataTomorrow / Spot_parseOTEPricesArray / quarter-hour variantySpot_switchToBackupSource() / Spot_switchToPrimarySource() / Spot_fetchBothSources()Spot_fetchEURCZKRate() / Spot_getEURCZKRate() / Spot_convertEURtoCZK()Spot_getCurrentPriceCzkPerMWh() / Spot_isGridHeatAllowed()Spot_sendSpotDataToArchive() / hourly / dailySpot_tryGetRTCDate() / Spot_getCurrentDate() / Yesterday / Tomorrowsolar_aplikace.hgenerateSolarApiUrl() / processSolarApiData() / testSolarApiConnection()parseAndStoreSolarData() / loadSolarDataFromCSV() / convertJsonToCsv()analyzeSolarForecast() / detectWeatherWarning() / autoAdjustParameters()runBatteryOptimization() / optimizeBatteryCharging() / calculateBatteryChargePriority()applyBatteryOptimization(currentPwm) / predictiveLoadControl(...)getOptimizedSolarWMin() / getOptimizedSolarPMax() / getOptimizedBatteryChargePower() / getRecommendedBatteryChargePower()generateSolarHistoryPage() / generateSolarHistoryManagePage() / grafy WsaveDailySolarHistory() / cleanupOldSolarHistoryFiles() / permanent historyweather_aplikace.h / weather_solar.hprocessWeatherApiData() / generateWeatherApiUrl() / parseAndStoreWeatherData()generateWeatherPage() / generateWeatherGraph() / errors / rawcheckDailyApiCallLimit() / incrementApiCallCount()weatherSolarProcessApiData() a stránky weatherSolarGenerate*nastaveni.h — první spuštěnínastaveniPruvodceEfektivneAktivni()nastaveniPruvodceRegistrujOMezenouKonfiguraci() / nastaveniPruvodceRegistrujKrok6Routes()nastaveniPruvodceOverIdApiProWeb(...)api.easun.eu/api/.nastaveniPruvodceVykresliOledLcd(...)provedSmazaniVsechDatSPIFFSAPZEM()nastaveniPruvodceSestavKrok2IdApiHtml, MQTT, teploty, režim, SSR…)provoz_pruvodce.h — provozní profilprovozPruvodceRegistrujRoutes()/provoz, /provoz1… pro Spot / Distr. / FVE limity.provozApplyProfile(profile) / provozSaveDistr / provozSaveSpotPrices / provozSaveFvetestovaci_rezim.hTestRezim_Init / Start / Stop / Reset / TimerTestRezim_NastavSolarW / Load / Cez / Battery…TestRezim_VypocetSolarSpotrebaRefactored / logiky PWM / TestRezim_OvladaniPwmSSRTestRezim_GenerateHtmlPage() / logováníTestRezim_WiFi_AP.hTestRezim_SimpleNetworkTest() / CompleteNetworkCheck() / BackgroundNetworkCheck()TestRezim_QuickInternetTest() / QuickDNSTest() / AutoRecovery()TestRezim_SmartDataSend(url, data)TestRezim_setupWiFiAP() / fullWiFiAPTest()pajo.hhttpGETRequest(mqttserver)hFloat / hInt / middlelogEvent(severity, type, message, info)elog_YYYYMMDD.txt).eventLogEnsureToday() / eventLogTodayKey() / eventLogPathForToday()clearEventLogs() / eventLogDeleteOthers()initRGB() / setRGBColor / turnOffRGBsetRGBRed/Green/Blue/Yellow/…updateRGBStatus() / Dynamic / Advanced / Pulsing / setRGBEffect / setRGBBlinkcalculateDynamicBrightness() / AdvancedsafeDelayWithWDT(ms)aiShadowLogSyncFile() / aiShadowLogAppendLine() / aiShadowLogIsActive()
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*).