TapHome

Shelly 2PM Gen3

Packet Parser → HTTP
Pridal
Posledná aktualizácia: 03. 2026
Shelly 2PM Gen3

Shelly 2PM Gen3 je kompaktný dvojkanálový Wi-Fi reléový modul so vstavaným meraním výkonu. Zmestí sa za štandardný nástenný vypínač a dokáže ovládať dva nezávislé obvody do 10 A každý (16 A celkovo pri 230 V AC) alebo jednu motorizovanú roletu/žalúziu. TapHome komunikuje so zariadením cez HTTP pomocou Gen2+/Gen3 JSON-RPC 2.0 API v lokálnej sieti — cloudové pripojenie nie je potrebné.

Zariadenie podporuje dva prevádzkové profily — switch a cover — voliteľné cez webové rozhranie Shelly alebo servisnú akciu v TapHome. V profile switch oba reléové výstupy (O1 a O2) fungujú nezávisle s meraním výkonu na kanál. V profile cover dva výstupy poháňajú jeden motor pre rolety, žalúzie alebo záclony, s ovládaním polohy, podporou náklonu lamiel a kalibráciou.

Na rozdiel od Shelly 1PM Gen3, ktorý ovláda jeden obvod, 2PM Gen3 poskytuje dvojkanálové ovládanie alebo podporu motorizovanej rolety. Oba zdieľajú rovnakú platformu Gen3 s ESP procesorom (8 MB flash), až 6 súbežných HTTP pripojení a možnosťou aktualizácie na Matter.

Konfigurácia

Shelly 2PM Gen3 sa pripája cez Wi-Fi. Počas importu šablóny do TapHome zadajte IP adresu zariadenia (predvolený placeholder 192.168.0.1).

Autentifikácia musí byť na zariadení Shelly vypnutá pre integráciu s TapHome. TapHome nepodporuje HTTP Digest Auth používanú zariadeniami Gen2+/Gen3. Otvorte webové rozhranie Shelly (http://{device-ip}) → Settings → Authentication a uistite sa, že je vypnutá.

Ak je na zariadení Shelly zapnutý ECO režim, môže spôsobiť timeouty komunikácie kvôli rýchlym intervalom dotazovania šablóny (2,5–3 sekundy). Vypnite ECO režim vo webovom rozhraní Shelly, ak zaznamenáte prerušovanú konektivitu.

Výber profilu

Shelly 2PM Gen3 pracuje v jednom z dvoch profilov naraz. Aktívny profil určuje, ktoré zariadenia TapHome sú funkčné:

  • Profil switch — aktivuje oba reléové spínače (Spínač 1 a Spínač 2) s nezávislým meraním výkonu. Zariadenia rolety a žalúzie budú zobrazovať chybu profilu.
  • Profil cover — aktivuje roletu a žalúziu. Zariadenia spínačov budú zobrazovať chybu profilu.

Aktívny profil je viditeľný ako servisný atribút na úrovni modulu („Profil") v TapHome. Na zmenu profilu použite servisnú akciu Nastaviť profil na úrovni modulu, alebo ho prepnite vo webovom rozhraní Shelly. Po zmene profilu sa zariadenie reštartuje a bez chýb budú fungovať iba zariadenia zodpovedajúce novému profilu.

Šablóna obsahuje všetky štyri typy zariadení (2 spínače + roleta + žalúzia), ale fungovať budú iba zariadenia zodpovedajúce aktívnemu profilu. Zariadenia na nesprávnom profile zobrazujú chybové hlásenie ako „Profile is not set to switch" alebo „Profile is not set to cover" — ide o očakávané správanie, nie o poruchu.

Kalibrácia rolety

Pri použití profilu cover musia byť limity pohybu motora kalibrované pred tým, než bude fungovať ovládanie polohy. Kým nie je kalibrácia dokončená, šablóna zobrazí chybu „Calibration is required". Kalibrujte buď cez webové rozhranie Shelly, alebo spustením servisnej akcie Spustiť automatickú kalibráciu v TapHome. Počas kalibrácie roleta prejde úplne hore a úplne dole na zmeranie vzdialeností.

Schopnosti zariadení

Ovládanie relé (profil switch)

Šablóna exponuje dva nezávislé reléové spínače. Každý spínač číta svoj stav z /rpc/Switch.GetStatus?id={0,1} (pole output, boolean) a ovláda relé cez /rpc/Switch.Set?id={0,1}&on=true|false.

Každý spínač tiež exponuje servisné atribúty pre monitorovanie na kanál:

  • Teplota — vnútorná teplota zariadenia v °C (temperature.tC)
  • Spotreba energie — kumulatívna energia v Wh (aenergy.total)
  • Príkon — okamžitý výkon v W (apower)
  • Elektrické napätie — napájacie napätie v V (voltage)
  • Elektrický prúd — záťažový prúd v A (current)
  • Frekvencia — frekvencia AC siete v Hz (freq)
  • Účinník — hodnota účinníka (pf)

Spínače sa aktualizujú každých 2,5 sekundy.

Ovládanie rolety (profil cover)

Zariadenie rolety ovláda motorizovanú roletu, záclonu alebo markízu. Číta polohu z /rpc/Cover.GetStatus?id=0 (polia current_pos a target_pos, 0–100) a zapisuje cez /rpc/Cover.GoToPosition?id=0&pos=N. Šablóna invertuje stupnicu polohy tak, že 0 = úplne otvorené a 100 = úplne zatvorené v TapHome.

Roleta exponuje servisné atribúty:

  • Teplota — vnútorná teplota zariadenia v °C
  • Spotreba energie — kumulatívna energia motora v Wh
  • Príkon — okamžitý výkon motora v W
  • Elektrické napätie — napájacie napätie v V
  • Elektrický prúd — prúd motora v A

Servisná akcia Spustiť automatickú kalibráciu je k dispozícii na spustenie kalibrácie priamo z TapHome.

Ovládanie žalúzie (profil cover)

Zariadenie žalúzie rozširuje roletu o ovládanie náklonu lamiel pre horizontálne žalúzie. Okrem polohy číta a zapisuje polohu lamiel (slat_pos) cez /rpc/Cover.GoToPosition?id=0&pos=N&slat_pos=M. Obe stupnice polohy a náklonu sú invertované (0 = otvorené, 100 = zatvorené v TapHome).

Žalúzia exponuje rovnaké servisné atribúty ako roleta, plus:

  • Lamela — zobrazuje, či je ovládanie lamiel povolené alebo zakázané (z Cover.GetConfig → $.slat.enable)
  • Čas otvorenia lamely — nastavená doba otvárania lamiel v sekundách
  • Čas zatvorenia lamely — nastavená doba zatvárania lamiel v sekundách

Známy problém šablóny: Servisný atribút „Slat close time" číta $.slat.open_time namiesto $.slat.close_time z konfigurácie Cover. Oba atribúty času lamiel momentálne zobrazujú rovnakú hodnotu (čas otvorenia). Toto bude opravené v budúcej revízii šablóny.

Dve servisné akcie sú k dispozícii na zariadení žalúzie:

  • Spustiť automatickú kalibráciu — spustí kalibráciu polohy rolety
  • Nastaviť lamelu — povolí ovládanie lamiel a nastaví časy otvorenia/zatvorenia (0,1–5 sekúnd každý) cez /rpc/Cover.SetConfig

Ovládanie lamiel musí byť povolené pred tým, než zariadenie žalúzie môže ovládať náklon. Ak poloha lamiel nie je dostupná zo zariadenia, žalúzia zobrazí chybu „Slat position must be enabled for blinds". Použite servisnú akciu Nastaviť lamelu na jej povolenie a nastavenie dĺžok otvorenia/zatvorenia.

Servisná diagnostika

Šablóna exponuje servisné atribúty na úrovni modulu pre monitorovanie zariadenia:

  • WiFi — názov pripojenej SSID siete
  • IP adresa — aktuálna IP adresa stanice
  • Sila signálu — WiFi RSSI v dB
  • MAC — MAC adresa zariadenia
  • Profil — aktuálne aktívny profil zariadenia (switch alebo cover)

Čítací skript modulu tiež kontroluje dostupnosť aktualizácií firmvéru a požiadavky na čakajúci reštart, a tieto zobrazuje ako varovania v rozhraní TapHome.

Servisné akcie

Tri servisné akcie sú k dispozícii na úrovni modulu:

  • Aktualizácia firmvéru — spustí aktualizáciu firmvéru na najnovšiu stabilnú verziu cez /rpc/Shelly.Update
  • Reštart — spustí reštart zariadenia cez /rpc/Shelly.Reboot
  • Nastaviť profil — prepne medzi prevádzkovými režimami cover a switch cez /rpc/Shelly.SetProfile
Ďalšie schopnosti

Shelly 2PM Gen3 tiež exponuje stavy fyzických vstupov (input:0, input:1), počítadlá vrátenej/exportovanej energie, dobu prevádzky, využitie RAM a čas zariadenia vo svojich RPC odpovediach. Auto-off časovač je dostupný cez parameter toggle_after, ochrana proti preťaženiu sa dá nastaviť cez Switch.SetConfig → power_limit a počítadlá energie sa dajú resetovať cez /rpc/Switch.ResetCounters. V režime cover sú dostupné priame príkazy open/close/stop a stav pohybu rolety (open/opening/closed/closing/stopped/calibrating). Tieto schopnosti môžu byť pridané v budúcej aktualizácii šablóny.

Riešenie problémov

Zariadenie neodpovedá
  1. Overte, že Shelly je pripojený k Wi-Fi a má platnú IP adresu
  2. Skúste použiť mDNS hostname (shelly2pmg3-AABBCCDDEE.local) namiesto IP adresy — IP sa mohla zmeniť po obnovení DHCP
  3. Otvorte http://{device-ip}/rpc/Shelly.GetDeviceInfo v prehliadači — ak odpovie JSON-om, zariadenie je dostupné
  4. Skontrolujte, že TapHome Core a Shelly sú v rovnakej sieti / VLAN
  5. Potvrďte, že autentifikácia je na zariadení Shelly vypnutá
Chyby nesúladu profilu

Ak zariadenie zobrazuje „Profile is not set to switch" alebo „Profile is not set to cover":

  1. Skontrolujte, ktorý profil je momentálne aktívny — servisný atribút „Profil" na úrovni modulu zobrazuje aktuálny režim
  2. Prepnite na správny profil pomocou servisnej akcie Nastaviť profil, alebo odstráňte nepoužívané zariadenia z TapHome
  3. Po prepnutí profilov sa zariadenie automaticky reštartuje — počkajte niekoľko sekúnd na opätovné pripojenie
Ovládanie polohy rolety nefunguje
  1. Overte, že zariadenie je v profile cover — profil switch neexponuje funkcionalitu rolety
  2. Spustite servisnú akciu Spustiť automatickú kalibráciu — ovládanie polohy vyžaduje dokončenú kalibráciu
  3. Skontrolujte, že motor je správne pripojený na svorky O1 a O2
  4. Dotazujte /rpc/Cover.GetStatus?id=0 manuálne a overte, že pos_control je true
Náklon žalúzie nereaguje
  1. Potvrďte, že ovládanie lamiel je povolené — skontrolujte servisný atribút „Lamela" (mal by zobrazovať „Enabled")
  2. Ak je zakázané, použite servisnú akciu Nastaviť lamelu na povolenie a nastavenie časov otvorenia/zatvorenia
  3. Overte, že motor žalúzie podporuje operáciu náklonu — rolety bez náklonu ignorujú príkazy lamiel
Varovanie pred prehriatím

Shelly 2PM Gen3 má internú tepelnú ochranu. Ak teplota zariadenia prekročí bezpečné limity, hodnota temperature v servisných atribútoch zariadenia sa zvýši. Zabezpečte dostatočnú ventiláciu okolo zariadenia, najmä pri spínaní vysokých záťaží. Maximálny spínací prúd je 10 A na kanál s celkovým limitom 16 A (18 A špička).

Zariadenia Shelly Gen2+/Gen3 podporujú až 6 súbežných HTTP pripojení. Aj keď je to výrazné zlepšenie oproti Gen1 (2 pripojenia), vyhnite sa dotazovaniu z príliš veľa systémov súčasne (TapHome, Home Assistant, vlastné skripty), aby ste predišli vyčerpaniu pripojení. Šablóna Shelly 2PM Gen3 používa až 4 súbežné endpointy na dotazovací cyklus, čo ponecháva obmedzený priestor pre ďalšie pripojenia.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly nainštalované a zapnuté
  • Lokálna Wi-Fi sieť (2,4 GHz)
  • TapHome CCU v rovnakej sieti

Krok 1 — Pripojte Shelly k Wi-Fi

Možnosť A — Aplikácia Shelly (odporúčané):

  1. Stiahnite si aplikáciu Shelly (iOS / Android)
  2. Klepnite na +Add Device a postupujte podľa sprievodcu Bluetooth párovaním
  3. Po výzve zadajte svoje Wi-Fi prihlasovacie údaje

Možnosť B — AP režim (bez aplikácie):

  1. Pri prvom zapnutí zariadenie vytvorí hotspot: ShellyXXX-AABBCCDDEE
  2. Pripojte telefón/PC k tomuto hotspotu
  3. Otvorte http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Zadajte SSID a heslo → Save

Shelly podporuje iba 2,4 GHz siete. 5 GHz siete sa pri skenovaní nezobrazia.

Krok 2 — Zistite IP adresu

Po pripojení k Wi-Fi zistite priradenú IP adresu jedným z nasledujúcich spôsobov:

  • Aplikácia Shelly: Detail zariadenia → Device info → IP adresa
  • Webové rozhranie Shelly: Pripojte sa k AP zariadenia pred nastavením Wi-Fi — IP sa zobrazí po uložení
  • DHCP tabuľka routera: Hľadajte hostname ako shelly1pm-AABBCCDDEE
  • mDNS: Pingnite shelly<model>-<mac>.local (napr. shelly1pm-AABBCCDDEE.local) z rovnakej siete

Priraďte zariadeniu Shelly statickú IP (DHCP rezerváciu) vo vašom routeri, aby sa adresa nezmenila po reštarte routera.

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (HTTP)
  2. IP Address: zadajte IP z kroku 2 (napr. 192.168.1.50)
  3. Port: 80 (predvolený, nie je potrebné meniť)
  4. Importujte šablónu — TapHome bude pravidelne čítať /status pre zistenie stavu zariadenia

HTTP autentifikácia je na zariadeniach Shelly štandardne vypnutá. Ak ste povolili ochranu prihlásením, TapHome momentálne nepodporuje HTTP Basic Auth — pre integráciu s TapHome ponechajte autentifikáciu vypnutú.

Dostupné zariadenia

Shelly 2PM Gen3 Modul
Servisné atribúty
WiFi
IP adresa
Sila signálu
MAC
ProfilAktívny profil zariadenia — switch (dvojitý spínač) alebo cover (motorizovaná žalúzia/roleta)
Servisné akcie
Aktualizácia firmvéru
Reštart
Nastaviť profilPrepnutie medzi režimami cover a switch — zariadenie sa po zmene profilu reštartuje
Vlastné premenné

Shelly 2PM Gen3

Čítanie (modul)
VAR response := SENDHTTPREQUEST("/rpc/Sys.GetStatus");
IF response.IsSuccess
    Sys.GetStatus := response.Content;
END

response := SENDHTTPREQUEST("/rpc/Sys.GetConfig");
IF response.IsSuccess
    Sys.GetConfig := response.Content;
END

response := SENDHTTPREQUEST("/rpc/WiFi.GetStatus");
IF response.IsSuccess
    WiFi.GetStatus := response.Content;
END

if ! ISNULL(parsejson(Sys.GetStatus, "available_updates.stable", true))
    addwarning("New firmware update is available");
end

if parsejson(Sys.GetStatus, "restart_required", true)
    addwarning("Restart required");
end
Servisné atribúty
Wifi
PARSEJSON(WiFi.GetStatus, "ssid")
${ipAddress}
PARSEJSON(WiFi.GetStatus, "sta_ip")
${xml_signal_strength} [dB]
PARSEJSON(WiFi.GetStatus, "rssi")
MAC
PARSEJSON(Sys.GetStatus, "mac")
Profile
PARSEJSON(Sys.GetConfig, "$.device.profile");
Servisné akcie
${xml_update_fw}
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Update?stage=\"stable\"");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END

${restart}
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Set Profile
Parametre: Profile
VAR response := SENDHTTPREQUEST("/rpc/Shelly.SetProfile?name=\"" + 
switch(prof,
0, "cover",
1, "switch",
"")
+ "\"");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Spínač 1 Prepínač

Reléový výstup 1 s meraním výkonu na kanál — vyžaduje profil switch

boolean
Hodnoty / Stavy: ON · OFF

Spínač 1

Čítanie stavu prepínača
VAR response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + ID);
IF response.IsSuccess
    Switch.GetStatus := response.Content;  
END
return(PARSEJSON(Switch.GetStatus, "$.output", true));
Zápis stavu prepínača
VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + ID + "&on=" + if(St,"true","false"));
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END
Čítanie (modul)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "switch"
	adderror("Profile is not set to switch (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + ID);
IF response.IsSuccess
    Switch.GetStatus := response.Content;  
END

response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + ID);
IF response.IsSuccess
    Switch.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Switch.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Switch.GetStatus, "errors"));
end
Servisné atribúty
${device_variable_realtemperature} [°C]
parsejson(Switch.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Switch.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Switch.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Switch.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Switch.GetStatus, "$.current", true)
${frequency} [Hz]
parsejson(Switch.GetStatus, "$.freq", true)
Power Factor
parsejson(Switch.GetStatus, "$.pf", true)
Spínač 2 Prepínač

Reléový výstup 2 s meraním výkonu na kanál — vyžaduje profil switch

boolean
Hodnoty / Stavy: ON · OFF

Spínač 2

Čítanie stavu prepínača
VAR response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + ID);
IF response.IsSuccess
    Switch.GetStatus := response.Content;  
END
return(PARSEJSON(Switch.GetStatus, "$.output", true));
Zápis stavu prepínača
VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + ID + "&on=" + if(St,"true","false"));
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END
Čítanie (modul)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "switch"
	adderror("Profile is not set to switch (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + ID);
IF response.IsSuccess
    Switch.GetStatus := response.Content;  
END

response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + ID);
IF response.IsSuccess
    Switch.GetConfig := response.Content;
END

if ! ISNULL(parsejson(Switch.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Switch.GetStatus, "errors"));
end
Servisné atribúty
${device_variable_realtemperature} [°C]
parsejson(Switch.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Switch.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Switch.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Switch.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Switch.GetStatus, "$.current", true)
${frequency} [Hz]
parsejson(Switch.GetStatus, "$.freq", true)
Power Factor
parsejson(Switch.GetStatus, "$.pf", true)
Roleta Posuvný

Motorizovaná roleta alebo záves s ovládaním polohy — vyžaduje profil cover a kalibráciu

numeric Jednotka: %
Servisné atribúty
Teplota
Spotreba energie
Príkon
Elektrické napätie
Elektrický prúd
Servisné akcie
Spustiť automatickú kalibráciu

Roleta

Čítanie (modul)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "cover"
	adderror("Profile is not set to cover (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + ID);
IF response.IsSuccess
    Cover.GetStatus := response.Content;  
END

response := SENDHTTPREQUEST("/rpc/Cover.GetConfig?id=" + ID);
IF response.IsSuccess
    Cover.GetConfig := response.Content;
END

if ! parsejson(Cover.GetStatus, "$.pos_control", true)
    #adderror("${presence_calibration_required}");
    adderror("Calibration is required");
end

if ! ISNULL(parsejson(Cover.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Cover.GetStatus, "errors"));
end
Čítanie úrovne žalúzie
var pos := PARSEJSON(Cover.GetStatus, "$.current_pos", true);
if ! isnull(PARSEJSON(Cover.GetStatus, "$.target_pos", true))
	pos := PARSEJSON(Cover.GetStatus, "$.target_pos", true);
end

return(linear(pos,0,1,100,0));
Zápis úrovne žalúzie
VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=" + ID + "&pos=" + round(linear(Bl,0,100,1,0)));
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END

response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + ID);
IF response.IsSuccess
    Cover.GetStatus := response.Content;  
END
Servisné atribúty
${device_variable_realtemperature} [°C]
parsejson(Cover.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Cover.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Cover.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Cover.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Cover.GetStatus, "$.current", true)
Servisné akcie
${start_automatic_calibration}
VAR response := SENDHTTPREQUEST("/rpc/Cover.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Žalúzia Žalúzia

Žalúzia s ovládaním polohy a náklonu lamiel — vyžaduje profil cover, kalibráciu a povolené lamely

numeric Jednotka: %
Servisné atribúty
Teplota
Spotreba energie
Príkon
Elektrické napätie
Elektrický prúd
LamelaČi je ovládanie náklonu lamiel povolené v konfigurácii Shelly Cover
Čas otvorenia lamely
Čas zatvorenia lamely
Servisné akcie
Spustiť automatickú kalibráciu
Nastaviť lameluPovolenie ovládania lamiel a nastavenie dĺžky otvorenia/zatvorenia (0,1–5 sekúnd)

Žalúzia

Čítanie (modul)
if PARSEJSON(Sys.GetConfig, "$.device.profile") != "cover"
	adderror("Profile is not set to cover (" + PARSEJSON(Sys.GetConfig, "$.device.profile") + ")");
end

VAR response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + ID);
IF response.IsSuccess
    Cover.GetStatus := response.Content;  
END

response := SENDHTTPREQUEST("/rpc/Cover.GetConfig?id=" + ID);
IF response.IsSuccess
    Cover.GetConfig := response.Content;
END

if ! parsejson(Cover.GetStatus, "$.pos_control", true)
    #adderror("${presence_calibration_required}");
    adderror("Calibration is required");
end

if ! ISNULL(parsejson(Cover.GetStatus, "errors", true))
    adderror("Error: " + parsejson(Cover.GetStatus, "errors"));
end
Čítanie úrovne žalúzie
var pos := PARSEJSON(Cover.GetStatus, "$.current_pos", true);
var target := PARSEJSON(Cover.GetStatus, "$.target_pos", true);
var slatPos := PARSEJSON(Cover.GetStatus, "$.slat_pos", true);

BlSend := 0;
if BsSend = 0 and (Bs = 0 or Bs = 1) 
	if (!isnull(target))
		DeltaPos := 0;
		return(linear(target,0,1,100,0));
	else
		return(linear(pos - DeltaPos,0,1,100,0));	
	end
end

return(Bl);
Zápis úrovne žalúzie
var pos := PARSEJSON(Cover.GetStatus, "$.current_pos", true);
var target := PARSEJSON(Cover.GetStatus, "$.target_pos", true);
var slatPos := PARSEJSON(Cover.GetStatus, "$.slat_pos", true);

VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=0&pos=" + round(linear(Bl,0,100,1,0)));
BlSend := 1;
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END

#response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=0");
#IF response.IsSuccess
#    Cover.GetStatus := response.Content;  
#END
Čítanie sklonu žalúzie
var pos := PARSEJSON(Cover.GetStatus, "$.current_pos", true);
var slatPos := PARSEJSON(Cover.GetStatus, "$.slat_pos", true);
var state := PARSEJSON(Cover.GetStatus, "$.state", true);
var date := NOW();

if ISNULL(slatPos)
    adderror("Slat position must be enabled for blinds");
    return(NaN);
end

if state = "closing" or state = "opening"
	BsSend := 1;
	return(Bs);
end

if BsSend > 1
	BsSend := 1;
	return(Bs);
else
	if BsSend = 1
		BsSend := 0;
		DeltaPos := pos - round(linear(Bl,0,100,1,0));	
	end
	return(linear(slatPos,0,1,100,0));
end
Zápis sklonu žalúzie
var date := NOW();
var pos := PARSEJSON(Cover.GetStatus, "$.current_pos", true);

if BlSend = 0
	VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=0&pos=" + pos + "&slat_pos=" + round(linear(Bs,0,100,1,0)));
	BsSend := date.UNIXTIME;
	IF response.IsSuccess = false
	  ADDERROR(response.StatusCode);
	END
end

#response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=0");
#IF response.IsSuccess
#    Cover.GetStatus := response.Content;  
#END
Servisné atribúty
${device_variable_realtemperature} [°C]
parsejson(Cover.GetStatus, "$.temperature.tC", true)
${device_variable_electricityconsumption} [Wh]
parsejson(Cover.GetStatus, "$.aenergy.total", true)
${device_variable_electricitydemand} [W]
parsejson(Cover.GetStatus, "$.apower", true)
${valueLogType_ElectricVoltage} [V]
parsejson(Cover.GetStatus, "$.voltage", true)
${valueLogType_ElectricCurrent} [A]
parsejson(Cover.GetStatus, "$.current", true)
Slat
if(parsejson(Cover.GetConfig, "$.slat.enable", true), "Enabled", "Disabled")
Slat open time [s]
parsejson(Cover.GetConfig, "$.slat.open_time ", true)
Slat close time [s]
parsejson(Cover.GetConfig, "$.slat.open_time ", true)
Servisné akcie
${start_automatic_calibration}
VAR response := SENDHTTPREQUEST("/rpc/Cover.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Set Slat
Parametre: Open time [s] (0.1–5 ot), Close time [s] (0.1–5 ct)
VAR response := SENDHTTPREQUEST("/rpc/Cover.SetConfig?id=" + ID + 
	"&config={\"slat\":{\"enable\":true, \"open_time\": " + ot +", \"close_time\": " + ct +"}}");
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Pripojenie: Packet Parser → HTTP
Možné vylepšenia (11)
  • Input 1 State — Physical switch/button input 1 state, available via /rpc/Input.GetStatus?id=0
  • Input 2 State — Physical switch/button input 2 state, available via /rpc/Input.GetStatus?id=1
  • Returned Energy — Returned/exported energy in Wh, for bi-directional metering scenarios
  • Uptime — Seconds since last reboot, available in Sys.GetStatus response
  • RAM Usage — Total and free RAM in bytes, available in Sys.GetStatus response
  • Device Time — Current device time in HH:MM format, available in Sys.GetStatus response
  • Auto-off Timer — Auto-reset timer in seconds via toggle_after parameter, could be added as switch parameter
  • Reset Energy Counters — Resets energy measurement counters (aenergy, ret_aenergy) for both channels
  • Overpower Protection — Configurable power limit threshold in Watts, relay turns off when exceeded
  • Cover State — Cover movement state (open/opening/closed/closing/stopped/calibrating), available in Cover.GetStatus
  • Cover Open/Close/Stop Commands — Direct open/close/stop commands without position parameter; template uses GoToPosition instead

Zdroje