TapHome

Shelly Plug S

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 04. 2026
Shelly Plug S

Der Shelly Plug S ist eine kompakte Wi-Fi Smart-Steckdose mit integrierter Energiemessung, ausgelegt auf 12A / 2500W. TapHome kommuniziert mit dem Gerät über MQTT — die Steckdose verbindet sich mit einem Broker und veröffentlicht den Relais-Status, den Energieverbrauch, den Energiezähler und die interne Temperatur.

Die Vorlage stellt zwei Geräte bereit: einen Stromzähler zur Energieüberwachung und einen Schalter zur Relaissteuerung. Ein Serviceattribut auf Modulebene meldet die interne Gerätetemperatur.

Konfiguration

Device ID

Jeder Shelly Plug S hat eine eindeutige MQTT Device ID im Format shellyplug-s-<MAC6>, wobei <MAC6> die letzten 6 Zeichen der MAC-Adresse in hexadezimaler Kleinschreibung sind (z. B. shellyplug-s-112233).

Die Device ID finden Sie:

  • In der Shelly Web-Oberfläche: SettingsDevice InfoDevice ID (verwenden Sie die erste Zeichenkette, nicht in Klammern)
  • Über API: GET http://<device-ip>/settings → Feld mqtt.id
MQTT aktivieren

MQTT auf dem Shelly Plug S aktivieren:

  1. Öffnen Sie die Web-Oberfläche des Geräts im Browser (navigieren Sie zur IP-Adresse des Geräts)
  2. Gehen Sie zu Internet and SecurityAdvanced - Developer Settings
  3. Aktivieren Sie „Enable action execution via MQTT"
  4. Geben Sie im Feld „Server" {MQTT-Broker-IP}:{Port} ein (Standardport 1883)
  5. Klicken Sie auf SAVE
Vorlage einrichten

Nach dem Import der Vorlage in TapHome:

  1. Öffnen Sie das Modul Shelly Plug S MQTT
  2. Setzen Sie MQTT Broker IP und Port (Standard 1883)
  3. Setzen Sie die Variable deviceID auf die Device ID des Shelly Plug S (z. B. 112233 — nur die letzten 6 Hex-Zeichen der MAC-Adresse)

Das Modul abonniert shellies/# und die Listener-Skripte filtern Nachrichten nach dem konfigurierten Device-ID-Präfix shellyplug-s-{deviceID}.

Gerätefunktionen

Energieüberwachung

Das Stromzähler-Gerät liest zwei Werte von der Steckdose:

  • Gesamtverbrauch — kumulativer Energiewert vom Topic relay/0/energy. Das Gerät meldet Energie in Wattminuten; die Vorlage konvertiert in kWh durch Division durch 60000.
  • Momentanleistung — aktueller Leistungsbezug vom Topic relay/0/power. Das Gerät meldet Leistung in Watt; die Vorlage konvertiert in kW durch Division durch 1000.

Beide Werte werden gemäß dem MQTT-Meldeintervall aktualisiert (Standard 30 Sekunden, konfigurierbar in der Shelly Web-Oberfläche über mqtt_update_period).

Der Energiezähler wird beim Neustart des Geräts zurückgesetzt. Für eine dauerhafte Energieverfolgung verwenden Sie die integrierte Energieprotokollierung von TapHome, die kumulative Werte unabhängig vom Gerätezähler speichert.

Relaissteuerung

Das Schalter-Gerät steuert das Relais der Steckdose:

  • Status lesen — lauscht auf Topic shellies/shellyplug-s-{deviceID}/relay/0 und mappt on → 1, off → 0
  • Status schreiben — veröffentlicht auf Topic shellies/shellyplug-s-{deviceID}/relay/0/command mit on oder off

Das Relais unterstützt eine Last von bis zu 2500W / 12A.

Temperaturüberwachung

Ein Serviceattribut auf Modulebene meldet die interne Gerätetemperatur in °C, gelesen vom Topic shellies/shellyplug-s-{deviceID}/temperature. Dies ist die Temperatur der Steckdosen-Elektronik, nicht die Umgebungstemperatur.

Weitere Funktionen

Der Shelly Plug S veröffentlicht auch einen Online/Offline-Status über das MQTT-LWT-Topic, Überhitzungswarnungen (wenn das Gerät die sichere Betriebstemperatur überschreitet), eine lesbare Temperaturstatusklassifikation (Normal/High/Very High) und Tastenereignisse (kurzes Drücken, langes Drücken, doppeltes Drücken). Diese Funktionen können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

Fehlerbehebung

Keine Daten von der Steckdose
  1. Überprüfen Sie, dass der Shelly Plug S mit Wi-Fi verbunden ist und MQTT in den Geräteeinstellungen aktiviert ist (Internet and SecurityAdvanced - Developer Settings)
  2. Prüfen Sie, ob die Variable deviceID exakt mit der Device ID übereinstimmt (z. B. 112233)
  3. Verwenden Sie einen MQTT-Client (z. B. MQTT Explorer), um shellies/# zu abonnieren und zu überprüfen, ob die Steckdose Nachrichten veröffentlicht
Leistungswerte zeigen null
  1. Bestätigen Sie, dass eine Last angeschlossen und das Relais eingeschaltet ist
  2. Prüfen Sie das Topic relay/0/power mit einem MQTT-Client — der Wert sollte ungleich null sein, wenn eine Last Strom bezieht
  3. Überprüfen Sie, dass das Stromzähler-Gerät Werte in TapHome anzeigt — Gesamtverbrauch in kWh, Leistung in kW
Relais reagiert nicht auf Befehle
  1. Überprüfen Sie, dass MQTT aktiviert ist und die Broker-Adresse in der Shelly Web-Oberfläche korrekt ist
  2. Prüfen Sie, ob TapHome den MQTT-Broker erreichen kann (korrekte IP und Port in den Moduleinstellungen)
  3. Testen Sie durch Veröffentlichung von on oder off auf Topic shellies/shellyplug-s-{deviceID}/relay/0/command über einen MQTT-Client

Shelly Gen1 Geräte unterstützen kein MQTT über TLS. Die Kommunikation zwischen Steckdose und MQTT-Broker ist unverschlüsselt (Plain MQTT, Port 1883). Stellen Sie sicher, dass der MQTT-Broker in einem vertrauenswürdigen lokalen Netzwerk betrieben wird.

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 Plug S MQTT Modul
Serviceattribute
TemperaturInterne Gerätetemperatur — nicht die Umgebungstemperatur
Benutzerdefinierte Variablen
deviceID (string)MQTT Device ID des Shelly Plug S — letzte 6 Zeichen der MAC-Adresse in hexadezimaler Kleinschreibung (zu finden in der Shelly Web-Oberfläche → Settings → Device Info)

Shelly plug S MQTT

Listener
VAR whatT := "shellies/shellyplug-s-"+deviceID+"/temperature";
IF (whatT = RECEIVEDMSG.TOPIC)
 temperatureC := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
Serviceattribute
Temperature [°C ]
temperatureC
Stromzähler Stromzähler Nur lesen

Leistungs- und Energiemessung — Momentanleistung (kW) und kumulativer Energieverbrauch (kWh)

numeric Einheit: kWh (total), kW (demand) energy: Watt-minutes /60000 = kWh; demand: Watts /1000 = kW

Stromzähler

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
VAR whatTo := "shellies/shellyplug-s-"+deviceID+"/relay/0/energy";
IF (whatTo = RECEIVEDMSG.TOPIC)
 To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD))/60000;
END
VAR whatEd := "shellies/shellyplug-s-"+deviceID+"/relay/0/power";
IF (whatEd = RECEIVEDMSG.TOPIC)
 Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD))/1000;
END
Schalter Schalter
string on→1, off→0 (read); 1→on, 0→off (write)
Werte / Zustände: ON · OFF

Schalter

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/shellyplug-s-"+deviceID+ "/relay/0/command",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






#MQTTPUBLISH(topic + "/relay/0/command",if());
Listener
VAR whatSt := "shellies/shellyplug-s-"+deviceID+"/relay/0";
IF (whatSt = RECEIVEDMSG.TOPIC)
 IF (TOSTRING(RECEIVEDMSG.PAYLOAD) = "on")
  St := 1;
 ELSE
  St := 0;
 END
END
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (6)
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline device.
  • Overtemperature Alert — 1 = overheated, 0 = normal. Could trigger safety alarm when device exceeds safe operating temperature.
  • Temperature Status — String: Normal, High, or Very High. Human-readable temperature classification.
  • Button Input State — 0 or 1 — physical button state on the device.
  • Button Input Event — JSON payload with event type (S=short, L=long, SS=double, SSS=triple) and event counter.
  • Overpower State — Relay topic can report 'overpower' payload when load exceeds rating. Not parsed in listener script.

Quellen