TapHome

Shelly Plus i4

Packet Parser → MQTT
Autor
Posljednje ažuriranje: 03. 2026

Ovaj uređaj podržava mDNS

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

shellyplusi4-{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 i4

Shelly Plus i4 je kompaktni Wi-Fi modul s 4 digitalna ulaza. Nema releje ni izlaze: radi isključivo kao ulazni uređaj koji prepoznaje pritiske tipkala i stanja prekidača na četiri neovisne stezaljke (SW1–SW4). Stane iza standardnog zidnog prekidača (37 × 42 × 16 mm), a napaja se naponom 110–240 V AC. TapHome s uređajem komunicira preko MQTT-a pomoću obavijesti Gen2+ JSON-RPC 2.0 u lokalnoj mreži, pa veza s oblakom nije potrebna.

Svaki od četiri ulaza može se neovisno postaviti u način rada button (prepoznaje jednostruki i dvostruki klik te dugi pritisak) ili način rada switch (prepoznaje stanje otvoreno/zatvoreno). Predložak TapHome za svaki ulaz stvara i uređaj tipkalo i uređaj magnetski kontakt (reed kontakt): koristite onaj koji odgovara postavci ulaza u web-sučelju Shelly.

Konfiguracija

Postavljanje MQTT brokera

Shelly Plus i4 komunicira preko MQTT-a. U mreži vam treba MQTT broker (npr. Mosquitto). U web-sučelju Shelly (http://{device-ip}) idite na Settings → MQTT, omogućite MQTT i unesite IP adresu i port brokera.

Parametri pri uvozu predloška

Pri uvozu predloška u TapHome unesite tri parametra:

ParametarOpisPrimjer
MQTT Broker IPIP adresa MQTT brokera192.168.1.10
MQTT Broker PortPort brokera (zadano 1883)1883
Shelly IDMQTT Client ID iz web-sučelja Shelly → Settings → MQTTshellyplusi4-xxxxxxxxxxxx
Postavljanje načina rada ulaza

Nakon uvoza predloška postavite svaki ulaz u web-sučelju Shelly (http://{device-ip}) → Inputs:

  • Način rada button — za tipkala bez zadržavanja položaja. U sustavu TapHome koristite odgovarajući uređaj Tipkalo 1–4.
  • Način rada switch — za preklopne prekidače ili magnetske kontakte. U sustavu TapHome koristite odgovarajući uređaj Sklopka 1–4.

Svaki fizički ulaz u jednom trenutku može biti samo jedne vrste. Ako je ulaz postavljen u način rada switch, a TapHome primi događaj tipkala (ili obrnuto), skripta za primanje poruka javlja grešku o neusklađenosti.

Mogućnosti uređaja

Prepoznavanje tipkala (Tipkalo 1–4)

Četiri uređaja tipkala primaju MQTT poruke NotifyEvent u temi {device_id}/events/rpc. Svako tipkalo prepoznaje tri vrste pritiska i pridružuje im brojčane vrijednosti:

Vrsta pritiskaVrijednost
Jednostruki klik1
Dugi pritisak2
Dvostruki klik3

Uređaji tipkala su samo za čitanje i javljaju posljednji prepoznati događaj. Svako tipkalo prima događaje iz odgovarajuće komponente ulaza (input:0 do input:3).

Prepoznavanje prekidača / magnetskog kontakta (Sklopka 1–4)

Četiri uređaja magnetski kontakt primaju MQTT poruke NotifyStatus. Svaka sklopka čita binarno stanje odgovarajućeg ulaza:

StanjeVrijednost
Zatvoreno (aktivno)1
Otvoreno (neaktivno)0

Uređaji sklopki su samo za čitanje, s intervalom očitavanja od 2,5 sekunde. Prikladni su za preklopne prekidače, magnetske reed kontakte ili bilo koji binarni senzor sa stanjima uključeno/isključeno spojen na ulazne stezaljke.

Dodatne mogućnosti

API uređaja Shelly Plus i4 podržava i prepoznavanje trostrukog klika, neobrađene događaje pritiska i otpuštanja tipke te programsku metodu Input.Trigger (postoji samo na uređajima i4) koja može slati događaje bez fizičkog ulaza. Dijagnostika sustava (vrijeme rada, MAC, Wi-Fi RSSI) dostupna je preko HTTP RPC-a, ali ovaj predložak, koji koristi samo MQTT, tu dijagnostiku ne daje. Te se mogućnosti mogu dodati u budućem ažuriranju predloška.

Rješavanje problema

Pritisci tipkala se ne prepoznaju
  1. Provjerite je li ulaz u web-sučelju Shelly → Inputs postavljen u način rada button
  2. Provjerite je li TapHome spojen na MQTT broker i odgovara li Shelly ID MQTT Client ID-ju uređaja
  3. Ako TapHome prikazuje grešku „Device is set as switch”, ulaz je u načinu rada switch: promijenite ga u web-sučelju Shelly u način rada button ili umjesto toga koristite uređaj Sklopka 1–4
Stanje prekidača se ne ažurira
  1. Provjerite je li ulaz u web-sučelju Shelly → Inputs postavljen u način rada switch
  2. Ako TapHome prikazuje grešku „Device is set as button”, ulaz je u načinu rada button: promijenite ga u način rada switch ili umjesto toga koristite uređaj Tipkalo 1–4
  3. Prebacite fizički prekidač i provjerite pojavljuju li se na MQTT brokeru poruke NotifyStatus u temi shellyplusi4-{id}/events/rpc
Uređaj nije dostupan
  1. Provjerite je li Shelly spojen na Wi-Fi: plava LED dioda treba stalno svijetliti
  2. Provjerite je li MQTT omogućen u web-sučelju Shelly → Settings → MQTT i je li adresa brokera ispravna
  3. Za pristup web-sučelju Shelly pokušajte koristiti mDNS naziv hosta (shellyplusi4-AABBCCDDEE.local)
  4. Provjerite radi li MQTT broker i je li dostupan i iz TapHome Core i s uređaja Shelly

Shelly Plus i4 ima MQTT ograničenje od 80 obavijesti u razdoblju od 60 sekundi. Brzi uzastopni pritisci tipkala mogu prijeći to ograničenje, pa se neki događaji mogu izgubiti. To je ograničenje na razini firmvera.

Kako ga instalirati u TapHome

Preduvjeti

  • Uređaj Shelly spojen na Wi-Fi (2,4 GHz), npr. putem aplikacije Shelly ili vlastite pristupne točke uređaja
  • MQTT broker koji radi u vašoj lokalnoj mreži (npr. Mosquitto, Home Assistant ili ugrađeni broker TapHome)
  • TapHome CCU u istoj mreži kao broker

Na uređajima Gen1 uključivanje MQTT-a isključuje Shelly Cloud. MQTT i Shelly Cloud ne mogu raditi istodobno. Na uređajima Gen2/Plus to ograničenje ne vrijedi.

Korak 1 — Uključite MQTT na uređaju Shelly

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

  1. Otvorite web-sučelje Shelly: http://<device-ip>/
  2. Idite na Internet & Security → Advanced — MQTT
  3. Uključite MQTT
  4. Postavite MQTT Server: <broker-ip>:<port> (npr. 192.168.1.10:1883)
  5. Ako vaš broker zahtijeva autentifikaciju, postavite MQTT User i MQTT Password
  6. Kliknite Save — uređaj će se ponovno pokrenuti i spojiti na broker

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

  1. Otvorite web-sučelje Shelly: http://<device-ip>/
  2. Idite na Settings → MQTT
  3. Uključite MQTT
  4. Postavite Server: <broker-ip>:<port> (npr. 192.168.1.10:1883)
  5. Client ID je unaprijed popunjen ID-jem uređaja (npr. shellyplus1pm-AABBCCDDEE) — ostavite ga takvim, osim ako ga iz određenog razloga trebate promijeniti
  6. Kliknite Save i ponovno pokrenite uređaj

Za provjeru rada MQTT-a koristite MQTT klijent (npr. MQTT Explorer) i pretplatite se na shellies/# (Gen1) ili <device-id>/# (Gen2). Trebali biste vidjeti statusne poruke uređaja.

Korak 2 — Pronađite Device ID / MQTT Client ID

Neki predlošci zahtijevaju parametar Device ID ili MQTT Client ID. To je jedinstveni identifikator koji se koristi u MQTT temama (topics).

  • Gen1: nalazi se na naljepnici kao MAC adresa (npr. AABBCCDDEE). Device ID = shelly<model>-<mac>, npr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nalazi se u web-sučelju Shelly pod Settings → Device Info → Device ID ili na naljepnici uređaja

Korak 3 — Konfiguracija u sustavu TapHome

  1. U sustavu TapHome dodajte novi modul Packet Parser (MQTT)
  2. IP adresa: unesite IP adresu MQTT brokera (npr. 192.168.1.10)
  3. Port: 1883 (zadano; za TLS koristite 8883)
  4. Device ID / MQTT Client ID: unesite vrijednost iz koraka 2 (ako je predložak zahtijeva)
  5. Uvezite predložak — TapHome će se automatski pretplatiti na teme uređaja

Dostupni uređaji

Shelly Plus i4 Modul
Prilagođene varijable
ID (string)
Tipkalo 1 Tipkalo Samo za čitanje

Tipkalo na ulazu input:0 — prepoznaje jednostruki klik (1), dugi pritisak (2), dvostruki klik (3)

numeric JSON-RPC event
Varijabla: Button

Tipkalo 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
Tipkalo 2 Tipkalo Samo za čitanje

Tipkalo na ulazu input:1 — prepoznaje jednostruki klik (1), dugi pritisak (2), dvostruki klik (3)

numeric JSON-RPC event

Tipkalo 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
Tipkalo 3 Tipkalo Samo za čitanje

Tipkalo na ulazu input:2 — prepoznaje jednostruki klik (1), dugi pritisak (2), dvostruki klik (3)

numeric JSON-RPC event

Tipkalo 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
Tipkalo 4 Tipkalo Samo za čitanje

Tipkalo na ulazu input:3 — prepoznaje jednostruki klik (1), dugi pritisak (2), dvostruki klik (3)

numeric JSON-RPC event

Tipkalo 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
Sklopka 1 Magnetski kontakt Samo za čitanje

Magnetski kontakt na ulazu input:0 — zatvoreno (1), otvoreno (0)

boolean JSON-RPC status

Sklopka 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
Sklopka 2 Magnetski kontakt Samo za čitanje

Magnetski kontakt na ulazu input:1 — zatvoreno (1), otvoreno (0)

boolean JSON-RPC status

Sklopka 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
Sklopka 3 Magnetski kontakt Samo za čitanje

Magnetski kontakt na ulazu input:2 — zatvoreno (1), otvoreno (0)

boolean JSON-RPC status

Sklopka 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
Sklopka 4 Magnetski kontakt Samo za čitanje

Magnetski kontakt na ulazu input:3 — zatvoreno (1), otvoreno (0)

boolean JSON-RPC status

Sklopka 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
Povezivanje: Packet Parser → MQTT • Naziv računala (hostname): shellyplusi4-{MAC}.local
Moguća poboljšanja (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

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