TapHome

Shelly Plus 2PM

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

Shelly Plus 2PM je kompaktní dvoukanálové Wi-Fi relé s vestavěným měřením výkonu na obou kanálech. Vejde se za standardní nástěnný vypínač a dokáže ovládat dva nezávislé okruhy, každý do 10 A (celkem 16 A při 230 V AC), nebo pohon jedné motorizované rolety. TapHome komunikuje se zařízením přes HTTP pomocí Gen2+ RPC 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) pracují nezávisle s měřením výkonu na každém kanálu. V profilu cover oba výstupy pohánějí jeden motor pro rolety, žaluzie nebo závěsy s ovládáním pozice a kalibrací.

Shelly Plus 2PM byl ukončen. Jeho nástupce, Shelly 2PM Gen3, nabízí stejnou funkci dvojitého profilu s vylepšeným procesorem (8 MB flash), až 6 současnými HTTP připojeními a možností aktualizace na Matter.

Konfigurace

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

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

Pokud je na zařízení Shelly povolen režim ECO, může způsobovat výpadky komunikace kvůli rychlým intervalům dotazování šablony (2,5–5 sekund). Vypněte režim ECO ve webovém rozhraní Shelly, pokud zaznamenáte občasné problémy s připojením.

Výběr profilu

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

  • Profil switch — aktivuje oba reléové spínače (Switch 1 a Switch 2) a jejich měřiče energie pro každý kanál. Zařízení rolety a měřič energie rolety nebudou reagovat.
  • Profil cover — aktivuje zařízení rolety a jeho měřič energie. Obě spínací zařízení a jejich měřiče energie nebudou reagovat.

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

Šablona obsahuje všech šest zařízení (2 spínače + 2 měřiče výkonu spínačů + 1 roleta + 1 měřič výkonu rolety), ale fungovat budou pouze zařízení odpovídající aktivnímu profilu. Toto je očekávané chování — zařízení na nesprávném profilu jednoduše nereagují.

Kalibrace krytu

Při použití profilu cover musí být před fungováním ovládání pozice nakalibrovány koncové polohy motoru. Dokud není kalibrace dokončena, current_pos vrací null a servisní atribut „Calibrated" zobrazuje false. Kalibrujte buď přes webové rozhraní Shelly, nebo spuštěním servisní akce Calibrate na zařízení Shutter v TapHome. Během kalibrace kryt provede vícestupňovou sekvenci (plné otevření → plné zavření → plné otevření → zavření po krocích → otevření po krocích) pro změření vzdáleností pohybu.

Možnosti zařízení

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

Šablona zpřístupňuje 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č zpřístupňuje sedm servisních atributů:

  • Source — zdroj posledního příkazu (http, UI, WS_in, atd.)
  • Temperature — vnitřní teplota zařízení v °C
  • Initial State — chování spínače při zapnutí napájení (off, on, restore_last nebo match_input)
  • Input Mode — režim zapojení fyzického vstupu (follow nebo detached)
  • Power Limit — maximální práh výkonu ve wattech pro ochranu před přetížením
  • Voltage Limit — maximální práh napětí ve voltech
  • Current Limit — maximální práh proudu v ampérech

Pro každý spínač jsou dostupné dvě servisní akce:

  • Set Initial State — konfiguruje chování relé po zapnutí napájení (off, on, restore_last, match_input)
  • Set Mode — konfiguruje režim zapojení fyzického vstupu (follow, detached)
Měření výkonu (profil switch)

Každý kanál spínače má vlastní měřič energie, který čte dvě hodnoty z /rpc/Switch.GetStatus:

  • Okamžitý výkonapower ve wattech, šablona konvertuje na kW
  • Celková spotřebaaenergy.total ve watthodinách, šablona konvertuje na kWh

Každý měřič energie zpřístupňuje také tři servisní atributy:

  • Voltage — napájecí napětí ve voltech
  • Current — proud zátěže v ampérech
  • Power Factor — účiník zátěže

Měřiče jsou pouze ke čtení — aktualizují se automaticky s každým cyklem dotazování.

Ovládání rolety (profil cover)

Zařízení rolety ovládá motorizovanou roletu, závěs nebo markýzu. Pozici čte z /rpc/Cover.GetStatus?id=0 (pole current_pos, 0–100 %) a zapisuje přes /rpc/Cover.GoToPosition?id=0&pos=N.

Zařízení rolety zpřístupňuje 21 servisních atributů:

  • Stav — zdroj, stav (open/closed/opening/closing/stopped/calibrating), aktuální a cílová pozice, časový limit pohybu a čas spuštění
  • Kalibrace — zda je ovládání pozice zapnuto (pos_control)
  • Teplota — vnitřní teplota zařízení v °C
  • Chování při zapnutí — konfigurace počátečního stavu (open, closed, stopped)
  • Nastavení vstupu — režim vstupu (single, dual, detached), výměna vstupů, invertování směrů
  • Ochranné limity — limit výkonu (W), limit napětí (V), limit proudu (A)
  • Nastavení motoru — práh výkonu v klidu (0–50 W), potvrzovací období klidu (0,25–2 s)
  • Limity pohybu — maximální čas otevření (0,1–300 s), maximální čas zavření (0,1–300 s)
  • Bezpečnostní funkce — stav detekce překážky, stav bezpečnostního spínače

Pro roletu je dostupných šest servisních akcí:

  • Open — úplně otevře kryt
  • Close — úplně zavře kryt
  • Stop — okamžitě zastaví pohyb
  • Calibrate — spustí kalibrační postup pro ovládání pozice
  • Go to Position — přesune kryt na konkrétní pozici (0–100 %)
  • Reverse directions — přepne konfiguraci invert_directions a restartuje zařízení
Měření výkonu (profil cover)

Roleta má vlastní měřič energie, který čte z /rpc/Cover.GetStatus:

  • Okamžitý výkonapower ve wattech, šablona konvertuje na kW
  • Celková spotřebaaenergy.total ve watthodinách, šablona konvertuje na kWh

Měřič energie rolety zpřístupňuje také napětí, proud a účiník jako servisní atributy.

Servisní diagnostika

Šablona zpřístupňuje dva servisní atributy na úrovni modulu:

  • MAC — MAC adresa zařízení ze systémové konfigurace
  • Profile — aktuálně aktivní profil zařízení (switch nebo cover)

Čtecí skript modulu kontroluje také restart_required z /rpc/Sys.GetStatus a zobrazí upozornění v TapHome, pokud je potřeba restart.

Servisní akce

Na úrovni modulu jsou dostupné dvě servisní akce:

  • Reboot — spustí restart zařízení přes /rpc/Shelly.Reboot
  • Profile — přepne mezi provozními profily switch a cover přes /rpc/Shelly.SetProfile
Další možnosti

Shelly Plus 2PM také zpřístupňuje síťovou frekvenci (freq), minutové hodnoty energie (aenergy.by_minute), stavy fyzických vstupů (input:0, input:1), sílu Wi-Fi signálu (RSSI) a koncový bod přepínání spínače ve svých RPC odpovědích. Počítadla energie lze resetovat přes /rpc/Switch.ResetCounters (profil switch) nebo /rpc/Cover.ResetCounters (profil cover). V režimu cover je pozice lamel/natočení pro benátské žaluzie dostupná, pokud to hardware podporuje. Tyto možnosti mohou být doplně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 (shellyplus2pm-AABBCCDDEE.local) místo IP adresy — IP se mohla změnit po obnovení DHCP
  3. Otevřete http://{ip-zarizeni}/rpc/Shelly.GetDeviceInfo v prohlížeči — pokud odpoví JSON, zařízení je dostupné
  4. Zkontrolujte, že TapHome Core a Shelly jsou ve stejné síti / VLAN
  5. Ujistěte se, že autentifikace je na zařízení Shelly vypnutá
Nesoulad profilu — zařízení nereagují

Pokud některá zařízení neukazují žádné údaje, zatímco jiná fungují správně:

  1. Zkontrolujte, který profil je aktuálně aktivní — servisní atribut „Profile" na úrovni modulu zobrazuje aktuální režim
  2. Přepněte na správný profil pomocí servisní akce Profile nebo ignorujte nepoužívaná zařízení
  3. Po přepnutí profilu se zařízení automaticky restartuje — vyčkejte několik sekund na opětovné připojení
Pozice krytu nefunguje
  1. Ověřte, že zařízení je v profilu cover — profil switch nezpřístupňuje funkce krytu
  2. Spusťte servisní akci Calibrate na zařízení Shutter — ovládání pozice vyžaduje dokončenou kalibraci
  3. Zkontrolujte, že motor je správně připojen na svorky O1 a O2
  4. Manuálně zavolejte /rpc/Cover.GetStatus?id=0 a ověřte, že pos_control je true
Kalibrace krytu selže

Kalibrace se přeruší, pokud:

  • Kryt nedosáhne koncové polohy v rámci maxtime_open nebo maxtime_close
  • Během kalibrace se aktivuje bezpečnostní funkce (detekce překážky nebo bezpečnostní spínač)
  • Během kalibrace je vydán externí příkaz k zastavení
  • Směr motoru neodpovídá očekávané zpětné vazbě
  • Zařízení se během kalibrace restartuje

Zkontrolujte zapojení motoru, zvyšte maxtime_open/maxtime_close pokud je motor pomalý a ujistěte se, že nejsou přítomné žádné překážky.

Hodnoty výkonu ukazují nulu
  1. Potvrďte, že zátěž je připojena přes relé Shelly (ne obejitá)
  2. Zkontrolujte, že relé je zapnuté — měřič měří pouze když přes relé protéká proud
  3. Manuálně zavolejte /rpc/Switch.GetStatus?id=0 (profil switch) nebo /rpc/Cover.GetStatus?id=0 (profil cover) a ověřte, že apower vrací nenulovou hodnotu

Zařízení Shelly Gen2+ podporují až 6 současných HTTP připojení. I když je to zlepšení oproti Gen1 (2 připojení), vyhněte se současnému dotazování z příliš mnoha systémů (TapHome, Home Assistant, vlastní skripty), abyste zabránili vyčerpání 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 Plus 2PM Modul
Servisní atributy
MACMAC adresa zařízení ze systémové konfigurace
ProfilAktivní profil zařízení — switch nebo cover
Servisní akce
RestartRestartuje zařízení
ProfilPřepnutí mezi profily switch a cover — vyžaduje restart zařízení
Vlastní proměnné

Shelly Plus 2 PM

Čtení (modul)
VAR response := SENDHTTPREQUEST("/rpc/Sys.GetConfig");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  SysConfig := response.Content;
END;
 
response := SENDHTTPREQUEST("/rpc/Sys.GetStatus");
IF response.IsSuccess
  content := response.Content;
  responseHeaders := response.Headers;
  if(PARSEJSON(response.Content, "$.restart_required") = true, ADDERROR("Restart required"));
END
Servisní atributy
MAC
PARSEJSON(SysConfig, "$.device.mac");
Profile
PARSEJSON(SysConfig, "$.device.profile");
Servisní akce
Reboot
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
Profile
Parametry: Profile
var profile := SWITCH(pr, 1, "cover", "switch");
VAR response := SENDHTTPREQUEST("/rpc/Shelly.SetProfile?name=\""+profile+"\"");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
Měřič výkonu (Roleta) Elektroměr Pouze ke čtení

Měření energie v režimu cover — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json_path
Servisní atributy
NapětíNapájecí napětí ve Voltech
ProudProud zátěže v Ampérech
ÚčiníkÚčiník zátěže

Měřič výkonu (Roleta)

Čtení celkové spotřeby
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    return(PARSEJSON(CoverStatus, "$.aenergy.total") / 1000);
end
Čtení odběru
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    return(PARSEJSON(CoverStatus, "$.apower", true) / 1000);
end
Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        CoverStatus := response.Content;
    END
end
Servisní atributy
Voltage [V]
PARSEJSON(CoverStatus, "$.voltage", true);
Current [A]
PARSEJSON(CoverStatus, "$.current", true);
Power Factor
PARSEJSON(CoverStatus, "$.pf", true);
Měřič výkonu (Spínač 1) Elektroměr Pouze ke čtení

Měření energie pro kanál spínače 1 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json_path
Servisní atributy
NapětíNapájecí napětí ve Voltech
ProudProud zátěže v Ampérech
ÚčiníkÚčiník zátěže

Měřič výkonu (Spínač 1)

Čtení celkové spotřeby
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Čtení odběru
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
end
Servisní atributy
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Měřič výkonu (Spínač 2) Elektroměr Pouze ke čtení

Měření energie pro kanál spínače 2 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh json_path
Servisní atributy
NapětíNapájecí napětí ve Voltech
ProudProud zátěže v Ampérech
ÚčiníkÚčiník zátěže

Měřič výkonu (Spínač 2)

Čtení celkové spotřeby
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Čtení odběru
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
end
Servisní atributy
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Roleta Posuvný

Motorizované ovládání rolety se sledováním polohy — vyžaduje kalibraci pro ovládání polohy

numeric Jednotka: % json_path
Servisní atributy
ZdrojZdroj posledního příkazu rolety
StavAktuální stav rolety — open, closed, opening, closing, stopped, calibrating
Aktuální polohaAktuální poloha rolety v procentech (0–100), null pokud není kalibrována
Cílová polohaCílová poloha během pohybu rolety
Časový limit pohybuSekundy do automatického zastavení během pohybu
Pohyb začal vČasová značka začátku aktuálního pohybu
KalibrovanýZda je ovládání polohy povoleno (true po úspěšné kalibraci)
TeplotaVnitřní teplota zařízení ve stupních Celsia
Počáteční stavChování rolety po zapnutí — open, closed nebo stopped
Režim vstupuRežim zapojení fyzického vstupu — single, dual nebo detached
Limit výkonuMaximální práh výkonu ve Wattech pro ochranu proti přetížení
Limit napětíMaximální práh napětí ve Voltech pro ochranu proti přepětí
Limit prouduMaximální práh proudu v Ampérech pro ochranu proti nadproudu
Práh nečinnosti motoruPráh výkonu, pod kterým se motor považuje za nečinný (0–50 W)
Potvrzení nečinnosti motoruDoba, po kterou musí motor zůstat pod prahem nečinnosti pro potvrzení zastavení (0,25–2 s)
Maximální čas otevřeníMaximální čas otevření před automatickým zastavením (0,1–300 s)
Maximální čas zavřeníMaximální čas zavření před automatickým zastavením (0,1–300 s)
Prohodit vstupyZda je přiřazení vstupů S1/S2 prohozeno
Invertovat směryZda jsou směry otevření/zavření invertovány
Detekce překážkyZda je detekce překážky povolena
Bezpečnostní spínačZda je funkce bezpečnostního spínače povolena
Servisní akce
OtevřítÚplně otevře roletu
ZavřítÚplně zavře roletu
ZastavitOkamžitě zastaví pohyb rolety
KalibrovatSpustí kalibraci rolety — vyžadována pro ovládání polohy
Přejít na poziciPřesune roletu na určenou polohu (0–100 %)
Obrátit směryPřepne konfiguraci invert_directions a restartuje zařízení

Roleta

Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        CoverStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Cover.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        CoverConfig := response.Content;
    END
end
Čtení úrovně žaluzie
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var response := SENDHTTPREQUEST("/rpc/Cover.GetStatus?id=" + Id);
    IF response.IsSuccess
        CoverStatus := response.Content;
    END
    if PARSEJSON(CoverStatus, "$.pos_control", true) = true
        var pos := -1;
        var curpos := PARSEJSON(CoverStatus, "$.current_pos", true);
        if ISNULL(curpos)
            adderror("Device lost its position. Open or close the cover completely to enable back position control.");
            return(0);
        end
        var target := PARSEJSON(CoverStatus, "$.target_pos", true);
        if(ISNULL(target), pos := curpos, pos := target);
        if PARSEJSON(CoverConfig, "$.invert_directions", true)
            return(linear(pos, 0, 0, 100, 1));
        else
            return(linear(pos, 0, 1, 100, 0));
        end
    else
        adderror("Device is not calibrated");
    end
end
Zápis úrovně žaluzie
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    var pos := 0;
    if PARSEJSON(CoverConfig, "$.invert_directions", true)
        pos := linear(Bl, 0, 0, 1, 100);
    else
        pos := linear(Bl, 0, 100, 1, 0);
    end
    VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=" + Id + "&pos=" + pos);
    IF response.IsSuccess
      VAR content := response.Content;
      Return("OK");
    else
      return(parsejson(response.Content,"$.message"));
    END
end
Servisní atributy
Source
PARSEJSON(CoverStatus, "$.source", true);
State
PARSEJSON(CoverStatus, "$.state", true);
Current Position
PARSEJSON(CoverStatus, "$.current_pos", true);
Target Position
PARSEJSON(CoverStatus, "$.target_pos", true);
Move Timeout
PARSEJSON(CoverStatus, "$.move_timeout", true);
Move Started at
PARSEJSON(CoverStatus, "$.move_started_at", true);
Calibrated
PARSEJSON(CoverStatus, "$.pos_control", true);
Temperature [°C]
PARSEJSON(CoverStatus, "$.temperature.tC", true);
Initial State
PARSEJSON(CoverConfig, "$.initial_state", true);
Input Mode
PARSEJSON(CoverConfig, "$.in_mode", true);
Power Limit [W]
PARSEJSON(CoverConfig, "$.power_limit", true);
Voltage Limit [V]
PARSEJSON(CoverConfig, "$.voltage_limit", true);
Current Limit [A]
PARSEJSON(CoverConfig, "$.current_limit", true);
Motor Idle Power Threshold [W]
PARSEJSON(CoverConfig, "$.motor.idle_power_thr", true);
Motor Idle Confirm Period [s]
PARSEJSON(CoverConfig, "$.motor.idle_confirm_period", true);
Max Time Open [s]
PARSEJSON(CoverConfig, "$.maxtime_open", true);
Max Time Close [s]
PARSEJSON(CoverConfig, "$.maxtime_close", true);
Swap Inputs
PARSEJSON(CoverConfig, "$.swap_inputs", true);
Invert Directions
PARSEJSON(CoverConfig, "$.invert_directions", true);
Obstruction Detection
PARSEJSON(CoverConfig, "$.obstruction_detection", true);
Safety Switch
PARSEJSON(CoverConfig, "$.safety_switch", true);
Servisní akce
Open
VAR response := SENDHTTPREQUEST("rpc/Cover.Open?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Close
VAR response := SENDHTTPREQUEST("rpc/Cover.Close?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Stop
VAR response := SENDHTTPREQUEST("rpc/Cover.Stop?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Calibrate
VAR response := SENDHTTPREQUEST("rpc/Cover.Calibrate?id=" + Id );
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Go to Position
Parametry: Position (0–100 pos)
VAR response := SENDHTTPREQUEST("rpc/Cover.GoToPosition?id=" + Id + "&pos=" + pos);
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Reverse directions
var reverse := "false";
if(PARSEJSON(CoverConfig, "$.invert_directions"), reverse := "false", reverse := "true");
VAR response := SENDHTTPREQUEST("rpc/Cover.SetConfig?id=0&config={\"invert_directions\":" + reverse + "}");
IF response.IsSuccess
  SENDHTTPREQUEST("rpc/Shelly.Reboot");
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Spínač 1 Přepínač

Reléový výstup kanál 1 — ovládání zapnutí/vypnutí s konfigurací chování po zapnutí a režimu vstupu

boolean json_path
Hodnoty / Stavy: ON · OFF
Servisní akce
Nastavit počáteční stavKonfiguruje chování spínače po zapnutí
Nastavit režimKonfiguruje režim zapojení fyzického vstupu

Spínač 1

Čtení stavu přepínače
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Zápis stavu přepínače
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + Id + "&on=" + if(St,"true","false"));
    IF response.IsSuccess = false
      ADDERROR(response.StatusCode);
    END
end
Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        SwitchConfig := response.Content;
    END
end
Servisní atributy
Source
PARSEJSON(SwitchStatus, "$.source", true);
Temprature [°C]
PARSEJSON(SwitchStatus, "$.temperature.tC", true);
Initial State
PARSEJSON(SwitchConfig, "$.initial_state", true);
Input Mode
PARSEJSON(SwitchConfig, "$.in_mode", true);
Power Limit [W]
PARSEJSON(SwitchConfig, "$.power_limit", true);
Voltage Limit [V]
PARSEJSON(SwitchConfig, "$.voltage_limit", true);
Current Limit [A]
PARSEJSON(SwitchConfig, "$.current_limit", true);
Servisní akce
Set Initial State
Parametry: Mode
var mode := SWITCH(md, 1, "on", 2, "restore_last", 3, "match_input", "off");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"initial_state\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Set Mode
Parametry: Mode
var mode := SWITCH(md, 1, "detached", "follow");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"in_mode\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Spínač 2 Přepínač

Reléový výstup kanál 2 — ovládání zapnutí/vypnutí s konfigurací chování po zapnutí a režimu vstupu

boolean json_path
Hodnoty / Stavy: ON · OFF
Servisní akce
Nastavit počáteční stavKonfiguruje chování spínače po zapnutí
Nastavit režimKonfiguruje režim zapojení fyzického vstupu

Spínač 2

Čtení stavu přepínače
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Zápis stavu přepínače
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    VAR response := SENDHTTPREQUEST("rpc/Switch.Set?id=" + Id + "&on=" + if(St,"true","false"));
    IF response.IsSuccess = false
      ADDERROR(response.StatusCode);
    END
end
Čtení (modul)
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    var response := SENDHTTPREQUEST("/rpc/Switch.GetStatus?id=" + Id);
    IF response.IsSuccess
        VAR content := response.Content;
        VAR responseHeaders := response.Headers;
        SwitchStatus := response.Content;
    END
    
    response := SENDHTTPREQUEST("/rpc/Switch.GetConfig?id=" + Id);
    IF response.IsSuccess
        content := response.Content;
        responseHeaders := response.Headers;
        SwitchConfig := response.Content;
    END
end
Servisní atributy
Source
PARSEJSON(SwitchStatus, "$.source", true);
Temprature [°C]
PARSEJSON(SwitchStatus, "$.temperature.tC", true);
Initial State
PARSEJSON(SwitchConfig, "$.initial_state", true);
Input Mode
PARSEJSON(SwitchConfig, "$.in_mode", true);
Power Limit [W]
PARSEJSON(SwitchConfig, "$.power_limit", true);
Voltage Limit [V]
PARSEJSON(SwitchConfig, "$.voltage_limit", true);
Current Limit [A]
PARSEJSON(SwitchConfig, "$.current_limit", true);
Servisní akce
Set Initial State
Parametry: Mode
var mode := SWITCH(md, 1, "on", 2, "restore_last", 3, "match_input", "off");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"initial_state\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Set Mode
Parametry: Mode
var mode := SWITCH(md, 1, "detached", "follow");
VAR response := SENDHTTPREQUEST("rpc/Switch.SetConfig?id=" + Id +"&config={\"in_mode\":\""+mode+"\"}");
IF response.IsSuccess
  VAR content := response.Content;
  Return("OK");
else
  return(parsejson(response.Content,"$.message"));
END;
Připojení: Packet Parser → HTTP
Možná vylepšení (8)
  • Frequency — Network frequency in Hz, available in both Switch and Cover status responses
  • Energy per Minute — Last 3 minute energy values in Wh, available but not exposed as separate device
  • Input 1 State — Physical input state (input:0), available in both profiles
  • Input 2 State — Physical input state (input:1), available in both profiles
  • Switch Toggle — Toggle switch without knowing current state — could be added as service action
  • Reset Energy Counters — Resets energy measurement counters — could be added as service action
  • Slat Position — Slat/tilt position for venetian blinds, if hardware supports it
  • WiFi Signal Strength — RSSI in dBm, available via WiFi component

Zdroje