TapHome

Shelly 2PM Gen3

Packet Parser → HTTP
Přidal
Poslední aktualizace: 03. 2026
Shelly 2PM Gen3

Shelly 2PM Gen3 je kompaktní dvoukanálový Wi-Fi reléový modul s vestavěným měřením výkonu. Vejde se za standardní nástěnný vypínač a dokáže ovládat dva nezávislé obvody do 10 A každý (16 A celkově při 230 V AC) nebo jednu motorizovanou roletu/žaluzii. TapHome komunikuje se zařízením přes HTTP pomocí Gen2+/Gen3 JSON-RPC 2.0 API v lokální síti — cloudové připojení není potřeba.

Zařízení podporuje dva provozní profily — switch a cover — volitelné přes webové rozhraní Shelly nebo servisní akci v TapHome. V profilu switch oba reléové výstupy (O1 a O2) fungují nezávisle s měřením výkonu na kanál. V profilu cover dva výstupy pohánějí jeden motor pro rolety, žaluzie nebo závěsy, s ovládáním polohy, podporou náklonu lamel a kalibrací.

Na rozdíl od Shelly 1PM Gen3, který ovládá jeden obvod, 2PM Gen3 poskytuje dvoukanálové ovládání nebo podporu motorizované rolety. Oba sdílejí stejnou platformu Gen3 s ESP procesorem (8 MB flash), až 6 souběžných HTTP připojení a možností aktualizace na Matter.

Konfigurace

Shelly 2PM Gen3 se připojuje přes Wi-Fi. Během importu šablony do TapHome zadejte IP adresu zařízení (výchozí placeholder 192.168.0.1).

Autentifikace musí být na zařízení Shelly vypnutá pro integraci s TapHome. TapHome nepodporuje HTTP Digest Auth používanou zařízeními Gen2+/Gen3. Otevřete webové rozhraní Shelly (http://{device-ip}) → Settings → Authentication a ujistěte se, že je vypnutá.

Pokud je na zařízení Shelly zapnutý ECO režim, může způsobit timeouty komunikace kvůli rychlým intervalům dotazování šablony (2,5–3 sekundy). Vypněte ECO režim ve webovém rozhraní Shelly, pokud zaznamenáte přerušovanou konektivitu.

Výběr profilu

Shelly 2PM Gen3 pracuje v jednom ze dvou profilů najednou. Aktivní profil určuje, která zařízení TapHome jsou funkční:

  • Profil switch — aktivuje oba reléové spínače (Spínač 1 a Spínač 2) s nezávislým měřením výkonu. Zařízení rolety a žaluzie budou zobrazovat chybu profilu.
  • Profil cover — aktivuje roletu a žaluzii. Zařízení spínačů budou zobrazovat chybu profilu.

Aktivní profil je viditelný jako servisní atribut na úrovni modulu („Profil") v TapHome. Pro změnu profilu použijte servisní akci Nastavit profil na úrovni modulu, nebo jej přepněte ve webovém rozhraní Shelly. Po změně profilu se zařízení restartuje a bez chyb budou fungovat pouze zařízení odpovídající novému profilu.

Šablona obsahuje všechny čtyři typy zařízení (2 spínače + roleta + žaluzie), ale fungovat budou pouze zařízení odpovídající aktivnímu profilu. Zařízení na nesprávném profilu zobrazují chybovou zprávu jako „Profile is not set to switch" nebo „Profile is not set to cover" — jde o očekávané chování, nikoli o poruchu.

Kalibrace rolety

Při použití profilu cover musí být limity pohybu motoru kalibrovány předtím, než bude fungovat ovládání polohy. Dokud není kalibrace dokončena, šablona zobrazí chybu „Calibration is required". Kalibrujte buď přes webové rozhraní Shelly, nebo spuštěním servisní akce Spustit automatickou kalibraci v TapHome. Během kalibrace roleta projede úplně nahoru a úplně dolů pro změření vzdáleností.

Schopnosti zařízení

Ovládání relé (profil switch)

Šablona exponuje dva nezávislé reléové spínače. Každý spínač čte svůj stav z /rpc/Switch.GetStatus?id={0,1} (pole output, boolean) a ovládá relé přes /rpc/Switch.Set?id={0,1}&on=true|false.

Každý spínač také exponuje servisní atributy pro monitorování na kanál:

  • Teplota — vnitřní teplota zařízení v °C (temperature.tC)
  • Spotřeba energie — kumulativní energie v Wh (aenergy.total)
  • Příkon — okamžitý výkon v W (apower)
  • Elektrické napětí — napájecí napětí v V (voltage)
  • Elektrický proud — zátěžový proud v A (current)
  • Frekvence — frekvence AC sítě v Hz (freq)
  • Účiník — hodnota účiníku (pf)

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

Ovládání rolety (profil cover)

Zařízení rolety ovládá motorizovanou roletu, závěs nebo markýzu. Čte polohu z /rpc/Cover.GetStatus?id=0 (pole current_pos a target_pos, 0–100) a zapisuje přes /rpc/Cover.GoToPosition?id=0&pos=N. Šablona invertuje stupnici polohy tak, že 0 = úplně otevřeno a 100 = úplně zavřeno v TapHome.

Roleta exponuje servisní atributy:

  • Teplota — vnitřní teplota zařízení v °C
  • Spotřeba energie — kumulativní energie motoru v Wh
  • Příkon — okamžitý výkon motoru v W
  • Elektrické napětí — napájecí napětí v V
  • Elektrický proud — proud motoru v A

Servisní akce Spustit automatickou kalibraci je k dispozici pro spuštění kalibrace přímo z TapHome.

Ovládání žaluzie (profil cover)

Zařízení žaluzie rozšiřuje roletu o ovládání náklonu lamel pro horizontální žaluzie. Kromě polohy čte a zapisuje polohu lamel (slat_pos) přes /rpc/Cover.GoToPosition?id=0&pos=N&slat_pos=M. Obě stupnice polohy a náklonu jsou invertovány (0 = otevřeno, 100 = zavřeno v TapHome).

Žaluzie exponuje stejné servisní atributy jako roleta, plus:

  • Lamela — zobrazuje, zda je ovládání lamel povoleno nebo zakázáno (z Cover.GetConfig → $.slat.enable)
  • Čas otevření lamely — nastavená doba otevírání lamel v sekundách
  • Čas zavření lamely — nastavená doba zavírání lamel v sekundách

Známý problém šablony: Servisní atribut „Slat close time" čte $.slat.open_time místo $.slat.close_time z konfigurace Cover. Oba atributy času lamel aktuálně zobrazují stejnou hodnotu (čas otevření). Toto bude opraveno v budoucí revizi šablony.

Dvě servisní akce jsou k dispozici na zařízení žaluzie:

  • Spustit automatickou kalibraci — spustí kalibraci polohy rolety
  • Nastavit lamelu — povolí ovládání lamel a nastaví časy otevření/zavření (0,1–5 sekund každý) přes /rpc/Cover.SetConfig

Ovládání lamel musí být povoleno předtím, než zařízení žaluzie může ovládat náklon. Pokud poloha lamel není dostupná ze zařízení, žaluzie zobrazí chybu „Slat position must be enabled for blinds". Použijte servisní akci Nastavit lamelu pro její povolení a nastavení dob otevření/zavření.

Servisní diagnostika

Šablona exponuje servisní atributy na úrovni modulu pro monitorování zařízení:

  • WiFi — název připojené SSID sítě
  • IP adresa — aktuální IP adresa stanice
  • Síla signálu — WiFi RSSI v dB
  • MAC — MAC adresa zařízení
  • Profil — aktuálně aktivní profil zařízení (switch nebo cover)

Čtecí skript modulu také kontroluje dostupnost aktualizací firmwaru a požadavky na čekající restart, a tyto zobrazuje jako varování v rozhraní TapHome.

Servisní akce

Tři servisní akce jsou k dispozici na úrovni modulu:

  • Aktualizace firmwaru — spustí aktualizaci firmwaru na nejnovější stabilní verzi přes /rpc/Shelly.Update
  • Restart — spustí restart zařízení přes /rpc/Shelly.Reboot
  • Nastavit profil — přepne mezi provozními režimy cover a switch přes /rpc/Shelly.SetProfile
Další schopnosti

Shelly 2PM Gen3 také exponuje stavy fyzických vstupů (input:0, input:1), počítadla vrácené/exportované energie, dobu provozu, využití RAM a čas zařízení ve svých RPC odpovědích. Auto-off časovač je dostupný přes parametr toggle_after, ochrana proti přetížení se dá nastavit přes Switch.SetConfig → power_limit a počítadla energie se dají resetovat přes /rpc/Switch.ResetCounters. V režimu cover jsou dostupné přímé příkazy open/close/stop a stav pohybu rolety (open/opening/closed/closing/stopped/calibrating). Tyto schopnosti mohou být přidány v budoucí aktualizaci šablony.

Řešení problémů

Zařízení neodpovídá
  1. Ověřte, že Shelly je připojen k Wi-Fi a má platnou IP adresu
  2. Zkuste použít mDNS hostname (shelly2pmg3-AABBCCDDEE.local) místo IP adresy — IP se mohla změnit po obnovení DHCP
  3. Otevřete http://{device-ip}/rpc/Shelly.GetDeviceInfo v prohlížeči — pokud odpoví JSON-em, zařízení je dostupné
  4. Zkontrolujte, že TapHome Core a Shelly jsou ve stejné síti / VLAN
  5. Potvrďte, že autentifikace je na zařízení Shelly vypnutá
Chyby nesouladu profilu

Pokud zařízení zobrazuje „Profile is not set to switch" nebo „Profile is not set to cover":

  1. Zkontrolujte, který profil je aktuálně aktivní — servisní atribut „Profil" na úrovni modulu zobrazuje aktuální režim
  2. Přepněte na správný profil pomocí servisní akce Nastavit profil, nebo odeberte nepoužívaná zařízení z TapHome
  3. Po přepnutí profilů se zařízení automaticky restartuje — počkejte několik sekund na opětovné připojení
Ovládání polohy rolety nefunguje
  1. Ověřte, že zařízení je v profilu cover — profil switch neexponuje funkcionalitu rolety
  2. Spusťte servisní akci Spustit automatickou kalibraci — ovládání polohy vyžaduje dokončenou kalibraci
  3. Zkontrolujte, že motor je správně připojen na svorky O1 a O2
  4. Dotažte /rpc/Cover.GetStatus?id=0 manuálně a ověřte, že pos_control je true
Náklon žaluzie nereaguje
  1. Potvrďte, že ovládání lamel je povoleno — zkontrolujte servisní atribut „Lamela" (měl by zobrazovat „Enabled")
  2. Pokud je zakázáno, použijte servisní akci Nastavit lamelu pro povolení a nastavení časů otevření/zavření
  3. Ověřte, že motor žaluzie podporuje operaci náklonu — rolety bez náklonu ignorují příkazy lamel
Varování před přehřátím

Shelly 2PM Gen3 má vnitřní tepelnou ochranu. Pokud teplota zařízení překročí bezpečné limity, hodnota temperature v servisních atributech zařízení se zvýší. Zajistěte dostatečnou ventilaci kolem zařízení, zejména při spínání vysokých zátěží. Maximální spínací proud je 10 A na kanál s celkovým limitem 16 A (18 A špička).

Zařízení Shelly Gen2+/Gen3 podporují až 6 souběžných HTTP připojení. I když je to výrazné zlepšení oproti Gen1 (2 připojení), vyhněte se dotazování z příliš mnoha systémů současně (TapHome, Home Assistant, vlastní skripty), abyste předešli vyčerpání připojení. Šablona Shelly 2PM Gen3 používá až 4 souběžné endpointy na dotazovací cyklus, což ponechává omezený prostor pro další připojení.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly nainstalované a zapnuté
  • Lokální Wi-Fi síť (2,4 GHz)
  • TapHome CCU ve stejné síti

Krok 1 — Připojte Shelly k Wi-Fi

Možnost A — Aplikace Shelly (doporučeno):

  1. Stáhněte si aplikaci Shelly (iOS / Android)
  2. Klepněte na +Add Device a postupujte podle průvodce Bluetooth párováním
  3. Po výzvě zadejte své Wi-Fi přihlašovací údaje

Možnost B — AP režim (bez aplikace):

  1. Při prvním zapnutí zařízení vytvoří hotspot: ShellyXXX-AABBCCDDEE
  2. Připojte telefon/PC k tomuto hotspotu
  3. Otevřete http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Zadejte SSID a heslo → Save

Shelly podporuje pouze 2,4 GHz sítě. 5 GHz sítě se při skenování nezobrazí.

Krok 2 — Zjistěte IP adresu

Po připojení k Wi-Fi zjistěte přiřazenou IP adresu jedním z následujících způsobů:

  • Aplikace Shelly: Detail zařízení → Device info → IP adresa
  • Webové rozhraní Shelly: Připojte se k AP zařízení před nastavením Wi-Fi — IP se zobrazí po uložení
  • DHCP tabulka routeru: Hledejte hostname jako shelly1pm-AABBCCDDEE
  • mDNS: Pingněte shelly<model>-<mac>.local (např. shelly1pm-AABBCCDDEE.local) ze stejné sítě

Přiřaďte zařízení Shelly statickou IP (DHCP rezervaci) ve vašem routeru, aby se adresa nezměnila po restartu routeru.

Krok 3 — Konfigurace v TapHome

  1. V TapHome přidejte nový modul Packet Parser (HTTP)
  2. IP Address: zadejte IP z kroku 2 (např. 192.168.1.50)
  3. Port: 80 (výchozí, není potřeba měnit)
  4. Importujte šablonu — TapHome bude pravidelně číst /status pro zjištění stavu zařízení

HTTP autentifikace je na zařízeních Shelly standardně vypnutá. Pokud jste povolili ochranu přihlášením, TapHome momentálně nepodporuje HTTP Basic Auth — pro integraci s TapHome ponechte autentifikaci vypnutou.

Dostupná zařízení

Shelly 2PM Gen3 Modul
Servisní atributy
WiFi
IP adresa
Síla signálu
MAC
ProfilAktivní profil zařízení — switch (dvojitý spínač) nebo cover (motorizovaná žaluzie/roleta)
Servisní akce
Aktualizace firmwaru
Restart
Nastavit profilPřepnutí mezi režimy cover a switch — zařízení se po změně profilu restartuje
Vlastní proměnné

Shelly 2PM Gen3

Čtení (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í atributy
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í akce
${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
Parametry: 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 Přepínač

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

boolean
Hodnoty / Stavy: ON · OFF

Spínač 1

Čtení stavu přepínače
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 přepínače
VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + ID + "&on=" + if(St,"true","false"));
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END
Čtení (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í atributy
${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 Přepínač

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

boolean
Hodnoty / Stavy: ON · OFF

Spínač 2

Čtení stavu přepínače
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 přepínače
VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + ID + "&on=" + if(St,"true","false"));
IF response.IsSuccess = false
  ADDERROR(response.StatusCode);
END
Čtení (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í atributy
${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 nebo závěs s ovládáním polohy — vyžaduje profil cover a kalibraci

numeric Jednotka: %
Servisní atributy
Teplota
Spotřeba energie
Příkon
Elektrické napětí
Elektrický proud
Servisní akce
Spustit automatickou kalibraci

Roleta

Čtení (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
Čtení úrovně žaluzie
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 úrovně žaluzie
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í atributy
${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í akce
${start_automatic_calibration}
VAR response := SENDHTTPREQUEST("/rpc/Cover.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Žaluzie Žaluzie

Žaluzie s ovládáním polohy a náklonu lamel — vyžaduje profil cover, kalibraci a povolené lamely

numeric Jednotka: %
Servisní atributy
Teplota
Spotřeba energie
Příkon
Elektrické napětí
Elektrický proud
LamelaZda je ovládání náklonu lamel povoleno v konfiguraci Shelly Cover
Čas otevření lamely
Čas zavření lamely
Servisní akce
Spustit automatickou kalibraci
Nastavit lameluPovolení ovládání lamel a nastavení doby otevření/zavření (0,1–5 sekund)

Žaluzie

Čtení (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
Čtení úrovně žaluzie
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 úrovně žaluzie
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
Čtení sklonu žaluzie
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 žaluzie
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í atributy
${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í akce
${start_automatic_calibration}
VAR response := SENDHTTPREQUEST("/rpc/Cover.Calibrate?id=" + ID);
IF response.IsSuccess
    return("OK");
else
    return("Error");
END
Set Slat
Parametry: 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
Připojení: Packet Parser → HTTP
Možná vylepšení (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