TapHome

Shelly EM MQTT

Packet Parser → MQTT
Beküldő
Utoljára frissítve: 06. 2026
Shelly EM MQTT

A Shelly EM egy egyfázisú energiamérő két független mérőcsatornával és egy 2A relékimenettel kontaktor vezérléshez. Minden csatorna egy külső áramváltóhoz (CT bilincshez) csatlakozik – 50A és 120A változatban kapható – ami lehetővé teszi két különálló áramkör egyidejű, nem invazív monitorozását. Ez a sablon az eszközhöz MQTT brokeren keresztül csatlakozik a helyi hálózaton. Felhőkapcsolat nem szükséges.

A sablon három eszközt hoz létre: két villamos mérőt (CT csatornánként egyet) a kumulatív energiafogyasztás követésére, és egy kapcsolót a kontaktor reléhez.

Konfiguráció

Device ID

A Shelly EM shellyem-XXXXXX formátumú Device ID-t használ, ahol az XXXXXX a MAC-cím utolsó 6 karaktere hexadecimális formátumban (pl. shellyem-B929CC). A sablon importálásakor csak a hexadecimális részt (pl. B929CC) add meg a Device ID paraméterben.

A Device ID megtalálható:

  • A Shelly webes felületén: Settings > Device Info
  • API-n keresztül: GET http://<device-ip>/settingsmqtt.id mező

Ez az eszköz támogatja az mDNS felderítést. Az MQTT broker konfigurálásánál IP-cím helyett a shellyem-{MAC}.local hostnevet is használhatod. Cseréld ki a {MAC} részt a teljes MAC-címre hexadecimális formátumban (pl. shellyem-b929cc.local). A hostname használata megelőzi a csatlakozási problémákat az eszköz IP-címének változásakor.

MQTT beállítás

A sablon importálása előtt engedélyezd az MQTT-t a Shelly EM-en:

  1. Nyisd meg a Shelly webes felületét a http://<device-ip> címen
  2. Navigálj az Internet & Security > Advanced — Developer Settings menüpontra
  3. Jelöld be az Enable action execution via MQTT opciót
  4. A Server mezőbe írd be az MQTT broker címét broker-ip:1883 formátumban
  5. Kattints a SAVE gombra

A Shelly Gen1 eszközökön az MQTT engedélyezése letiltja a Shelly Cloudot. A két funkció nem működhet egyidejűleg.

Sablon beállítás

A sablon TapHome-ba való importálása után:

  1. Állítsd be az MQTT Broker IP-t az MQTT broker címére
  2. Állítsd be az MQTT Broker Port-ot (alapértelmezett 1883)
  3. Állítsd be a Device ID-t a Shelly EM Device ID hexadecimális részére (pl. B929CC)

A modul a shellies/# topicra iratkozik fel, és az egyes eszközökön lévő listener szkriptek a konfigurált Device ID alapján szűrik az üzeneteket.

Eszközképességek

Energiamérés (csatornánként)

Minden csatorna független Villamos mérő eszközként jelenik meg a TapHome-ban. A listener szkript csatornánként két MQTT topicra iratkozik fel:

TopicEgységLeírás
emeter/{i}/energywattpercKumulatív energia az utolsó újraindítás óta – 60 000-rel osztva a kWh-ra konvertáláshoz
emeter/{i}/totalWhPerzisztens összesített energiafogyasztás – újraindítás után is megmarad

A sablon mindkét értéket tárolja: Ed (energia a wattperces topicból, kWh-ra konvertálva) és To (összesített fogyasztás Wh-ban a perzisztens topicból).

Az energy topic az eszköz újraindításakor nullázódik. A perzisztens energiakövetéshez a sablon a total topicot is olvassa, ami túléli az újraindításokat.

Minden csatorna egy Feszültség szervizattribútumot is megjelenít, amely az RMS hálózati feszültséget olvassa az emeter/{i}/voltage MQTT topicból.

A readtotalconsumption és readdemand szkriptek kikommentezett sablon-boilerplate – minden energiaadat az MQTT listeneren keresztül érkezik. Ez azt jelenti, hogy a sablon nem biztosít pillanatnyi teljesítményleolvasást (W). Csak a kumulatív energia (kWh) és az összesített fogyasztás (Wh) kerül követésre. A pillanatnyi hatásos teljesítmény az emeter/{i}/power MQTT topicon elérhető, de ez a sablon nem iratkozik fel rá.

Kontaktor relé

A relékimenet kapcsolóként jelenik meg a TapHome-ban. A relé 2A / 230 VAC terhelésre méretezett – kizárólag kontaktor vezérlésre szolgál, nem közvetlen terheléskapcsolásra.

  • Olvasás: feliratkozik a shellies/shellyem-{id}/relay/0 topicra – on payload = bekapcsolva, off = kikapcsolva
  • Írás: on vagy off értéket publikál a shellies/shellyem-{id}/relay/0/command topicra

A relé mindössze 2A-re méretezett. Az ezt meghaladó terhelésekhez mindig használj külső kontaktort. A nagy teljesítményű terhelések közvetlen csatlakoztatása károsítja a relét.

Hibaelhárítás

Nincs energiaadat
  1. Ellenőrizd, hogy az MQTT engedélyezve van-e a Shelly webes felületén (Internet & Security > Advanced – MQTT)
  2. Ellenőrizd, hogy az MQTT broker címe és portja helyes-e mind a Shelly eszköz, mind a TapHome modul beállításaiban
  3. Ellenőrizd, hogy a Device ID egyéni változó pontosan megegyezik-e a Shelly Device ID-jával (pl. B929CC)
  4. Egy MQTT klienssel (pl. MQTT Explorer) iratkozz fel a shellies/# topicra, és ellenőrizd, hogy az eszköz publikálja az emeter/0/energy és emeter/1/energy topicokat
Csak az egyik csatorna jelent adatot
  1. Ellenőrizd, hogy a CT bilincs a megfelelő 3,5 mm-es jackhez van-e csatlakoztatva (0-s vagy 1-es csatorna)
  2. Ellenőrizd, hogy áram folyik-e a monitorozott vezetéken – a CT bilincsnek egyetlen vezetéket kell körbevennie, nem a teljes kábelt
  3. Külön iratkozz fel a shellies/shellyem-{id}/emeter/0/# és shellies/shellyem-{id}/emeter/1/# topicokra, és ellenőrizd, hogy mindkét csatorna publikál adatokat
A relé nem reagál
  1. Ellenőrizd, hogy a Shelly EM áram alatt van-e és csatlakozik-e az MQTT brokerhez
  2. Egy MQTT kliensen keresztül manuálisan publikálj on vagy off értéket a shellies/shellyem-{id}/relay/0/command topicra, hogy a relé működését a TapHome-tól függetlenül teszteld
  3. Ellenőrizd a relékimenet helyes bekötését (ellenőrizd az eszközön lévő kapocsjelöléseket)

A Shelly Gen1 eszközök nem támogatják az MQTT-t TLS-en keresztül. Az eszköz és az MQTT broker közötti kommunikáció titkosítatlan (plain MQTT, 1883-as port). Győződj meg róla, hogy az MQTT broker megbízható helyi hálózaton van.

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 EM MQTT Modul
Egyéni változók
deviceID (string)A Shelly EM MQTT Device ID-ja — formátum: 'shellyem-DEVICEID', ahol a DEVICEID a MAC-cím utolsó 6 hex karaktere (pl. B929CC)
Open http://shellyIpAddress → Settings → Device Info → copy Device ID
Villamos mérő - 1. csatorna Villanyóra Csak olvasható

Energiafogyasztás a CT bilincs 1. csatornáján -- kumulatív energia (kWh) és összesített fogyasztás (Wh)

numeric Egység: kWh
Szerviz attribútumok
FeszültségRMS feszültség az 1. csatornán az emeter/0/voltage MQTT topicból olvasva

Villamos mérő - 1. csatorna

Összes fogyasztás olvasása
# 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");
Igény olvasása
# 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");
Figyelő
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
Szerviz attribútumok
Voltage [V]
if parsejson(response, "Topic") = "shellies/shellyem-"+deviceID+"/emeter/0/voltage"
 return(todouble(parsejson(response, "Payload")));
end
Villamos mérő - 2. csatorna Villanyóra Csak olvasható

Energiafogyasztás a CT bilincs 2. csatornáján -- kumulatív energia (kWh) és összesített fogyasztás (Wh)

numeric Egység: kWh
Szerviz attribútumok
FeszültségRMS feszültség a 2. csatornán az emeter/1/voltage MQTT topicból olvasva

Villamos mérő - 2. csatorna

Összes fogyasztás olvasása
# 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");
Igény olvasása
# 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");
Figyelő
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
Szerviz attribútumok
voltage [V]
if parsejson(response, "Topic") = "shellies/shellyem-"+deviceID+"/emeter/1/voltage"
 return(parsejson(response, "Payload"));
end
Kontaktor relé Kapcsoló

2A relékimenet kontaktor vezérléshez -- relay/0 állapot olvasása és on/off parancsok publikálása

boolean
Értékek / Állapotok: ON · OFF

Kontaktor relé

Kapcsoló állapot olvasása
# 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");
Kapcsoló állapot írása
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
Figyelő
VAR whatSt := "shellies/shellyem-"+deviceID+"/relay/0";
IF (whatSt = RECEIVEDMSG.TOPIC)
 IF (TOSTRING(RECEIVEDMSG.PAYLOAD) = "on")
  St := 1;
 ELSE
  St := 0;
 END
END
Kapcsolat: Packet Parser → MQTT
Lehetséges fejlesztések (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.

Források

Talált problémát ezzel az eszközsablonnal?

Írja meg, mi nem működik, mi hiányzik, vagy hogyan kellene a sablonnak viselkednie. Visszajelzése segít, hogy a katalógus pontos maradjon.

TapHome által hitelesítve

Használni szeretnéd ezt a TapHome Core-odban?

Nyisd meg ezt a sablont az ügyfélportálon, hogy alkalmazd az otthonaid egyikére, vagy készíts egy módosítást és küldd vissza a katalógusba.

Megnyitás a portálon