TapHome

Shelly EM

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

Der Shelly EM ist ein Einphasen-Energiezähler mit zwei unabhängigen Messkanälen und einem 2A-Relaisausgang zur Schützsteuerung. Jeder Kanal wird an eine externe CT-Klemme (Stromwandler) angeschlossen — erhältlich in 50A- und 120A-Varianten — was die nicht-invasive Überwachung von zwei separaten Stromkreisen gleichzeitig ermöglicht. TapHome integriert sich lokal über WLAN mit dem Gerät über die HTTP REST API oder MQTT. Keine Cloud-Verbindung erforderlich.

Es stehen zwei TapHome-Vorlagen zur Verfügung: eine HTTP-Vorlage, die die REST-Endpunkte des Geräts abfragt, und eine MQTT-Vorlage, die Daten über einen MQTT-Broker empfängt. Beide stellen die gleichen drei Geräte bereit — zwei Energiezähler (einen pro Kanal) und einen Schützschalter.

Konfiguration

HTTP-Vorlage

Die HTTP-Vorlage benötigt nur die IP-Adresse des Geräts (oder den mDNS-Hostnamen). TapHome fragt alle 15 Sekunden drei Endpunkte ab:

  • /emeter/0/ — Energiedaten Kanal 1
  • /emeter/1/ — Energiedaten Kanal 2
  • settings/relay/0 — Relaisstatus und Zeitplanprüfung

Das Leseskript auf Modulebene speichert jede Antwort in einer eigenen Variable (emeterZero, emeterOne, status), sodass die Geräteskripte die Daten ohne redundante HTTP-Aufrufe parsen können.

Die Vorlage prüft auch den Zeitplanstatus des Relais aus settings/relay/0. Wenn die interne Zeitplanung auf dem Shelly-Gerät aktiviert ist, meldet die Vorlage einen Fehler — deaktivieren Sie die Zeitplanung in der Shelly-Weboberfläche, um Konflikte mit TapHome-Automatisierungen zu vermeiden.

MQTT-Vorlage

Die MQTT-Vorlage benötigt die Broker-IP, den Port und die Shelly Device ID (Format: shellyem-XXXXXXXXXXXX, wobei X = MAC-Hex-Ziffern). Die Device ID finden Sie in der Shelly-Weboberfläche unter Settings > Device Info.

Nach Aktivierung von MQTT auf dem Shelly EM (Internet & Security > Advanced — MQTT) abonniert TapHome die Topics shellies/shellyem-{deviceID}/ und empfängt Daten über Listener-Skripte.

Bei Gen1-Shelly-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden.

Gerätefunktionen

Energiemessung (pro Kanal)

Jeder Kanal wird in TapHome als unabhängiger Energiezähler bereitgestellt:

  • Momentanleistung — Wirkleistung in kW (von W umgerechnet durch Division durch 1000)
  • Kumulative Energie — gesamter Energieverbrauch in kWh (HTTP: von Wh umgerechnet; MQTT: nutzt das persistente Topic total in Wh)

Die HTTP-Vorlage liest die Felder power und total aus der JSON-Antwort von /emeter/{i}/. Die MQTT-Vorlage lauscht auf das Topic emeter/{i}/energy (Watt-Minuten, geteilt durch 60.000 für kWh) und das Topic emeter/{i}/total (Watt-Stunden, über Neustarts hinweg persistent).

Das MQTT-Topic energy wird beim Geräteneustart auf Null zurückgesetzt. Für persistente Energieerfassung liest die Vorlage auch das Topic total, das Neustarts übersteht.

Jeder Kanal stellt außerdem drei Serviceattribute bereit:

AttributEinheitBeschreibung
SpannungVEffektive Netzspannung
RücklieferenergieWhGesamte ins Netz zurückgespeiste Energie — für Solar-/bidirektionale Messung
BlindleistungVARMomentane Blindleistung

Die MQTT-Vorlage stellt nur die Spannung als Serviceattribut pro Kanal bereit. Blindleistung und Rücklieferenergie sind nur in der HTTP-Vorlage verfügbar.

Schützschalter

Der Relaisausgang wird in TapHome als Schalter bereitgestellt. Das Relais ist für 2A / 230 VAC ausgelegt — es ist ausschließlich zur Schützsteuerung konzipiert, nicht zum direkten Schalten von Lasten.

  • HTTP: liest ison aus settings/relay/0 und steuert über /relay/0?turn=on oder /relay/0?turn=off
  • MQTT: liest vom Topic shellies/shellyem-{id}/relay/0 und publiziert on/off auf shellies/shellyem-{id}/relay/0/command

Das Relais ist nur für 2A ausgelegt. Verwenden Sie für Lasten, die diese Nennlast überschreiten, stets einen externen Schütz. Direkter Anschluss von Hochleistungslasten beschädigt das Relais.

Weitere Funktionen

Der Shelly EM bietet außerdem Leistungsfaktor (0,00–1,00) und ein Messgültigkeitsflag pro Kanal, Kanalkonfiguration (CT-Verhältnis, maximale Leistungsgrenze), Energiezähler-Reset, Auto-Off-Timer am Relais und Wi-Fi-Signalstärke. Über MQTT sind zusätzliche Topics für Echtzeit-Leistung, Blindleistung und Rücklieferenergie pro Kanal verfügbar. 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 EM mit dem WLAN verbunden ist und eine gültige IP-Adresse hat
  2. Öffnen Sie http://{device-ip}/shelly im Browser — wenn er mit einem JSON antwortet, das "type":"SHEM" enthält, ist das Gerät erreichbar
  3. Stellen Sie sicher, dass TapHome CCU und Shelly EM im selben Netzwerk / VLAN sind
Keine Daten auf einem Kanal
  1. Überprüfen Sie, dass die CT-Klemme in die richtige 3,5mm-Buchse eingesteckt ist (Kanal 0 oder Kanal 1)
  2. Stellen Sie sicher, dass Strom durch den überwachten Leiter fließt — die CT-Klemme muss einen einzelnen Leiter umschließen, nicht das gesamte Kabel
  3. Fragen Sie /emeter/0/ und /emeter/1/ manuell ab und bestätigen Sie Nicht-Null-Werte für power
MQTT-Nachrichten kommen nicht an
  1. Bestätigen Sie, dass MQTT in der Shelly-Weboberfläche aktiviert ist (Internet & Security > Advanced — MQTT)
  2. Überprüfen Sie, dass Broker-Adresse und Port sowohl im Shelly-Gerät als auch in den TapHome-Moduleinstellungen korrekt sind
  3. Prüfen Sie, dass die Variable deviceID exakt mit der Shelly Device ID übereinstimmt (z.B. B929CC)
  4. Verwenden Sie einen MQTT-Client (z.B. MQTT Explorer), um shellies/# zu subscriben und zu verifizieren, dass das Gerät Nachrichten publiziert
Zeitplankonflikt-Fehler

Die HTTP-Vorlage prüft das Feld schedule in settings/relay/0. Wenn das Shelly-Gerät eine interne Zeitplanung aktiviert hat, meldet die Vorlage einen Fehler. Deaktivieren Sie die Zeitplanung in der Shelly-Weboberfläche (Settings > Relay > Schedule) — verwenden Sie stattdessen TapHome-Automatisierungen.

Gen1-Shelly-Geräte unterstützen nur 2 gleichzeitige HTTP-Verbindungen. Wenn TapHome und ein anderes System (z.B. Home Assistant) dasselbe Gerät gleichzeitig abfragen, kann die Kommunikation unzuverlässig werden. Erwägen Sie den Wechsel zur MQTT-Vorlage für Multi-System-Umgebungen.

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 EM Modul
Benutzerdefinierte Variablen

Shelly EM

Lesen (Modul)
VAR response := SENDHTTPREQUEST("settings/relay/0");
IF response.IsSuccess
 status := response.Content;
 IF PARSEJSON(status, "schedule")
  ADDERROR("Internal scheduling on");
 END
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/0/");
IF response.IsSuccess
 emeterZero := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
response := SENDHTTPREQUEST("/emeter/1/");
IF response.IsSuccess
 emeterOne := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Stromzähler — Kanal 1 Stromzähler Nur lesen

Momentanleistung (kW) und kumulierte Energie (kWh) von der CT-Klemme an Kanal 1

numeric Einheit: kW / kWh json_path
Serviceattribute
Spannung
RücklieferenergieGesamte ins Netz zurückgespeiste Energie auf Kanal 1 — für Solar- und bidirektionale Messanlagen
Blindleistung

Stromzähler — Kanal 1

Gesamtverbrauch lesen
RETURN(PARSEJSON(emeterZero, "total")/1000);
Bedarf lesen
RETURN(PARSEJSON(emeterZero, "power")/1000);
Serviceattribute
Voltage [V]
RETURN(PARSEJSON(emeterZero, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterZero, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterZero, "reactive"));
Stromzähler — Kanal 2 Stromzähler Nur lesen

Momentanleistung (kW) und kumulierte Energie (kWh) von der CT-Klemme an Kanal 2

numeric Einheit: kW / kWh json_path
Serviceattribute
Spannung
RücklieferenergieGesamte ins Netz zurückgespeiste Energie auf Kanal 2 — für Solar- und bidirektionale Messanlagen
Blindleistung

Stromzähler — Kanal 2

Gesamtverbrauch lesen
RETURN(PARSEJSON(emeterOne, "total")/1000);
Bedarf lesen
RETURN(PARSEJSON(emeterOne, "power")/1000);
Serviceattribute
Voltage [V]
RETURN(PARSEJSON(emeterOne, "voltage"));
backward [Wh]
RETURN(PARSEJSON(emeterOne, "total_returned"));
reactive [W]
RETURN(PARSEJSON(emeterOne, "reactive"));
Schützschalter Schalter

2A-Relaisausgang zur Schützsteuerung — nicht für direktes Lastschalten ausgelegt

boolean
Werte / Zustände: ON · OFF

Schützschalter

Schaltzustand lesen
RETURN(PARSEJSON(status, "ison"));
Schaltzustand schreiben
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + St);
VAR response := SENDHTTPREQUEST("/relay/0?turn="+ if(St = 1, "on","off"));
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
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (9)
  • Power Factor — Power factor (0.00–1.00) per channel, available in /emeter/{i} and /status response. Not available via MQTT.
  • Measurement Validity — Boolean flag indicating if the measurement is valid. Available per channel in /emeter/{i}.
  • Per-Channel Configuration — CT ratio (ctrafos: 50/120), max_power limit, appliance_type. Could be exposed as service actions.
  • Reset Energy Counters — Resets accumulated energy data for both channels. Available via HTTP GET and MQTT command topic.
  • Auto-off Timer — Auto-off timer in seconds on relay endpoint. Could be added as service action parameter.
  • WiFi Signal Strength — WiFi RSSI in dBm, available in /status response
  • MQTT Real-time Power — Instantaneous power via MQTT (W). MQTT template uses energy+total topics instead.
  • MQTT Reactive Power — Reactive power via MQTT (VAR). HTTP template has it as service attribute, MQTT template does not.
  • MQTT Energy Returned — Energy returned to grid via MQTT (Wh). HTTP template has it as service attribute (backward), MQTT template does not.

Quellen