Solar_okruh_power (192.168.100.40)
Shelly Pro EM / EM-50 (FVE_Solar) – řízení FVE okruhu měniče Victron 2000, integrace předpovědi osvitu a monitoring bateriového úložiště (BMS).
Seznam skriptů
1_EM-solarokruh.js– Ochrana měniče Victron 2000 proti přetížení a přepínání FVE / Grid2_Predikce_FVE.js– Stahování předpovědi osvitu z PVForecast.cz3_BMS_Baterie.js– Vyčítání XML dat z BMS baterie a telemetrie do VictoriaLogs
1. 1_EM-solarokruh.js (Ochrana měniče Victron & Přepínání FVE)
Funkce a účel
- Ochrana měniče Victron 2000 proti přetížení: Měří okamžitý činný výkon na solárním okruhu (
em1:0nebo dle KVSsol_em_comp). - Ochrana baterie a rezervace pro okruh VE500:
- Pravidelně (každých 30 s) stahuje SOC baterie z EPEveru (
192.168.100.42-number:200). - Pokud při běhu na FVE klesne SOC ≤ 35 % (
sol_bat_soc_off), okruh se okamžitě přepne na Grid (switch:0 = false) a zablokuje Scénu (sol_vc_bool = false). - Tím se uleví baterii a zbývající kapacita zůstává garantována výhradně pro kritický okruh VE500 (
192.168.100.38).
- Pravidelně (každých 30 s) stahuje SOC baterie z EPEveru (
- Přepínání FVE / Grid (Relé switch:0):
switch:0 = ON: Provoz na solární střídač (FVE).switch:0 = OFF: Provoz na distribuční síť (Grid).
- Logika přetížení (Overload):
- Pokud výkon překročí
sol_p_max(výchozí 1500 W) nepřetržitě po dobusol_t_max_s(10 s), relé se okamžitě rozepne (switch:0 = false, přepnutí na Grid) a virtuální komponentasol_vc_bool(boolean:201) se nastaví nafalse(blokování FVE pro Shelly Scény). - Pokud výkon během odpočtu 10 s klesne pod 1500 W, časovač přetížení se zruší.
- Pokud výkon překročí
- Inteligentní návratová hystereze (Recovery):
- V režimu Grid (relé vypnuto) se sleduje odběr. Jakmile výkon klesne pod
sol_p_min(500 W), spustí se odpočet zklidnění nasol_t_min_s(600 s = 10 minut). - Pokud během 10 minut výkon stoupne nad 500 W, odpočet se přeruší a začíná znovu od nuly.
- Po 10 minutách zklidnění zátěže skript vyhodnotí energetické podmínky:
- Scénář Plná baterie: SOC ≥ 95 % (
sol_bat_soc_on_full) \implies přepne na FVE i bez ohledu na počasí. - Scénář Slunce: Denní předpověď ≥ 2500 Wh/m² (
sol_forecast_min) A panely dávají ≥ 600 W (sol_pv_p_min) A SOC ≥ 50 % (sol_bat_soc_on_sun) \implies přepne na FVE. - Pokud podmínky splněny nejsou, zátěž zůstává zklidněna na Gridu a skript vyčkává, dokud slunce nebo nabíjení nedosáhne požadovaných hodnot.
- Scénář Plná baterie: SOC ≥ 95 % (
- V režimu Grid (relé vypnuto) se sleduje odběr. Jakmile výkon klesne pod
- KVS Integrace: Všechny parametry (
sol_p_max,sol_p_min,sol_bat_soc_off,sol_bat_soc_on_sun,sol_bat_soc_on_full,sol_pv_p_min,sol_forecast_min, atd.) se synchronizují s KVS úložištěm každých 60 s. - Integrace VictoriaLogs: Odesílá pravidelnou 60s telemetrii (výkon zátěže, stav relé, SOC baterie, výkon FVE, předpověď osvitu, odpočet) i okamžité události (přetížení, vybití baterie, návrat na FVE, změna relé).
Ochrany při výpadku a nedostupnosti
- Výpadek čtení EPEveru (RS485):
- Při nedostupnosti
192.168.100.42skript nepadá ani necykluje, ponechává relé v bezpečném stavu a do logu zapíše varování.
- Při nedostupnosti
- Výpadek měření / komponenty:
- Při startu skript ověřuje typ měření (
EM1.GetStatus,EM.GetStatus,Switch.GetStatus). Pokud vybraná komponenta neodpovídá, zkouší fallback naem1:0. - Pokud by přestala chodit data měření, časovače přetížení ani recovery se nespustí (nehrozí cyklování).
- Při startu skript ověřuje typ měření (
- Restart Shelly:
- Při bootu skript nejprve zjistí skutečný stav relé
switch:0a z něj inicializuje stavfvePermitted.
- Při bootu skript nejprve zjistí skutečný stav relé
- Selhání nastavení virtuální komponenty:
- Skript kombinuje přímý handle
Virtual.getHandle()s fallbackem na RPC voláníBoolean.Set.
- Skript kombinuje přímý handle
2. 2_Predikce_FVE.js (PVForecast.cz)
Funkce a účel
- Pravidelně stahuje předpověď solárního osvitu pro konkrétní GPS souřadnice z API
http://www.pvforecast.cz/api/.... - Běžný cyklus stahování je každé 3 hodiny (
intervalHours: 3). - Spočítá celkovou denní sumu osvitu (Wh/m²), maximální hodinový výkon a čas maxima.
- Ukládá výsledky do virtuálních komponent:
number:200: Denní suma osvitu (Wh/m²)text:200: Čas a datum aktualizacetext:201: Případná chybová zpráva
- Odesílá denní souhrn a jednotlivé hodinové předpovědi do VictoriaLogs.
Ochrany při výpadku a nedostupnosti
- Výpadek internetu nebo chyba API PVForecast:
- HTTP timeout je nastaven na 15 s.
- Při jakékoliv chybě sítě, HTTP chybě nebo chybě v těle odpovědi (
Error) se interval stahování automaticky zkrátí na 10 minut (retryMinutes: 10), po kterých skript zkusí data stáhnout znovu. - Chybový stav je zapsán do komponenty
text:201a zalogován do VictoriaLogs.
- Ochrana RAM (paměti mJS):
- Data z JSON odpovědi prochází jedním průchodem bez vytváření meziobjektů.
- Pole
dataje ihned po zpracování explicitně uvolněno (data = null), aby se předešlo přetečení heap paměti Shelly.
3. 3_BMS_Baterie.js (BMS Battery Monitor)
Funkce a účel
- Vyčítá XML rozhraní bateriového managementu (BMS) na adrese
http://192.168.100.11/bcc.xmlkaždých 15 sekund (pollIntervalSec: 15). - Parsování XML bez regulárních výrazů: Bezpečný a paměťově šetrný parser pro prostředí Shelly mJS (
extractTag,parseXmlNumber). - Zpracovává:
- Celkové napětí baterie (
utotal), minimální a maximální napětí článku (umincell,umaxcell) a jejich ID. - Rozdíl mezi články (
udiff), stavy interních relé 1 a 2. - Všech 16 jednotlivých napětí článků (
ucell1ažucell16).
- Celkové napětí baterie (
- Odesílá strukturovaná telemetrická data do VictoriaLogs pro detailní grafy a diagnostiku baterie.
- Virtuální komponenta pro řízení dobíjení:
number:201: Maximální napětí článku Umaxcell (V). Slouží jako jediná exportovaná virtuální komponenta pro zařízení Fv dobijeni (192.168.100.39) k ochraně článků při síťovém dobíjení. Ostatní metriky (celkové napětí, rozdíl, všech 16 článků) se ukládají přímo do VictoriaLogs a neplýtvají limitem virtuálních komponent zařízení.
Ochrany při výpadku a nedostupnosti
- Nedostupnost BMS (výpadek LAN / restart BMS):
- HTTP požadavek má nastavený timeout 8 s (
httpTimeoutSec: 8). - Při nedostupnosti nebo chybě skript nepadá, inkrementuje
consecutiveErrorsa naplánuje další pokus za 15 s. - Ochrana proti logovacímu spamu: Chybový záznam o výpadku BMS se do VictoriaLogs odesílá maximálně jednou za 60 s (
errorIntervalSec: 60), i když se skript dotazuje každých 15 s.
- HTTP požadavek má nastavený timeout 8 s (
- Ochrana proti nevalidnímu XML:
- Celé zpracování XML je zabaleno v
try/catchbloku. Pokud BMS pošle neúplný nebo poškozený XML soubor, skript nespadne a pokračuje v dalším cyklu.
- Celé zpracování XML je zabaleno v