TapHome

Shelly 3EM

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 03. 2026
Shelly 3EM

Der Shelly 3EM ist ein Wi-Fi-3-Phasen-Energiezähler mit drei 120 A CT-Klemmen (Stromwandler) und einem integrierten 10 A Schützrelais. Er misst Wirkleistung, Spannung, Strom, Leistungsfaktor und kumulative Energie für jede Phase unabhängig. TapHome kommuniziert mit dem Gerät über das lokale Netzwerk — keine Cloud-Verbindung erforderlich.

Für dieses Gerät stehen zwei TapHome-Vorlagen zur Verfügung: eine HTTP-Vorlage (Standard, nutzt REST-API-Polling) und eine MQTT-Vorlage (nutzt brokerbasierte Nachrichtensubskription). Beide Vorlagen stellen die gleichen Geräte bereit — 3 Energiezähler (einer pro Phase) und 1 Schützschalter. Wählen Sie das Protokoll basierend auf den Installationsanforderungen.

Hardwareanschluss

Der Shelly 3EM benötigt Netzspannung (110–230 V AC) an den Klemmen L und N. Jede der drei mitgelieferten CT-Klemmen wird an die Klemmen CT1, CT2 und CT3 angeschlossen. Der Schützrelaisausgang befindet sich an Klemme O (max. 10 A).

CT-Klemmen-Installation
  • Jede CT-Klemme wird um den Phasenleiter des zu überwachenden Stromkreises geklemmt — kein Kabelschneiden erforderlich
  • Der Pfeil auf der CT-Klemme muss in Richtung des Stromflusses zeigen (von der Quelle zur Last)
  • CT-Klemmen können ein 3-Phasen-System (L1, L2, L3) oder drei unabhängige Einphasen-Stromkreise überwachen

Schließen Sie die CT-Klemme NICHT an den Phasenleiter an, bevor sie mit dem Shelly 3EM verbunden ist. An den Anschlusskabeln des Transformators kann hohe Spannung anliegen, selbst wenn nur der Transformator angeschlossen ist.

Schützsteuerung

Der Relaisausgang (Klemme O) ist für 10 A ausgelegt und kann kleine Lasten direkt schalten oder eine externe Schützspule zur Schaltung größerer Lasten ansteuern.

Konfiguration

HTTP-Vorlage einrichten

Geben Sie beim Vorlagenimport die IP-Adresse des Geräts ein. Die Vorlage pollt drei separate Endpunkte (/emeter/0, /emeter/1, /emeter/2) für Energiedaten pro Phase und /relay/0 für den Schützstatus. Jede Phasenantwort wird in einer eigenen Variable (emeter0, emeter1, emeter2) zwischengespeichert, um die HTTP-Aufrufe pro Abfragezyklus zu minimieren.

MQTT-Vorlage einrichten

Die MQTT-Vorlage erfordert drei Importparameter:

ParameterBeschreibungBeispiel
MQTT Broker IPAdresse des MQTT-Brokers192.168.1.10
MQTT Broker PortBroker-Port (Standard 1883)1883
Device IDMAC-Adress-Suffix in MQTT-TopicsB929CC

Die Device ID (dID) sind die letzten 6 Zeichen der MAC-Adresse in hexadezimaler Großschreibung. Sie finden sie in der Shelly-Weboberfläche unter SettingsDevice Info oder über GET http://{ip}/settings → Feld mqtt.id.

Das Modul abonniert shellies/shellyem3-{dID}/# und Listener-Skripte leiten Emeter- und Relay-Nachrichten pro Phase an die entsprechenden Geräte weiter.

Die MQTT-Vorlage verwendet das Topic-Präfix shellyem3-{dID}, während die offizielle API-Dokumentation shelly3em-{id} referenziert. Beide Formate funktionieren — die Variable dID ist konfigurierbar. Überprüfen Sie das tatsächliche Topic-Präfix, indem Sie sich mit einem MQTT-Client auf shellies/# subscriben.

Bei Gen1-Shelly-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden. Dies ist eine Firmware-Einschränkung.

Gerätefunktionen

Energiemessung pro Phase

Die Vorlage erstellt drei Energiezähler — einen für jede Phase. Jeder Zähler misst:

  • Wirkleistung — momentane Leistung in W, von der Vorlage in kW umgerechnet (÷ 1000)
  • Gesamter Energieverbrauch — kumulative Energie in Wh, von der Vorlage in kWh umgerechnet (÷ 1000)

In der HTTP-Vorlage wird jede Phase vom Endpunkt /emeter/{i} gelesen. In der MQTT-Vorlage kommen die Werte über die Topics shellies/shellyem3-{dID}/emeter/{i}/power und .../total.

Elektrische Parameter pro Phase

Jeder Energiezähler stellt vier Serviceattribute bereit:

  • Spannung — Effektivspannung (V)
  • Strom — Effektivstrom (A)
  • Leistungsfaktor — Verhältnis von Wirk- zu Scheinleistung (0,00–1,00)
  • Gesamte Rücklieferenergie — ins Netz zurückgespeiste Energie in Wh, nützlich für Solar-/PV-Anlagen mit bidirektionaler Messung
Energiezähler-Reset

Jede Phase hat eine Serviceaktion Reset total, die die Energiezähler für die jeweilige Phase zurücksetzt. Im HTTP-Modus wird /emeter/{i}?reset_totals aufgerufen; im MQTT-Modus wird reset_totals auf das Topic shellies/shellyem3-{dID}/emeter/{i}/command publiziert.

Schützschalter

Die Vorlage stellt das Schützrelais als Schalter bereit. Der Relaisstatus wird aus /relay/0ison (HTTP) oder dem Topic shellies/shellyem3-{dID}/relay/0 (MQTT) gelesen und über /relay/0?turn=on|off (HTTP) oder das Topic .../relay/0/command (MQTT) gesteuert.

Weitere Funktionen

Der Shelly 3EM bietet außerdem Blindleistung (VAR), ein Messungsgültigkeitsflag pro Phase (is_valid), die Gesamtsumme der 3-Phasen-Leistung (total_power aus /status), Wi-Fi-Signalstärke, Gerätebetriebszeit, Firmware-Update-Status, Überleistungsschwellenwerte pro Phase und Export historischer Energiedaten (CSV). Für das Schützrelais steht ein Auto-Off-Timer zur Verfügung. Diese Funktionen können in einer zukünftigen Vorlagenaktualisierung hinzugefügt werden.

Fehlerbehebung

Gerät antwortet nicht (HTTP)
  1. Überprüfen Sie, dass der Shelly 3EM mit dem WLAN verbunden ist und eine gültige IP-Adresse hat
  2. Öffnen Sie http://{device-ip}/shelly im Browser — wenn er antwortet, ist das Gerät erreichbar
  3. Stellen Sie sicher, dass TapHome Core und Shelly 3EM im selben Netzwerk / VLAN sind
Keine MQTT-Nachrichten empfangen
  1. Bestätigen Sie, dass MQTT in der Shelly-Weboberfläche aktiviert ist (Internet & SecurityAdvanced — MQTT)
  2. Überprüfen Sie, dass Broker-Adresse und Port sowohl im Shelly-Gerät als auch in der TapHome-Vorlage korrekt sind
  3. Prüfen Sie, ob die Variable dID der tatsächlichen Geräte-ID entspricht — subscriben Sie sich auf shellies/# mit einem MQTT-Client, um das Topic-Präfix zu überprüfen
  4. Stellen Sie sicher, dass der MQTT-Broker läuft und sowohl vom Shelly als auch vom TapHome Core erreichbar ist
Energiewerte zeigen Null oder NaN
  1. Bestätigen Sie, dass die CT-Klemmen korrekt an den Klemmen des Shelly 3EM (CT1, CT2, CT3) angeschlossen und um die Phasenleiter geklemmt sind
  2. Überprüfen Sie, dass der Pfeil auf der CT-Klemme in die richtige Richtung zeigt (von der Quelle zur Last)
  3. Rufen Sie /emeter/0, /emeter/1, /emeter/2 manuell ab und prüfen Sie, ob die Felder power und total Nicht-Null-Werte enthalten

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät installiert und eingeschaltet
  • Lokales Wi-Fi-Netzwerk (2,4 GHz)
  • TapHome CCU im selben Netzwerk

Schritt 1 — Shelly mit Wi-Fi verbinden

Option A — Shelly-App (empfohlen):

  1. Laden Sie die Shelly-App herunter (iOS / Android)
  2. Tippen Sie auf +Add Device und folgen Sie dem Bluetooth-Kopplungsassistenten
  3. Geben Sie Ihre Wi-Fi-Zugangsdaten ein, wenn Sie dazu aufgefordert werden

Option B — AP-Modus (ohne App):

  1. Beim ersten Einschalten erstellt das Gerät einen Hotspot: ShellyXXX-AABBCCDDEE
  2. Verbinden Sie Ihr Telefon/PC mit diesem Hotspot
  3. Öffnen Sie http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Geben Sie SSID und Passwort ein → Save

Shelly unterstützt nur 2,4 GHz-Netzwerke. 5 GHz-Netzwerke werden beim Scannen nicht angezeigt.

Schritt 2 — IP-Adresse ermitteln

Nach der Verbindung mit Wi-Fi ermitteln Sie die zugewiesene IP-Adresse auf eine der folgenden Arten:

  • Shelly-App: Gerätedetail → Device info → IP-Adresse
  • Shelly-Weboberfläche: Verbinden Sie sich mit dem Geräte-AP vor der Wi-Fi-Einrichtung — die IP wird nach dem Speichern angezeigt
  • Router-DHCP-Tabelle: Suchen Sie nach einem Hostnamen wie shelly1pm-AABBCCDDEE
  • mDNS: Pingen Sie shelly<model>-<mac>.local (z. B. shelly1pm-AABBCCDDEE.local) aus dem selben Netzwerk

Weisen Sie dem Shelly-Gerät eine statische IP (DHCP-Reservierung) in Ihrem Router zu, damit sich die Adresse nach einem Router-Neustart nicht ändert.

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (HTTP) hinzu
  2. IP Address: Geben Sie die IP aus Schritt 2 ein (z. B. 192.168.1.50)
  3. Port: 80 (Standard, keine Änderung erforderlich)
  4. Importieren Sie die Vorlage — TapHome fragt regelmäßig /status ab, um den Gerätestatus zu lesen

Die HTTP-Authentifizierung ist auf Shelly-Geräten standardmäßig deaktiviert. Wenn Sie den Anmeldeschutz aktiviert haben, unterstützt TapHome derzeit kein HTTP Basic Auth — lassen Sie die Authentifizierung für die TapHome-Integration deaktiviert.

Verfügbare Geräte

Shelly 3EM Modul
Benutzerdefinierte Variablen
Stromzähler (Phase 1) Stromzähler Nur lesen

Energieüberwachung Phase 1 — Wirkleistung (kW), kumulierte Energie (kWh), Spannung, Strom, Leistungsfaktor und Rücklieferenergie

numeric Einheit: W / kWh
Serviceattribute
Leistungsfaktor
Strom [A]
Spannung [V]
Gesamte Rücklieferenergie [Wh]Ins Netz zurückgespeiste Energie — relevant für Solar-/PV-Anlagen mit bidirektionaler Messung
Serviceaktionen
Zähler zurücksetzen

Stromzähler (Phase 1)

Gesamtverbrauch lesen
RETURN(todouble(PARSEjson(emeter0, "total"))/1000);
Bedarf lesen
RETURN(todouble(PARSEjson(emeter0, "power"))/1000);
Lesen (Modul)
VAR response := SENDHTTPREQUEST("/emeter/0");
IF response.IsSuccess
 emeter0 := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Serviceattribute
power factor
RETURN(todouble(PARSEjson(emeter0, "pf")));
Current [A]
RETURN(PARSEjson(emeter0, "current"));
voltage [V]
RETURN(PARSEjson(emeter0, "voltage"));
Total returned energy [Wh]
RETURN(PARSEjson(emeter0, "total_returned"));
Serviceaktionen
Reset total
sendhttprequest("/emeter/0?reset_totals");
Stromzähler (Phase 2) Stromzähler Nur lesen

Energieüberwachung Phase 2 — Wirkleistung (kW), kumulierte Energie (kWh), Spannung, Strom, Leistungsfaktor und Rücklieferenergie

numeric Einheit: W / kWh
Serviceattribute
Leistungsfaktor
Strom [A]
Spannung [V]
Gesamte Rücklieferenergie [Wh]Ins Netz zurückgespeiste Energie — relevant für Solar-/PV-Anlagen mit bidirektionaler Messung
Serviceaktionen
Zähler zurücksetzen

Stromzähler (Phase 2)

Gesamtverbrauch lesen
RETURN(todouble(PARSEjson(emeter1, "total"))/1000);
Bedarf lesen
RETURN(todouble(PARSEjson(emeter1, "power"))/1000);
Lesen (Modul)
VAR response := SENDHTTPREQUEST("/emeter/1");
IF response.IsSuccess
 emeter1 := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Serviceattribute
power factor
RETURN(PARSEjson(emeter1, "pf"));
current [A[
RETURN(PARSEjson(emeter1, "current"));
voltage [V]
RETURN(PARSEjson(emeter1, "voltage"));
total returned energy [Wh]
RETURN(PARSEjson(emeter1, "total_returned"));
Serviceaktionen
reset total
sendhttprequest("/emeter/1?reset_totals");
Stromzähler (Phase 3) Stromzähler Nur lesen

Energieüberwachung Phase 3 — Wirkleistung (kW), kumulierte Energie (kWh), Spannung, Strom, Leistungsfaktor und Rücklieferenergie

numeric Einheit: W / kWh
Serviceattribute
Leistungsfaktor
Strom [A]
Spannung [V]
Gesamte Rücklieferenergie [Wh]Ins Netz zurückgespeiste Energie — relevant für Solar-/PV-Anlagen mit bidirektionaler Messung
Serviceaktionen
Zähler zurücksetzen

Stromzähler (Phase 3)

Gesamtverbrauch lesen
RETURN(todouble(PARSEjson(emeter2, "total"))/1000);
Bedarf lesen
RETURN(todouble(PARSEjson(emeter2, "power"))/1000);
Lesen (Modul)
var response := SENDHTTPREQUEST("/emeter/2");
IF response.IsSuccess
 emeter2 := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Serviceattribute
power factor
RETURN(PARSEjson(emeter2, "pf"));
current [A]
RETURN(PARSEjson(emeter2, "current"));
voltage [V]
RETURN(PARSEjson(emeter2, "voltage"));
Total returned energy [Wh]
RETURN(PARSEjson(emeter2, "total_returned"));
Serviceaktionen
reset total
sendhttprequest("/emeter/2?reset_totals");
Schützschalter Schalter

Integriertes 10 A Schützrelais zum Schalten von Lasten oder zur Ansteuerung eines externen Schützes

boolean
Werte / Zustände: ON · OFF

Schützschalter

Schaltzustand lesen
VAR response := SENDHTTPREQUEST("/relay/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 RETURN(PARSEjson(content, "ison"));
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Schaltzustand schreiben
VAR response := SENDHTTPREQUEST("/relay/0?turn=" + switch(St,1,"on","off"));
IF response.IsSuccess = false
 ADDERROR(response.StatusCode);
END
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (10)
  • Reactive Power — Per-phase reactive power in VAR; available in /emeter/ response and via MQTT topic .../emeter/{i}/reactive_power
  • Measurement Validity — Boolean flag indicating whether CT clamp measurement is valid; useful for detecting disconnected CT
  • Total Power (3-phase sum) — Sum of active power across all 3 phases in W; available in /status but not in per-phase /emeter/ endpoints
  • WiFi Signal Strength — WiFi RSSI in dBm
  • Uptime — Device uptime in seconds; available in /status but template only polls /emeter/ endpoints, not /status
  • FW Update Available — Firmware update flag from /status
  • Auto-off Timer — Auto-off timer in seconds on contactor relay
  • Per-phase Power Protection — Per-phase overpower threshold; could be exposed as service attribute + action
  • Historical Energy Data (CSV) — Per-phase historical data export as CSV; not applicable for real-time integration
  • Reset All Energy History — Clears ALL stored energy history across all 3 phases; more destructive than per-phase reset_totals

Quellen