Dokumentace řešení známých rizik PWM regulace, bezpečného pořadí AI limitů,
vylepšení simulace /solar-sim a optimalizace paměti při zapnutí/vypnutí simulace.
Projekt: ESP32-Grid-Load-Vypocet900 · logika vypocet01.h, AI mix vypocet02.h,
limity spotove_ceny.h, UI /pwm + /solar-sim.
Klíčové zjištění auditu: hard limity applySolarAmaxPwmLimit a
applyCezWMaxPwmLimit běží až po AI mixu.
Soft cez uvnitř AI (÷80) není ekvivalent hard cutu.
Obr. 1 — Call chain z OvladaniPwmSSR po výstup PWMHotovo
3. Vyhlazování z /pwm — pwm_smoothing
UI /pwm · SPIFFS /pwm_smoothing.ea · alias userPwmSmoothingFactor
Řešení
Audit potvrdil: hodnota se ukládá a zobrazuje, ale nevstupuje do výpočtu rampy.
Rampu řídí pwm_speed (%/s), pwm_delay (ms) a slow_mode.
UI: pole muted + text „zatím se v rampě nepoužívá“; zůstává v DOM kvůli forms / SPIFFS.
Volitelné napojení na cap kroku nebylo potřeba — méně rizikový diff.
Při distributor1==2 neběžel Prebytek/deficit; Dist.2 sám zvedal PWM i při vysokém FVE —
na /solar-sim to vypadalo jako „matoucí“ chování oproti Distr=0.
Řešení
LogikaSolarPrebytek běží i při Dist.2 (bez blokace distributor1 != 2).
Při FVE přebytku Dist.2 nesmí zvyšovat PWM — jen cut (−), hold (==) nebo hold+FVE.
Bez přebytku Dist.2 smí síťové + (záměr Ano-Min-Max).
AUTO: AI návrh při mqttFresh∨luxFresh, jinak fallback.
Spot Gate: bez silného surplus AI nesmí zvednout nad fallback.
UX + API
7. Simulace /solar-sim — funkční změny
Stránka slouží k bezpečnému ladění bez ovlivnění reálného distributora po rebootu
(sim ON / heat out / ruční PWM po startu vždy OFF).
Layout: sekce ŘÍZENÍ / TOPENÍ / SOLAR / DISTRIBUTOR / BATERIE / LIVE / LOG; dvě kolony, log dole.
FVE W / V: override vypnutý → hodnoty z MQTT (mqttSolarW, mqttSolarV).
Distributor Min/Max W: editace na sim + /teplota; Max = CEZ_MAX_CUT; doporučení Max 800–1500, Min 100–200.
PWM rychlost: stejné globály jako /pwm (preset, %/s, ms, slow) — FVE→0 se slow ON = pomalý drop.
ECO: nastavení z /eco platí i v sim.
Ruční PWM:SIM_PWM_MANUAL; hard Amax/ČEZ stále platí; reboot vypne manual.
Vypnutí sim: hard reset PWM na 0 + hold ~8 s, ať realita hned nevytáhne sim 100 %.
Obr. 3 — Tok nastavení simulace a live telemetrieOptimalizace
8. Paměť a rychlost při simulaci
Zpomalení při zapnutí/vypnutí sim a během posouvání sliderů nebylo v samotném PWM výpočtu,
ale v častých zápisech SPIFFS, velkých String dumpů logu a hustém pollu UI.
Úzká místa (před)
Každý /api/solar-sim-set → force zápis /solar-sim.cfg.
Náhled logu každou 1 s → plný CSV dump + flush SPIFFS.
Ring log 100×148 B BSS + časté řádky + UI poll 1 s.
Úpravy (po)
Oblast
Změna
Efekt
Cfg SPIFFS
Force jen při zap/vyp sim; slidery throttle 3 s + dirty v loop
Méně flash wear, méně zasekávání
Log náhled
solarSimLogDumpTail z RAM bez SPIFFS
Lehký HTTP response
Log flush
~40 řádků nebo 20 s; download flushne jednou
Méně heap fragmentace
Ring
60×128 B (~polovina BSS)
Úspora statické RAM
Interval log
350–800 ms mezi řádky
Méně CPU při rampě
UI poll
LIVE 2 s; log tail ~6 s
Méně zátěže Wi‑Fi/Async
Default log
Vypnuto (zapnout jen při ladění)
Nejrychlejší provoz sim
Obr. 4 — Minimalizace SPIFFS během simulaceNa zařízení
9. Ověření — checklist
Distr.2
Stejné FVE/load/cez, Distr=2 vs 0 — podobná SURPLUS_RAMP
Při surplus + Dist.2: hold+FVE, ne síťové +
Skok cez na Max → Dist − i CEZ_MAX_CUT
Baterie
battOn, V=52, MaxW=2000, battW=500, FVE těsně nad load → BATT_CHARGE_CUT
FVE ≫ load (+30 W) → spare OK, reason není BATT
MaxW=0 / battOff → bez cut
AI (Distr=0, batt OFF) — Original → ASSIST → AUTO
Velký surplus — ASSIST final mezi fb a AI; AUTO ≈ AI při fresh
FVE 0 + slow OFF → cut k 0; ASSIST/AUTO nesmí držet vysoké PWM
cez ≥ Max → CEZ_MAX_CUT ve všech režimech
Proud u Amax → AMAX_* cut
Spot Gate NE → AI final ≤ fallback bez silného surplus
AUTO bez mqttFresh → usedFallback=true
Výkon sim
Zap/vyp sim bez dlouhého „zmrznutí“ UI
Rychlé posouvání FVE slideru s logem OFF — plynulé