EaSun · ESP32-Grid-Load-Vypocet900

Prediktivní brzda proudu FVE (solarAmax)

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

Návrh + heatMaxW na /teplota · kalibrační sweep PWM · test na /solar-sim · AI prompt z /logs

problém

1. Co se děje teď

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.

U / I / U×Iživý stav FVE (např. 129 V / 4 A / 516 W)
soft / maxnapř. 18,7 A / 22,0 A
PWM cutnapř. 85 % → cut −2,7 % (delta po limitu)
topenítyč ~2500 W, PWM skoky = velké ΔW
Důležité: v UI „cut 2,7 %“ znamená o kolik procentních bodů Amax ubral z cíle PWM (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.
Kaskáda na 0 % PWM (typické u tyčí ≥1 kW): po prvním Amax cutu fyzický odběr klesá, ale MQTT 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.
příčina

2. Proč je to agresivní

  1. Regulátor přidává PWM podle přebytku (MQTT solarW / load) — bez znalosti „o kolik W tyč přibude“.
  2. Tyč 2500 W při +10 % PWM ≈ +250 W okamžitě (SSR/PWM). Při vyšším PWM je skok ještě cítit.
  3. MQTT solarA / solarW přijde se zpožděním (stovky ms až sekundy) → soft limit se spustí až po špičce.
  4. Měnič mezitím vidí přetížení DC/AC a sraží výrobu; teprve pak UI ukáže I blízko soft a cut.
  5. Při cutu stejný lag: A v MQTT ještě vysoké, PWM už snížené → opakované cuty až na 0 % (horší u topidel ≥1 kW — větší ΔW/ΔA a setrvačnost tepla v tyči).
Časová osa (reaktivní Amax) +PWM +ΔW tyč měnič I↑ / cut 0 MQTT solarA Amax cut Problém: ochrana přijde až po špičce. Predikce musí brzdit už u kroku „+PWM“.
Reaktivní soft cut nemůže stihnout fyzický skok topné tyče při zpožděném MQTT.
hotovo ve FW

3. Parametr heatMaxW na /teplota

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

Důležité: bez této hodnoty nejde spolehlivě odhadnout skok odběru při změně PWM (ochrana proudu FVE / solar-sim). Nastavte součet wattů tyčí a uložte formulář.

Ukládání

HeatW_est = heatMaxW × (PWM% / 100)   // lineární odhad (výchozí)
HeatA_est = HeatW_est / GridV           // PZEM nebo cezV
Doporučení: 2500 W (nebo přesný součet jmenovitých výkonů). Přesnost ±10–15 % stačí na první FF; reálná křivka W(PWM) často není lineární (SSR / triak / mrtvé pásmo) — proto má smysl kalibrační sweep. Na /solar-sim je totéž pole s odkazem na /teplota.
hotovo ve FW

4. Kalibrační test PWM 0–100 % (V / A / W topení)

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í.

Průběh: uživatel jednou klikne „Spustit kalibraci PWM“ → dál běží automaticky bez dalšího zásahu až do 100 % / Stop / pádu FVE na ~0. Mezitím jen počká; na stránce uvidí aktuální PWM %, V/A/W topení a FVE peak/now. Distr Max (cez) ani soft Amax test neukončí — cíl je najít PWM, kdy měnič srazí výrobu kvůli proudu A (spouštět při silné FVE). Proč to má smysl: nízké napětí panelů ⇒ vyšší proud při stejném W.

4.1 Jak to poběží (krok 1 %)

  1. Start — na /pwm tlačítko Spustit (confirm). Automatika OFF, ruční PWM ON, sim FVE se vypne.
  2. Bod 0 % — nastaví PWM = 0, krátce počká, zapíše V / A / W topení (PZEM).
  3. Smyčka — PWM += 1 % → settle → zapsat V/A/W topení + FVE (U/I/W, solarW_eff) → dál.
  4. Konec A — dorazí na 100 % → PWM=0, CSV hotovo.
  5. Konec B (důležité) — FVE výroba spadne z peaku na ~0 → stop, event 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

Odhad doby: 101 × ~2,5 s ≈ 4–5 minut. Delší settle = přesnější, ale pomalejší. Stop tlačítko kdykoli → ihned PWM=0.

4.2 Co z toho získáte

VýstupPouž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

4.3 Archivace (CSV + easun.cfg)

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

4.4 Bezpečnost a podmínky

Test fyzicky topí — spouštět jen když je to bezpečné (voda / topný okruh OK) a ideálně při vysoké výrobě FVE (jinak nemá smysl hledat pád kvůli A). Auto-stop: pád FVE na ~0, málo slunce (solar_low), 100 % / Stop. Distr Max / soft Amax během kalibrace neplatí — může dočasně růst odběr ze sítě.
Kontrola „málo FVE“: u režimu limitu proudu (výchozí) — před startem i během testu (do ~10 % PWM). Práh ≈ 20 % špičky U×Amax (min 200 W, max 1500 W):
  • Špička = aktuální solarV (MQTT) × solarAmax (Max proud FVE na /ai-fve-pv, např. 200 V × 22 A = 4400 W).
  • Fallback: strop odhadu W / lokální solarWPeakSeen, pokud Amax=0 nebo U chybí.
  • Jen křivka topení — 0→100 % i bez slunce; start vždy smaže staré CSV.

Stav: hotovo ve FW (UI /pwm + FF brzda). Kalibrace má smysl hlavně kvůli vztahu U↔I panelů (nízké U → vysoké A).

proč kalibrace

4.5 Proč kalibrace: napětí panelů a proud měniče

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
Čím nižší napětí stringu (U), tím vyšší proud (I) při stejném výkonu P. Soft/hard 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ě.

Co z toho plyne pro test

Doporučení podle výkonu měniče (příklad 6200 W)

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žkaDoporuč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
Prakticky: u 6200 W měniče držte topnou zátěž kolem 2–3 kW, 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ů.

6. Vzorce a příklady (tyč 2500 W)

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
SituaceVstupVýpočetDopad
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 %
Když je topení jen výpočet (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.

7. Postup implementace ve firmwaru

Stav: parametr heatMaxW + kalibrace PWM + prediktivní FF brzda hotové ve FW.

  1. Parametr heatMaxW — UI /teplota, SPIFFS klíč heatMaxW v /easun.cfg, sync s /solar-sim. ✅
  2. Kalibrační test PWM/pwm, 0→100 % po 1 %, settle 2,5 s, CSV, apply W@100%. ✅
  3. clampPwmStepByPredictedSolarAdW 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. ✅
  4. amaxBlocksAdd — soft − margin 0,4 A + hystereze soft latch. ✅
  5. applySolarAmaxPwmLimit — soft pásmo jen latch (bez cutu); nad Amax cut podle výkonu topení + settle hold + cap ΔW (viz §5.4). ✅
  6. FinalniUpravyARegulacePwmFunkce — během gAmaxReactiveHoldUntilMs neřezat kvůli solarWEff < solarWMin. ✅
  7. Telemetrie /api/solar-sim: dA_est, dPwmCap, AMAX_FF_CAP, heatCurveOk, amaxSoftLatched, amaxHoldMs. ✅
  8. Ověřit na ostrém odběru s tyčí ≥1 kW — PWM nesmí spadnout na 0 dřív než A/FVE.
Pseudokód (jádro FF)
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);
Pseudokód (reaktivní Amax + settle)
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;

8. Test na /solar-sim a ostrý provoz

8.1 Simulace (bez fyzického topení)

8.2 Ostrý provoz — tyč ≥1 kW (důležité)

Pokud PWM stále padá na 0: zkontrolujte heatMaxW (underestimate → kratší settle), solarAThrottlePct (vyšší = dřívější latch), a zda jiná větev neřeže (cezWMax, baterie, SSR OFF).
pro majitele · FW S3.0913+

9. AI konzultace z logování aplikace

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.

9.1 Co to pro vás znamená

9.2 Co aplikace detekuje (automatické dotazy)

SituacePříklad automatického dotazu
Restart WDT / panic / brownoutProč došlo k restartu a co zkontrolovat?
Nestabilní provoz (health)Pravděpodobná příčina a postup
WiFi / MQTT chyba nebo stará dataCo ověřit u brokeru a topiců
Přebytek FVE, ale nízké PWMCo blokuje zvýšení výstupu?
solarA blízko Amax soft limituJsou správné solarAmax, throttle % a heatMaxW?
PWM na 0 při vysokém solarAKaskáda Amax cutů — jak upravit settle?
heatMaxW < skutečný odběrZkreslení prediktivní brzdy
cezW > cezWMax, nízká baterie, Spot bez OTECo stahuje PWM a co nastavit
AI jiné PWM než výstupKterý režim SHADOW/ASSIST/AUTO zvolit
Event log: NTP, SPIFFS, MQTTDotaz 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řádkuObecný review nastavení a Amax parametrů

9.3 Kde prompt najdete

CestaÚčel
/logsStrá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, /resetOdkazy na AI prompt v sekci logů / diagnostiky
Nemusíte nic z /solar-sim ručně kopírovat. Aplikace při generování promptu sama flushne CSV z RAM, vloží ho do textu a vypne „Logovat PWM“, aby snapshot zůstal kompletní. Další test = znovu zapnout logování na /solar-sim.

9.4 Doporučený postup

  1. Na /solar-sim zapněte Logovat PWM, nechte běžet test / provoz.
  2. Otevřete /logs nebo /logs-ai-prompt — aplikace sama vloží CSV a vypne logování.
  3. V prohlížeči otevřete Gemini nebo ChatGPT — účet zdarma stačí.
  4. Vložte text (Ctrl+V) a odešlete — dotazy i solar-sim větev branch jsou už v promptu.
  5. Další test: znovu zapněte Logovat PWM na /solar-sim.

9.5 Co je v promptu (jaké informace AI dostane)

BlokObsahPří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?“

9.6 Příklad odpovědi od AI (co očekávat)

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.

Obecné rady bez URL a bez názvu pole jsou v promptu zakázané — pokud AI neví, má napsat, které políčko ověřit.

9.7 Tři úrovně AI / logování — co kdy použít

NástrojKdyCo 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
Tip po testu z §8: nechte zapnuté Logovat PWM na /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.
Bez zapnutého logu na /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.
další krok

10. Po resetu / nahrání aplikace — další krok

Upozornění na odběr topení: kalibrační test fyzicky zapíná topení (PWM 0→100 %). Odběr může jít až k nastavenému 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.
  1. Po resetu / flashi — ověř WiFi, MQTT, Home běží; na /teplota zkontroluj heatMaxW.
  2. Bezpečnost — silná FVE; topný okruh OK; víte, že Distr Max test neukončí.
  3. Další krok — kalibrace je ve FW; na /pwm spustit test (pozor na odběr).
  4. Po CSV — Použít W@100% jako heatMaxW → ověřit FF + settle na ostrém odběru (heatCurveOk, amaxHoldMs 5,5–7 s u ≥1 kW).
  5. Při divném chování PWM / Amax§9: zkopírovat prompt z /logs do Gemini/ChatGPT.

10.1 Smoke test po nahrání FW

  1. /teplota: heatMaxW z kalibrace (např. 2670), restart → hodnota zůstane.
  2. /api/solar-sim nebo snapshot: heatCurveOk true, pokud je /heat-pwm-cal.csv na SPIFFS.
  3. /ai-fve-pv: solarAmax + soft % beze změny.
  4. Ostrý test: při A>Amax jeden cut → amaxHoldMs 5500–7000 u ≥1 kW topení.
  5. WebSerial 9: solarWMin hold (amax) během settle.

11. Doporučené výchozí parametry

ParametrDoporučeníPoznámka
heatMaxW100–10000 (u 6200 W měniče typ. 2500)≤ ~40–50 % jmenovitého měniče; /teplota
kalibrace PWMkrok 1 %, settle ~2–3 s/bodsmysl = U↔I / pád kvůli A; viz §4.5
měnič (např. 6200 W)topení 2–3 kW, Amax dle štítkunízké U = dřívější limit proudu
solarAmaxkatalog měniče (18–27 A…)Hard strop DC/PV
solarAThrottlePct85–92 %Nižší % = dřívější soft, víc rezervy pro MQTT lag
marginA0,3–0,6 ARezerva pod soft před zákazem add (FF)
reaktivní cut (soft)0 % — jen latchCut jen nad hard solarAmax
reaktivní cut (hard)viz tabulka §5.4≥1 kW: −2,5 %/tick, settle 5,5 s, ΔW≤65 W
amaxHoldMs3000–7000 msTelemetrie zbývající settle; u ≥2 kW typ. 6500+
near-soft faktor FF0,35 (+ škála ≥1 kW)Zpomalení rampy nad ~85 % soft

Související: 11b FVE·AI / Amax · Solar Sim ve V900 · PWM opravy