🧠 Adaptivní řízení topných těles ESP32 Grid Load System

Kompletní technická dokumentace souboru vypocet02.h - Detailní popis fungování inteligentního PWM řízení při zapnutém Adaptivni_adaptiveControlEnabled = true

📅 Datum vytvoření: 2025
📁 Soubor: vypocet02.h
🎯 Účel: Inteligentní adaptivní řízení PWM topení podle dostupné solární energie, nastavení distributorů a typu měniče
🔧 Systém: ESP32-Grid-Load-Vypocet s podporou ECO i klasických měničů

📋 Obsah kompletní dokumentace

1. 🎯 Úvod a přehled systému

📋 Co tento dokument obsahuje:
Tento dokument popisuje komplexní fungování adaptivního řízení topných těles v ESP32-Grid-Load-Vypocet systému. Zaměřuje se na výpočet spotřeby v bodech, podrobný průběh algoritmů a praktické implementace.

Adaptivní řízení topení je pokročilý systém, který inteligentně řídí výkon topných těl na základě dostupné solární energie a nastavení distributorů. Systém dokáže:

🔄 Tok řízení systému

Start
Prioritní kontroly
Analýza distributorů
Výpočet dostupné energie
Adaptivní optimalizace
Bezpečnostní kontroly
Aplikace PWM

2. 🎯 Hlavní komponenty systému

1. Hlavní řídicí funkce

Adaptivni_OvladaniPwmSSR() - centrální funkce volaná z hlavní smyčky

2. Výpočetní funkce

TestRezim_CalculateHeatingPower() - výpočet optimálního výkonu topení

3. Inteligentní adaptace

Adaptivni_IntelligentAdaptiveControl() - učící se optimalizace

3. 📊 Detailní výpočet spotřeby v bodech

START: Adaptivni_OvladaniPwmSSR()
⬇️
KROK 1: Prioritní kontroly baterie
⬇️
KROK 2: Výpočet výkonu v bodech
⬇️
KROK 3: Aplikace PWM výstupu

🔋 KROK 1: Prioritní kontroly baterie

Kontrola 1A: Minimální SOC baterie

if (batterySOCMin > 0 && batterySOC <= batterySOCMin) { TestRezim_ApplyPwmOutput(0.0f); // Topení VYPNUTO return; // Ukončení funkce }

Účel: Ochrana baterie před nadměrným vybíjením

Akce: Topení se okamžitě vypne, pokud je SOC ≤ minimální hodnota

Kontrola 1B: Maximální odběr z baterie

if (batteryMaxWatt != 0 && batteryW < batteryMaxWatt) { TestRezim_ApplyPwmOutput(0.0f); // Topení VYPNUTO return; // Ukončení funkce }

Účel: Ochrana před nadměrným výkonovým odběrem

Akce: Topení se vypne při překročení povoleného odběru

⚡ KROK 2: Výpočet výkonu topení v bodech

2A: Analýza distribučních podmínek

bool distributorAllowed = (distributor1 == 1 || distributor2 == 1 || distributor3 == 1); bool distributorDisabled = (distributor1 == 0 && distributor2 == 0 && distributor3 == 0);
Distributor stav Význam Režim topení Popis chování
Všechny = 0 Pouze solární přebytky Konzervativní Žádný odběr ze sítě, pouze solár
Alespoň jeden = 1 Může čerpat ze sítě Agresivní Čerpání ze sítě podle temp5
Hodnota = 2 MIN-MAX režim Speciální Limity dle nastavení

2B: Režim pouze solární přebytky (distributorDisabled = true)

if (distributorDisabled) { // Kontrola minimální solární výroby if (solarW < solarWMin) { return 0.0f; // Topení vypnuto } // Výpočet dostupného přebytku float solarSurplus = solarW - solarWMin; // Přidání přetoků do sítě if (cezW < -50.0f) { solarSurplus += abs(cezW); } // Převod na procenta (2000W = 100%) float heatingPercent = solarSurplus / 20.0f; return max(0.0f, min(100.0f, heatingPercent)); }
⚠️ Bodový výpočet POUZE SOLÁR:
solarSurplus = solarW - solarWMin (dostupná energie)
Pokud cezW < -50W: přidej abs(cezW) (využij přetoky)
heatingPercent = solarSurplus / 20.0 (2000W = 100%)
Omezení: 0-100% rozsah
Bezpečnost: Žádný odběr ze sítě

2C: Režim s možností odběru od distributora (distributorAllowed = true)

if (distributorAllowed) { // Základní solární energie float availableEnergy = max(0.0f, (float)(solarW - solarWMin)); // Přidání energie od distributora if (solarW < solarWMin && temp5 > 0) { float maxDistributorPower = (temp5 / 100.0f) * 2000.0f; if (cezW > 0) { // Čerpáme ze sítě float remainingCapacity = maxDistributorPower - cezW; if (remainingCapacity > 0) { availableEnergy += remainingCapacity; } } else { // Nečerpáme ze sítě availableEnergy += maxDistributorPower; } } // Přidání přetoků do sítě if (cezW < -50.0f) { availableEnergy += abs(cezW); } // Převod na procenta a omezení podle temp5 float heatingPercent = availableEnergy / 20.0f; heatingPercent = max(0.0f, min(100.0f, heatingPercent)); if (temp5 > 0 && heatingPercent > temp5) { heatingPercent = temp5; // Omezení podle max odběru } return heatingPercent; }
✅ Pokročilý bodový výpočet SÍŤOVÝ REŽIM:
availableEnergy = základní solární energie
maxDistributorPower = (temp5/100) × 2000W
Pokud čerpáme: přidej (maxDistributorPower - cezW)
Pokud nečerpáme: přidej plnou kapacitu distributora
Přetoky: přidej abs(cezW) k dostupné energii
Výpočet: heatingPercent = availableEnergy / 20.0
Omezení: podle temp5 (max % od distributora)

🎛️ KROK 3: Aplikace PWM výstupu

3A: Převod procent na PWM hodnotu

void TestRezim_ApplyPwmOutput(float pwmPercent) { // Omezení na rozsah 0-100% if (pwmPercent < 0) pwmPercent = 0; else if (pwmPercent > 100) pwmPercent = 100; // Přímý výpočet PWM hodnoty (0-255) int pwmValue = (int)(pwmPercent * 2.55); analogWrite(PWMpin, pwmValue); }
Procenta PWM hodnota Výkon topení Praktické použití
0% 0 0W Topení vypnuto
25% 64 500W Mírné topení
50% 128 1000W Střední výkon
75% 191 1500W Vysoký výkon
100% 255 2000W Maximální výkon

4. 🤖 Inteligentní adaptivní řízení

Funkce Adaptivni_IntelligentAdaptiveControl()

Tato pokročilá funkce se spouští periodicky a optimalizuje PWM podle reakce měniče:

Fáze 1: Bezpečnostní kontroly s intervalem

Fáze 2: Detekce reakce měniče

float solarChange = solarW - Adaptivni_lastSolarW; bool inverterRespondedPositively = (solarChange >= Adaptivni_solarResponseThreshold);

Fáze 3: Adaptivní logika podle typu měniče

ECO měniče (Anern 6200 ECO):
• Agresivnější přístup (větší kroky PWM × 1.5)
• Menší práh pro spuštění (100W místo 200W)
• Rychlejší reakce na změny
• Kontinuální zvyšování při přebytku > 50W

Klasické měniče:
• Konzervativnější přístup
• Postupné zvyšování PWM
• Učení se podle reakce měniče
• Adaptivní interval testování

Detailní logika ECO vs. Klasické měniče

if (Adaptivni_ecoInverterMode) { // ECO MĚNIČ REŽIM: Agresivnější přístup if (currentPwm < 15.0) { if (solarW > (loadW + 100)) { // Menší práh pro ECO optimizedPwm = currentPwm + (Adaptivni_pwmTestStep * 1.5); } } else if (solarW > (loadW + 50)) { optimizedPwm = currentPwm + Adaptivni_pwmTestStep; Adaptivni_inverterResponding = true; } } else { // STANDARDNÍ REŽIM pro klasické měniče if (currentPwm < 10.0) { if (solarW > (loadW + 200)) { // Vyšší práh optimizedPwm = currentPwm + Adaptivni_pwmTestStep; } } else if (Adaptivni_inverterResponding) { // Učení se reakce měniče optimizedPwm = currentPwm + Adaptivni_pwmTestStep; } }

5. 📊 Proměnné a nastavení

🔧 Hlavní řídící proměnné adaptivního systému

Proměnná Typ Rozsah Výchozí Popis použití
Adaptivni_adaptiveControlEnabled bool true/false true Hlavní přepínač adaptivního řízení
Adaptivni_adaptiveTestInterval int 1000-10000ms 3000 Interval testování měniče
Adaptivni_pwmTestStep float 1.0-20.0% 5.0 Velikost kroku PWM změn
Adaptivni_solarResponseThreshold float 10.0-200.0W 50.0 Práh pozitivní reakce měniče
Adaptivni_maxGridFlow int 50-1000W 200 Maximální přetok do sítě
Adaptivni_ecoInverterMode bool true/false true Režim ECO měniče (agresivnější)

🔗 Existující systémové proměnné

Proměnná Popis Použití v algoritmu Kritické hodnoty
distributor1, distributor2, distributor3 Stavy distributorů Určují režim řízení 0=solár, 1=síť, 2=minmax
temp5 Max odběr od distributora (%) Limit PWM v síťovém režimu 0-100%
solarW, solarWMin Aktuální a min. solární výroba Základ pro výpočet energie W hodnoty
cezW Tok ze/do sítě + odběr, - přetok Kritické pro bezpečnost
batterySOC, batterySOCMin Stav nabití baterie Prioritní ochrana % hodnoty
batteryW, batteryMaxWatt Výkon baterie Ochrana před přetížením W hodnoty (záporné = odběr)

6. 🛡️ Bezpečnostní opatření a ochrana

⚠️ Hierarchie bezpečnostních kontrol

PRIORITA 1: Ochrana baterie
• SOC kontrola: batterySOC ≤ batterySOCMin → topení VYPNUTO
• Výkonová kontrola: batteryW < batteryMaxWatt → topení VYPNUTO
• Okamžitá akce bez čekání na interval
PRIORITA 2: Ochrana před přetoky
• Přetok do sítě: cezW < -maxGridFlow → rychlé snížení PWM
• Poloviční interval pro rychlejší reakci
• Dvojnásobný krok snížení
PRIORITA 3: Limit odběru ze sítě
• Vysoký odběr: cezW > cezWMax → postupné snížení
• Respektování intervalu
• Jemnější kroky (× 0.5)
PRIORITA 4: Respektování temp5
• PWM nikdy nepřekročí temp5 hodnotu
• Automatické omezení v síťovém režimu
• Ochrana distributora

🔒 Postupné změny pro stabilitu

// Kontrola intervalu před změnou PWM if ((currentTime - Adaptivni_lastAdaptiveTest) < Adaptivni_adaptiveTestInterval) { return currentPwm; // Příliš brzy na další změnu } // Bezpečné omezení PWM optimizedPwm = (optimizedPwm < 0.0f) ? 0.0f : ((optimizedPwm > 100.0f) ? 100.0f : optimizedPwm);

7. 📈 Praktické příklady výpočtů

Příklad 1: Slunečný den - režim pouze solár

Parametr Hodnota Jednotka Poznámka
solarW 1500.00 W Aktuální solární výroba
solarWMin 200.00 W Minimální práh
cezW -300.00 W Přetok do sítě
distributor1,2,3 0,0,0 - Pouze solární režim

Výpočet krok za krokem:

// 1. Kontrola režimu distributorů distributorDisabled = true (všechny = 0) // 2. Kontrola minimální solární výroby solarW (1500) >= solarWMin (200) ✓ // 3. Výpočet solárního přebytku solarSurplus = 1500 - 200 = 1300W // 4. Přidání přetoku do sítě cezW = -300W < -50W → přidej abs(-300) = 300W solarSurplus = 1300 + 300 = 1600W // 5. Převod na procenta heatingPercent = 1600 / 20.0 = 80.00% // 6. Omezení rozsahu heatingPercent = min(max(80%, 0%), 100%) = 80% // 7. PWM výstup pwmValue = 80 * 2.55 = 204 → Výsledek: ~1600W topení při 80% PWM

Příklad 2: Oblačný den - síťový režim

Parametr Hodnota Jednotka Poznámka
solarW 600.00 W Nízká solární výroba
solarWMin 800.00 W Vyšší práh
cezW 400.00 W Odběr ze sítě
temp5 60.00 % Max od distributora
distributor1,2,3 1,1,1 - Síťový režim

Výpočet krok za krokem:

// 1. Kontrola režimu distributorů distributorAllowed = true (alespoň jeden = 1) // 2. Základní solární energie availableEnergy = max(0.0, 600 - 800) = 0W // 3. Solár je pod minimem a temp5 > 0 solarW (600) < solarWMin (800) a temp5 = 60% maxDistributorPower = (60/100) * 2000 = 1200W // 4. Čerpáme ze sítě (cezW > 0) cezW = 400W > 0 → čerpáme ze sítě remainingCapacity = 1200 - 400 = 800W availableEnergy = 0 + 800 = 800W // 5. Převod na procenta heatingPercent = 800 / 20.0 = 40.00% // 6. Omezení podle temp5 heatingPercent = min(40%, 60%) = 40% // 7. PWM výstup pwmValue = 40 * 2.55 = 102 → Výsledek: ~800W topení při 40% PWM

Příklad 3: Adaptivní optimalizace ECO měniče

Scénář: Anern 6200 ECO měnič, postupné zvyšování PWM
// Nastavení ECO měniče Adaptivni_ecoInverterMode = true Adaptivni_pwmTestStep = 8.0% Adaptivni_adaptiveTestInterval = 1500ms // Průběh adaptace: Čas 10:00 - PWM 10%, solarW=2000W, loadW=1200W → Přebytek 800W > 100W → PWM zvýšeno na 22% (10 + 8*1.5) Čas 10:01.5 - PWM 22%, solarW=2200W → Kontinuální zvyšování → PWM na 30% Čas 10:03 - PWM 30%, přetok -150W → Bezpečnostní snížení → PWM na 22% Čas 10:04.5 - PWM 22%, stabilizace → ECO měnič se rychle adaptoval na optimum

8. ⚙️ Konfigurace a parametry

🎛️ Doporučené hodnoty podle typu měniče

Typ měniče Interval (ms) Krok (%) Práh (W) Max přetok (W) ECO režim
Anern 6200 ECO 1500 12 30 400 true
Victron Phoenix 8000 3 150 200 true
Fronius 3000 7 60 400 false
SMA 3500 6 70 350 false
Huawei SUN2000 2500 8 50 500 false
Deye SUN-M80G3 2000 10 40 600 true

💾 SPIFFS konfigurace

Nastavení SPIFFS soubor Formát Příklad
Adaptivní řízení /adaptiveControlEnabled.ea "0" nebo "1" "1"
Interval testování /adaptiveTestInterval.ea číslo v ms "3000"
Velikost kroku /adaptiveTestStep.ea float hodnota "5.0"
Práh reakce /adaptiveSolarThreshold.ea float hodnota W "50.0"
Max přetok /adaptiveMaxGridFlow.ea int hodnota W "200"
ECO režim /ecoInverterMode.ea "0" nebo "1" "1"

9. 📊 Monitoring a diagnostika

🐛 Debug výpisy podle úrovně

WebSerialAno Úroveň Typ výpisu Příklad
2, 3 Základní PWM hodnoty PWM: 25.5% (65), AdaptTeplo: 25.5%
14 Detailní Kompletní stav === ADAPTIVNÍ TOPENÍ - VÝPOČET ===
15 Kompletní Všechny kroky ADAPTIVE: PWM 20.0% → 25.5%

Příklad kompletního debug výpisu (WebSerialAno = 14)

=== ADAPTIVNÍ TOPENÍ - VÝPOČET === Baterie SOC: 85%, Min: 20% Baterie W: -150W, Max: -200W Distributory (1,2,3): 1, 1, 0 SolarW: 1500W, Min: 200W CezW: -300.0W, Temp5: 80% Distributor povolen: ANO REŽIM: Může čerpat od distributora Celková dostupná energie: 1600.0W -> topení: 80.0% PWM: 80.0% (204), AdaptTeplo: 80.0% === ADAPTIVE PWM CONTROL === Current PWM: 75.0% Solar change: 150.0W Grid flow: -300.0W Inverter responding: YES ADAPTIVE ECO: Kontinualni zvysovani pro ECO menic ADAPTIVE: PWM 75.0% → 83.0% ===========================

🎯 Web interface template proměnné

Template proměnná Funkce Příklad hodnoty
%ADAPTIVE_ENABLED_STATUS% Adaptivni_ProcessAdaptiveTemplateVariables() ZAPNUTO / VYPNUTO
%ECO_INVERTER_STATUS% Typ měniče ECO měnič / Klasický měnič
%ADAPTIVE_TEST_INTERVAL% Interval testování 3000
%ADAPTIVE_TEST_STEP% Velikost kroku 5.0
%ADAPTIVE_SOLAR_THRESHOLD% Práh reakce 50
%ADAPTIVE_MAX_GRID_FLOW% Max přetok 200

10. 🚀 Instalace a troubleshooting

📁 Aktivace systému

Krok 1: Základní aktivace
// Zapnutí adaptivního řízení Adaptivni_adaptiveControlEnabled = true; // Načtení nastavení ze SPIFFS Adaptivni_LoadAdaptiveSettings(); // Nastavení web handlerů Adaptivni_SetupAdaptiveWebHandlers();
Krok 2: Konfigurace distributorů
// Pro režim pouze solár distributor1 = 0; distributor2 = 0; distributor3 = 0; solarWMin = 500; // 500W minimum // Pro síťový režim distributor1 = 1; distributor2 = 1; distributor3 = 1; temp5 = 60; // Max 60% PWM od distributora solarWMin = 200; // Nižší práh díky síti

❌ Časté problémy a řešení

Problém Možná příčina Řešení Ověření
Topení se nezapíná batterySOC ≤ batterySOCMin Nabijte baterii nebo snižte SOCMin WebSerialAno=14, kontrola SOC
PWM se nezvyšuje solarW < solarWMin Snižte solarWMin nebo počkejte na slunce Porovnejte solarW vs solarWMin
Časté oscilace PWM Příliš malý interval Zvyšte adaptiveTestInterval Sledujte časy změn
Přetoky do sítě Příliš agresivní kroky Snižte pwmTestStep Kontrola cezW hodnot
Pomalé reakce Dlouhý interval nebo velký práh Snižte interval a práh ECO režim pro rychlejší reakce

🔍 Diagnostické kroky

  1. Aktivujte debug: WebSerialAno = 14 nebo 15
  2. Zkontrolujte základní podmínky:
    • Adaptivni_adaptiveControlEnabled = true?
    • Hodnoty distributorů a temp5?
    • SOC baterie vs. SOCMin?
    • solarW vs. solarWMin?
  3. Sledujte debug výpisy:
    • Který režim je aktivní (POUZE SOLÁR / SÍŤOVÝ)?
    • Jaká je dostupná energie v bodech?
    • Reaguje měnič na změny PWM?
  4. Otestujte web interface:
    • Přístup na /adaptive
    • Uložení nastavení přes /getadaptivesettings
    • Kontrola SPIFFS souborů
⚠️ Bezpečnostní upozornění:
• Vždy testujte s nízkými hodnotami PWM
• Sledujte teploty topných těles
• Ověřte správné zapojení PWM výstupu
• Mějte možnost manuálního vypnutí
✅ Výhody kompletního adaptivního řízení:
• Automatická optimalizace podle typu měniče
• Ochrana před přetoky do sítě
• Maximální využití solární energie
• Učení se chování systému
• Ochrana baterie a distributorů
• Výpočet spotřeby v reálných bodech
• Webové rozhraní pro konfiguraci

📝 Závěrečná poznámka: Tento dokument popisuje komplexní fungování adaptivního řízení topných těles v souboru vypocet02.h. Systém je navržen pro maximální efektivitu, bezpečnost a adaptabilitu při využívání obnovitelné energie v různých konfiguracích ESP32-Grid-Load systémů.


Dokumentace vytvořena:
Verze systému: ESP32-Grid-Load-Vypocet89
Soubor: vypocet02.h
Funkce: Adaptivní řízení topení s inteligentním algoritmem