TapHome

Shelly Plug S

Packet Parser → HTTP
Submitted by
Last updated: 03. 2026
Shelly Plug S

Der Shelly Plug S ist eine kompakte WLAN-Smart-Steckdose mit integrierter Leistungsmessung. Sie wird direkt in eine Steckdose eingesteckt und schaltet Lasten bis zu 10 A (2300 W bei 230 V). TapHome kommuniziert mit dem Gerät über HTTP im lokalen Netzwerk — eine Cloud-Verbindung ist nicht erforderlich.

Das Template bietet Ein-/Ausschalten des Relais, einen Energiezähler mit Echtzeit-Leistungsanzeige und kumuliertem Energieverbrauch sowie eine Überwachung der internen Temperatur.

Gerätefunktionen

Relaissteuerung

Das Template stellt das Steckdosenrelais als Schalter bereit. Der Relaiszustand wird aus /settings/relay/0 (Feld ison) gelesen und über den Endpoint /relay/0 mit turn=on oder turn=off gesteuert. Das Abfrageintervall für den Schalter beträgt 1 Sekunde.

Das Template liest den Schaltzustand aus /settings/relay/0 (persistente Konfiguration), nicht aus /status (Live-Zustand). Unter normalen Bedingungen liefern beide denselben Wert, aber /settings kann nach schnellem Umschalten leicht veraltete Daten enthalten.

Leistungsmessung

Der integrierte Energiezähler liest zwei Werte vom Endpoint /meter/0:

  • Echtzeit-Leistung — Feld power in Watt, wird vom Template in kW umgerechnet
  • Gesamtverbrauch — Feld total in Watt-Minuten, wird vom Template in kWh umgerechnet

Der Zähler ist schreibgeschützt und wird alle 15 Sekunden aktualisiert (konfigurierbares Abfrageintervall).

Temperaturüberwachung

Das Schaltgerät enthält ein Serviceattribut, das die interne Temperatur der Steckdose vom Endpoint /status ausliest. Damit lässt sich die Gerätetemperatur direkt in TapHome überwachen, ohne zusätzliche Konfiguration.

Nicht implementierte Funktionen

Die Shelly Plug S API bietet weitere Funktionen, die im aktuellen Template nicht enthalten sind:

  • Überhitzungs-Flag — automatisches Abschalten des Relais bei ~95 °C (overtemperature in /status)
  • LED-Steuerung — Status-LED über /settings ein-/ausschalten
  • Überlastschutz-Schwellwert — konfigurierbares Leistungslimit (Standard 2300 W)
  • Auto-Aus-Timer — automatisches Abschalten des Relais nach einer festgelegten Zeitdauer
  • WLAN-Signalstärke — RSSI-Wert in dBm aus /status
  • Neustart — Geräteneustart über den Endpoint /reboot

Diese Funktionen können in einer zukünftigen Template-Aktualisierung als Serviceattribute oder Serviceaktionen hinzugefügt werden.

Fehlerbehebung

Gerät antwortet nicht
  1. Überprüfen Sie, ob der Shelly mit dem WLAN verbunden ist und eine gültige IP-Adresse hat
  2. Öffnen Sie http://{device-ip}/shelly im Browser — antwortet er, ist das Gerät erreichbar
  3. Stellen Sie sicher, dass TapHome CCU und Shelly im selben Netzwerk / VLAN sind
Leistungsmessung zeigt null
  1. Vergewissern Sie sich, dass das an den Shelly Plug S angeschlossene Gerät eingeschaltet ist
  2. Prüfen Sie, ob das Relais eingeschaltet ist — der Zähler liest nur bei Stromfluss
  3. Fragen Sie /meter/0 manuell ab und prüfen Sie, ob das Feld power einen Wert ungleich null zurückgibt
Abschaltung bei Überhitzung

Der Shelly Plug S verfügt über einen internen Überhitzungsschutz. Überschreitet die Gerätetemperatur ~95 °C, schaltet das Relais automatisch ab. Sorgen Sie für ausreichende Belüftung um die Steckdose, insbesondere beim Schalten von Geräten mit hoher Leistungsaufnahme.

Shelly Gen1-Geräte unterstützen nur 2 gleichzeitige HTTP-Verbindungen. Fragen TapHome und ein anderes System (z. B. Home Assistant) dasselbe Gerät gleichzeitig ab, kann die Kommunikation unzuverlässig werden. Verwenden Sie ein Abfrageintervall von 10–30 Sekunden, um Verbindungskonflikte zu reduzieren.

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 Plug S Modul
Stromzähler Stromzähler Nur lesen

Leistungs- und Energiemessung — momentane Leistung (kW) und kumulierter Energieverbrauch (kWh)

numeric Einheit: kW / kWh

Stromzähler

Gesamtverbrauch lesen
# Simple HTTP Request:
VAR response := SENDHTTPREQUEST("/meter/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 return(PARSEJSON(content,"total")/60000);
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
VAR response := SENDHTTPREQUEST("/meter/0");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 RETURN(PARSEJSON(content, "power")/1000);
END;


# 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");
Schalter Schalter
boolean
Serviceattribute
Temperatur

Schalter

Schaltzustand lesen
VAR response := SENDHTTPREQUEST("/settings/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
#
# 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:
#VAR response := SENDHTTPREQUEST("/relay/0?turn=toggle");
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
Serviceattribute
Temperature
VAR response := SENDHTTPREQUEST("/status");
IF response.IsSuccess
 VAR content := response.Content;
 VAR responseHeaders := response.Headers;
 RETURN(PARSEJSON(content, "temperature"));
END;
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (7)
  • Live relay state — Template reads from /settings/relay/0 instead of /status — /status has real-time state
  • Overtemperature flag — Boolean flag in /status, triggers automatic relay shutdown at ~95°C
  • LED control — Enable/disable status LED via settings endpoint
  • Overpower protection threshold — Configurable maximum power limit (default 2300W), could be a service action
  • Auto-off timer — Auto-off timer in seconds, could be added as switch parameter
  • WiFi signal strength — WiFi RSSI in dBm, available in /status response
  • Reboot — Device reboot endpoint, could be added as service action

Quellen