---
title: "Shelly DUO"
description: "Shelly DUO WLAN-CCT-Birne — Helligkeit und Farbtemperatur (2700–6500 K) plus Leistungsmessung per HTTP oder MQTT. TapHome-Vorlage für Shelly DUO Gen1."
url: "https://taphome.com/de/compatibility/shelly-duo/"
language: de
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["http","mqtt","lighting","wifi","cct","power-metering","led-bulb"]
  questions: ["Wie integriere ich die Shelly DUO mit TapHome?","Wie steuere ich Helligkeit und Farbtemperatur der Shelly DUO über TapHome?","Wie verbinde ich die Shelly DUO per HTTP mit TapHome?","Wie verbinde ich mehrere Shelly DUO Birnen per MQTT mit TapHome?","Warum zeigt die Shelly DUO null Leistung an?","Was ist der Debounce-Mechanismus in der Shelly DUO Vorlage?"]
---

# Shelly DUO

Kommunikation: Packet Parser → HTTP

- [Shelly DUO Produktseite](https://www.shelly.com/en/products/shop/shelly-bulb-duo)
- [Shelly DUO API-Dokumentation](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo)

> Netzwerkadresse
> 
> TapHome erreicht dieses Gerät unter der beim Import eingegebenen Adresse. Geben Sie dem Gerät eine feste Adresse — eine IP-Reservierung im Router oder seinen mDNS-Namen, falls es einen unterstützt —, sonst funktioniert die Integration nicht mehr, sobald der Router die Adresse ändert.
> 
> [Netzwerkvorbereitung](https://taphome.com/de/docs/setup/network-preparation/)

## Integrationsanleitung

Die Shelly DUO ist eine WLAN-LED-Birne mit E27-Fassung, die Helligkeitsdimmung und einstellbare weiße Farbtemperatur (CCT) im Bereich von 2700 K (warmweiß) bis 6500 K (Tageslicht) unterstützt. TapHome integriert sich lokal über WLAN mit der Birne per HTTP REST API oder MQTT. Keine Cloud-Verbindung erforderlich.

Zwei TapHome-Vorlagen sind verfügbar: eine **HTTP-Vorlage** für eine einzelne Birne und eine **MQTT-Vorlage**, die bis zu 5 DUO-Birnen über eine einzelne MQTT-Broker-Verbindung steuern kann. Beide Vorlagen stellen die gleichen Gerätetypen pro Birne bereit — ein Lichtgerät mit Helligkeits- und CCT-Steuerung und einen Energiezähler für die Leistungsmessung.

## Konfiguration

### HTTP-Vorlage

Die HTTP-Vorlage benötigt die IP-Adresse der Birne (oder den mDNS-Hostnamen `ShellyBulbDuo-{MAC}.local`). TapHome fragt den `/status`-Endpoint alle 2,5 Sekunden ab und speichert die JSON-Antwort in der benutzerdefinierten Variable `jsonStatus`. Einzelne Geräteskripte parsen die gespeicherte Antwort ohne redundante HTTP-Aufrufe.

Die Vorlage akzeptiert zwei Importparameter:

- **IP-Adresse** — die lokale IP der Birne (Standard `192.168.0.1`)
- **Übergangszeit** — Dauer des Lichtübergangs in Millisekunden (Standard 300 ms)

### MQTT-Vorlage

Die MQTT-Vorlage benötigt die Broker-IP, den Port und die **Device ID** für jede Birne (Format: `ShellyBulbDuo-DEVICEID`). Die Device ID finden Sie in der Shelly-Weboberfläche unter **Settings** > **Device Info** oder über `GET http://{bulb-ip}/settings` im Feld `mqtt.id`.

Die Vorlage unterstützt bis zu **5 DUO-Birnen** über ein einzelnes Modul. Jede Birne wird durch ihre eigene Topic-Variable identifiziert (`bulb1topic` bis `bulb5topic`). Ungenutzte Birnenplätze können auf ihrem Standard-Platzhalterwert belassen werden.

Die Vorlage akzeptiert drei Importparameter:

- **MQTT Broker IP** — die Broker-Adresse (Standard `192.168.0.1`)
- **MQTT Broker Port** — der Broker-Port (Standard `1883`)
- **Übergangszeit** — Dauer des Lichtübergangs in Millisekunden (Standard 300 ms)

> [!WARNING]
> Bei Gen1 Shelly-Geräten **deaktiviert** das Aktivieren von MQTT die **Shelly Cloud**. Beides kann nicht gleichzeitig laufen.

## Gerätefunktionen

### Lichtsteuerung

Die Vorlage stellt die DUO als Weißlichtgerät mit zwei steuerbaren Parametern bereit:

- **Helligkeit** — gelesen aus `lights[0].brightness` (0–100, intern auf 0,0–1,0 konvertiert) und `lights[0].ison`; gesteuert über `/light/0?turn=on|off&brightness=N` (HTTP) oder durch Veröffentlichung von JSON zum Topic `light/0/set` (MQTT)
- **Farbtemperatur** — gelesen aus `lights[0].temp` (2700–6500 K); gesteuert über `/light/0?temp=K` (HTTP) oder das `temp`-Feld im JSON-Payload (MQTT)

Beide Parameter werden zusammen in einem einzigen Schreibbefehl gesendet. Der Übergangszeit-Parameter steuert die Überblendungsdauer für alle Änderungen.

Wenn das Licht ausgeschaltet wird (Helligkeit auf 0 gesetzt), sendet die Vorlage `turn=off` (HTTP) oder veröffentlicht `off` zum Topic `light/0/command` (MQTT).

### Debounce-Mechanismus

Die HTTP-Vorlage enthält einen Debounce-Schutz zur Vermeidung veralteter Messwerte während Lichtübergängen. Nach jedem Schreibbefehl ignoriert die Vorlage `/status`-Lesungen für die Dauer der Übergangszeit plus 500 ms. Während dieser Zeit geben die Leseskripte die zuletzt bekannten Werte zurück, anstatt das Gerät abzufragen. Dies verhindert das kurzzeitige Anzeigen von Zwischenzuständen in der Benutzeroberfläche, während die Birne übergeht.

Die MQTT-Vorlage benötigt keinen Debounce — sie empfängt Statusaktualisierungen direkt von der Birne, sobald sie auftreten.

### Leistungsmessung

Der eingebaute Energiezähler liest zwei Werte:

- **Aktuelle Leistung** — `meters[0].power` in Watt, auf kW konvertiert (geteilt durch 1000)
- **Gesamtverbrauch** — `meters[0].total` in Wattminuten, auf kWh konvertiert (geteilt durch 60 000)

Der Zähler ist schreibgeschützt und aktualisiert sich automatisch bei jedem Abfragezyklus (HTTP) oder bei jeder MQTT-Nachricht.

> [!NOTE]
> Um die Leistungsüberwachung zu aktivieren, muss das Gerätemodell in der Shelly-App oder im Webbrowser unter Settings > Device Model konfiguriert sein. Wenn die Birne eingeschaltet ist, aber die Leistung null anzeigt, zeigt die Vorlage eine Warnung zu diesem Konfigurationsschritt an.

### Service-Diagnose (HTTP-Vorlage)

Die HTTP-Vorlage stellt 10 Service-Attribute bereit:

- **Netzwerkinfo** — IP-Adresse, MAC-Adresse (mit Doppelpunkttrennern 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 (HTTP-Vorlage)

Zwei Service-Aktionen sind verfügbar:

- **Cloud aktivieren** — aktiviert oder deaktiviert die Shelly-Cloud-Verbindung
- **Neustart** — löst einen Geräteneustart aus

### Weitere Funktionen

Die Shelly DUO stellt auch einen Lichttimer (Aktiv-Flag und verbleibende Sekunden), einen Auto-Off-Timer am Lichtendpunkt, interne Gerätetemperatur, WLAN-Signalstärke als eigenständiges Sensorgerät und ein MQTT-Online/Offline-LWT-Topic zur Verbindungsstatuserkennung bereit. Diese Funktionen können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

## Fehlerbehebung

### Birne antwortet nicht (HTTP)

1. Überprüfen Sie, ob die DUO mit dem WLAN verbunden ist und eine gültige IP-Adresse hat
2. Versuchen Sie den mDNS-Hostnamen (`ShellyBulbDuo-AABBCCDDEE.local`) statt der IP-Adresse — die IP kann sich nach einer DHCP-Erneuerung geändert haben
3. Öffnen Sie `http://{bulb-ip}/shelly` im Browser — wenn ein JSON mit `"type":"SHBDUO-1"` zurückkommt, ist die Birne erreichbar
4. Prüfen Sie, dass TapHome CCU und DUO im selben Netzwerk / VLAN sind

### Leistung zeigt null an

1. Bestätigen Sie, dass das Gerätemodell in der Shelly-App konfiguriert ist (Settings > Device Model)
2. Prüfen Sie, ob die Birne eingeschaltet ist — der Zähler misst nur bei Stromfluss
3. Rufen Sie `/status` manuell auf und prüfen Sie, ob `meters[0].power` einen Wert ungleich null zurückgibt

### MQTT-Birne antwortet nicht

1. Überprüfen Sie, ob MQTT in der Shelly-Weboberfläche aktiviert ist (Internet & Security > Advanced — MQTT)
2. Bestätigen Sie, dass Broker-Adresse und Port sowohl im Shelly-Gerät als auch in den TapHome-Moduleinstellungen korrekt sind
3. Prüfen Sie, ob die benutzerdefinierte Variable `bulbNtopic` exakt mit der Device ID der Birne übereinstimmt (z. B. `ShellyBulbDuo-B929CC`)
4. Verwenden Sie einen MQTT-Client (z. B. MQTT Explorer), um `shellies/#` zu abonnieren und zu verifizieren, dass die Birne Nachrichten veröffentlicht

### Lichtübergänge wirken ruckelig

1. Erhöhen Sie den Übergangszeit-Parameter — die standardmäßigen 300 ms können für große Helligkeitsänderungen zu kurz sein
2. Bei HTTP-Nutzung stellen Sie sicher, dass kein anderes System die Birne gleichzeitig abfragt — Gen1-Geräte unterstützen nur 2 gleichzeitige Verbindungen

> [!WARNING]
> 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. Erwägen Sie den Wechsel zur MQTT-Vorlage für Umgebungen mit mehreren Systemen.

## 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](https://www.shelly.com/en/support/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.1` → **Internet & Security** → **Wi-Fi Mode - Client**
4. Geben Sie SSID und Passwort ein → **Save**

> [!NOTE]
> 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

> [!TIP]
> 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

> [!NOTE]
> 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 2

Diese Geräte erscheinen nach dem Import in TapHome.

Shelly DUO 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         |

Benutzerdefinierte Variablen

|                                             |                                                                              |
|---------------------------------------------|------------------------------------------------------------------------------|
| `transitionTime` (numeric) = TransitionTime | Dauer des Lichtübergangs in Millisekunden (Importparameter, Standard 300 ms) |

Lesen (Modul)

```taphome
VAR now := NOW();

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

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

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

Serviceattribute

IP Address

```taphome
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

```taphome
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

```taphome
VAR signal := PARSEJSON(jsonStatus, "$.wifi_sta.rssi", 1);
IF (ISNULL(signal), "-", signal + "db");
```

Cloud enabled

```taphome
VAR value := PARSEJSON(jsonStatus, "$.cloud.enabled", 1);
IF (ISNULL(value), "-", value)
```

Cloud connected

```taphome
VAR value := PARSEJSON(jsonStatus, "$.cloud.connected", 1);
IF (ISNULL(value), "-", value)
```

MQTT connected

```taphome
VAR value := PARSEJSON(jsonStatus, "$.mqtt.connected", 1);
IF (ISNULL(value), "-", value)
```

Device time

```taphome
VAR value := PARSEJSON(jsonStatus, "$.time", 1);
IF (ISNULL(value), "-", value)
```

FW update available

```taphome
VAR value := PARSEJSON(jsonStatus, "$.has_update");
IF (ISNULL(value), "-", value)
```

Uptime

```taphome
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

```taphome
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)

```taphome
VAR response := SENDHTTPREQUEST("/settings/cloud?enabled=" + enable);
VAR contentJson := response.Content;
VAR wasEnabled := PARSEJSON(contentJson, "enabled");

IF(wasEnabled, "Cloud enabled", "Cloud disabled");
```

Reboot

```taphome
VAR response := SENDHTTPREQUEST("/reboot");
VAR contentJson := response.Content;
VAR wasRebooted := PARSEJSON(contentJson, "ok");

IF(wasRebooted, "Reboot successful", "Error");
```

Licht Weißlicht Lesen und Schreiben

CCT-Weißlicht (2700–6500 K) — Helligkeitsdimmung und Farbtemperatursteuerung

numeric Einheit: %, K json\_path

Helligkeit lesen

```taphome
VAR now := NOW();

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

VAR value := PARSEJSON(jsonStatus, "$.lights[0].brightness", 1);

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

```taphome
IF St > 0.5
    SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&brightness=" + ROUND(Hb*100.0));
ELSE
    SENDHTTPREQUEST("light/0?turn=off&transition=" + transitionTime);
END

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

Farbtemperatur lesen

```taphome
VAR now := NOW();

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

VAR value := PARSEJSON(jsonStatus, "$.lights[0].temp", 1);

IF ISNULL(value)
    RETURN(NaN);
END
 
value
```

Farbtemperatur schreiben

```taphome
SENDHTTPREQUEST("light/0?transition=" + transitionTime + "&brightness=" + ROUND(Hb*100) + "&temp=" + Ct);

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

Stromzähler Stromzähler Nur lesen

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

numeric Einheit: W / kWh json\_path

Gesamtverbrauch lesen

```taphome
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

```taphome
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

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

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
```

**Verbindung:** Packet Parser → HTTP • Hostname: `ShellyBulbDuo-{MAC}.local`

Mögliche Verbesserungen (7)

- Light Timer Active — Boolean — whether a countdown timer is currently active on the light output.
- Timer Remaining — Seconds remaining on active timer. Available in /status response.
- Auto-off Timer — Auto-off timer in seconds, could be added as service action or light parameter.
- WiFi Signal Strength (as device) — WiFi RSSI in dBm. HTTP template exposes it as service attribute but not as a standalone sensor device.
- Internal Device Temperature — Internal temperature in celsius. Available in /status for Gen1 devices. Not exposed in DUO template.
- MQTT Real-time Power (as device attribute) — MQTT template reads power in electric meter device but does not expose it as a service attribute on the light device.
- Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline bulbs.

## Importparameter

Diese Werte geben Sie beim Import des XML ein.

| In der App abgefragt | Standard      |
|----------------------|---------------|
| IP-Adresse           | `192.168.0.1` |
| Transition time (ms) | `300`         |

## Quellen

- Shelly Gen1 API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/) 2026-03-12
- Home Assistant Shelly Integration
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-12
- Shelly DUO — Device-Specific API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo) 2026-03-30
- Shelly DUO — Product Datasheet
  
  [shellystore.co.uk](https://shellystore.co.uk/wp-content/uploads/2021/05/Duo-specs.pdf) 2026-03-30
  
  [PDF](https://taphome.com/compatibility/devices/shelly-duo/manufacturer/duo-specs.pdf)

Herstellerdokumente sind © ihrer jeweiligen Eigentümer. Sie werden so bereitgestellt, wie der Hersteller sie veröffentlicht hat, nur zur Information.

## Verwandte Dokumentation

- [Packet-Parser-Integration](https://taphome.com/de/compatibility/packet-parser-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/de/docs/integration/packet-parser/)
- [Packet-Parser-Funktionen](https://taphome.com/de/docs/script/packet-parser/)
- [Parsing-Funktionen](https://taphome.com/de/docs/script/parsing-functions/)

