Přeskočit na hlavní obsah

El-celkove (192.168.100.251)

Shelly Pro 3EM na hlavním přívodu domu (FVE_Solar) – měření fází L1, L2, L3 a hlídání hlavního domovního jističe 3x 25A.


Seznam skriptů​

  1. 1_blokace3m.js – Asymetrické hlídání hlavního jističe (Grid Guard) a blokování dohřevu
  2. 2_vystrahy.js – Sledování meteorologických výstrah ČHMÚ a ochrana FVE

1. 1_blokace3m.js (Grid Guard)​

Funkce a účel​

  • Asymetrická ochrana hlavního jističe 3x 25A proti přetížení při provozu elektrických topných patron (4 kW a 9 kW) v akumulační nádrži.
  • Fyzické rozložení zátěží:
    • L1: Běžné spotřebiče domu + 3 kW (z 9 kW patrony, ~13 A). 4 kW patrona na L1 není připojena.
    • L2: 3 kW (z 9 kW) + 2 kW (z 4 kW) \implies max ~22 A.
    • L3: 3 kW (z 9 kW) + 2 kW (z 4 kW) \implies max ~22 A.
  • Dvoustupňová kaskádová logika:
    • Fáze L1 (Dům + 9 kW): Pokud proud L1 ≥ 23.5 A nebo celkový příkon domu ≥ 16.5 kW, okamžitě se odesílá blokace 9 kW patrony (target=7kw, resp. 9kW patrona na centrále).
    • Fáze L2 a L3 (4 kW a 9 kW):
      • Krok 1: Pokud \max(L2, L3) ≥ 23.5 A, okamžitě se shodí malá patrona 4 kW (target=4kw).
      • Krok 2 (Kaskáda): Skript počká cascadeDelaySec (5 s = 2 měřicí cykly na ustálení proudu). Pokud i po shození 4 kW proud na L2 nebo L3 zůstává ≥ 24.0 A, zablokuje se i velká patrona 9 kW (target=7kw).
  • Návratová hystereze a kaskádový zámek:
    • Pro odblokování 4 kW musí být proud na L2 i L3 pod 14.5 A nepřetržitě po dobu 300 s (5 minut).
    • Pro odblokování 9 kW musí být L1 ≤ 10.5 A a L2, L3 ≤ 10.5 A po dobu 300 s. Dokud je zablokovaná 4 kW, 9 kW se nesmí odblokovat dříve.
  • Keep-Alive: Dokud blokace trvá, skript každých 60 s odesílá obnovovací signál na centrálu (192.168.100.31 / el_dotapeni.js), čímž resetuje její bezpečnostní 300s watchdog.
  • Telemetrie: Odesílá stavy a proudy fází do VictoriaLogs každých 60 s.

Ochrany při výpadku a nedostupnosti​

  • Výpadek centrály v kotelně (192.168.100.31):
    • Požadavek na blokaci má HTTP timeout 5 s s ošetřením chyb i výjimek (try/catch).
    • Při selhání centrály se zaloguje chyba a skript při trvajícím přetížení opakuje blokovací požadavek v dalším cyklu.
    • Na straně centrály běží watchdog (300 s) – pokud by spojení vypadlo během aktivní blokace, centrála by po 300 s blokaci uvolnila, ledaže by selhalo celé měření.
  • Výpadek měření čidel EM (chyba čtení em:0):
    • Skript má automatický fallback: pokud selže čtení souhrnné komponenty em:0, zkusí načíst jednotlivé kanály em1:0, em1:1, em1:2.
    • Pokud selžou obě metody, skript zaloguje chybu a neprovede nebezpečné uvolnění blokace (stavy zůstávají zachovány).
  • Zamezení přehlcení soketů mJS:
    • Při současné blokaci 4 kW i 9 kW se keep-alive požadavky posílají sekvenčně s časovým rozestupem 1.5 s (Timer.set(1500, ...)), aby nedošlo k vyčerpání HTTP soketů v Shelly OS.

2. 2_vystrahy.js (ČHMÚ Výstrahy)​

Funkce a účel​

  • Pravidelně (každých 10 minut) stahuje meteorologické výstrahy z REST API https://lovecka.info/ChmiWarnings1/chmi/vystrahy/3211?kratke=2 pro ORP 3211 (Přeštice).
  • Sleduje rizikové jevy pro fotovoltaiku: bouřky (Thunderstorm) a silný vítr (Wind).
  • Reaguje preemptivně (i na předpověď dopředu, react_preemptively: true) nebo na probíhající jevy.
  • Výsledky ukládá do lokálních virtuálních komponent pro automatizaci a Shelly Scény:
    • Boolean:200 (VystrahaAktivni) – true / false
    • Number:200 (VystrahaStupennum) – 0 (bez výstrahy) až 4 (extrémní)
    • Enum:200 (VystrahaStupen) – textový stupeň ("Bez vystrahy", "Zluta", "Oranzova", "Cervena", "Extremni")
  • Odesílá detailní záznamy a telemetrii do VictoriaLogs.

Ochrany při výpadku a nedostupnosti​

  • Výpadek internetu nebo API ČHMÚ:
    • HTTP požadavek má timeout 15 s.
    • Při chybě sítě (error_code !== 0) nebo HTTP chybě API (res.code !== 200) skript nepadá, inkrementuje čítač consecutiveErrors a zaloguje výstrahu do VictoriaLogs.
    • Ponechání stavu: Při výpadku internetu se virtuální komponenty neresetují na nulu okamžitě, zůstává zachován poslední známý stav, dokud se spojení neobnoví.
  • Ochrana proti pádu při nevalidním JSON:
    • Parsování probíhá v try/catch bloku (JSON.parse(res.body)). Při poškozeném těle odpovědi skript nespadne.
  • Omezení velikosti dat (?kratke=2):
    • Použití parametru ?kratke=2 omezuje objem přenášených dat na minimum, což zabraňuje přetečení RAM paměti v mJS prostředí Shelly.
  • Prevence překryvu požadavků:
    • Příznak isChecking zabraňuje spuštění nového dotazu, pokud předchozí požadavek ještě čeká na odpověď nebo timeout.
  • State cache:
    • Zápisy do virtuálních komponent se provádějí pouze při skutečné změně výstrahy, což šetří flash paměť a procesorový čas.