TapHome

Shelly Plus 2PM

Packet Parser → HTTP
Beküldő
Utoljára frissítve: 03. 2026
Shelly Plus 2PM

A Shelly Plus 2PM egy kompakt kétcsatornás Wi-Fi relé beépített teljesítményméréssel mindkét csatornán. Elfér egy szabványos fali kapcsoló mögött, és két független áramkört képes vezérelni, egyenként legfeljebb 10 A-ig (összesen 16 A 230 V AC mellett), vagy egyetlen motorizált redőnyt meghajtani. A TapHome HTTP-n kommunikál az eszközzel a Gen2+ RPC API segítségével a helyi hálózaton — felhőkapcsolat nem szükséges.

Az eszköz két üzemmódprofilt támogat — switch és cover — a Shelly webes felületén vagy a TapHome szervizakcióval választható. A switch profilban mindkét relékimenet (O1 és O2) függetlenül működik csatornánkénti teljesítményfigyeléssel. A cover profilban a két kimenet egyetlen motort hajt meg redőnyökhöz, zsalukhoz vagy függönyökhöz, pozícióvezérléssel és kalibrációval.

A Shelly Plus 2PM megszűnt termék. Utódja, a Shelly 2PM Gen3, ugyanazt a kettős profil funkciót kínálja továbbfejlesztett processzorral (8 MB flash), akár 6 egyidejű HTTP-kapcsolattal és Matter-frissíthetőséggel.

Konfiguráció

A Shelly Plus 2PM Wi-Fi-n csatlakozik. A TapHome sablon importálásakor adja meg az eszköz IP-címét (alapértelmezett helyőrző: 192.168.0.1).

A hitelesítésnek kikapcsoltnak kell lennie a Shelly eszközön a TapHome integrációhoz. A TapHome nem támogatja a Gen2+ eszközök által használt HTTP Digest Auth-ot. Nyissa meg a Shelly webes felületét (http://{eszkoz-ip}) → Settings → Authentication, és győződjön meg róla, hogy ki van kapcsolva.

Ha az ECO mód engedélyezve van a Shelly eszközön, kommunikációs időtúllépéseket okozhat a sablon gyors lekérdezési intervallumai (2,5–5 másodperc) miatt. Kapcsolja ki az ECO módot a Shelly webes felületén, ha időszakos csatlakozási problémákat tapasztal.

Profilválasztás

A Shelly Plus 2PM egyszerre az egyik profilban működik. Az aktív profil határozza meg, mely TapHome eszközök működnek:

  • Switch profil — mindkét relés kapcsolót (Switch 1 és Switch 2) és csatornánkénti energiamérőiket aktiválja. A redőny eszköz és a redőny energiamérő nem reagál.
  • Cover profil — a redőny eszközt és energiamérőjét aktiválja. A két kapcsoló eszköz és energiamérőik nem reagálnak.

Az aktív profil modulszintű szervizattribútumként („Profile") látható a TapHome-ban. A profil váltásához használja a Profile szervizakciót modulszinten, vagy váltsa át a Shelly webes felületén. Profilváltás után az eszköz újraindul, és csak az új profilnak megfelelő eszközök fognak működni.

A sablon mind a hat eszközt tartalmazza (2 kapcsoló + 2 kapcsoló energiamérő + 1 redőny + 1 redőny energiamérő), de csak az aktív profilnak megfelelő eszközök működnek. Ez elvárt viselkedés — a rossz profilon lévő eszközök egyszerűen nem reagálnak.

Redőny kalibráció

A cover profil használatakor a motor végállásait kalibrálni kell, mielőtt a pozícióvezérlés működne. Amíg a kalibráció nincs befejezve, a current_pos null-t ad vissza, és a „Calibrated" szervizattribútum false értéket mutat. Kalibráljon a Shelly webes felületén vagy a Calibrate szervizakció elindításával a Shutter eszközön a TapHome-ban. A kalibráció során a redőny többlépcsős szekvenciát hajt végre (teljes nyitás → teljes zárás → teljes nyitás → lépcsőzetes zárás → lépcsőzetes nyitás) a mozgástávolságok méréséhez.

Eszközképességek

Relévezérlés (switch profil)

A sablon két független relés kapcsolót tesz elérhetővé. Minden kapcsoló a /rpc/Switch.GetStatus?id={0,1} végpontról olvassa állapotát (output mező, boolean), és a /rpc/Switch.Set?id={0,1}&on=true|false végponton vezérli a relét.

Minden kapcsoló hét szervizattribútumot tesz elérhetővé:

  • Source — az utolsó parancs forrása (http, UI, WS_in stb.)
  • Temperature — belső eszközhőmérséklet °C-ban
  • Initial State — kapcsoló viselkedése bekapcsoláskor (off, on, restore_last vagy match_input)
  • Input Mode — fizikai bemenet bekötési módja (follow vagy detached)
  • Power Limit — maximális teljesítményküszöb wattban a túlterhelés-védelemhez
  • Voltage Limit — maximális feszültségküszöb voltban
  • Current Limit — maximális áramküszöb amperben

Két szervizakció érhető el kapcsolónként:

  • Set Initial State — a relé viselkedését konfigurálja bekapcsolás után (off, on, restore_last, match_input)
  • Set Mode — a fizikai bemenet bekötési módját konfigurálja (follow, detached)
Teljesítménymérés (switch profil)

Minden kapcsolócsatornának saját energiamérője van, amely két értéket olvas a /rpc/Switch.GetStatus végpontról:

  • Pillanatnyi teljesítményapower wattban, a sablon kW-ra konvertálja
  • Összesített fogyasztásaenergy.total wattórában, a sablon kWh-ra konvertálja

Minden energiamérő három szervizattribútumot is elérhetővé tesz:

  • Voltage — tápfeszültség voltban
  • Current — terhelési áram amperben
  • Power Factor — a terhelés teljesítménytényezője

A mérők csak olvashatók — automatikusan frissülnek minden lekérdezési ciklussal.

Redőnyvezérlés (cover profil)

A redőny eszköz motorizált redőnyt, függönyt vagy napellenzőt vezérel. A pozíciót a /rpc/Cover.GetStatus?id=0 végpontról olvassa (current_pos mező, 0–100%), és a /rpc/Cover.GoToPosition?id=0&pos=N végponton írja.

A redőny eszköz 21 szervizattribútumot tesz elérhetővé:

  • Állapot — forrás, állapot (open/closed/opening/closing/stopped/calibrating), aktuális és cél pozíció, mozgási időtúllépés és indítási idő
  • Kalibráció — pozícióvezérlés engedélyezve-e (pos_control)
  • Hőmérséklet — belső eszközhőmérséklet °C-ban
  • Bekapcsolási viselkedés — kezdeti állapot konfiguráció (open, closed, stopped)
  • Bemeneti beállítások — bemeneti mód (single, dual, detached), bemenetek cseréje, irányok invertálása
  • Védelmi korlátok — teljesítménykorlát (W), feszültségkorlát (V), áramkorlát (A)
  • Motor beállítás — üresjárati teljesítményküszöb (0–50 W), üresjárati megerősítési időszak (0,25–2 s)
  • Mozgási korlátok — maximális nyitási idő (0,1–300 s), maximális zárási idő (0,1–300 s)
  • Biztonsági funkciók — akadályérzékelés állapota, biztonsági kapcsoló állapota

Hat szervizakció érhető el a redőnyhöz:

  • Open — teljesen kinyitja a redőnyt
  • Close — teljesen bezárja a redőnyt
  • Stop — azonnal megállítja a mozgást
  • Calibrate — elindítja a kalibrációs eljárást a pozícióvezérléshez
  • Go to Position — a redőnyt meghatározott pozícióba mozgatja (0–100%)
  • Reverse directions — az invert_directions konfigurációt váltja és újraindítja az eszközt
Teljesítménymérés (cover profil)

A redőny saját energiamérővel rendelkezik, amely a /rpc/Cover.GetStatus végpontról olvas:

  • Pillanatnyi teljesítményapower wattban, a sablon kW-ra konvertálja
  • Összesített fogyasztásaenergy.total wattórában, a sablon kWh-ra konvertálja

A redőny energiamérő szervizattribútumként a feszültséget, áramot és teljesítménytényezőt is elérhetővé teszi.

Szerviz-diagnosztika

A sablon két modulszintű szervizattribútumot tesz elérhetővé:

  • MAC — az eszköz MAC-címe a rendszerkonfigurációból
  • Profile — az aktuálisan aktív eszközprofil (switch vagy cover)

A modul olvasó szkript a restart_required értéket is ellenőrzi a /rpc/Sys.GetStatus végponton, és figyelmeztetést jelenít meg a TapHome-ban, ha újraindítás szükséges.

Szervizakciók

Két szervizakció érhető el modulszinten:

  • Reboot — eszközújraindítást indít a /rpc/Shelly.Reboot végponton
  • Profile — váltás a switch és cover üzemmódprofilok között a /rpc/Shelly.SetProfile végponton
További képességek

A Shelly Plus 2PM az RPC válaszaiban a hálózati frekvenciát (freq), percenkénti energiaértékeket (aenergy.by_minute), fizikai bemeneti állapotokat (input:0, input:1), Wi-Fi jelerősséget (RSSI) és egy kapcsoló-toggle végpontot is elérhetővé tesz. Az energiaszámlálók visszaállíthatók a /rpc/Switch.ResetCounters (switch profil) vagy /rpc/Cover.ResetCounters (cover profil) végponton. Cover módban a lamella/döntés pozíció velencei zsalukhoz elérhető, ha a hardver támogatja. Ezek a képességek egy jövőbeli sablonfrissítésben adhatók hozzá.

Hibaelhárítás

Az eszköz nem válaszol
  1. Ellenőrizze, hogy a Shelly csatlakozik a Wi-Fi-hez és érvényes IP-címmel rendelkezik
  2. Próbálja meg az mDNS hosztnevet (shellyplus2pm-AABBCCDDEE.local) az IP-cím helyett — az IP megváltozhatott DHCP-megújítás után
  3. Nyissa meg a http://{eszkoz-ip}/rpc/Shelly.GetDeviceInfo címet böngészőben — ha JSON-nal válaszol, az eszköz elérhető
  4. Ellenőrizze, hogy a TapHome Core és a Shelly azonos hálózaton / VLAN-on vannak
  5. Győződjön meg róla, hogy a hitelesítés ki van kapcsolva a Shelly eszközön
Profileltérés — eszközök nem reagálnak

Ha néhány eszköz nem mutat mérési értékeket, miközben mások rendesen működnek:

  1. Ellenőrizze, melyik profil aktív jelenleg — a modulszintű „Profile" szervizattribútum mutatja az aktuális módot
  2. Váltson a megfelelő profilra a Profile szervizakcióval, vagy hagyja figyelmen kívül a nem használt eszközöket
  3. Profilváltás után az eszköz automatikusan újraindul — várjon néhány másodpercet az újracsatlakozásra
A redőny pozíció nem működik
  1. Ellenőrizze, hogy az eszköz cover profilban van — a switch profil nem teszi elérhetővé a redőny funkciókat
  2. Futtassa a Calibrate szervizakciót a Shutter eszközön — a pozícióvezérlés befejezett kalibrációt igényel
  3. Ellenőrizze, hogy a motor helyesen van csatlakoztatva az O1 és O2 kapcsokra
  4. Kérdezze le manuálisan a /rpc/Cover.GetStatus?id=0 végpontot, és ellenőrizze, hogy a pos_control értéke true
A redőny kalibráció sikertelen

A kalibráció megszakad, ha:

  • A redőny nem éri el a végállást a maxtime_open vagy maxtime_close időn belül
  • A kalibráció során biztonsági funkció aktiválódik (akadályérzékelés vagy biztonsági kapcsoló)
  • A kalibráció során külső leállítási parancs érkezik
  • A motor iránya nem felel meg az elvárt visszajelzésnek
  • Az eszköz a kalibráció során újraindul

Ellenőrizze a motor bekötését, növelje a maxtime_open/maxtime_close értéket, ha a motor lassú, és győződjön meg róla, hogy nincsenek akadályok.

Teljesítményértékek nullát mutatnak
  1. Erősítse meg, hogy a terhelés a Shelly relén keresztül van csatlakoztatva (nem áthidalva)
  2. Ellenőrizze, hogy a relé be van kapcsolva — a mérő csak akkor mér, ha áram folyik a relén át
  3. Kérdezze le manuálisan a /rpc/Switch.GetStatus?id=0 (switch profil) vagy /rpc/Cover.GetStatus?id=0 (cover profil) végpontot, és ellenőrizze, hogy az apower nem nullás értéket ad

A Shelly Gen2+ eszközök legfeljebb 6 egyidejű HTTP-kapcsolatot támogatnak. Bár ez javulás a Gen1-hez képest (2 kapcsolat), kerülje az egyidejű lekérdezést túl sok rendszerből (TapHome, Home Assistant, egyéni szkriptek) a kapcsolatkimerülés elkerülése érdekében.

Telepítés a TapHome-ban

Előfeltételek

  • Shelly eszköz telepítve és bekapcsolva
  • Helyi Wi-Fi hálózat (2,4 GHz)
  • TapHome CCU ugyanazon a hálózaton

1. lépés — Shelly csatlakoztatása a Wi-Fi-hez

A lehetőség — Shelly alkalmazás (ajánlott):

  1. Töltse le a Shelly alkalmazást (iOS / Android)
  2. Érintse meg a +Add Device gombot, és kövesse a Bluetooth párosítási varázslót
  3. Adja meg Wi-Fi hitelesítő adatait, amikor a rendszer kéri

B lehetőség — AP mód (alkalmazás nélkül):

  1. Első bekapcsoláskor az eszköz létrehoz egy hotspotot: ShellyXXX-AABBCCDDEE
  2. Csatlakoztassa telefonját/PC-jét ehhez a hotspothoz
  3. Nyissa meg a http://192.168.33.1 címet → Internet & SecurityWi-Fi Mode - Client
  4. Adja meg az SSID-t és a jelszót → Save

A Shelly csak 2,4 GHz-es hálózatokat támogat. Az 5 GHz-es hálózatok nem jelennek meg a keresésben.

2. lépés — IP-cím megkeresése

A Wi-Fi-hez való csatlakozás után az alábbi módszerek egyikével keresse meg a hozzárendelt IP-címet:

  • Shelly alkalmazás: Eszköz részletei → Device info → IP-cím
  • Shelly webes felület: Csatlakozzon az eszköz AP-jához a Wi-Fi beállítás előtt — az IP a mentés után jelenik meg
  • Router DHCP tábla: Keressen egy hasonló hosztnevet: shelly1pm-AABBCCDDEE
  • mDNS: Pingelje a shelly<model>-<mac>.local címet (pl. shelly1pm-AABBCCDDEE.local) ugyanarról a hálózatról

Rendeljen statikus IP-t (DHCP foglalást) a Shelly eszközhöz a routerben, hogy a cím ne változzon a router újraindítása után.

3. lépés — Konfigurálás a TapHome-ban

  1. A TapHome-ban adjon hozzá egy új Packet Parser (HTTP) modult
  2. IP Address: adja meg a 2. lépésben kapott IP-t (pl. 192.168.1.50)
  3. Port: 80 (alapértelmezett, nem kell módosítani)
  4. Importálja a sablont — a TapHome rendszeresen lekérdezi a /status végpontot az eszköz állapotának olvasásához

A HTTP hitelesítés a Shelly eszközökön alapértelmezetten ki van kapcsolva. Ha engedélyezte a bejelentkezésvédelmet, a TapHome jelenleg nem támogatja a HTTP Basic Auth-ot — a TapHome integrációhoz hagyja kikapcsolva a hitelesítést.

Elérhető eszközök

Shelly Plus 2PM Modul
Szerviz attribútumok
MACEszköz MAC-címe a rendszerkonfigurációból
ProfilAktív eszközprofil — switch vagy cover
Szerviz műveletek
ÚjraindításÚjraindítja az eszközt
ProfilVáltás a switch és cover üzemmódok között — az eszköz újraindítása szükséges
Egyéni változók

Shelly Plus 2 PM

Olvasás (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
Szerviz attribútumok
MAC
PARSEJSON(SysConfig, "$.device.mac");
Profile
PARSEJSON(SysConfig, "$.device.profile");
Szerviz műveletek
Reboot
VAR response := SENDHTTPREQUEST("/rpc/Shelly.Reboot");
IF response.IsSuccess
  VAR content := response.Content;
  VAR responseHeaders := response.Headers;
  Return("OK");
END;
Profile
Paraméterek: 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;
Teljesítménymérő (Redőny) Villanyóra Csak olvasható

Energiamérés cover üzemmódban — pillanatnyi teljesítmény (kW) és kumulatív energia (kWh)

numeric Egység: kW / kWh json_path
Szerviz attribútumok
FeszültségTápfeszültség Voltban
ÁramTerhelési áram Amperben
TeljesítménytényezőA terhelés teljesítménytényezője

Teljesítménymérő (Redőny)

Összes fogyasztás olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    adderror("Device profile is set to switch");
else
    return(PARSEJSON(CoverStatus, "$.aenergy.total") / 1000);
end
Igény olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    return(PARSEJSON(CoverStatus, "$.apower", true) / 1000);
end
Olvasás (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
Szerviz attribútumok
Voltage [V]
PARSEJSON(CoverStatus, "$.voltage", true);
Current [A]
PARSEJSON(CoverStatus, "$.current", true);
Power Factor
PARSEJSON(CoverStatus, "$.pf", true);
Teljesítménymérő (Kapcsoló 1) Villanyóra Csak olvasható

Energiamérés az 1. kapcsolócsatornához — pillanatnyi teljesítmény (kW) és kumulatív energia (kWh)

numeric Egység: kW / kWh json_path
Szerviz attribútumok
FeszültségTápfeszültség Voltban
ÁramTerhelési áram Amperben
TeljesítménytényezőA terhelés teljesítménytényezője

Teljesítménymérő (Kapcsoló 1)

Összes fogyasztás olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Igény olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Olvasás (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
Szerviz attribútumok
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Teljesítménymérő (Kapcsoló 2) Villanyóra Csak olvasható

Energiamérés a 2. kapcsolócsatornához — pillanatnyi teljesítmény (kW) és kumulatív energia (kWh)

numeric Egység: kW / kWh json_path
Szerviz attribútumok
FeszültségTápfeszültség Voltban
ÁramTerhelési áram Amperben
TeljesítménytényezőA terhelés teljesítménytényezője

Teljesítménymérő (Kapcsoló 2)

Összes fogyasztás olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    return(PARSEJSON(SwitchStatus, "$.aenergy.total", true) / 1000);
end
Igény olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "switch"
    return(PARSEJSON(SwitchStatus, "$.apower", true) / 1000);
end
Olvasás (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
Szerviz attribútumok
Voltage [V]
PARSEJSON(SwitchStatus, "$.voltage", true);
Current [A]
PARSEJSON(SwitchStatus, "$.current", true);
Power Factor
PARSEJSON(SwitchStatus, "$.pf", true);
Redőny Csúszka

Motoros redőnyvezérlés pozíciókövetéssel — kalibrálás szükséges a pozícióvezérléshez

numeric Egység: % json_path
Szerviz attribútumok
ForrásAz utolsó redőnyparancs forrása
ÁllapotAktuális redőnyállapot — open, closed, opening, closing, stopped, calibrating
Aktuális pozícióAktuális redőnypozíció százalékban (0–100), null ha nincs kalibrálva
CélpozícióCélpozíció a redőny mozgása közben
Mozgás időkorlátMásodpercek az automatikus leállásig mozgás közben
Mozgás kezdeteAz aktuális mozgás kezdetének időbélyege
KalibráltEngedélyezve van-e a pozícióvezérlés (true sikeres kalibrálás után)
HőmérsékletBelső eszközhőmérséklet Celsiusban
Kezdeti állapotRedőny viselkedése bekapcsoláskor — open, closed vagy stopped
Bemeneti módFizikai bemenet bekötési módja — single, dual vagy detached
TeljesítményhatárMaximális teljesítményküszöb Wattban túlterhelés elleni védelemhez
FeszültséghatárMaximális feszültségküszöb Voltban túlfeszültség elleni védelemhez
ÁramhatárMaximális áramküszöb Amperben túláram elleni védelemhez
Motor üresjárati teljesítményküszöbTeljesítményküszöb, amely alatt a motor üresjáratúnak tekintendő (0–50 W)
Motor üresjárat megerősítési időAz az időtartam, ameddig a motornak az üresjárati küszöb alatt kell maradnia a leállás megerősítéséhez (0,25–2 s)
Maximális nyitási időMaximális nyitási idő automatikus leállás előtt (0,1–300 s)
Maximális zárási időMaximális zárási idő automatikus leállás előtt (0,1–300 s)
Bemenetek cseréjeAz S1/S2 bemenet-hozzárendelés fel van-e cserélve
Irányok invertálásaA nyitási/zárási irányok invertálva vannak-e
AkadályérzékelésAz akadályérzékelés engedélyezve van-e
Biztonsági kapcsolóA biztonsági kapcsoló funkció engedélyezve van-e
Szerviz műveletek
NyitásTeljesen kinyitja a redőnyt
ZárásTeljesen bezárja a redőnyt
LeállításAzonnal leállítja a redőny mozgását
KalibrálásElindítja a redőny kalibrálását — szükséges a pozícióvezérléshez
Pozícióra mozgatásA redőnyt a megadott pozícióba mozgatja (0–100 %)
Irányok megfordításaAz invert_directions konfiguráció átkapcsolása és az eszköz újraindítása

Redőny

Olvasás (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
Redőnyszint olvasása
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
Redőnyszint írása
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
Szerviz attribútumok
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);
Szerviz műveletek
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
Paraméterek: 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;
Kapcsoló 1 Kapcsoló

Relékimenet 1. csatorna — be/ki vezérlés bekapcsolási viselkedés és bemeneti mód konfigurációval

boolean json_path
Értékek / Állapotok: ON · OFF
Szerviz műveletek
Kezdeti állapot beállításaA kapcsoló bekapcsolási viselkedésének konfigurálása
Üzemmód beállításaA fizikai bemenet bekötési módjának konfigurálása

Kapcsoló 1

Kapcsoló állapot olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Kapcsoló állapot írása
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
Olvasás (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
Szerviz attribútumok
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);
Szerviz műveletek
Set Initial State
Paraméterek: 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
Paraméterek: 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;
Kapcsoló 2 Kapcsoló

Relékimenet 2. csatorna — be/ki vezérlés bekapcsolási viselkedés és bemeneti mód konfigurációval

boolean json_path
Értékek / Állapotok: ON · OFF
Szerviz műveletek
Kezdeti állapot beállításaA kapcsoló bekapcsolási viselkedésének konfigurálása
Üzemmód beállításaA fizikai bemenet bekötési módjának konfigurálása

Kapcsoló 2

Kapcsoló állapot olvasása
if PARSEJSON(SysConfig, "$.device.profile") = "cover"
    adderror("Device profile is set to cover");
else
    RETURN(PARSEJSON(SwitchStatus, "$.output", true));
end
Kapcsoló állapot írása
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
Olvasás (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
Szerviz attribútumok
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);
Szerviz műveletek
Set Initial State
Paraméterek: 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
Paraméterek: 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;
Kapcsolat: Packet Parser → HTTP
Lehetséges fejlesztések (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

Források