TapHome

Shelly EM MQTT

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

Ovaj uređaj podržava mDNS

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

shellyem-{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 EM MQTT

Shelly EM je jednofazno brojilo energije s dva neovisna mjerna kanala i relejnim izlazom od 2 A za upravljanje sklopnikom. Na svaki se kanal spaja vanjski strujni transformator (CT) s razdvojivom jezgrom, dostupan u izvedbama od 50 A i 120 A, pa se dva zasebna strujna kruga mogu istodobno pratiti bez zahvata u instalaciju. Ovaj se predložak s uređajem povezuje preko MQTT brokera u lokalnoj mreži. Veza s oblakom nije potrebna.

Predložak daje tri uređaja: dva brojila energije (po jedno za svaki kanal strujnog transformatora) koja prate ukupnu potrošnju energije i sklopku za relej sklopnika.

Konfiguracija

Device ID

Shelly EM koristi Device ID u obliku shellyem-XXXXXX, gdje je XXXXXX zadnjih 6 znakova MAC adrese velikim slovima u heksadecimalnom zapisu (npr. shellyem-B929CC). Pri uvozu predloška u parametar Device ID unesite samo heksadecimalni dio (npr. B929CC).

Device ID možete pronaći:

  • U web-sučelju Shelly: Settings > Device Info
  • Preko API-ja: GET http://<device-ip>/settings, polje mqtt.id

Ovaj uređaj podržava otkrivanje preko mDNS-a. Pri konfiguraciji MQTT brokera umjesto IP adrese možete koristiti naziv hosta shellyem-{MAC}.local. Zamijenite {MAC} istim heksadecimalnim dijelom kao u Device ID-u (npr. shellyem-B929CC.local). Naziv hosta sprječava prekide veze kada se IP adresa uređaja promijeni.

Postavljanje MQTT-a

Prije uvoza predloška uključite MQTT na uređaju Shelly EM:

  1. Otvorite web-sučelje Shelly na http://<device-ip>
  2. Otvorite Internet & Security > Advanced — Developer Settings
  3. Označite Enable action execution via MQTT
  4. U polje Server unesite adresu MQTT brokera u obliku broker-ip:1883
  5. Pritisnite SAVE

Kod uređaja Shelly Gen1 uključivanje MQTT-a isključuje Shelly Cloud. MQTT i Shelly Cloud ne mogu raditi istodobno.

Postavljanje predloška

Nakon uvoza predloška u TapHome:

  1. Postavite MQTT Broker IP na adresu vašeg MQTT brokera
  2. Postavite MQTT Broker Port (zadano 1883)
  3. Postavite Device ID na heksadecimalni dio Device ID-a uređaja Shelly EM (npr. B929CC)

Modul se pretplaćuje na shellies/#, a skripte za primanje poruka na svakom uređaju filtriraju poruke prema postavljenom Device ID-u.

Mogućnosti uređaja

Mjerenje energije (po kanalu)

Svaki je kanal u sustavu TapHome prikazan kao zaseban uređaj vrste „Brojilo električne energije”. Skripta za primanje poruka za svaki je kanal pretplaćena na dvije MQTT teme:

TemaJedinicaOpis
emeter/{i}/energyvat-minuteUkupna energija od zadnjeg ponovnog pokretanja, dijeli se sa 60 000 za pretvorbu u kWh
emeter/{i}/totalWhTrajna ukupna potrošena energija, ostaje sačuvana i nakon ponovnog pokretanja

Predložak sprema obje vrijednosti: Ed (energija iz teme u vat-minutama, pretvorena u kWh) i To (ukupna energija u Wh iz trajne teme).

Tema energy vraća se na nulu pri ponovnom pokretanju uređaja. Za trajno praćenje energije predložak čita i temu total koja ostaje sačuvana nakon ponovnog pokretanja.

Svaki kanal ima i servisni atribut Napon koji čita efektivni (RMS) napon mreže iz MQTT teme emeter/{i}/voltage.

Skripte readtotalconsumption i readdemand sadrže samo neaktivan kod (u komentaru): svi podaci o energiji dolaze preko skripte za primanje poruka. To znači da predložak ne daje očitanja trenutačne snage (W). Prate se samo ukupna energija (kWh) i ukupna potrošnja (Wh). Trenutačna djelatna snaga dostupna je u MQTT temi emeter/{i}/power, ali ovaj se predložak na nju ne pretplaćuje.

Relej sklopnika

Relejni izlaz u sustavu TapHome prikazan je kao uređaj vrste „Sklopka”. Relej je predviđen za 2 A / 230 V AC i namijenjen je samo upravljanju sklopnikom, a ne izravnom uključivanju i isključivanju trošila.

  • Čitanje: pretplata na shellies/shellyem-{id}/relay/0; poruka on odgovara stanju ON, a off stanju OFF
  • Upis: objavljuje on ili off na shellies/shellyem-{id}/relay/0/command

Relej je predviđen za samo 2 A. Za trošila iznad te vrijednosti uvijek koristite vanjski sklopnik. Izravno spajanje trošila velike snage oštetit će relej.

Rješavanje problema

Nema podataka o energiji
  1. Provjerite je li MQTT uključen u web-sučelju Shelly (Internet & Security > Advanced — Developer Settings)
  2. Provjerite jesu li adresa i port MQTT brokera ispravni i u uređaju Shelly i u postavkama modula TapHome
  3. Provjerite odgovara li korisnička varijabla Device ID točno Device ID-u uređaja Shelly (npr. B929CC)
  4. MQTT klijentom (npr. MQTT Explorer) pretplatite se na shellies/# i provjerite objavljuje li uređaj teme emeter/0/energy i emeter/1/energy
Podatke javlja samo jedan kanal
  1. Provjerite je li strujni transformator spojen na ispravnu utičnicu od 3,5 mm (kanal 0 ili kanal 1)
  2. Provjerite teče li struja kroz praćeni vodič: strujni transformator mora obuhvaćati samo jedan vodič, a ne cijeli kabel
  3. Zasebno se pretplatite na shellies/shellyem-{id}/emeter/0/# i shellies/shellyem-{id}/emeter/1/# i provjerite objavljuju li oba kanala podatke
Relej ne reagira
  1. Provjerite ima li Shelly EM napajanje i je li spojen na MQTT broker
  2. MQTT klijentom ručno objavite on ili off na shellies/shellyem-{id}/relay/0/command kako biste rad releja provjerili neovisno o sustavu TapHome
  3. Provjerite je li relejni izlaz ispravno spojen (provjerite oznake stezaljki na uređaju)

Uređaji Shelly Gen1 ne podržavaju MQTT preko TLS-a. Komunikacija između uređaja i MQTT brokera nije šifrirana (obični MQTT, port 1883). Pobrinite se da je MQTT broker u pouzdanoj lokalnoj mreži.

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 EM MQTT Modul
Prilagođene varijable
deviceID (string)MQTT Device ID uređaja Shelly EM — oblik je „shellyem-DEVICEID”, gdje je DEVICEID zadnjih 6 heksadecimalnih znakova MAC adrese (npr. B929CC)
Open http://shellyIpAddress → Settings → Device Info → copy Device ID
Brojilo energije - kanal 1 Brojilo električne energije Samo za čitanje

Potrošnja energije na kanalu 1 strujnog transformatora — ukupna energija (kWh) i ukupna potrošnja (Wh)

numeric Jedinica: kWh
Servisni atributi
NaponEfektivni (RMS) napon na kanalu 1, čita se iz MQTT teme emeter/0/voltage

Brojilo energije - kanal 1

Čitanje ukupne potrošnje
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Čitanje zahtjeva
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
VAR whatEd := "shellies/shellyem-"+deviceID+"/emeter/0/energy";
VAR whatTo := "shellies/shellyem-"+deviceID+"/emeter/0/total";

IF (whatEd = RECEIVEDMSG.TOPIC)
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/60000;
END
IF (whatTo = RECEIVEDMSG.TOPIC)
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Servisni atributi
Voltage [V]
if parsejson(response, "Topic") = "shellies/shellyem-"+deviceID+"/emeter/0/voltage"
 return(todouble(parsejson(response, "Payload")));
end
Brojilo energije - kanal 2 Brojilo električne energije Samo za čitanje

Potrošnja energije na kanalu 2 strujnog transformatora — ukupna energija (kWh) i ukupna potrošnja (Wh)

numeric Jedinica: kWh
Servisni atributi
NaponEfektivni (RMS) napon na kanalu 2, čita se iz MQTT teme emeter/1/voltage

Brojilo energije - kanal 2

Čitanje ukupne potrošnje
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Čitanje zahtjeva
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
VAR whatEd := "shellies/shellyem-"+deviceID+"/emeter/1/energy";
VAR whatTo := "shellies/shellyem-"+deviceID+"/emeter/1/total";

IF (whatEd = RECEIVEDMSG.TOPIC)
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/60000;
END
IF (whatTo = RECEIVEDMSG.TOPIC)
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Servisni atributi
voltage [V]
if parsejson(response, "Topic") = "shellies/shellyem-"+deviceID+"/emeter/1/voltage"
 return(parsejson(response, "Payload"));
end
Relej sklopnika Sklopka

Relejni izlaz 2 A za upravljanje sklopnikom — čita stanje relay/0 i objavljuje naredbe on/off

boolean
Vrijednosti / stanja: ON · OFF

Relej sklopnika

Čitanje stanja sklopke
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Zapis stanja sklopke
MQTTPUBLISH("shellies/shellyem-" + deviceID + "/relay/0/command",if(St = 1, "on","off"));

# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + St, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + St + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + St + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + St, "write"); # use "append" mode to append data to existing file
Listener
VAR whatSt := "shellies/shellyem-"+deviceID+"/relay/0";
IF (whatSt = RECEIVEDMSG.TOPIC)
 IF (TOSTRING(RECEIVEDMSG.PAYLOAD) = "on")
  St := 1;
 ELSE
  St := 0;
 END
END
Povezivanje: Packet Parser → MQTT • Naziv računala (hostname): shellyem-{MAC}.local
Moguća poboljšanja (5)
  • Active Power — Instantaneous active power in W per channel. Available via MQTT but template listener scripts do not subscribe to it — readdemand is commented-out boilerplate.
  • Reactive Power — Instantaneous reactive power in VAR per channel. Available via MQTT topic.
  • Total Energy Returned — Total energy returned to grid in Wh per channel. Useful for solar/bidirectional setups.
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect device offline state.
  • Reset Energy Data — Payload 'reset_data' resets all accumulated energy counters on both channels.

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