EaSun · ESP32-Grid-Load-Vypocet900
Reaktivní omezení podle MQTT proudu je při topné tyči ~2500 W moc pozdě: skok PWM → skok odběru → měnič stáhne výrobu, teprve pak přijde MQTT a soft cut. Horší je kaskáda cutů: MQTT ještě ukazuje vysoké A, zatímco PWM už klesá — firmware řeže znovu každých ~200 ms až na 0 %. Řešení: feed-forward ΔW/ΔA před přidáním PWM + settle hold po cutu (delší u topidel ≥1 kW).
Na /ai-fve-pv je Ochrana proudu FVE (solarA):
solarAmax (např. 22 A) a solarAThrottlePct (např. 90 % → soft ≈ 19,8 A).
Funkce applySolarAmaxPwmLimit() v spotove_ceny.h reaguje až když naměřené
solarA vstoupí do soft pásma / nad Amax.
gPwmAmaxCut = před − po), ne že PWM spadlo na 2,7 %. Skutečný pád výroby měniče na 0
způsobuje přetížení / ochrana měniče při skoku odběru dřív, než MQTT stihne soft brzdu.
solarA ještě chvíli drží starou hodnotu. Reaktivní limit pak cut opakuje každý cyklus;
paralelně FinalniUpravy může ubírat kvůli dočasně nízké solarW (měnič stáhl výrobu).
Výsledek: PWM spadne na 0 dřív, než stihne klesnout skutečný proud. Ve FW je od 2026-08-12
settle hold + cut podle odhadovaného výkonu topení — viz §5.4.
Na stránce /teplota (Měření → Tepl) je samostatný řádek
Max výkon topení při 100 % PWM (W).
Jde o jmenovitý součet topných těles řízených PWM (např. 2500 W).
/heatMaxW.ea → trvale v šifrovaném /easun.cfg (jako ostatní nastavení)./solar-sim.cfg (heatMaxW=…) při uložení ze sim / teplota.gSolarSimHeatMaxW — sdílené pro provoz i simulaci.HeatW_est = heatMaxW × (PWM% / 100) // lineární odhad (výchozí) HeatA_est = HeatW_est / GridV // PZEM nebo cezV
/solar-sim je totéž pole s odkazem na /teplota.
Implementováno na stránce /pwm
(tlačítka Spustit / Stop, progress %, CSV, Použít W@100% jako heatMaxW).
Lineární heatMaxW × PWM% zůstává fallback; naměřená křivka je v
/heat-pwm-cal.csv pro další FF zpracování.
/pwm tlačítko Spustit (confirm). Automatika OFF, ruční PWM ON, sim FVE se vypne.SOLAR_DROP,
uloží se heatCalDropPwm (= limit PWM před pádem měniče).pro pwm = 0 … 100 (krok 1 %):
nastav PWM = pwm
počkej settleMs (např. 2500 ms)
zapiš: čas, pwm, heat_V, heat_A, heat_W [, solar U/I/W]
konec → PWM=0 → ulož soubor
| Výstup | Použití |
|---|---|
| W při 100 % PWM | Doplnit heatMaxW (místo katalogu 2500) |
| ΔW na každý 1 % PWM | Feed-forward: „+1 % → +X W“ podle naměřené křivky, ne lineárního odhadu |
| Mrtvé pásmo (W≈0 do N %) | Nepřidávat agresivní kick, dokud tyč ještě nebere |
Pád FVE na ~0 (SOLAR_DROP) |
Koncový bod PWM — max bezpečné % před sražením výroby měničem; archiv v CSV + easun.cfg |
| CSV archiv (+ solar sloupce) | Diagnostika, FF, porovnání po výměně tyče/SSR |
ms,pwm_pct,heat_V,heat_A,heat_W,grid_V,solar_V,solar_A,solar_W,solarW_eff,event … 45250,47,229.8,5.10,1170,230,118,0.2,24,24,SOLAR_DROP
/heat-pwm-cal.csv + download /api/heat-cal-csv.easun.cfg: heatCalLastReason, heatCalLastPwm,
heatCalSolarPeak, heatCalDropPwm, heatCalDropHeatW, heatCalLastHeatW.solarA < 0.8 A (nečeká na zpožděné MQTT).solar_low), 100 % / Stop.
Distr Max / soft Amax během kalibrace neplatí — může dočasně růst odběr ze sítě.
solarV (MQTT) × solarAmax
(Max proud FVE na /ai-fve-pv, např. 200 V × 22 A = 4400 W).solarWPeakSeen, pokud Amax=0 nebo U chybí./ai-fve-pv nastavený Strop odhadu W (např. 6200)./pwm).heatCalDropPwm.
Kalibrační sweep (a hledání SOLAR_DROP) není primárně o limitu sítě.
Smysl má proto, že výkon FVE je vždy:
P ≈ U × I → I ≈ P / U
solarAmax je strop proudu, ne wattů. Při nízkém U (ráno, večer, zataženo,
dlouhý kabel, studené/horké panely, částečný stín) stejné topení „sežere“ víc ampérů
a měnič dřív srazí výrobu — i když wattáž panelů ještě „vypadá“ v pohodě.
heatCalDropPwm) — to je očekávané, ne chyba testu.dA ≈ dW / solarV — proto je v telemetrii důležité živé U;
bez rozumného napětí odhad proudu neplatí.
Strop topení a solarAmax držte pod jmenovitým výkonem / proudem měniče
(katalog + string). Orientačně pro hybrid typu Anern / EASUN ~6200 W:
| Položka | Doporučení (6200 W třída) | Poznámka |
|---|---|---|
| Jmenovitý AC / hybrid | ~6,2 kW | Nepřetěžovat trvale topením „na doraz“ jen ze FVE |
heatMaxW (tyč / součet PWM) |
2000–3000 W (typ. 2500) | 1 tyč; 2× tyče jen pokud měnič + string zvládnou I při nízkém U |
| Max topení vs. FVE | ≤ ~40–50 % jmenovitého měniče | 6200×0,4 ≈ 2500 W — rezerva na dům + MPPT + nízké U |
solarAmax |
podle katalogu MPPT / PV vstupu (např. 18–27 A) | Hard strop; soft 85–92 % = dřívější brzda |
| Kalibrace — kdy spustit | slunce, U spíš vyšší, výroba stabilní | Cíl: najít drop kvůli A, ne kvůli síti |
| Kalibrace — opakovat | při změně stringu / tyče / sezóně (U jiné) | Nízké zimní U = konzervativnější drop PWM |
solarAmax dle štítku, a kalibraci berte jako mapu
„při tomto U ještě bezpečné PWM“. Prediktivní FF pak brzdí dřív, když U klesne a stejné ΔW
znamená větší ΔA.
Příklad (stejné topení +250 W): U = 200 V → dA ≈ 250/200 = 1,25 A U = 100 V → dA ≈ 250/100 = 2,50 A // 2× horší pro Amax Proto má kalibrace + FF smysl právě kvůli omezení napětí / výkonu panelů.
softA = solarAmax × solarAThrottlePct / 100 dW = heatMaxW × dPWM / 100 dA_est = dW / solarV // konzervativní odhad proudu FVE headroom = softA − solarA − marginA dPWM_max ≈ headroom × solarV × 100 / heatMaxW
| Situace | Vstup | Výpočet | Dopad |
|---|---|---|---|
| Nízký proud | U=129 V, I=4 A, soft=19,8 A, heat=2500 W | headroom ≈ 15,5 A → dPWM_max velký | Rampa může běžet normálně |
| Blízko soft | U=109 V, I=19,0 A, soft=18,7–19,8 A | headroom ≈ 0 → dPWM_max ≈ 0 | Nepřidávat; jen držet / mírně ubírat |
| Skok +10 % PWM | heatMaxW=2500, U=110 V | dW=250 W → dA≈2,3 A | Bez FF: snadno přes soft; s FF: krok zmenšit na ~2–4 % |
Topení výstup: ne), fyzický skok není —
ale FF stále omezí virtuální odberWatt a rampu, takže sim ukáže stejné chování jako ostrý provoz.
/teplota, SPIFFS klíč heatMaxW v /easun.cfg,
sync s /solar-sim. ✅
/pwm, 0→100 % po 1 %, settle 2,5 s, CSV, apply W@100%. ✅
clampPwmStepByPredictedSolarA —
dW z křivky CSV nebo lineárně z heatMaxW; cap před add v surplus i U-větvi;
u topení ≥1 kW pomalejší rampa blízko soft. ✅
amaxBlocksAdd —
soft − margin 0,4 A + hystereze soft latch. ✅
applySolarAmaxPwmLimit —
soft pásmo jen latch (bez cutu); nad Amax cut podle výkonu topení + settle hold + cap ΔW
(viz §5.4). ✅
FinalniUpravyARegulacePwmFunkce —
během gAmaxReactiveHoldUntilMs neřezat kvůli solarWEff < solarWMin. ✅
/api/solar-sim: dA_est, dPwmCap,
AMAX_FF_CAP, heatCurveOk, amaxSoftLatched, amaxHoldMs. ✅
float softA = solarAmax * throttlePct / 100.0f; float marginA = 0.4f; // ~0.3–0.6 A float headroom = softA - solarA - marginA; if (headroom <= 0) return 0; // nepřidávat float v = max(solarV, 50); float dA_per_pct = (heatMaxW / 100.0f) / v; float maxStep = headroom / max(dA_per_pct, 1e-4f); // blízko soft — zpomalit float near = solarA / softA; if (near > 0.85f) maxStep *= 0.35f; // topení ≥1 kW — ještě pomaleji float heatWNow = heatWAtPwmPct(pwmNow); if (heatWNow >= 1000) maxStep *= min(1.0f, 1000.0f / heatWNow); if (heatWNow >= 2000) maxStep *= 0.55f; return min(requestedStep, maxStep);
if (!gAmaxSoftLatched) return pwm;
if (solarA < solarAmax) return pwm; // soft: jen držet, FF blokuje add
heatW = heatWAtPwmPct(pwm);
tune = amaxReactiveTuneForHeatW(heatW); // cut/tick, settleMs, maxDwCut
if (millis() < gAmaxReactiveHoldUntilMs) {
if (!emergencyStillRising()) return pwm; // čekat na fyzický pokles I
}
target = pwm - proportionalCut(solarA, solarAmax, heatW);
target = amaxCapCutByHeatDw(pwm, target, maxDwCut);
gAmaxReactiveHoldUntilMs = millis() + settleMs;
return target;
/teplota Max výkon topení = skutečný součet tyčí (např. 2670 W z kalibrace)./ai-fve-pv: solarAmax=22, Brzdit od=85–90 %.dPwmCap, AMAX_FF_CAP, amaxSoftLatched, amaxHoldMs.heatMaxW nebo CSV křivka na SPIFFS (heatCurveOk: true).amaxHoldMs 5500–7000 ms — PWM drží, nesmí kaskáda na 0.solarWMin hold(amax) během settle (FinalniUpravy neřeže)./api/solar-sim-log — méně opakovaných AMAX_SOFT_CUT, cut jen nad Amax.heatMaxW (underestimate → kratší settle),
solarAThrottlePct (vyšší = dřívější latch), a zda jiná větev neřeže (cezWMax, baterie, SSR OFF).
Od firmware S3.0913+ aplikace automaticky sestaví prompt včetně dotazů a mapy menu podle stavu zařízení a logů — stačí zkopírovat do Gemini nebo ChatGPT v prohlížeči. Na ESP32 nepotřebujete API klíč ani zapnutý AI Cloud.
/logs (šetří místo v paměti).| Situace | Příklad automatického dotazu |
|---|---|
| Restart WDT / panic / brownout | Proč došlo k restartu a co zkontrolovat? |
| Nestabilní provoz (health) | Pravděpodobná příčina a postup |
| WiFi / MQTT chyba nebo stará data | Co ověřit u brokeru a topiců |
| Přebytek FVE, ale nízké PWM | Co blokuje zvýšení výstupu? |
| solarA blízko Amax soft limitu | Jsou správné solarAmax, throttle % a heatMaxW? |
| PWM na 0 při vysokém solarA | Kaskáda Amax cutů — jak upravit settle? |
| heatMaxW < skutečný odběr | Zkreslení prediktivní brzdy |
| cezW > cezWMax, nízká baterie, Spot bez OTE | Co stahuje PWM a co nastavit |
| AI jiné PWM než výstup | Který režim SHADOW/ASSIST/AUTO zvolit |
| Event log: NTP, SPIFFS, MQTT | Dotaz podle konkrétní chyby v logu |
Solar-sim CSV (branch) | AMAX_REACTIVE_CUT, AMAX_FF_CAP, UNDER_MIN, kaskáda cutů… |
| Log prázdný | Tip: zapnout „Logovat PWM“ na /solar-sim |
| Vše v pořádku | Obecný review nastavení a Amax parametrů |
| Cesta | Účel |
|---|---|
/logs | Stránka Event log — zelený blok Prompt pro AI, tlačítko Kopírovat; automaticky vloží solar-sim CSV a zastaví Logovat PWM |
/logs-ai-prompt | Čistý text (.txt) — stejný snapshot (flush + stop logování) |
/diag, /reset | Odkazy na AI prompt v sekci logů / diagnostiky |
/solar-sim.
/solar-sim zapněte Logovat PWM, nechte běžet test / provoz./logs nebo /logs-ai-prompt — aplikace sama vloží CSV a vypne logování.branch jsou už v promptu./solar-sim.| Blok | Obsah | Příklad využití u Amax / topení |
|---|---|---|
| Dotazy pro AI | Hlavní dotaz + až 8 otázek automaticky podle stavu a logů | „PWM po Amax cutu padá na 0“ — generováno bez ručního psaní |
| Zařízení | FW, IP, MAC, uptime, poslední start (WDT, brownout…), volná SPIFFS | „Po restartu kvůli WDT — souvisí s Amax cuty?“ |
| # cfg | Snapshot nastavení: AI režim, solarAmax, solarAThrottlePct, heatMaxW, heatCurveOk, Spot, baterie, solarWMin, cezWMax, slow PWM… |
„Je heatMaxW moc nízké oproti tyči 2,5 kW?“ |
| Mapa menu | Stránky (/teplota, /pwm, /ai-fve-pv, /batt, /spot-config…) + HTML id polí + překlad zkratek z # cfg |
AI ví, že solarAmax je na /ai-fve-pv, heatMaxW na /teplota |
| Formát odpovědi | Povinná struktura pro každý návrh: URL včetně IP → název pole → aktuální hodnota → doporučení → proč | Např. http://192.168.1.50/teplota — «Max topeni W @100% PWM» (heatMaxW) |
| Aktuální stav | solarW, loadW, cezW, PWM %, ruční PWM, AI návrh, Spot cena, SOC baterie, teploty, SSR |
„PWM 0 % při přebytku — co blokuje?“ |
| Solar-sim log | Celý RAM ring (~60 řádků) CSV z /solar-sim — sloupec branch (AMAX cut, FF cap, settle…) |
AI vidí sekvenci cutů a vysvětlí kaskádu na 0 % |
| Event log | Poslední warn/error z dneška (SPIFFS) — NTP, MQTT, SPIFFS plná, reset… | „Proč log hlásí nestabilní provoz?“ |
Kam: http://192.168.1.50/teplota — pole «Max topeni W @100% PWM» (heatMaxW) Aktualni: 4200 W (z # cfg) Doporucit: 6500 W Proc: solar-sim log ukazuje AMAX_REACTIVE_CUT — heatMaxW je nizsi nez skutecny odber tyce.
| Nástroj | Kdy | Co získáte |
|---|---|---|
| Prompt z /logs | Rychlá konzultace, ladění nastavení, vysvětlení chování | Odpověď v chatu + návrh parametrů (bez archivace) |
AI Cloud (Gemini) na /system-modes |
Automatický denní plán (Spot, počasí, bias PWM) | Plán v aplikaci — ne ruční chat |
| AI RUN log → Easun-Analyza | Dlouhodobé sledování SHADOW/ASSIST/AUTO, AI20 řádky | Archiv na serveru, hlubší analýza provozu |
/solar-sim
(funguje i v ostrém provozu bez simulace). Prompt z /logs pak obsahuje CSV větev
branch — AI uvidí AMAX_REACTIVE_CUT, AMAX_FF_CAP a navrhne úpravy heatMaxW / settle.
/solar-sim prompt obsahuje jen snapshot stavu a event log —
pro analýzu sekvence PWM po sekundách zapněte logování před testem Amax.
heatMaxW (např. 2500–10000 W).
Spouštějte jen když je to bezpečné a ideálně při silné FVE.
Distr Max / soft Amax kalibraci nezastaví — může jít odběr ze sítě.
Jste u zařízení (~4–5 min). Stop kdykoli → PWM=0.
/teplota zkontroluj heatMaxW./pwm spustit test (pozor na odběr).heatMaxW → ověřit FF + settle na ostrém odběru (heatCurveOk, amaxHoldMs 5,5–7 s u ≥1 kW)./logs do Gemini/ChatGPT./teplota: heatMaxW z kalibrace (např. 2670), restart → hodnota zůstane./api/solar-sim nebo snapshot: heatCurveOk true, pokud je /heat-pwm-cal.csv na SPIFFS./ai-fve-pv: solarAmax + soft % beze změny.amaxHoldMs 5500–7000 u ≥1 kW topení.solarWMin hold (amax) během settle.| Parametr | Doporučení | Poznámka |
|---|---|---|
heatMaxW | 100–10000 (u 6200 W měniče typ. 2500) | ≤ ~40–50 % jmenovitého měniče; /teplota |
| kalibrace PWM | krok 1 %, settle ~2–3 s/bod | smysl = U↔I / pád kvůli A; viz §4.5 |
| měnič (např. 6200 W) | topení 2–3 kW, Amax dle štítku | nízké U = dřívější limit proudu |
solarAmax | katalog měniče (18–27 A…) | Hard strop DC/PV |
solarAThrottlePct | 85–92 % | Nižší % = dřívější soft, víc rezervy pro MQTT lag |
marginA | 0,3–0,6 A | Rezerva pod soft před zákazem add (FF) |
| reaktivní cut (soft) | 0 % — jen latch | Cut jen nad hard solarAmax |
| reaktivní cut (hard) | viz tabulka §5.4 | ≥1 kW: −2,5 %/tick, settle 5,5 s, ΔW≤65 W |
amaxHoldMs | 3000–7000 ms | Telemetrie zbývající settle; u ≥2 kW typ. 6500+ |
| near-soft faktor FF | 0,35 (+ škála ≥1 kW) | Zpomalení rampy nad ~85 % soft |