TapHome

Shelly Plus i4

Packet Parser → MQTT
Beküldő
Utoljára frissítve: 03. 2026
Shelly Plus i4

A Shelly Plus i4 egy kompakt Wi-Fi 4 csatornás digitális bemeneti modul. Nincsenek benne relék vagy kimenetek — kizárólag bemeneti eszközként működik, amely nyomógomb-lenyomásokat és kapcsolóállapotokat érzékel négy független kapocson (SW1–SW4). Elfér egy szabványos fali kapcsoló mögött (37 x 42 x 16 mm), és 110–240 VAC-ról táplálkozik. A TapHome MQTT-n keresztül kommunikál az eszközzel Gen2+ JSON-RPC 2.0 értesítések segítségével a helyi hálózaton — felhőkapcsolat nem szükséges.

A négy bemenet mindegyike függetlenül konfigurálható nyomógomb módra (egyszeri nyomás, dupla nyomás, hosszú nyomás érzékelése) vagy kapcsoló módra (nyitott/zárt állapot érzékelése). A TapHome sablon minden bemenethez létrehoz egy nyomógomb- és egy reedkontakt-eszközt — azt használja, amelyik megfelel a bemenet Shelly webes felületén beállított konfigurációjának.

Konfiguráció

MQTT-broker beállítása

A Shelly Plus i4 MQTT-n keresztül kommunikál. MQTT-brokerre van szükség a hálózatban (pl. Mosquitto). A Shelly webes felületén (http://{eszkoz-ip}) navigáljon a Beállítások → MQTT menüpontra, és engedélyezze az MQTT-t a broker IP-címének és portjának megadásával.

Sablonimport paraméterei

A TapHome sablonimportálás során adjon meg három paramétert:

ParaméterLeírásPélda
MQTT Broker IPAz MQTT-broker IP-címe192.168.1.10
MQTT Broker PortBroker port (alapértelmezett 1883)1883
Shelly IDMQTT client ID a Shelly webes felületéről → Beállítások → MQTTshellyplusi4-xxxxxxxxxxxx
Bemeneti mód konfigurálása

A sablon importálása után konfigurálja az egyes bemeneteket a Shelly webes felületén (http://{eszkoz-ip}) → Bemenetek:

  • Nyomógomb mód — pillanatnyi nyomógombokhoz. Használja a megfelelő Gomb 1–4 eszközt a TapHome-ban.
  • Kapcsoló mód — billenőkapcsolókhoz vagy reedkontaktokhoz. Használja a megfelelő Kapcsoló 1–4 eszközt a TapHome-ban.

Minden fizikai bemenet egyszerre csak egy típusú lehet. Ha egy bemenet kapcsoló módra van állítva, de a TapHome gombnyomás-eseményt kap (vagy fordítva), a listener szkript hibát jelez az eltérés miatt.

Eszközképességek

Gombnyomás-érzékelés (Gomb 1–4)

Négy nyomógomb-eszköz figyeli az MQTT NotifyEvent üzeneteket a {device_id}/events/rpc topikon. Minden gomb háromféle nyomást érzékel, és numerikus értékekhez rendeli őket:

Nyomás típusaÉrték
Egyszeri nyomás1
Hosszú nyomás2
Dupla nyomás3

A gombeszközök csak olvashatók — az utolsó érzékelt eseményt jelentik. Minden gomb a megfelelő bemeneti komponens (input:0input:3) eseményeit figyeli.

Kapcsoló/reedkontakt-érzékelés (Kapcsoló 1–4)

Négy reedkontakt-eszköz figyeli az MQTT NotifyStatus üzeneteket. Minden kapcsoló a megfelelő bemenet bináris állapotát olvassa:

ÁllapotÉrték
Zárt (aktív)1
Nyitott (inaktív)0

A kapcsolóeszközök csak olvashatók, 2,5 másodperces lekérdezési intervallummal. Alkalmasak billenőkapcsolókhoz, mágneses reedkontaktokhoz vagy bármilyen bináris be/ki érzékelőhöz, amely a bemeneti kapocsokra csatlakozik.

További képességek

A Shelly Plus i4 API támogatja a háromszoros nyomás érzékelését, nyers button-down/button-up eseményeket és egy programozható Input.Trigger metódust (az i4 eszközökre egyedi), amely fizikai bemenet nélkül is képes eseményeket kiváltani. Rendszerdiagnosztika (üzemidő, MAC, WiFi RSSI) HTTP RPC-n keresztül elérhető, de ebben a kizárólag MQTT-alapú sablonban nincs kitéve. Ezek a képességek egy jövőbeli sablonfrissítésben adhatók hozzá.

Hibaelhárítás

A gombnyomások nem érzékelhetők
  1. Ellenőrizze, hogy a bemenet nyomógomb módra van konfigurálva a Shelly webes felületén → Bemenetek
  2. Ellenőrizze, hogy a TapHome csatlakozik az MQTT-brokerhez, és a Shelly ID megegyezik az eszköz MQTT client ID-jával
  3. Ha a TapHome “Device is set as switch” hibát jelez, a bemenet kapcsoló módban van — váltsa nyomógomb módra a Shelly webes felületén, vagy használja helyette a Kapcsoló 1–4 eszközt
A kapcsoló állapota nem frissül
  1. Ellenőrizze, hogy a bemenet kapcsoló módra van konfigurálva a Shelly webes felületén → Bemenetek
  2. Ha a TapHome “Device is set as button” hibát jelez, a bemenet nyomógomb módban van — váltsa kapcsoló módra, vagy használja helyette a Gomb 1–4 eszközt
  3. Kapcsolja át a fizikai kapcsolót, és ellenőrizze az MQTT-brokert, hogy érkeznek-e NotifyStatus üzenetek a shellyplusi4-{id}/events/rpc topikon
Az eszköz nem elérhető
  1. Ellenőrizze, hogy a Shelly csatlakozik a Wi-Fi-hez — a kék LED-nek folyamatosan világítania kell
  2. Győződjön meg róla, hogy az MQTT engedélyezve van a Shelly webes felületén → Beállítások → MQTT, és a broker címe helyes
  3. Próbálja meg az mDNS hosztnevet (shellyplusi4-AABBCCDDEE.local) a Shelly webes felületének eléréséhez
  4. Ellenőrizze, hogy az MQTT-broker fut, és elérhető mind a TapHome Core-ból, mind a Shelly eszközből

A Shelly Plus i4 MQTT sebességkorlátja 80 értesítés 60 másodperces ablakban. A gyors ismételt gombnyomások túlléphetik ezt a korlátot, és egyes események elveszhetnek. Ez firmware-szintű korlátozás.

Telepítés a TapHome-ban

Előfeltételek

  • Shelly eszköz csatlakoztatva a Wi-Fi-hez (ha még nem, lásd a HTTP kapcsolódási útmutatót)
  • MQTT broker fut a helyi hálózaton (pl. Mosquitto, Home Assistant vagy a TapHome beépített brokere)
  • TapHome CCU ugyanazon a hálózaton, mint a broker

A Gen1 eszközökön az MQTT engedélyezése letiltja a Shelly Cloudot. A kettő nem futhat egyszerre. A Gen2/Plus eszközökön ez a korlátozás nem érvényes.

1. lépés — MQTT engedélyezése a Shelly eszközön

Gen1 eszközök (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Nyissa meg a Shelly webes felületet: http://<device-ip>/
  2. Navigáljon az Internet & SecurityAdvanced — MQTT menüpontra
  3. Engedélyezze az MQTT-t
  4. Állítsa be az MQTT Server-t: <broker-ip>:<port> (pl. 192.168.1.10:1883)
  5. Opcionálisan állítsa be az MQTT User és MQTT Password mezőket, ha a broker hitelesítést igényel
  6. Kattintson a Save gombra — az eszköz újraindul és csatlakozik a brokerhez

Gen2 / Plus eszközök (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Nyissa meg a Shelly webes felületet: http://<device-ip>/
  2. Navigáljon a SettingsMQTT menüpontra
  3. Engedélyezze az MQTT-t
  4. Állítsa be a Server-t: <broker-ip>:<port> (pl. 192.168.1.10:1883)
  5. A Client ID előre ki van töltve az eszköz azonosítójával (pl. shellyplus1pm-AABBCCDDEE) — hagyja így, hacsak nincs konkrét oka a változtatásra
  6. Kattintson a Save gombra és indítsa újra az eszközt

Az MQTT működésének ellenőrzéséhez használjon egy MQTT klienst (pl. MQTT Explorer), és iratkozzon fel a shellies/# (Gen1) vagy <device-id>/# (Gen2) topikra. Látnia kell az eszköz állapotüzeneteit.

2. lépés — Device ID / MQTT Client ID megkeresése

Egyes sablonok Device ID vagy MQTT Client ID paramétert igényelnek. Ez az egyedi azonosító, amelyet az MQTT topikokban használnak.

  • Gen1: a címkén MAC-címként található (pl. AABBCCDDEE). Device ID = shelly<model>-<mac>, pl. shelly1pm-AABBCCDDEE
  • Gen2/Plus: a Shelly webes felületén a SettingsDevice InfoDevice ID alatt található, vagy az eszköz címkéjén

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

  1. A TapHome-ban adjon hozzá egy új Packet Parser (MQTT) modult
  2. IP Address: adja meg az MQTT broker IP-címét (pl. 192.168.1.10)
  3. Port: 1883 (alapértelmezett; TLS esetén használjon 8883-at)
  4. Device ID / MQTT Client ID: adja meg a 2. lépésben kapott értéket (ha a sablon megköveteli)
  5. Importálja a sablont — a TapHome automatikusan feliratkozik az eszköz topikjaira

Elérhető eszközök

Shelly Plus i4 Modul
Egyéni változók
ID (string)
Gomb 1 Nyomógomb Csak olvasható

Nyomógomb az input:0 bemeneten — egyszerű nyomás (1), hosszú nyomás (2), dupla nyomás (3)

numeric JSON-RPC event
Változó: Button

Gomb 1

Figyelő
Bp := 0;
#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0
    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF method = "NotifyEvent"
        VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
        VAR component := PARSEJSON(zero, "component");
        VAR event := PARSEJSON(zero, "event");
    
        if component = "input:0"
            Bp := SWITCH(event, "single_push", Bp := 1, "double_push", Bp :=3,  "long_push", Bp := 2, Bp := 0 );
            #RETURN(Bp);
        END
    elseif method = "NotifyStatus"
        IF( INDEXOF(params, "input:0") > -1, ADDERROR("Device is set as switch"));
    END
END
Gomb 2 Nyomógomb Csak olvasható

Nyomógomb az input:1 bemeneten — egyszerű nyomás (1), hosszú nyomás (2), dupla nyomás (3)

numeric JSON-RPC event

Gomb 2

Figyelő
Bp := 0;

#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF method = "NotifyEvent"
        VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
        VAR component := PARSEJSON(zero, "component");
        VAR event := PARSEJSON(zero, "event");
    
        if component = "input:1"
            Bp := SWITCH(event, "single_push", Bp := 1, "double_push", Bp :=3,  "long_push", Bp := 2, Bp := 0 );
            #RETURN(Bp);
        END
    elseif method = "NotifyStatus"
        IF( INDEXOF(params, "input:0") > -1, ADDERROR("Device is set as switch"));
    END
END
Gomb 3 Nyomógomb Csak olvasható

Nyomógomb az input:2 bemeneten — egyszerű nyomás (1), hosszú nyomás (2), dupla nyomás (3)

numeric JSON-RPC event

Gomb 3

Figyelő
Bp := 0;

#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF method = "NotifyEvent"
        VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
        VAR component := PARSEJSON(zero, "component");
        VAR event := PARSEJSON(zero, "event");
    
        if component = "input:2"
            Bp := SWITCH(event, "single_push", Bp := 1, "double_push", Bp :=3,  "long_push", Bp := 2, Bp := 0 );
            #RETURN(Bp);
        END
    elseif method = "NotifyStatus"
        IF( INDEXOF(params, "input:0") > -1, ADDERROR("Device is set as switch"));
    END
END
Gomb 4 Nyomógomb Csak olvasható

Nyomógomb az input:3 bemeneten — egyszerű nyomás (1), hosszú nyomás (2), dupla nyomás (3)

numeric JSON-RPC event

Gomb 4

Figyelő
Bp := 0;

#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF method = "NotifyEvent"
        VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
        VAR component := PARSEJSON(zero, "component");
        VAR event := PARSEJSON(zero, "event");
    
        if component = "input:3"
            Bp := SWITCH(event, "single_push", Bp := 1, "double_push", Bp :=3,  "long_push", Bp := 2, Bp := 0 );
            #RETURN(Bp);
        END
    elseif method = "NotifyStatus"
        IF( INDEXOF(params, "input:0") > -1, ADDERROR("Device is set as switch"));
    END
END
Kapcsoló 1 Reed kontaktus Csak olvasható

Reed-érintkező az input:0 bemeneten — zárt (1), nyitott (0)

boolean JSON-RPC status

Kapcsoló 1

Figyelő
#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF(method ="NotifyEvent")
    VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
    VAR component := PARSEJSON(zero, "component");
    
    if component = "input:0"
    ADDERROR("Device is set as button");
    END
    
    IF(method = "NotifyStatus")
    IF( INDEXOF(params, "input:0") > -1)
        VAR input := PARSEJSON(params, "input:0");
        SWITCH(PARSEJSON(input, "state"), true, Rc := 1, Rc := 0);
    END  
    END
END
END
Kapcsoló 2 Reed kontaktus Csak olvasható

Reed-érintkező az input:1 bemeneten — zárt (1), nyitott (0)

boolean JSON-RPC status

Kapcsoló 2

Figyelő
#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF(method ="NotifyEvent")
    VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
    VAR component := PARSEJSON(zero, "component");
    
    if component = "input:1"
    ADDERROR("Device is set as button");
    END
    
    IF(method = "NotifyStatus")
    IF( INDEXOF(params, "input:1") > -1)
    VAR input := PARSEJSON(params, "input:1");
        SWITCH(PARSEJSON(input, "state"), true, Rc := 1, Rc := 0);
    END  
    END
END
END
Kapcsoló 3 Reed kontaktus Csak olvasható

Reed-érintkező az input:2 bemeneten — zárt (1), nyitott (0)

boolean JSON-RPC status

Kapcsoló 3

Figyelő
#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF(method ="NotifyEvent")
    VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
    VAR component := PARSEJSON(zero, "component");
    
    if component = "input:2"
    ADDERROR("Device is set as button");
    END
    
    IF(method = "NotifyStatus")
    IF( INDEXOF(params, "input:2") > -1)
    VAR input := PARSEJSON(params, "input:2");
        SWITCH(PARSEJSON(input, "state"), true, Rc := 1, Rc := 0);
    END  
    END
END
END
Kapcsoló 4 Reed kontaktus Csak olvasható

Reed-érintkező az input:3 bemeneten — zárt (1), nyitott (0)

boolean JSON-RPC status

Kapcsoló 4

Figyelő
#index of shelly
if INDEXOF(RECEIVEDMSG.TOPIC, ID) = 0

    VAR method := PARSEJSON(RECEIVEDMSG.PAYLOAD, "method", true);
    VAR params := PARSEJSON(RECEIVEDMSG.PAYLOAD, "params", true);

    IF(method ="NotifyEvent")
    VAR zero := PARSEJSON(PARSEJSON(params, "events"),"[0]");
    VAR component := PARSEJSON(zero, "component");
    
    if component = "input:3"
    ADDERROR("Device is set as button");
    END
    
    IF(method = "NotifyStatus")
    IF( INDEXOF(params, "input:3") > -1)
    VAR input := PARSEJSON(params, "input:3");
        SWITCH(PARSEJSON(input, "state"), true, Rc := 1, Rc := 0);
    END  
    END
END
END
Kapcsolat: Packet Parser → MQTT
Lehetséges fejlesztések (7)
  • Triple Push Detection — Input component supports triple_push events but template only maps single_push, double_push, long_push
  • Button Press/Release Events — Raw button-down and button-up events available via MQTT but not captured by template
  • Programmatic Input Trigger — Input.Trigger method allows emitting events without physical input — unique to i4/i4 Gen3 devices
  • System Status (uptime, RAM, MAC, time) — Available via HTTP /rpc/Sys.GetStatus but template uses MQTT only — no HTTP polling configured
  • WiFi Status (SSID, IP, RSSI) — Available via HTTP /rpc/WiFi.GetStatus but template uses MQTT only
  • Analog Input Mode — Input component supports analog mode (0-100%) but template does not implement it — Plus i4 hardware supports digital inputs only
  • Counter/Pulse Input Mode — Input component supports pulse counting mode but template does not implement it

Források