TapHome

Shelly 3EM MQTT

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 06. 2026
Shelly 3EM MQTT

Der Shelly 3EM ist ein 3-phasiger Wi-Fi-Stromzähler aus der ersten Generation der Shelly-Geräte (Gen1). Er misst Wirkleistung, Spannung, Strom, Leistungsfaktor und Lebenszeit-Energie unabhängig für jede der drei Phasen mit Hilfe der drei mitgelieferten 120 A Klappstromwandler und enthält ein eingebautes 10 A Relais, das typischerweise zur Ansteuerung der Spule eines externen Leistungsschützes verwendet wird. TapHome kommuniziert mit dem Gerät über MQTT — das Gerät schickt phasenweise Messwerte an einen Broker, das TapHome PacketParser-Modul abonniert den Topic-Baum shellies/# und leitet die Werte an vier Untergeräte weiter (3 Stromzähler + 1 Schützschalter).

Dies ist die MQTT-Variante der Shelly 3EM-Vorlage. Eine HTTP-Variante steht ebenfalls zur Verfügung — wähle MQTT, wenn bereits ein lokaler MQTT-Broker läuft, du Push-basierte Updates statt Polling möchtest oder den Zähler mit mehreren Konsumenten teilen musst (TapHome plus ein anderes System). Das Aktivieren von MQTT auf der Gen1-Firmware deaktiviert die Shelly Cloud — beide können nicht gleichzeitig laufen.

Konfiguration

MQTT im Shelly 3EM aktivieren

Öffne die Web-Oberfläche des Shelly 3EM (http://{device-ip} oder http://shelly3em-{MAC}.local) und konfiguriere den MQTT-Client:

  1. Gehe zu Internet & SecurityAdvanced - Developer Settings
  2. Setze den Haken bei Enable action execution via MQTT
  3. Trage in Server den Wert {IP-Adresse des MQTT-Brokers}:{port} ein — typischerweise 192.168.1.10:1883
  4. (Optional) Setze Username und Password, falls der Broker Authentifizierung verlangt
  5. Klicke SAVE — das Gerät startet neu und verbindet sich mit dem Broker

Gen1-Shelly-Geräte unterstützen kein MQTT über TLS. Die Kommunikation zwischen Gerät und Broker ist unverschlüsselter Plain TCP auf Port 1883. Benutzername und Passwort werden im Klartext übertragen. Nutze den MQTT-Broker nur in einem vertrauenswürdigen lokalen Netzwerk.

Das Aktivieren von MQTT deaktiviert die Shelly Cloud auf der Gen1-Firmware automatisch. Zum Zurücksetzen entferne den MQTT-Haken und aktiviere die Cloud unter Internet & Security wieder.

Device ID ermitteln

Die TapHome-Vorlage abonniert shellies/shellyem3-{dID}/#, wobei {dID} das MAC-Suffix des Geräts ist, das als MQTT-Topic-Präfix verwendet wird.

So findest du sie in der Shelly 3EM Web-Oberfläche:

  1. Öffne die Web-Oberfläche des Geräts im Browser
  2. Gehe zu SettingsDevice Info
  3. Kopiere die erste Device-ID-Zeichenkette (NICHT den Wert in Klammern) — sie entspricht der MAC-Adresse der WLAN-Schnittstelle (z. B. DC4F227649A1)

Alternativ rufe GET http://{device-ip}/settings auf und lies das Feld mqtt.id.

Vorlage einrichten

Setze nach dem Import der Vorlage in TapHome drei Importparameter:

ParameterBeschreibungBeispiel
IpAddressIP-Adresse des MQTT-Brokers192.168.1.10
PortPort des MQTT-Brokers1883
dIDDevice ID (MAC-Suffix) des Shelly 3EMDC4F227649A1

Das Modul abonniert anschließend shellies/# (QoS 0), und Listener-Skripte leiten phasenweise Emeter- und Relais-Nachrichten an die entsprechenden Untergeräte weiter. Das Standard-MQTT-Aktualisierungsintervall des Geräts beträgt 30 Sekunden — es kann über GET http://{device-ip}/settings?mqtt_update_period=N reduziert werden (Wert 0 veröffentlicht nur bei Änderungen).

Das MQTT-Topic-Präfix in der Übertragung lautet shellyem3-{MAC}, während der mDNS-Hostname des Geräts shelly3em-{MAC}.local ist — Shelly verwendet zwei verschiedene Formate für dasselbe Gerät. Die Vorlage folgt dem tatsächlichen MQTT-Topic-Präfix (shellyem3-). Wenn keine MQTT-Nachrichten ankommen, abonniere shellies/# mit einem MQTT-Client und prüfe, welches Präfix die Firmware tatsächlich verwendet.

Gerätefunktionen

Phasenweise Wirkleistung und Lebenszeit-Energie

Die Vorlage erstellt drei Stromzähler — einen für jede Phase (CT-Wandler 1 → Phase A, Wandler 2 → Phase B, Wandler 3 → Phase C). Jeder Zähler liest zwei Werte:

  • Wirkleistung — Momentanleistung aus shellies/shellyem3-{dID}/emeter/{i}/power (W), durch 1000 geteilt und als kW gespeichert
  • Gesamte verbrauchte Energie — kumulative Lebenszeit-Energie aus .../emeter/{i}/total (Wh), durch 1000 geteilt und als kWh gespeichert

Jeder CT-Wandler ist für 120 A ausgelegt und nicht-invasiv (Klappausführung, kein Auftrennen des Leiters erforderlich). Die mitgelieferten 3 CT-Wandler sind individuell gekennzeichnet und kalibriert — sie sind zwischen den Kanälen NICHT austauschbar.

Phasenweise elektrische Parameter

Jeder Stromzähler stellt vier Service-Attribute für erweitertes Monitoring bereit:

  • Spannung [V] — RMS-Spannung Außenleiter-Neutralleiter auf der jeweiligen Phase (.../emeter/{i}/voltage)
  • Strom [A] — RMS-Strom, gemessen vom zugehörigen CT-Wandler (.../emeter/{i}/current)
  • Leistungsfaktor — Verhältnis von Wirk- zu Scheinleistung, Bereich −1.00 bis 1.00 (.../emeter/{i}/pf)
  • Zurückgespeiste Energie [Wh] — Lebenszeit-Energie, die ins Netz auf der jeweiligen Phase zurückgespeist wurde (.../emeter/{i}/total_returned), nützlich für PV / bidirektionale Messung

Die Kombination aus total (verbraucht) und total_returned (eingespeist) pro Phase macht die Vorlage geeignet für Solar- / Netzeinspeise-Installationen.

Energie-Zähler zurücksetzen

Jede Phase hat eine Service-Aktion Reset Total, die reset_totals an shellies/shellyem3-{dID}/emeter/{i}/command veröffentlicht. Damit werden die Zähler total und total_returned für die jeweilige Phase auf null gesetzt — nützlich bei Umnutzung des Zählers oder beim Start einer neuen Messperiode.

Schützrelais

Das integrierte 10 A Relais wird als Schaltgerät bereitgestellt. Der Status wird aus shellies/shellyem3-{dID}/relay/0 gelesen (on → 1, alles andere → 0) und durch Veröffentlichen von on oder off auf .../relay/0/command gesteuert. Das Relais ist für 10 A / 240 V AC ausgelegt und wird typischerweise über die Klemmen I (Phaseneingang) und O (Relaisausgang) verdrahtet, um die Spule eines externen Leistungsschützes für höhere Lasten zu schalten.

Die MQTT-Vorlage veröffentlicht keine 3-Phasen-Gesamtleistungssumme (total_power ist auf Gen1 nur per HTTP verfügbar). Erstelle ein virtuelles TapHome-Gerät, das die drei phasenweisen Leistungswerte addiert, falls du eine einzige Haushalts-Leistungszahl benötigst.

Fehlerbehebung

Keine MQTT-Nachrichten empfangen
  1. Bestätige, dass MQTT in der Shelly Web-Oberfläche aktiviert ist (Internet & SecurityAdvanced - Developer SettingsEnable action execution via MQTT) und das Gerät nach dem Speichern neu gestartet wurde
  2. Prüfe, dass Broker-IP und -Port im Gerät mit den Importparametern IpAddress/Port in TapHome übereinstimmen
  3. Abonniere shellies/# mit einem MQTT-Client (z. B. MQTT Explorer, mosquitto_sub) und prüfe, ob das Gerät überhaupt etwas veröffentlicht — bestätige, dass das tatsächliche Topic-Präfix (shellyem3-{dID}) mit der dID übereinstimmt, die du in TapHome eingetragen hast
  4. Stelle sicher, dass der MQTT-Broker läuft und sowohl vom Shelly 3EM als auch vom TapHome Core erreichbar ist
  5. Falls sich die Geräte-IP kürzlich geändert hat, versuche eine Verbindung über den mDNS-Hostnamen shelly3em-{MAC}.local, um die Erreichbarkeit im Netzwerk zu prüfen
Energiewerte zeigen Null oder unplausible Werte
  1. Bestätige, dass jeder CT-Wandler am richtigen Eingang angeschlossen ist — der mit IA markierte Wandler muss an den Klemmen IA-/IA+, IB an IB-/IB+, IC an IC-/IC+ liegen. Die Wandler sind kanalweise kalibriert und nicht austauschbar.
  2. Prüfe, dass der Pfeil auf dem CT-Wandler-Gehäuse in Richtung des Stromflusses zeigt (von der Quelle zur Last). Ein verkehrt herum montierter Wandler erzeugt einen negativen Leistungsfaktor und kehrt die Klassifizierung Verbrauch / Einspeisung um.
  3. Stelle sicher, dass die Spannungseingänge VA, VB, VC an den gleichen Phasen liegen, die die CT-Wandler messen — eine fehlerhafte Spannungs-/Strom-Zuordnung erzeugt falsche Leistungs- und Leistungsfaktorwerte.
  4. Wenn eine einzelne Phase null anzeigt, während die anderen korrekt sind, tausche diesen CT-Wandler mit einem bekannt funktionierenden, um Wandler vs. Stromkreis zu isolieren.
MQTT lässt sich nicht aktivieren — Cloud ist aktiv

Auf der Gen1-Firmware schließen sich MQTT und Shelly Cloud gegenseitig aus. Wenn die Checkbox Enable action execution via MQTT ausgegraut ist, deaktiviere zuerst Shelly Cloud unter Internet & SecurityCloud und öffne dann erneut die MQTT-Einstellungen.

Shelly Cloud-Verlauf ist nach MQTT-Aktivierung verschwunden

Das ist erwartetes Verhalten — das Aktivieren von MQTT deaktiviert die Cloud einschließlich ihrer 365-tägigen Verlaufsspeicherung. Wenn du gleichzeitig Echtzeit-MQTT-Steuerung in TapHome und langfristige Historie benötigst, leite MQTT-Nachrichten über deinen eigenen Broker und halte die historischen Daten in TapHome (oder einem separaten Logging-System).

Jeder CT-Wandler muss immer an den Klemmen des Shelly 3EM angeschlossen sein, bevor er um einen spannungsführenden Leiter geklappt wird. Die an einer offenen CT-Sekundärwicklung induzierte Spannung kann gefährliche Werte erreichen und den Wandler beschädigen.

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät mit Wi-Fi verbunden (siehe HTTP-Verbindungsanleitung, falls noch nicht geschehen)
  • MQTT-Broker in Ihrem lokalen Netzwerk aktiv (z. B. Mosquitto, Home Assistant oder der integrierte TapHome-Broker)
  • TapHome CCU im selben Netzwerk wie der Broker

Auf Gen1-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden. Auf Gen2/Plus-Geräten gilt diese Einschränkung nicht.

Schritt 1 — MQTT auf dem Shelly-Gerät aktivieren

Gen1-Geräte (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu Internet & SecurityAdvanced — MQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie MQTT Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Optional setzen Sie MQTT User und MQTT Password, falls Ihr Broker eine Authentifizierung erfordert
  6. Klicken Sie auf Save — das Gerät startet neu und verbindet sich mit dem Broker

Gen2 / Plus-Geräte (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu SettingsMQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Die Client ID ist mit der Geräte-ID vorausgefüllt (z. B. shellyplus1pm-AABBCCDDEE) — belassen Sie sie so, es sei denn, Sie haben einen bestimmten Grund zur Änderung
  6. Klicken Sie auf Save und starten Sie das Gerät neu

Um zu überprüfen, ob MQTT funktioniert, verwenden Sie einen MQTT-Client (z. B. MQTT Explorer) und abonnieren Sie shellies/# (Gen1) oder <device-id>/# (Gen2). Sie sollten Statusnachrichten vom Gerät sehen.

Schritt 2 — Device ID / MQTT Client ID ermitteln

Einige Vorlagen erfordern einen Parameter Device ID oder MQTT Client ID. Dies ist die eindeutige Kennung, die in MQTT-Topics verwendet wird.

  • Gen1: auf dem Etikett als MAC-Adresse zu finden (z. B. AABBCCDDEE). Device ID = shelly<model>-<mac>, z. B. shelly1pm-AABBCCDDEE
  • Gen2/Plus: in der Shelly-Weboberfläche unter SettingsDevice InfoDevice ID zu finden, oder auf dem Geräteetikett

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (MQTT) hinzu
  2. IP Address: Geben Sie die IP-Adresse des MQTT-Brokers ein (z. B. 192.168.1.10)
  3. Port: 1883 (Standard; verwenden Sie 8883 für TLS)
  4. Device ID / MQTT Client ID: Geben Sie den Wert aus Schritt 2 ein (falls von der Vorlage benötigt)
  5. Importieren Sie die Vorlage — TapHome abonniert automatisch die Geräte-Topics

Verfügbare Geräte

Shelly 3EM MQTT Modul
Benutzerdefinierte Variablen
dID (string)MAC-Suffix des Shelly 3EM, das das MQTT-Topic-Präfix shellies/shellyem3-{dID}/... bildet — zu finden in der Shelly Web-Oberfläche → Settings → Device Info (erste Zeichenkette, NICHT der Wert in Klammern)
Open Shelly 3EM web UI → Settings → Device Info → copy the first Device ID string (NOT the value in brackets); equals the WiFi MAC address (e.g. DC4F227649A1)
Stromzähler (Phase 1) Stromzähler Nur lesen

Wirkleistung (kW) und Lebenszeit-Energie (kWh) auf Phase A — gelesen vom CT-Wandler 1, mit W→kW- und Wh→kWh-Umrechnung

numeric Einheit: kW / kWh
Serviceattribute
Zurückgespeiste EnergieLebenszeit-Energie, die ins Netz auf Phase A zurückgespeist wurde (Wh) — nützlich für PV / bidirektionale Messung
SpannungRMS-Spannung Außenleiter-Neutralleiter auf Phase A (V)
StromRMS-Strom, gemessen vom CT-Wandler 1 (A)
LeistungsfaktorLeistungsfaktor auf Phase A — Verhältnis von Wirk- zu Scheinleistung, Bereich −1.00 bis 1.00
Serviceaktionen
Zähler zurücksetzenSetzt sowohl den total- als auch den total_returned-Energiezähler für Phase A auf null

Stromzähler (Phase 1)

Gesamtverbrauch lesen
# 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");
Bedarf lesen
# 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
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/0/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Serviceattribute
returned energy [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/total_returned")
 return(parsejson(x, "Payload"));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/0/pf")
 return(todouble(parsejson(x, "Payload")));
END
Serviceaktionen
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/0/command", "reset_totals");
Stromzähler (Phase 2) Stromzähler Nur lesen

Wirkleistung (kW) und Lebenszeit-Energie (kWh) auf Phase B — gelesen vom CT-Wandler 2, mit W→kW- und Wh→kWh-Umrechnung

numeric Einheit: kW / kWh
Serviceattribute
Zurückgespeiste EnergieLebenszeit-Energie, die ins Netz auf Phase B zurückgespeist wurde (Wh) — nützlich für PV / bidirektionale Messung
SpannungRMS-Spannung Außenleiter-Neutralleiter auf Phase B (V)
StromRMS-Strom, gemessen vom CT-Wandler 2 (A)
LeistungsfaktorLeistungsfaktor auf Phase B — Verhältnis von Wirk- zu Scheinleistung, Bereich −1.00 bis 1.00
Serviceaktionen
Zähler zurücksetzenSetzt sowohl den total- als auch den total_returned-Energiezähler für Phase B auf null

Stromzähler (Phase 2)

Gesamtverbrauch lesen
# 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");
Bedarf lesen
# 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
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/1/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Serviceattribute
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/current")
 return(todouble(parsejson(x, "Payload")));
END
power factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/1/pf")
 return(todouble(parsejson(x, "Payload")));
END
Serviceaktionen
Reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/1/command", "reset_totals");
Stromzähler (Phase 3) Stromzähler Nur lesen

Wirkleistung (kW) und Lebenszeit-Energie (kWh) auf Phase C — gelesen vom CT-Wandler 3, mit W→kW- und Wh→kWh-Umrechnung

numeric Einheit: kW / kWh
Serviceattribute
Zurückgespeiste EnergieLebenszeit-Energie, die ins Netz auf Phase C zurückgespeist wurde (Wh) — nützlich für PV / bidirektionale Messung
SpannungRMS-Spannung Außenleiter-Neutralleiter auf Phase C (V)
StromRMS-Strom, gemessen vom CT-Wandler 3 (A)
LeistungsfaktorLeistungsfaktor auf Phase C — Verhältnis von Wirk- zu Scheinleistung, Bereich −1.00 bis 1.00
Serviceaktionen
Zähler zurücksetzenSetzt sowohl den total- als auch den total_returned-Energiezähler für Phase C auf null

Stromzähler (Phase 3)

Gesamtverbrauch lesen
# 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");
Bedarf lesen
# 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
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/power")
 Ed := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
 elseif(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/emeter/2/total")
 To := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Serviceattribute
total returned [Wh]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/total_returned")
 return(todouble(parsejson(x, "Payload")));
END
voltage [V]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/voltage")
 return(todouble(parsejson(x, "Payload")));
END
current [A]
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/current")
 return(todouble(parsejson(x, "Payload")));
END
Power Factor
IF(parsejson(x, "Topic") = "shellies/shellyem3-"+dID+"/emeter/2/pf")
 return(todouble(parsejson(x, "Payload")));
END
Serviceaktionen
reset total
mqttpublish("shellies/shellyem3-"+dID+"/emeter/2/command", "reset_totals");
Schützrelais Schalter

Eingebautes 10 A Relais — typischerweise verdrahtet zur Ansteuerung der Spule eines externen Leistungsschützes über die I/O-Klemmen

boolean
Werte / Zustände: ON · OFF

Schützrelais

Schaltzustand lesen
# 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");
Schaltzustand schreiben
# Simple HTTP Request:
MQTTPUBLISH("shellies/shellyem3-"+dID+"/relay/0/command", switch(St,1,"on","off"));
# 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
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellyem3-"+dID+"/relay/0")
 St := switch(TOSTRING(RECEIVEDMSG.PAYLOAD),"on",1,0);
END
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (10)
  • Reactive Power (per phase) — Instantaneous reactive power in VAR per phase — useful for power-quality diagnostics.
  • Short-term Energy Counter — Watt-minute counter since boot (volatile). Template uses lifetime 'total' instead.
  • Short-term Returned Energy — Watt-minute returned counter since boot (volatile).
  • Contactor Coil Power — Power draw through the on-board relay (small — coil only).
  • Contactor Coil Energy — Energy through the on-board relay (Wm).
  • Connection Status (LWT) — Last-Will-and-Testament topic — true on connect, false retained on disconnect. Could detect offline 3EM.
  • Device Announcement (JSON) — Periodic JSON announce containing id, mac, ip, fw_ver, new_fw, model.
  • Full Status JSON — Complete /status payload as JSON — could expose Wi-Fi RSSI, internal temperature, all 4 emeter channels.
  • 4th CT — Theft / Leakage Detection — Optional 4th split-core CT on IN+/IN- terminal for neutral leakage / energy-theft detection. NOT published over MQTT — only HTTP.
  • Total Active Power — 3EM does not publish total_power over MQTT (only HTTP). Sum the three phase Ed values in a TapHome virtual device.

Quellen

Haben Sie ein Problem mit dieser Gerätevorlage gefunden?

Sagen Sie uns, was nicht funktioniert, was fehlt oder wie sich die Vorlage verhalten sollte. Ihr Feedback hilft uns, den Katalog genau zu halten.

Von TapHome verifiziert

Möchtest du das in deinem TapHome Core verwenden?

Öffne diese Vorlage im Kundenportal, um sie auf eine deiner Wohnungen anzuwenden, oder entwirf eine Anpassung und reiche sie an den Katalog ein.

Im Portal öffnen