Přeskočit na hlavní obsah

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. 1_EM-solarokruh.js – Ochrana měniče Victron 2000 proti přetížení a přepínání FVE / Grid
  2. 2_Predikce_FVE.js – Stahování předpovědi osvitu z PVForecast.cz
  3. 3_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:0 nebo dle KVS sol_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).
  • 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 dobu sol_t_max_s (10 s), relé se okamžitě rozepne (switch:0 = false, přepnutí na Grid) a virtuální komponenta sol_vc_bool (boolean:201) se nastaví na false (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ší.
  • 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í na sol_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:
      1. Scénář Plná baterie: SOC ≥ 95 % (sol_bat_soc_on_full) \implies přepne na FVE i bez ohledu na počasí.
      2. 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.
      3. 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.
  • 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.42 skript nepadá ani necykluje, ponechává relé v bezpečném stavu a do logu zapíše varování.
  • 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 na em1:0.
    • Pokud by přestala chodit data měření, časovače přetížení ani recovery se nespustí (nehrozí cyklování).
  • Restart Shelly:
    • Při bootu skript nejprve zjistí skutečný stav relé switch:0 a z něj inicializuje stav fvePermitted.
  • Selhání nastavení virtuální komponenty:
    • Skript kombinuje přímý handle Virtual.getHandle() s fallbackem na RPC volání Boolean.Set.

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 aktualizace
    • text: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:201 a 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 data je 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.xml kaž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ů (ucell1 až ucell16).
  • 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 consecutiveErrors a 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.
  • Ochrana proti nevalidnímu XML:
    • Celé zpracování XML je zabaleno v try/catch bloku. Pokud BMS pošle neúplný nebo poškozený XML soubor, skript nespadne a pokračuje v dalším cyklu.