TapHome

Shelly Plus 2PM

Packet Parser → HTTP
Autor
Posljednje ažuriranje: 10. 2026

Ovaj uređaj podržava mDNS

Umjesto IP adrese uređaju možete pristupiti na adresi:

shellyplus2pm-{MAC}.local

Zamijenite {MAC} MAC adresom svog uređaja (velika slova, bez dvotočaka).

TapHome podržava mDNS. Naziv računala (hostname) pouzdaniji je od statične IP adrese.

Shelly Plus 2PM

Shelly Plus 2PM je kompaktni dvokanalni Wi-Fi relej s ugrađenim mjerenjem snage na oba kanala. Stane iza standardnog zidnog prekidača i može upravljati dvama neovisnim strujnim krugovima do 10 A svaki (ukupno 16 A pri 230 V AC) ili pogoniti jednu motoriziranu roletu. TapHome s uređajem komunicira preko HTTP-a pomoću Gen2+ RPC API-ja u lokalnoj mreži, pa veza s oblakom nije potrebna.

Uređaj podržava dva profila rada, switch i cover, koji se biraju u web-sučelju Shelly ili servisnom radnjom u sustavu TapHome. U profilu switch oba relejna izlaza (O1 i O2) rade neovisno, uz mjerenje snage na svakom kanalu. U profilu cover oba izlaza pogone jedan motor za rolete, žaluzine ili zavjese, s upravljanjem položajem i kalibracijom.

Shelly Plus 2PM više se ne proizvodi. Njegov nasljednik, Shelly 2PM Gen3, nudi iste funkcije s dva profila, uz snažniji procesor (8 MB flash memorije), do 6 istodobnih HTTP veza i mogućnost nadogradnje na Matter.

Konfiguracija

Shelly Plus 2PM spaja se preko Wi-Fi mreže. Pri uvozu predloška u TapHome unesite IP adresu uređaja (u predlošku je unaprijed upisan primjer 192.168.0.1).

Za integraciju sa sustavom TapHome autentifikacija na uređaju Shelly mora biti isključena. TapHome ne podržava HTTP Digest Auth koju koriste uređaji Gen2+. Otvorite web-sučelje Shelly (http://{device-ip}) → Settings → Authentication i provjerite je li isključena.

Ako je na uređaju Shelly uključen način ECO, zbog kratkih intervala očitavanja u predlošku (2,5–5 sekundi) može doći do isteka vremena komunikacije. Ako se veza povremeno prekida, isključite način ECO u web-sučelju Shelly.

Odabir profila

Shelly Plus 2PM u jednom trenutku radi u jednom od dva profila. Aktivni profil određuje koji uređaji u sustavu TapHome rade:

  • Profil switch — uključuje obje relejne sklopke (Sklopka 1 i Sklopka 2) i njihove mjerače snage po kanalu. Roleta i mjerač snage rolete neće odgovarati.
  • Profil cover — uključuje roletu i njezin mjerač snage. Obje sklopke i njihovi mjerači snage neće odgovarati.

Aktivni profil vidljiv je u sustavu TapHome kao servisni atribut modula („Profil”). Profil promijenite servisnom radnjom Profil na razini modula ili u web-sučelju Shelly. Nakon promjene profila uređaj se ponovno pokreće i rade samo uređaji koji odgovaraju novom profilu.

Predložak sadrži svih šest uređaja (2 sklopke + 2 mjerača energije sklopki + 1 roleta + 1 mjerač energije rolete), ali rade samo uređaji koji odgovaraju aktivnom profilu. To je očekivano ponašanje: uređaji u pogrešnom profilu jednostavno ne odgovaraju.

Kalibracija rolete

Kod profila cover krajnji položaji motora moraju se kalibrirati prije nego što upravljanje položajem počne raditi. Dok kalibracija nije završena, current_pos vraća null, a servisni atribut „Kalibrirano” prikazuje false. Kalibrirajte u web-sučelju Shelly ili servisnom radnjom Kalibriraj na uređaju Roleta u sustavu TapHome. Tijekom kalibracije roleta prolazi slijed od više koraka (potpuno otvaranje → potpuno zatvaranje → potpuno otvaranje → zatvaranje u koracima → otvaranje u koracima) kako bi se izmjerile duljine hoda.

Mogućnosti uređaja

Upravljanje relejem (profil switch)

Predložak daje dvije neovisne relejne sklopke. Svaka sklopka čita stanje iz /rpc/Switch.GetStatus?id={0,1} (polje output, logička vrijednost) i upravlja relejem preko /rpc/Switch.Set?id={0,1}&on=true|false.

Svaka sklopka ima sedam servisnih atributa:

  • Izvor — izvor posljednje naredbe (http, UI, WS_in itd.)
  • Temperatura — unutarnja temperatura uređaja u °C
  • Početno stanje — ponašanje sklopke pri uključivanju napajanja (off, on, restore_last ili match_input)
  • Način rada ulaza — način spajanja fizičkog ulaza (follow ili detached)
  • Ograničenje snage — najveći prag snage u vatima za zaštitu od prekoračenja snage
  • Ograničenje napona — najveći prag napona u voltima
  • Ograničenje struje — najveći prag struje u amperima

Na svakoj sklopki dostupne su dvije servisne radnje:

  • Postavi početno stanje — postavlja ponašanje releja nakon uključivanja napajanja (off, on, restore_last, match_input)
  • Postavi način rada — postavlja način spajanja fizičkog ulaza (follow, detached)
Mjerenje snage (profil switch)

Svaki kanal sklopke ima vlastiti mjerač snage koji čita dvije vrijednosti iz /rpc/Switch.GetStatus:

  • Trenutačna snaga — apower u vatima, predložak je pretvara u kW
  • Ukupna potrošnja — aenergy.total u vatsatima, predložak je pretvara u kWh

Svaki mjerač snage ima i tri servisna atributa:

  • Napon — napon napajanja u voltima
  • Struja — struja trošila u amperima
  • Faktor snage — faktor snage trošila

Mjerači su samo za čitanje i automatski se osvježavaju pri svakom ciklusu očitavanja.

Upravljanje roletom (profil cover)

Uređaj Roleta upravlja motoriziranom roletom, zavjesom ili tendom. Položaj čita iz /rpc/Cover.GetStatus?id=0 (polje current_pos, 0–100 %), a upisuje ga preko /rpc/Cover.GoToPosition?id=0&pos=N.

Roleta ima 21 servisni atribut:

  • Stanje — izvor, stanje (open/closed/opening/closing/stopped/calibrating), trenutačni i ciljni položaj, vremensko ograničenje i vrijeme početka kretanja
  • Kalibrirano — je li upravljanje položajem omogućeno (pos_control)
  • Temperatura — unutarnja temperatura uređaja u °C
  • Ponašanje pri uključivanju napajanja — postavka početnog stanja (open, closed, stopped)
  • Postavke ulaza — način rada ulaza (single, dual, detached), zamjena ulaza, obrnuti smjerovi
  • Zaštitna ograničenja — ograničenje snage (W), ograničenje napona (V), ograničenje struje (A)
  • Podešavanje motora — prag snage mirovanja (0–50 W), vrijeme potvrde mirovanja (0,25–2 s)
  • Ograničenja kretanja — najdulje vrijeme otvaranja (0,1–300 s), najdulje vrijeme zatvaranja (0,1–300 s)
  • Sigurnosne funkcije — stanje prepoznavanja prepreke, stanje sigurnosnog prekidača

Na roleti je dostupno šest servisnih radnji:

  • Otvori — potpuno otvara roletu
  • Zatvori — potpuno zatvara roletu
  • Zaustavi — odmah zaustavlja kretanje
  • Kalibriraj — pokreće postupak kalibracije za upravljanje položajem
  • Idi na položaj — pomiče roletu na određeni položaj (0–100 %)
  • Obrni smjerove — prebacuje postavku invert_directions na suprotnu vrijednost i ponovno pokreće uređaj
Mjerenje snage (profil cover)

Roleta ima vlastiti mjerač snage koji čita iz /rpc/Cover.GetStatus:

  • Trenutačna snaga — apower u vatima, predložak je pretvara u kW
  • Ukupna potrošnja — aenergy.total u vatsatima, predložak je pretvara u kWh

Mjerač snage rolete kao servisne atribute daje i napon, struju i faktor snage.

Servisna dijagnostika

Predložak na razini modula daje dva servisna atributa:

  • MAC — MAC adresa uređaja iz konfiguracije sustava
  • Profil — trenutačno aktivan profil uređaja (switch ili cover)

Skripta za čitanje modula provjerava i restart_required iz /rpc/Sys.GetStatus i, ako je potrebno ponovno pokretanje, prikazuje upozorenje u sustavu TapHome.

Servisne radnje

Na razini modula dostupne su dvije servisne radnje:

  • Ponovno pokretanje — ponovno pokreće uređaj preko /rpc/Shelly.Reboot
  • Profil — prebacuje uređaj između profila rada switch i cover preko /rpc/Shelly.SetProfile
Dodatne mogućnosti

Shelly Plus 2PM u svojim RPC odgovorima daje i frekvenciju mreže (freq), vrijednosti energije po minuti (aenergy.by_minute), stanja fizičkih ulaza (input:0, input:1), jačinu Wi-Fi signala (RSSI) i krajnju točku za prebacivanje sklopke. Brojači energije mogu se poništiti preko /rpc/Switch.ResetCounters (profil switch) ili /rpc/Cover.ResetCounters (profil cover). U načinu rada cover dostupan je i položaj (nagib) lamela za vanjske žaluzine, ako ga hardver podržava. Te se mogućnosti mogu dodati u budućem ažuriranju predloška.

Rješavanje problema

Uređaj ne odgovara
  1. Provjerite je li Shelly spojen na Wi-Fi i ima li valjanu IP adresu
  2. Umjesto IP adrese pokušajte koristiti mDNS naziv hosta (shellyplus2pm-AABBCCDDEE.local): IP adresa se možda promijenila nakon obnove DHCP zakupa
  3. U pregledniku otvorite http://{device-ip}/rpc/Shelly.GetDeviceInfo: ako odgovori u obliku JSON, uređaj je dostupan
  4. Provjerite jesu li TapHome Core i Shelly u istoj mreži / VLAN-u
  5. Provjerite je li autentifikacija na uređaju Shelly isključena
Neusklađen profil — uređaji ne odgovaraju

Ako neki uređaji ne prikazuju očitanja, a drugi rade ispravno:

  1. Provjerite koji je profil trenutačno aktivan: servisni atribut „Profil” na razini modula prikazuje trenutačni način rada
  2. Prebacite na ispravan profil servisnom radnjom Profil ili zanemarite nekorištene uređaje
  3. Nakon promjene profila uređaj se automatski ponovno pokreće, pa pričekajte nekoliko sekundi da se veza ponovno uspostavi
Upravljanje položajem rolete ne radi
  1. Provjerite je li uređaj u profilu cover: profil switch ne nudi funkcije rolete
  2. Pokrenite servisnu radnju Kalibriraj na uređaju Roleta: upravljanje položajem zahtijeva završenu kalibraciju
  3. Provjerite je li motor ispravno spojen na stezaljke O1 i O2
  4. Ručno pošaljite upit /rpc/Cover.GetStatus?id=0 i provjerite je li pos_control true
Kalibracija rolete ne uspijeva

Kalibracija se prekida ako:

  • roleta ne dosegne krajnji položaj unutar maxtime_open ili maxtime_close
  • se tijekom kalibracije aktivira sigurnosna funkcija (prepoznavanje prepreke ili sigurnosni prekidač)
  • se tijekom kalibracije pošalje vanjska naredba za zaustavljanje
  • smjer motora ne odgovara očekivanoj povratnoj informaciji
  • se uređaj tijekom kalibracije ponovno pokrene

Provjerite spajanje motora, povećajte maxtime_open/maxtime_close ako je motor spor i provjerite da nema prepreka.

Očitanje snage je nula
  1. Provjerite je li trošilo spojeno preko releja Shelly (a ne premošteno)
  2. Provjerite je li relej uključen: brojilo mjeri samo kada struja teče kroz relej
  3. Ručno pošaljite upit /rpc/Switch.GetStatus?id=0 (profil switch) ili /rpc/Cover.GetStatus?id=0 (profil cover) i provjerite vraća li apower vrijednost različitu od nule

Uređaji Shelly Gen2+ podržavaju do 6 istodobnih HTTP veza. Iako je to poboljšanje u odnosu na Gen1 (2 veze), izbjegavajte očitavanje iz previše sustava istodobno (TapHome, Home Assistant, vlastite skripte) kako se ne bi potrošile sve dostupne veze.

Kako ga instalirati u TapHome

Preduvjeti

  • Uređaj Shelly ugrađen i uključen
  • Lokalna Wi-Fi mreža (2,4 GHz)
  • TapHome CCU u istoj mreži

Korak 1 — Spojite Shelly na Wi-Fi

Opcija A — aplikacija Shelly (preporučeno):

  1. Preuzmite aplikaciju Shelly (iOS / Android)
  2. Dodirnite + → Add Device i slijedite čarobnjak za uparivanje preko Bluetootha
  3. Kada se to zatraži, unesite podatke za prijavu na Wi-Fi

Opcija B — način rada AP (bez aplikacije):

  1. Pri prvom uključivanju uređaj stvara pristupnu točku: ShellyXXX-AABBCCDDEE
  2. Spojite telefon ili računalo na tu pristupnu točku
  3. Otvorite http://192.168.33.1 → Internet & Security → Wi-Fi Mode - Client
  4. Unesite SSID i lozinku → Save

Shelly podržava samo mreže od 2,4 GHz. Mreže od 5 GHz neće se prikazati pri skeniranju.

Korak 2 — Pronađite adresu uređaja

Uređaji Shelly Gen1 podržavaju mDNS (Zeroconf). Uređaju možete pristupiti preko naziva hosta umjesto IP adrese:

1
shelly<model>-<MAC>.local

Na primjer: shelly1pm-AABBCCDDEE.local (MAC adresa velikim slovima u heksadecimalnom zapisu, bez dvotočaka).

Preporučeno: koristite IP skener TapHome. Otvorite aplikaciju TapHome i pokrenite IP skener (Postavke → Mreža → Skeniranje). Skener pronalazi uređaje u vašoj mreži i prikazuje IP adresu i mDNS naziv hosta. Za pouzdaniju vezu koristite naziv hosta umjesto IP adrese, jer ostaje isti i kada se IP adresa uređaja promijeni nakon ponovnog pokretanja usmjerivača.

Drugi načini za pronalaženje IP adrese:

  • Aplikacija Shelly: detalji uređaja → Device info → IP adresa
  • Web-sučelje Shelly: spojite se na AP uređaja prije postavljanja Wi-Fi mreže — IP adresa prikazuje se nakon spremanja
  • DHCP tablica usmjerivača: potražite naziv hosta poput shelly1pm-AABBCCDDEE

Korak 3 — Konfiguracija u sustavu TapHome

  1. U sustavu TapHome dodajte novi modul Packet Parser (HTTP)
  2. Adresa: unesite mDNS naziv hosta (npr. shelly1pm-AABBCCDDEE.local) ili IP adresu iz koraka 2
  3. Port: 80 (zadano, nije potrebno mijenjati)
  4. Uvezite predložak — TapHome će čitati /status kako bi očitao stanje uređaja

HTTP autentifikacija na uređajima Shelly zadano je isključena. Ako ste uključili zaštitu prijavom, TapHome trenutačno ne podržava HTTP Basic Auth — za integraciju sa sustavom TapHome ostavite autentifikaciju isključenom.

Dostupni uređaji

Shelly Plus 2PM Modul
Servisni atributi
MACMAC adresa uređaja iz konfiguracije sustava
ProfilAktivni profil uređaja — switch ili cover
Servisne radnje
Ponovno pokretanjePonovno pokreće uređaj
ProfilPrebacuje uređaj između profila rada switch i cover — zahtijeva ponovno pokretanje uređaja
Prilagođene varijable

Shelly Plus 2 PM

Čitanje (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
Servisni atributi
MAC
PARSEJSON(SysConfig, "$.device.mac");
Profile
PARSEJSON(SysConfig, "$.device.profile");
Servisne radnje
Reboot
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
Profile
Parametri: 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;
Mjerač snage (Roleta) Brojilo električne energije Samo za čitanje

Mjerenje energije u profilu cover — trenutačna snaga (kW) i ukupna energija (kWh)

numeric Jedinica: kW / kWh json_path
Servisni atributi
NaponNapon napajanja u voltima
StrujaStruja trošila u amperima
Faktor snageFaktor snage trošila

Mjerač snage (Roleta)

Čitanje ukupne potrošnje
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    return(PARSEJSON(CoverStatus, "$.aenergy.total") / 1000);
end
Čitanje zahtjeva
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    return(PARSEJSON(CoverStatus, "$.apower", true) / 1000);
end
Čitanje (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
Servisni atributi
Voltage [V]
PARSEJSON(CoverStatus, "$.voltage", true);
Current [A]
PARSEJSON(CoverStatus, "$.current", true);
Power Factor
PARSEJSON(CoverStatus, "$.pf", true);
Mjerač snage (Sklopka 1) Brojilo električne energije Samo za čitanje

Mjerenje energije za kanal sklopke 1 — trenutačna snaga (kW) i ukupna energija (kWh)

numeric Jedinica: kW / kWh json_path
Servisni atributi
NaponNapon napajanja u voltima
StrujaStruja trošila u amperima
Faktor snageFaktor snage trošila

Mjerač snage (Sklopka 1)

Čitanje ukupne potrošnje
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Čitanje zahtjeva
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Čitanje (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
Servisni atributi
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Mjerač snage (Sklopka 2) Brojilo električne energije Samo za čitanje

Mjerenje energije za kanal sklopke 2 — trenutačna snaga (kW) i ukupna energija (kWh)

numeric Jedinica: kW / kWh json_path
Servisni atributi
NaponNapon napajanja u voltima
StrujaStruja trošila u amperima
Faktor snageFaktor snage trošila

Mjerač snage (Sklopka 2)

Čitanje ukupne potrošnje
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Čitanje zahtjeva
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Čitanje (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
Servisni atributi
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Roleta Roleta

Upravljanje motoriziranom roletom s praćenjem položaja — upravljanje položajem zahtijeva kalibraciju

numeric Jedinica: % json_path
Servisni atributi
IzvorIzvor posljednje naredbe za roletu
StanjeTrenutačno stanje rolete — open, closed, opening, closing, stopped, calibrating
Trenutačni položajTrenutačni položaj rolete u postocima (0–100), null ako roleta nije kalibrirana
Ciljni položajCiljni položaj dok se roleta kreće
Vremensko ograničenje kretanjaBroj sekundi do automatskog zaustavljanja tijekom kretanja
Početak kretanjaVremenska oznaka početka trenutačnog kretanja
KalibriranoJe li upravljanje položajem omogućeno (true nakon uspješne kalibracije)
TemperaturaUnutarnja temperatura uređaja u Celzijevim stupnjevima
Početno stanjePonašanje rolete pri uključivanju napajanja — open, closed ili stopped
Način rada ulazaNačin spajanja fizičkih ulaza — single, dual ili detached
Ograničenje snageNajveći prag snage u vatima za zaštitu od prekoračenja snage
Ograničenje naponaNajveći prag napona u voltima za zaštitu od prenapona
Ograničenje strujeNajveći prag struje u amperima za nadstrujnu zaštitu
Prag snage mirovanja motoraPrag snage ispod kojeg se smatra da motor miruje (0–50 W)
Vrijeme potvrde mirovanja motoraKoliko dugo motor mora ostati ispod praga mirovanja da bi se potvrdilo zaustavljanje (0,25–2 s)
Najdulje vrijeme otvaranjaNajdulje vrijeme otvaranja prije automatskog zaustavljanja (0,1–300 s)
Najdulje vrijeme zatvaranjaNajdulje vrijeme zatvaranja prije automatskog zaustavljanja (0,1–300 s)
Zamjena ulazaJe li zamijenjena dodjela ulaza S1 i S2
Obrnuti smjeroviJesu li smjerovi otvaranja i zatvaranja obrnuti
Prepoznavanje preprekeJe li prepoznavanje prepreke omogućeno
Sigurnosni prekidačJe li funkcija sigurnosnog prekidača omogućena
Servisne radnje
OtvoriPotpuno otvara roletu
ZatvoriPotpuno zatvara roletu
ZaustaviOdmah zaustavlja kretanje rolete
KalibrirajPokreće kalibraciju rolete — potrebna za upravljanje položajem
Idi na položajPomiče roletu na određeni položaj (0–100 %)
Obrni smjerovePrebacuje postavku invert_directions na suprotnu vrijednost i ponovno pokreće uređaj

Roleta

Čitanje (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
Čitanje položaja žaluzine
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
Zapis položaja žaluzine
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
Servisni atributi
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);
Servisne radnje
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
Parametri: 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;
Sklopka 1 Sklopka

Relejni izlaz kanala 1 — uključivanje i isključivanje s postavkom ponašanja pri uključivanju napajanja i načina rada ulaza

boolean json_path
Vrijednosti / stanja: ON · OFF
Servisne radnje
Postavi početno stanjePostavlja ponašanje sklopke pri uključivanju napajanja
Postavi način radaPostavlja način spajanja fizičkog ulaza

Sklopka 1

Čitanje stanja sklopke
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Zapis stanja sklopke
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
Čitanje (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
Servisni atributi
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);
Servisne radnje
Set Initial State
Parametri: 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
Parametri: 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;
Sklopka 2 Sklopka

Relejni izlaz kanala 2 — uključivanje i isključivanje s postavkom ponašanja pri uključivanju napajanja i načina rada ulaza

boolean json_path
Vrijednosti / stanja: ON · OFF
Servisne radnje
Postavi početno stanjePostavlja ponašanje sklopke pri uključivanju napajanja
Postavi način radaPostavlja način spajanja fizičkog ulaza

Sklopka 2

Čitanje stanja sklopke
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Zapis stanja sklopke
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
Čitanje (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
Servisni atributi
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);
Servisne radnje
Set Initial State
Parametri: 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
Parametri: 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;
Povezivanje: Packet Parser → HTTP • Naziv računala (hostname): shellyplus2pm-{MAC}.local
Moguća poboljšanja (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

Izvori

Pronašli ste problem s ovim predloškom uređaja?

Recite nam što ne radi, što nedostaje ili kako bi se predložak trebao ponašati. Vaše povratne informacije pomažu nam da katalog bude točan.

Provjerio TapHome

Želite ovo koristiti u svojoj centralnoj jedinici TapHome Core?

Otvorite ovaj predložak na portalu Customer Portal kako biste ga primijenili na jedan od svojih domova ili predložili poboljšanje i poslali ga natrag u katalog.

Otvorite na portalu