TapHome

Shelly Plus i4

Packet Parser → MQTT
Pridal
Posledná aktualizácia: 03. 2026
Shelly Plus i4

Shelly Plus i4 je kompaktný Wi-Fi 4-kanálový digitálny vstupný modul. Nemá žiadne relé ani výstupy — funguje čisto ako vstupné zariadenie, ktoré detekuje stlačenia tlačidiel a stavy prepínačov na štyroch nezávislých svorkách (SW1–SW4). Zmestí sa za štandardný nástenný vypínač (37 x 42 x 16 mm) a napája sa 110–240 VAC. TapHome komunikuje so zariadením cez MQTT pomocou Gen2+ JSON-RPC 2.0 notifikácií v lokálnej sieti — cloudové pripojenie nie je potrebné.

Každý zo štyroch vstupov je možné nezávisle nakonfigurovať ako režim tlačidla (detekcia jedného stlačenia, dvojitého stlačenia, dlhého stlačenia) alebo režim prepínača (detekcia stavu zapnuté/vypnuté). Šablóna TapHome vytvára pre každý vstup zariadenie tlačidla aj jazýčkového kontaktu — používate to, ktoré zodpovedá konfigurácii vstupu vo webovom rozhraní Shelly.

Konfigurácia

Nastavenie MQTT brokera

Shelly Plus i4 komunikuje cez MQTT. Potrebujete MQTT broker bežiaci vo vašej sieti (napr. Mosquitto). Vo webovom rozhraní Shelly (http://{ip-zariadenia}) prejdite do Nastavenia → MQTT a aktivujte MQTT, zadajte IP adresu a port brokera.

Parametre importu šablóny

Počas importu šablóny v TapHome zadajte tri parametre:

ParameterPopisPríklad
MQTT Broker IPIP adresa MQTT brokera192.168.1.10
MQTT Broker PortPort brokera (predvolený 1883)1883
Shelly IDMQTT client ID z webového rozhrania Shelly → Nastavenia → MQTTshellyplusi4-xxxxxxxxxxxx
Konfigurácia režimu vstupu

Po importovaní šablóny nakonfigurujte každý vstup vo webovom rozhraní Shelly (http://{ip-zariadenia}) → Vstupy:

  • Režim tlačidla — pre impulzné tlačidlá. Použite zodpovedajúce zariadenie Tlačidlo 1–4 v TapHome.
  • Režim prepínača — pre páčkové prepínače alebo jazýčkové kontakty. Použite zodpovedajúce zariadenie Prepínač 1–4 v TapHome.

Každý fyzický vstup môže byť naraz iba jedného typu. Ak je vstup nastavený v režime prepínača, ale TapHome prijme udalosť tlačidla (alebo naopak), listener skript vyhlási chybu o nesúlade.

Možnosti zariadenia

Detekcia stlačenia tlačidiel (Tlačidlo 1–4)

Štyri zariadenia tlačidiel počúvajú MQTT NotifyEvent správy na topiku {device_id}/events/rpc. Každé tlačidlo detekuje tri typy stlačení a mapuje ich na číselné hodnoty:

Typ stlačeniaHodnota
Jednoduché stlačenie1
Dlhé stlačenie2
Dvojité stlačenie3

Zariadenia tlačidiel sú len na čítanie — hlásenia o poslednej detekovanej udalosti. Každé tlačidlo počúva udalosti zo zodpovedajúceho vstupného komponentu (input:0input:3).

Detekcia prepínača/jazýčkového kontaktu (Prepínač 1–4)

Štyri zariadenia jazýčkových kontaktov počúvajú MQTT NotifyStatus správy. Každý prepínač číta binárny stav zodpovedajúceho vstupu:

StavHodnota
Zatvorený (aktívny)1
Otvorený (neaktívny)0

Zariadenia prepínačov sú len na čítanie s intervalom dotazovania 2,5 sekundy. Sú vhodné pre páčkové prepínače, magnetické jazýčkové kontakty alebo akýkoľvek binárny on/off senzor pripojený na vstupné svorky.

Ďalšie možnosti

Shelly Plus i4 API taktiež podporuje detekciu trojitého stlačenia, surové udalosti button-down/button-up a programatickú metódu Input.Trigger (unikátnu pre zariadenia i4), ktorá dokáže emitovať udalosti bez fyzického vstupu. Systémová diagnostika (uptime, MAC, WiFi RSSI) je dostupná cez HTTP RPC, ale nie je sprístupnená v tejto šablóne určenej len pre MQTT. Tieto možnosti môžu byť doplnené v budúcej aktualizácii šablóny.

Riešenie problémov

Stlačenia tlačidiel nie sú detekované
  1. Overte, že vstup je nakonfigurovaný v režime tlačidla vo webovom rozhraní Shelly → Vstupy
  2. Skontrolujte, že TapHome je pripojený k MQTT brokeru a Shelly ID zodpovedá MQTT client ID zariadenia
  3. Ak TapHome zobrazuje chybu “Device is set as switch”, vstup je v režime prepínača — zmeňte ho na režim tlačidla vo webovom rozhraní Shelly alebo namiesto toho použite zariadenie Prepínač 1–4
Stav prepínača sa neaktualizuje
  1. Overte, že vstup je nakonfigurovaný v režime prepínača vo webovom rozhraní Shelly → Vstupy
  2. Ak TapHome zobrazuje chybu “Device is set as button”, vstup je v režime tlačidla — zmeňte ho na režim prepínača alebo namiesto toho použite zariadenie Tlačidlo 1–4
  3. Prepnite fyzický prepínač a skontrolujte MQTT broker, či prichádzajú NotifyStatus správy na topiku shellyplusi4-{id}/events/rpc
Zariadenie nie je dostupné
  1. Overte, že Shelly je pripojený k Wi-Fi — modrá LED dióda by mala svietiť neprerušovane
  2. Potvrďte, že MQTT je aktivované vo webovom rozhraní Shelly → Nastavenia → MQTT a adresa brokera je správna
  3. Skúste použiť mDNS hostname (shellyplusi4-AABBCCDDEE.local) na prístup k webovému rozhraniu Shelly
  4. Skontrolujte, že MQTT broker beží a je prístupný z TapHome Core aj zo zariadenia Shelly

Shelly Plus i4 má MQTT limit 80 notifikácií za 60-sekundové okno. Rýchle opakované stláčanie tlačidiel môže tento limit prekročiť a spôsobiť stratu niektorých udalostí. Toto je obmedzenie na úrovni firmvéru.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly pripojené k Wi-Fi (ak ešte nie, pozrite návod na HTTP pripojenie)
  • MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
  • TapHome CCU v rovnakej sieti ako broker

Na zariadeniach Gen1 povolenie MQTT vypne Shelly Cloud. Oboje nemôže bežať súčasne. Na zariadeniach Gen2/Plus toto obmedzenie neplatí.

Krok 1 — Povoľte MQTT na zariadení Shelly

Zariadenia Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na Internet & SecurityAdvanced — MQTT
  3. Povoľte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Voliteľne nastavte MQTT User a MQTT Password, ak váš broker vyžaduje autentifikáciu
  6. Kliknite na Save — zariadenie sa reštartuje a pripojí k brokeru

Zariadenia Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otvorte webové rozhranie Shelly: http://<device-ip>/
  2. Prejdite na SettingsMQTT
  3. Povoľte MQTT
  4. Nastavte Server: <broker-ip>:<port> (napr. 192.168.1.10:1883)
  5. Client ID je predvyplnené ID zariadenia (napr. shellyplus1pm-AABBCCDDEE) — ponechajte tak, pokiaľ nemáte konkrétny dôvod na zmenu
  6. Kliknite na Save a reštartujte zariadenie

Na overenie funkčnosti MQTT použite MQTT klienta (napr. MQTT Explorer) a prihláste sa na odber shellies/# (Gen1) alebo <device-id>/# (Gen2). Mali by ste vidieť stavové správy zo zariadenia.

Krok 2 — Zistite Device ID / MQTT Client ID

Niektoré šablóny vyžadujú parameter Device ID alebo MQTT Client ID. Ide o jedinečný identifikátor používaný v MQTT topicoch.

  • Gen1: nachádza sa na štítku ako MAC adresa (napr. AABBCCDDEE). Device ID = shelly<model>-<mac>, napr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachádza sa vo webovom rozhraní Shelly v časti SettingsDevice InfoDevice ID, alebo na štítku zariadenia

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (MQTT)
  2. IP Address: zadajte IP adresu MQTT brokera (napr. 192.168.1.10)
  3. Port: 1883 (predvolený; pre TLS použite 8883)
  4. Device ID / MQTT Client ID: zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
  5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

Dostupné zariadenia

Shelly Plus i4 Modul
Vlastné premenné
ID (string)
Tlačidlo 1 Tlačidlo Len na čítanie

Tlačidlo na vstupe input:0 — detekuje jedno stlačenie (1), dlhé stlačenie (2), dvojité stlačenie (3)

numeric JSON-RPC event
Premenná: Button

Tlačidlo 1

Listener
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
Tlačidlo 2 Tlačidlo Len na čítanie

Tlačidlo na vstupe input:1 — detekuje jedno stlačenie (1), dlhé stlačenie (2), dvojité stlačenie (3)

numeric JSON-RPC event

Tlačidlo 2

Listener
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
Tlačidlo 3 Tlačidlo Len na čítanie

Tlačidlo na vstupe input:2 — detekuje jedno stlačenie (1), dlhé stlačenie (2), dvojité stlačenie (3)

numeric JSON-RPC event

Tlačidlo 3

Listener
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
Tlačidlo 4 Tlačidlo Len na čítanie

Tlačidlo na vstupe input:3 — detekuje jedno stlačenie (1), dlhé stlačenie (2), dvojité stlačenie (3)

numeric JSON-RPC event

Tlačidlo 4

Listener
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
Spínač 1 Jazýčkový kontakt Len na čítanie

Jazýčkový kontakt na vstupe input:0 — zatvorený (1), otvorený (0)

boolean JSON-RPC status

Spínač 1

Listener
#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
Spínač 2 Jazýčkový kontakt Len na čítanie

Jazýčkový kontakt na vstupe input:1 — zatvorený (1), otvorený (0)

boolean JSON-RPC status

Spínač 2

Listener
#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
Spínač 3 Jazýčkový kontakt Len na čítanie

Jazýčkový kontakt na vstupe input:2 — zatvorený (1), otvorený (0)

boolean JSON-RPC status

Spínač 3

Listener
#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
Spínač 4 Jazýčkový kontakt Len na čítanie

Jazýčkový kontakt na vstupe input:3 — zatvorený (1), otvorený (0)

boolean JSON-RPC status

Spínač 4

Listener
#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
Pripojenie: Packet Parser → MQTT
Možné vylepšenia (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

Zdroje