TapHome

Shelly RGBW2

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

Der Shelly RGBW2 ist ein WLAN-RGBW-LED-Streifen-Controller mit vier PWM-Ausgängen (12/24 V DC). Er unterstützt zwei sich gegenseitig ausschließende Betriebsmodi — Color und White — wobei jeder seine eigene TapHome-Vorlage erfordert. TapHome kommuniziert mit dem Gerät per HTTP im lokalen Netzwerk; keine Cloud-Verbindung erforderlich.

Im Color-Modus steuern die vier Ausgänge einen RGBW-LED-Streifen als einzelnes Farblicht mit Farbton, Sättigung, Helligkeit und einem optionalen Weiß-(CCT-)Kanal. Im White-Modus fungieren die vier Ausgänge als unabhängige Dimmer, wobei jeder einen separaten weißen LED-Streifen oder eine Zone steuert.

Der Betriebsmodus muss in der Shelly-Weboberfläche (oder über die API) gewählt werden, bevor die entsprechende Vorlage importiert wird. Jede Vorlage validiert den aktuellen Modus bei jeder Abfrage und zeigt einen Fehler an, wenn das Gerät auf den falschen Modus eingestellt ist.

Konfiguration

Beide Vorlagen verbinden sich über WLAN. Beim Import der TapHome-Vorlage geben Sie die IP-Adresse des Geräts ein (Standard-Platzhalter 192.168.0.1) und eine optionale Übergangszeit in Millisekunden (Standard 300).

Der Übergangszeit-Parameter steuert, wie schnell das Licht zwischen Helligkeitsstufen übergeht. Er gilt für alle Schreibbefehle (Ein/Aus, Helligkeit, Farbänderungen) und beeinflusst das Debounce-Fenster — die Vorlage ignoriert abgefragte Werte für transitionTime + 500 ms nach jedem Schreibvorgang, um veraltete Messwerte während der Übergänge zu vermeiden.

Color-Modus-Vorlage

Farblicht

Die Vorlage stellt den RGBW-Streifen als einzelnes HSB-Farblicht mit zwei Untermodi bereit:

  • RGB-Farbe — Farbton und Sättigung steuern die Streifenfarbe. Die Vorlage konvertiert zwischen den RGB-Werten der Shelly-API (Rot, Grün, Blau 0-255) und dem HSB-Modell von TapHome. Die Helligkeit wird über den gain-Parameter gesteuert (0-100).
  • Weiß (CCT) — wenn die korrelierte Farbtemperatur eingestellt wird, schaltet die Vorlage auf die Weißkanal-Steuerung um. Der CCT-Bereich beträgt 3000-6500 K. Die Helligkeit wird über den white-Parameter gesteuert (0-100).

Der Lichtstatus wird aus der /status-Antwort (lights[0]) gelesen und über den /light/0-Endpoint gesteuert. Einschalten sendet turn=on mit den aktuellen Farb- oder Weißwerten; Ausschalten sendet turn=off. Alle Schreibbefehle enthalten den Übergangszeit-Parameter.

Leistungsmessung (Color)

Die Color-Vorlage enthält einen Energiezähler, der aus meters[0] liest:

  • Aktuelle Leistungmeters[0].power in Watt, auf kW konvertiert
  • Gesamtverbrauchmeters[0].total in Wattminuten, auf kWh konvertiert

Wenn das Licht eingeschaltet ist, aber die Leistung null anzeigt, zeigt die Vorlage eine Warnung mit dem Vorschlag an, das Gerätemodell in den Shelly-App-Einstellungen zu konfigurieren.

White-Modus-Vorlage

Vier unabhängige Dimmer

Die White-Vorlage stellt vier unabhängige Dimmerkanäle bereit, einen pro PWM-Ausgang:

KanalAusgangEndpointAbfrageintervall
Ch1R (Red)/light/02,5 s
Ch2G (Green)/light/12,5 s
Ch3B (Blue)/light/22,5 s
Ch4W (White)/light/32,5 s

Jeder Dimmer liest lights[N].ison und lights[N].brightness (0-100, auf 0-1 normalisiert) aus der /status-Antwort. Schreibbefehle verwenden /light/N?turn=on|off&brightness=VALUE. Alle Kanäle verwenden die gleiche Übergangszeit und Debounce-Logik.

Leistungsmessung (White)

Jeder Kanal hat seinen eigenen Energiezähler, der aus meters[0] bis meters[3] liest. Der erste Kanal fragt alle 2,5 Sekunden ab; die Kanäle 2-4 fragen in 15-Sekunden-Intervallen ab. Jeder Zähler liefert aktuelle Leistung (W in kW) und kumulative Energie (Wattminuten in kWh).

Service-Diagnose

Beide Vorlagen stellen 10 Service-Attribute zur Geräteüberwachung bereit:

  • Netzwerkinfo — IP-Adresse, MAC-Adresse (mit Doppelpunkten formatiert), WLAN-Signalstärke (dB)
  • Konnektivität — Cloud aktiviert/verbunden, MQTT verbunden
  • Geräteinfo — Gerätezeit, Betriebszeit (als Tage/Stunden/Minuten formatiert), RAM-Auslastung
  • Firmware — Firmware-Update verfügbar

Service-Aktionen

Beide Vorlagen teilen sich drei Service-Aktionen:

  • Cloud aktivieren — aktiviert oder deaktiviert die Shelly-Cloud-Verbindung
  • Neustart — löst einen Geräteneustart aus
  • Modus einstellen — die Color-Vorlage enthält „Set mode Color" (/settings?mode=color) und die White-Vorlage enthält „Set mode White" (/settings?mode=white). Diese Aktionen schalten den Betriebsmodus des Geräts über die API um.
Weitere Funktionen

Der Shelly RGBW2 stellt auch Lichteffekte (Color-Modus, Effektindex 0-3), den physischen Eingangsstatus, die interne Temperatur, das Übertemperatur-Flag und Leistungsschutzeinstellungen in seiner API bereit. Diese Funktionen können in einem zukünftigen Vorlagen-Update 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. Versuchen Sie den mDNS-Hostnamen (shellyrgbw2-AABBCCDDEE.local) statt der IP-Adresse — die IP kann sich nach einer DHCP-Erneuerung geändert haben
  3. Öffnen Sie http://{device-ip}/shelly im Browser — wenn es antwortet, ist das Gerät erreichbar
  4. Prüfen Sie, dass TapHome CCU und Shelly im selben Netzwerk / VLAN sind
Fehler „Mode White/Color is not supported"

Dieser Fehler bedeutet, dass das Gerät auf den falschen Betriebsmodus für die importierte Vorlage eingestellt ist. Lösung:

  1. Öffnen Sie die Shelly-Weboberfläche unter http://{device-ip}
  2. Schalten Sie den Betriebsmodus um, damit er zur Vorlage passt (Color oder White)
  3. Alternativ verwenden Sie die Service-Aktion „Set mode Color" oder „Set mode White" aus der anderen Vorlage, um den Modus über die API umzuschalten, und importieren dann die richtige Vorlage erneut
Leistung zeigt null an
  1. Bestätigen Sie, dass LEDs mit den Ausgängen des Shelly RGBW2 verbunden sind
  2. Öffnen Sie die Shelly-App oder Weboberfläche und prüfen Sie, ob das Gerätemodell unter Settings -> Device Model konfiguriert ist
  3. Prüfen Sie, ob das Licht eingeschaltet ist — der Zähler misst nur bei Stromfluss durch die Ausgänge
  4. Fragen Sie /status manuell ab und prüfen Sie, ob meters[0].power einen Wert ungleich null zurückgibt
Farblicht ändert sich nicht
  1. Überprüfen Sie, ob das Gerät im Color-Modus ist (prüfen Sie die /status-Antwort — mode sollte "color" sein)
  2. Stellen Sie sicher, dass das Licht eingeschaltet ist, bevor Sie Farbton oder Sättigung ändern
  3. Wenn sowohl gain als auch white ungleich null sind, setzt die Vorlage sie automatisch auf null zurück und schaltet das Licht aus — dies verhindert undefiniertes Verhalten, bei dem RGB- und Weißkanäle konkurrieren

Shelly Gen1-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. Verwenden Sie ein Abfrageintervall von 10-30 Sekunden.

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 RGBW2 Color Modul
Serviceattribute
IP-Adresse
MAC-Adresse
WLAN-Signal
Cloud aktiviert
Cloud verbunden
MQTT verbunden
Gerätezeit
FW-Update verfügbar
Betriebszeit
RAM
Serviceaktionen
Cloud aktivieren
Neustart
Modus Color einstellen
Benutzerdefinierte Variablen
transitionTime (numeric) = TransitionTimeLight transition duration in milliseconds (import parameter, default 300ms)

Shelly RGBW2 Color

Lesen (Modul)
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(0);
END

VAR response := SENDHTTPREQUEST("/status");

IF response.IsSuccess
    jsonStatus := response.Content;
    
    if PARSEJSON(jsonStatus, "$.mode", 1) = "white"
    adderror("Mode White is not supported");
    end
ELSE
    jsonStatus := NULL;
END
Serviceattribute
IP Address
VAR response := SENDHTTPREQUEST("/status");

IF response.IsSuccess
    jsonStatus := response.Content;
ELSE
    jsonStatus := NULL;
END

VAR address := PARSEJSON(jsonStatus, "$.wifi_sta.ip", 1);
IF (ISNULL(address), "-", address)
MAC Address
VAR value := PARSEJSON(jsonStatus, "$.mac", 1);
IF ISNULL(value)
    RETURN("-");
END;

STRING mac;
INT i := 0;
INT len := LENGTH(value);

WHILE i < len
    mac += GETAT(value, i);
    i += 1;
    
    IF MOD(i, 2) = 0 AND i < len
        mac += ":";
    END
LOOP

mac
WIFI signal
VAR signal := PARSEJSON(jsonStatus, "$.wifi_sta.rssi", 1);
IF (ISNULL(signal), "-", signal + "db");
Cloud enabled
VAR value := PARSEJSON(jsonStatus, "$.cloud.enabled", 1);
IF (ISNULL(value), "-", value)
Cloud connected
VAR value := PARSEJSON(jsonStatus, "$.cloud.connected", 1);
IF (ISNULL(value), "-", value)
MQTT connected
VAR value := PARSEJSON(jsonStatus, "$.mqtt.connected", 1);
IF (ISNULL(value), "-", value)
Device time
VAR value := PARSEJSON(jsonStatus, "$.time", 1);
IF (ISNULL(value), "-", value)
FW update available
VAR value := PARSEJSON(jsonStatus, "$.has_update");
IF (ISNULL(value), "-", value)
Uptime
VAR value := PARSEJSON(jsonStatus, "$.uptime", 1);
IF ISNULL(value)
    RETURN("-");
END

VAR days := FLOOR(value/86400, 1);
value := MOD(value, 86400);
VAR hours := FLOOR(value/3600, 1);
value := MOD(value, 3600);
VAR minutes := FLOOR(value/60, 1);

days + "day(s) " + hours + "h " + minutes + "m"
RAM
VAR ramFree := PARSEJSON(jsonStatus, "$.ram_free", 1);
VAR ramTotal := PARSEJSON(jsonStatus, "$.ram_total", 1);

IF ISNULL(ramFree) OR ISNULL(ramTotal)
    RETURN("-");
END

ramFree + " bytes free of " + ramTotal
Serviceaktionen
Enable cloud
Parameter: Enable (Enable / Disable)
VAR response := SENDHTTPREQUEST("/settings/cloud?enabled=" + enable);
VAR contentJson := response.Content;
VAR wasEnabled := PARSEJSON(contentJson, "enabled");

IF(wasEnabled, "Cloud enabled", "Cloud disabled");
Reboot
VAR response := SENDHTTPREQUEST("/reboot");
VAR contentJson := response.Content;
VAR wasRebooted := PARSEJSON(contentJson, "ok");

IF(wasRebooted, "Reboot successful", "Error");
Set mode Color
VAR response := SENDHTTPREQUEST("/settings?mode=color");
IF(response.isSuccess, "Color mode is set", "Error");
Stromzähler Stromzähler Nur lesen

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

numeric Einheit: W / kWh

Stromzähler

Gesamtverbrauch lesen
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

VAR power := PARSEJSON(jsonStatus, "$.meters[0].power");
VAR total := PARSEJSON(jsonStatus, "$.meters[0].total");
BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison");

IF ISNULL(power) OR ISNULL(total) OR (ison AND power=0)
	ADDWARNING("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");
	
    RETURN(NaN);
END

total / 60000.0
Bedarf lesen
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

VAR power := PARSEJSON(jsonStatus, "$.meters[0].power", 1);

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
Farblicht HSB-Licht

RGBW-Farblicht mit HSB-Steuerung — Farbton, Sättigung, Helligkeit und optionaler CCT-Weißkanal (3000–6500 K)

hsb

Farblicht

Lesen (Modul)
if PARSEJSON(jsonStatus, "$.lights[0].white", 1) > 0 and PARSEJSON(jsonStatus, "$.lights[0].gain", 1)
    SENDHTTPREQUEST("light/0?gain=0&white=0");
    SENDHTTPREQUEST("light/0?turn=off");
end
Helligkeit lesen
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Hb);
END

INT value;
IF !ISNAN(Ct)
    value := PARSEJSON(jsonStatus, "$.lights[0].white", 1);
ELSE
    value := PARSEJSON(jsonStatus, "$.lights[0].gain", 1);
END

IF ISNULL(value)
    RETURN(NaN);
END

BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison", 1);

IF ISNULL(isOn)
    RETURN(NaN);
END

IF(isOn, value/100.0, 0);
Helligkeit schreiben
IF St > 0.5
    IF !ISNAN(Ct)
    SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&gain=0&white=" + ROUND(Hb*100.0));
    ELSE
    SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&white=0&gain=" + ROUND(Hb*100.0));
    END
ELSE
    SENDHTTPREQUEST("light/0?turn=off&transition=" + transitionTime);
END

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Farbton lesen
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Hd);
END

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);

VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Hue);
Farbton schreiben
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE + "&white=0");


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Sättigung lesen
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Sa);
END

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);
 
VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Sättigung schreiben
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE + "&white=0");


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Farbtemperatur lesen
VAR now := NOW();

IF now.Ticks < debounceTimestamp
    RETURN(Ct);
END

INT value := PARSEJSON(jsonStatus, "$.lights[0].temp", 1);
IF PARSEJSON(jsonStatus, "$.lights[0].white", 1) = 0
    RETURN(NaN);
END
 
Ct
Farbtemperatur schreiben
IF Ct = NaN
    RETURN(0);
END

VAR temp := MIN(Ct, 6500);
temp := MAX(temp, 3000);

SENDHTTPREQUEST("light/0?transition=" + transitionTime + "&white=" + ROUND(Hb*100) + "&gain=0");

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (7)
  • Light effect — Color mode: effect index (0=off, 1–3=predefined effects), settable via /light/0?effect=N
  • Input State — Physical input state (0/1), available in /status response
  • WiFi RSSI (numeric) — WiFi RSSI in dBm as numeric value — template reads it as string with 'db' suffix
  • Power protection — Max power setting in Watts, available in /settings; read + write possible via /settings?max_power=N
  • OTA firmware update — Trigger OTA firmware update via /ota?update=true
  • Internal device temperature — Internal temperature in C, available in /status response (Gen1 devices)
  • Overheated — Overtemperature flag, boolean, available in /status response

Quellen