🧠 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:
- Automaticky upravovat PWM podle dostupné solární energie
- Respektovat nastavení distributorů (pouze solár vs. možnost čerpání ze sítě)
- Chránit před přetoky do sítě a nadměrným odběrem
- Učit se z chování měniče pro optimální výkon
- Postupně upravovat výkon pro stabilitu systému
- Ochrana baterie podle SOC a maximálního odběru
🔄 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
- Kontroluje prioritní podmínky (baterie, ochrana)
- Volá výpočet výkonu topení
- Aplikuje vypočítaný PWM na výstup
2. Výpočetní funkce
TestRezim_CalculateHeatingPower() - výpočet optimálního výkonu topení
- Analyzuje distribuční podmínky
- Počítá dostupnou energii v bodech
- Převádí na procenta PWM (0-100%)
3. Inteligentní adaptace
Adaptivni_IntelligentAdaptiveControl() - učící se optimalizace
- Testuje reakci měniče na změny PWM
- Adaptuje parametry podle chování systému
- Chrání před přetoky do sítě
- Rozlišuje ECO a klasické měniče
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
- Přetok do sítě: Pokud cezW < -maxGridFlow → snížit PWM (rychlejší interval)
- Vysoký odběr: Pokud cezW > cezWMax → snížit PWM (s intervalem)
- Interval testování: Respektuje nastavené intervaly
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
- Aktivujte debug:
WebSerialAno = 14 nebo 15
- Zkontrolujte základní podmínky:
Adaptivni_adaptiveControlEnabled = true?
- Hodnoty distributorů a temp5?
- SOC baterie vs. SOCMin?
- solarW vs. solarWMin?
- 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?
- 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