---
title: "Shelly DUO RGBW MQTT"
description: "Ovládejte až 5 Shelly DUO RGBW žárovek přes MQTT — plné RGB barvy, laditelná bílá 3000–6500 K, plynulé přechody a měření spotřeby."
url: "https://taphome.com/cs/compatibility/shelly-duo-rgbw-mqtt/"
language: cs
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["mqtt","lighting","wifi","rgbw","color-temperature","power-metering"]
  questions: ["Jak integrovat Shelly DUO RGBW s TapHome přes MQTT?","Co ovládá TapHome šablona Shelly DUO RGBW MQTT?","Jak připojit více Shelly DUO RGBW žárovek přes MQTT k TapHome?","Jak najít MQTT Device ID Shelly DUO RGBW?","Proč Shelly DUO RGBW ukazuje nulové hodnoty spotřeby?","Jak přepínat mezi RGB a bílým režimem na Shelly DUO RGBW přes MQTT?"]
---

# Shelly DUO RGBW MQTT

Komunikace: Packet Parser → MQTT

- [Produktová stránka Shelly DUO RGBW](https://www.shelly.com/en/products/shop/shelly-duo-rgbw-gu10)

> Adresa v síti
> 
> U MQTT brokeru vestavěného v TapHome zadejte v TapHome jako adresu brokeru `127.0.0.1`. V zařízení zadejte IP adresu TapHome Core a jednotce Core dejte rezervaci IP v routeru.
> 
> [Příprava sítě](https://taphome.com/cs/docs/setup/network-preparation/)

## Návod na integraci

Shelly DUO RGBW (model SHCB-1) je chytrá Wi-Fi LED žárovka Gen1 dostupná v provedeních E27 a GU10. Podporuje plné RGB barvy a laditelnou bílou (CCT 3000–6500 K) s plynulými přechodovými efekty. Toto je **MQTT varianta** integrace TapHome — šablona komunikuje se žárovkami přes sdílený MQTT broker v lokální síti. K dispozici je také [HTTP varianta](https://taphome.com/cs/compatibility/shelly-duo-rgbw/) pro sestavy s jednou žárovkou.

Šablona podporuje až **5 Shelly DUO RGBW žárovek** na modul. Každá instance žárovky je rozlišena vlastní proměnnou `bulbNtopic`, která odkazuje na MQTT Device ID žárovky. Každá žárovka poskytuje RGBW světlo a elektroměr — celkem 10 zařízení.

## Konfigurace

### Device ID

Každá Shelly DUO RGBW žárovka má unikátní MQTT Device ID ve formátu `shellycolorbulb-<DEVICEID>`, kde `<DEVICEID>` je odvozeno z MAC adresy (např. `shellycolorbulb-B929CC`).

Device ID najdete:

- Na obalu zařízení nebo štítku (MAC adresa)
- Ve webovém rozhraní Shelly: **Settings** → **Device Info**
- Přes API: `GET http://<device-ip>/settings` → pole `mqtt.id`

### Proměnné modulu

Po importu šablony v TapHome nakonfigurujte proměnné pro topicy žárovek:

| Proměnná | Výchozí hodnota | Popis |
|----------|----------------|-------|
| `bulb1topic` | `shellycolorbulb-deviceid1` | MQTT Device ID pro žárovku 1 |
| `bulb2topic` | `shellycolorbulb-deviceid2` | MQTT Device ID pro žárovku 2 |
| `bulb3topic` | `shellycolorbulb-deviceid3` | MQTT Device ID pro žárovku 3 |
| `bulb4topic` | `shellycolorbulb-deviceid4` | MQTT Device ID pro žárovku 4 |
| `bulb5topic` | `shellycolorbulb-deviceid5` | MQTT Device ID pro žárovku 5 |

Nahraďte výchozí zástupný text skutečným Device ID každé žárovky (např. `shellycolorbulb-B929CC`). Konfigurujte pouze sloty, které skutečně používáte — nepoužité sloty s výchozím zástupným textem zobrazí chybu vyzývající k nastavení správného topicu.

Modul se přihlašuje k `shellies/#` (QoS 0, port 1883) a listener skripty filtrují zprávy podle nakonfigurovaného prefixu topicu pro každou žárovku.

> [!WARNING]
> Na Gen1 Shelly zařízeních zapnutí MQTT **vypne Shelly Cloud**. Obě funkce nemohou běžet současně.

## Funkce zařízení

### Ovládání světla

Každá žárovka je mapována jako HSB Light zařízení v TapHome. Žárovka pracuje ve dvou vzájemně se vylučujících režimech:

- **Barevný režim** — plné RGB ovládání přes červený, zelený a modrý kanál (0–255 každý) plus gain (0–100 %). TapHome konvertuje RGB na HSV interně — odstín (0–360°), sytost a jas jsou dostupné jako ovládací vlastnosti. Nastavení odstínu nebo sytosti odešle `color/0/set` JSON payload s `"mode":"color"`.
- **Bílý režim** — laditelná bílá přes teplotu barvy (3000–6500 K) a jas (0–100 %). Nastavení hodnoty CCT v TapHome automaticky přepne žárovku do bílého režimu publikováním `"mode":"white"` s teplotou a jasem.

Všechny příkazy k zápisu obsahují konfigurovatelný čas přechodu (výchozí 300 ms) pro plynulé stmívání mezi stavy. Mechanismus debounce zabraňuje čtení neaktuálních údajů během přechodů — šablona ignoruje příchozí MQTT stavové zprávy po dobu `transitionTime + 3000 ms` po každém příkazu k zápisu.

### Měření spotřeby

Každá instance žárovky obsahuje elektroměr, který čte dvě hodnoty:

- **Okamžitý výkon** — z `shellies/{id}/light/0/power`, hlášený ve wattech, konvertovaný na kW (payload / 1000)
- **Celková spotřeba** — z `shellies/{id}/light/0/energy`, hlášená ve watt-minutách, konvertovaná na kWh (payload / 60 000)

> [!TIP]
> Měření spotřeby vyžaduje nakonfigurování modelu zařízení v aplikaci Shelly nebo webovém rozhraní v **Settings** > **Device Model**. Bez této konfigurace zůstávají hodnoty spotřeby na nule.

### Další funkce

Shelly DUO RGBW také podporuje světelné efekty (meteor shower, gradual change, breath, flash, on/off gradual, red/green change), dedikovaný bílý LED kanál (0–255) v barevném režimu, stav MQTT připojení přes LWT topic a kompletní JSON stavový report (firmware ≥1.8.0) s Wi-Fi RSSI, uptime a teplotními údaji. Tyto funkce mohou být přidány v budoucí aktualizaci šablony.

## Řešení problémů

### Žárovky nereagují

1. Ověřte, že MQTT je zapnuto ve webovém rozhraní každé žárovky (**Internet & Security** > **Advanced — MQTT**)
2. Potvrďte správnost adresy brokeru a portu v nastavení Shelly zařízení i v konfiguraci TapHome modulu
3. Zkontrolujte, zda každá vlastní proměnná `bulbNtopic` přesně odpovídá Device ID žárovky (např. `shellycolorbulb-B929CC`)
4. Použijte MQTT klienta (např. MQTT Explorer) pro přihlášení k `shellies/#` a ověřte, že každá žárovka publikuje zprávy

### Barvy se zobrazují nesprávně

1. Ověřte, že žárovka je v barevném režimu — RGB barvy fungují pouze v barevném režimu, ne v bílém
2. Ujistěte se, že sytost je větší než nula — sytost 0 produkuje bílé světlo bez ohledu na odstín
3. Zkontrolujte, že gain (jas v barevném režimu) není nastaven na nulu

### Hodnoty spotřeby ukazují nulu

1. Potvrďte, že model zařízení je nakonfigurován v aplikaci Shelly nebo webovém rozhraní (**Settings** > **Device Model**)
2. Ověřte, že žárovka je zapnutá — měřič čte pouze když žárovka odebírá energii

> [!WARNING]
> Gen1 Shelly zařízení **nepodporují** MQTT přes TLS. Komunikace mezi žárovkami a MQTT brokerem je nešifrovaná (plain MQTT, port 1883). Ujistěte se, že MQTT broker je v důvěryhodné lokální síti.

## Jak nainstalovat v TapHome

### Předpoklady

- Zařízení Shelly připojené k Wi-Fi (2,4 GHz), např. přes aplikaci Shelly nebo vlastní přístupový bod zařízení
- MQTT broker běžící ve vaší lokální síti (např. Mosquitto, Home Assistant nebo vestavěný broker TapHome)
- TapHome CCU ve stejné síti jako broker

> [!WARNING]
> Na zařízeních **Gen1** povolení MQTT **vypne Shelly Cloud**. Obojí nemůže běžet současně. Na zařízeních Gen2/Plus toto omezení neplatí.

### Krok 1 — Povolte MQTT na zařízení Shelly

#### Zařízení Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

1. Otevřete webové rozhraní Shelly: `http://<device-ip>/`
2. Přejděte na **Internet & Security** → **Advanced — MQTT**
3. Povolte **MQTT**
4. Nastavte **MQTT Server**: `<broker-ip>:<port>` (např. `192.168.1.10:1883`)
5. Volitelně nastavte **MQTT User** a **MQTT Password**, pokud váš broker vyžaduje autentifikaci
6. Klikněte na **Save** — zařízení se restartuje a připojí k brokeru

#### Zařízení Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

1. Otevřete webové rozhraní Shelly: `http://<device-ip>/`
2. Přejděte na **Settings** → **MQTT**
3. Povolte **MQTT**
4. Nastavte **Server**: `<broker-ip>:<port>` (např. `192.168.1.10:1883`)
5. **Client ID** je předvyplněné ID zařízení (např. `shellyplus1pm-AABBCCDDEE`) — ponechte tak, pokud nemáte konkrétní důvod ke změně
6. Klikněte na **Save** a restartujte zařízení

U vestavěného brokeru TapHome je `<broker-ip>` IP adresa TapHome Core. Dejte jednotce Core rezervaci IP v routeru, jinak zařízení ztratí broker, když router adresu změní → [Příprava sítě](https://taphome.com/cs/docs/setup/network-preparation/).

> [!TIP]
> Pro ověření funkčnosti MQTT použijte MQTT klienta (např. MQTT Explorer) a přihlaste se k odběru `shellies/#` (Gen1) nebo `<device-id>/#` (Gen2). Měli byste vidět stavové zprávy ze zařízení.

### Krok 2 — Zjistěte Device ID / MQTT Client ID

Některé šablony vyžadují parametr **Device ID** nebo **MQTT Client ID**. Jde o jedinečný identifikátor používaný v MQTT topicích.

- **Gen1:** nachází se na štítku jako MAC adresa (např. `AABBCCDDEE`). Device ID = `shelly<model>-<mac>`, např. `shelly1pm-AABBCCDDEE`
- **Gen2/Plus:** nachází se ve webovém rozhraní Shelly v části **Settings** → **Device Info** → **Device ID**, nebo na štítku zařízení

### Krok 3 — Konfigurace v TapHome

1. V TapHome přidejte nový modul **Packet Parser (MQTT)**
2. **IP Address:** pro vestavěný broker TapHome `127.0.0.1` (jednotka se připojuje sama k sobě, adresa se nikdy nezmění); pro externí broker jeho IP adresa (např. `192.168.1.10`)
3. **Port:** `1883` (výchozí; pro TLS použijte `8883`)
4. **Device ID / MQTT Client ID:** zadejte hodnotu z kroku 2 (pokud to šablona vyžaduje)
5. Importujte šablonu — TapHome se automaticky přihlásí k odběru topiců zařízení

## Dostupná zařízení 10

Tato zařízení se po importu zobrazí v TapHome.

Shelly DUO RGBW MQTT Modul

Vlastní proměnné

|                                                   |                                                                                                                                                                             |
|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `bulb1topic` (string) = shellycolorbulb-deviceid1 | MQTT Device ID žárovky 1, použité v topicu shellies/&lt;Device ID&gt;/… — formát je 'shellycolorbulb-DEVICEID' (Device ID najdete v Shelly web UI → Settings → Device Info) |
| `bulb2topic` (string) = shellycolorbulb-deviceid2 | Název MQTT topicu žárovky 2                                                                                                                                                 |
| `bulb3topic` (string) = shellycolorbulb-deviceid3 | Název MQTT topicu žárovky 3                                                                                                                                                 |
| `bulb4topic` (string) = shellycolorbulb-deviceid4 | Název MQTT topicu žárovky 4                                                                                                                                                 |
| `bulb5topic` (string) = shellycolorbulb-deviceid5 | Název MQTT topicu žárovky 5                                                                                                                                                 |

Elektroměr 1 Elektroměr Pouze ke čtení

Měření spotřeby žárovky 1 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb1topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

RGBW světlo 1 HSB světlo Čtení i zápis

HSB světlo se dvěma režimy — plné RGB barvy s gainem, nebo laditelná bílá (3000–6500 K) s jasem

json JSON (ison, mode, red, green, blue, white, gain, temp, brightness, effect)

Listener

```taphome
IF(INDEXOF(bulb1topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR now := NOW();
IF now.Ticks < debounceTimestamp
    RETURN(0);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb1topic + "/color/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

BOOL ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR mode := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.mode", 1);

IF ISNULL(mode)
    RETURN(0);
END

INT bright;

IF mode = "color"
    UINT8 red := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.red");
    UINT8 green := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.green");
    UINT8 blue := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.blue");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.gain");
    
    VAR hsvColor := RGBTOHSV(red, green, blue);
    
    Hd := ROUND(hsvColor.Hue);
    Sa := ROUND(hsvColor.Saturation * 100.0) / 100.0;
    Ct := NaN;
ELSE
    Ct := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.temp");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.brightness");
END

IF ison
    Hb:= bright / 100.0;
    St := isOn;
ELSE
    Hb := 0;
    St := 0;
END
```

Zápis jasu

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

IF St > 0.5
    VAR topic := "shellies/" + bulb1topic + "/color/0/set";
    
	IF ISNAN(Ct)
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"gain\": " + ROUND(Hb*100.0) + "}");
    ELSE
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
        
    END
ELSE
    MQTTPUBLISH("shellies/" + bulb1topic + "/color/0/command", "off");
END
```

Zápis odstínu

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb1topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis saturace

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb1topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis barevné teploty

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb1topic + "/color/0/set";

MQTTPUBLISH(topic, "{\"mode\": \"white\", \"brightness\": " + ROUND(Hb*100.0) + ", \"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Elektroměr 2 Elektroměr Pouze ke čtení

Měření spotřeby žárovky 2 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb2topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

RGBW světlo 2 HSB světlo Čtení i zápis

HSB světlo se dvěma režimy — plné RGB barvy s gainem, nebo laditelná bílá (3000–6500 K) s jasem

json JSON (ison, mode, red, green, blue, white, gain, temp, brightness, effect)

Listener

```taphome
IF(INDEXOF(bulb2topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR now := NOW();
IF now.Ticks < debounceTimestamp
    RETURN(0);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb2topic + "/color/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

BOOL ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR mode := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.mode", 1);

IF ISNULL(mode)
    RETURN(0);
END

INT bright;

IF mode = "color"
    UINT8 red := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.red");
    UINT8 green := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.green");
    UINT8 blue := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.blue");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.gain");
    
    VAR hsvColor := RGBTOHSV(red, green, blue);
    
    Hd := ROUND(hsvColor.Hue);
    Sa := ROUND(hsvColor.Saturation * 100.0) / 100.0;
    Ct := NaN;
ELSE
    Ct := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.temp");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.brightness");
END

IF ison
    Hb:= bright / 100.0;
    St := isOn;
ELSE
    Hb := 0;
    St := 0;
END
```

Zápis jasu

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

IF St > 0.5
    VAR topic := "shellies/" + bulb2topic + "/color/0/set";
    
	IF ISNAN(Ct)
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"gain\": " + ROUND(Hb*100.0) + "}");
    ELSE
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
        
    END
ELSE
    MQTTPUBLISH("shellies/" + bulb2topic + "/color/0/command", "off");
END
```

Zápis odstínu

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb2topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis saturace

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb2topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis barevné teploty

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb2topic + "/color/0/set";

MQTTPUBLISH(topic, "{\"mode\": \"white\", \"brightness\": " + ROUND(Hb*100.0) + ", \"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Elektroměr 3 Elektroměr Pouze ke čtení

Měření spotřeby žárovky 3 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb2topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

RGBW světlo 3 HSB světlo Čtení i zápis

HSB světlo se dvěma režimy — plné RGB barvy s gainem, nebo laditelná bílá (3000–6500 K) s jasem

json JSON (ison, mode, red, green, blue, white, gain, temp, brightness, effect)

Listener

```taphome
IF(INDEXOF(bulb3topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR now := NOW();
IF now.Ticks < debounceTimestamp
    RETURN(0);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb3topic + "/color/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

BOOL ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR mode := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.mode", 1);

IF ISNULL(mode)
    RETURN(0);
END

INT bright;

IF mode = "color"
    UINT8 red := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.red");
    UINT8 green := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.green");
    UINT8 blue := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.blue");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.gain");
    
    VAR hsvColor := RGBTOHSV(red, green, blue);
    
    Hd := ROUND(hsvColor.Hue);
    Sa := ROUND(hsvColor.Saturation * 100.0) / 100.0;
    Ct := NaN;
ELSE
    Ct := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.temp");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOADStatus, "$.brightness");
END

IF ison
    Hb:= bright / 100.0;
    St := isOn;
ELSE
    Hb := 0;
    St := 0;
END
```

Zápis jasu

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

IF St > 0.5
    VAR topic := "shellies/" + bulb3topic + "/color/0/set";
    
	IF ISNAN(Ct)
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"gain\": " + ROUND(Hb*100.0) + "}");
    ELSE
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
        
    END
ELSE
    MQTTPUBLISH("shellies/" + bulb3topic + "/color/0/command", "off");
END
```

Zápis odstínu

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb3topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis saturace

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb3topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis barevné teploty

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb3topic + "/color/0/set";

MQTTPUBLISH(topic, "{\"mode\": \"white\", \"brightness\": " + ROUND(Hb*100.0) + ", \"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Elektroměr 4 Elektroměr Pouze ke čtení

Měření spotřeby žárovky 4 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb2topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

RGBW světlo 4 HSB světlo Čtení i zápis

HSB světlo se dvěma režimy — plné RGB barvy s gainem, nebo laditelná bílá (3000–6500 K) s jasem

json JSON (ison, mode, red, green, blue, white, gain, temp, brightness, effect)

Listener

```taphome
IF(INDEXOF(bulb4topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR now := NOW();
IF now.Ticks < debounceTimestamp
    RETURN(0);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb4topic + "/color/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

BOOL ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR mode := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.mode", 1);

IF ISNULL(mode)
    RETURN(0);
END

INT bright;

IF mode = "color"
    UINT8 red := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.red");
    UINT8 green := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.green");
    UINT8 blue := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.blue");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.gain");
    
    VAR hsvColor := RGBTOHSV(red, green, blue);
    
    Hd := ROUND(hsvColor.Hue);
    Sa := ROUND(hsvColor.Saturation * 100.0) / 100.0;
    Ct := NaN;
ELSE
    Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");
END

IF ison
    Hb:= bright / 100.0;
    St := isOn;
ELSE
    Hb := 0;
    St := 0;
END
```

Zápis jasu

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

IF St > 0.5
    VAR topic := "shellies/" + bulb4topic + "/color/0/set";
    
	IF ISNAN(Ct)
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"gain\": " + ROUND(Hb*100.0) + "}");
    ELSE
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
        
    END
ELSE
    MQTTPUBLISH("shellies/" + bulb4topic + "/color/0/command", "off");
END
```

Zápis odstínu

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb4topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis saturace

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb4topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis barevné teploty

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb4topic + "/color/0/set";

MQTTPUBLISH(topic, "{\"mode\": \"white\", \"brightness\": " + ROUND(Hb*100.0) + ", \"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

Elektroměr 5 Elektroměr Pouze ke čtení

Měření spotřeby žárovky 5 — okamžitý výkon (kW) a kumulativní energie (kWh)

numeric Jednotka: kW / kWh

Listener

```taphome
ADDINFO("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");

IF(INDEXOF(bulb2topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/light/0/power") = 0
    Ed := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 1000.0;
ELSEIF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/light/0/energy") = 0
    To := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD)) / 60000.0;
END
```

RGBW světlo 5 HSB světlo Čtení i zápis

HSB světlo se dvěma režimy — plné RGB barvy s gainem, nebo laditelná bílá (3000–6500 K) s jasem

json JSON (ison, mode, red, green, blue, white, gain, temp, brightness, effect)

Listener

```taphome
IF(INDEXOF(bulb5topic, "shellycolorbulb-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'shellycolorbulb-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

VAR now := NOW();
IF now.Ticks < debounceTimestamp
    RETURN(0);
END

IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + bulb5topic + "/color/0/status") != 0
    RETURN(0);
END

IF RECEIVEDMSG.PAYLOAD.LENGTH = 0
    RETURN(0);
END

BOOL ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR mode := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.mode", 1);

IF ISNULL(mode)
    RETURN(0);
END

INT bright;

IF mode = "color"
    UINT8 red := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.red");
    UINT8 green := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.green");
    UINT8 blue := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.blue");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.gain");
    
    VAR hsvColor := RGBTOHSV(red, green, blue);

    Hd := ROUND(hsvColor.Hue);
    Sa := ROUND(hsvColor.Saturation * 100.0) / 100.0;
    Ct := NaN;
ELSE
    Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp");
    bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");
END

IF ison
    Hb:= bright / 100.0;
    St := isOn;
ELSE
    Hb := 0;
    St := 0;
END
```

Zápis jasu

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

IF St > 0.5
    VAR topic := "shellies/" + bulb5topic + "/color/0/set";
    
	IF ISNAN(Ct)
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"gain\": " + ROUND(Hb*100.0) + "}");
    ELSE
        MQTTPUBLISH(topic, "{\"turn\": \"on\", \"transition\": " + transitionTime + ", \"brightness\": " + ROUND(Hb*100.0) + "}");
        
    END
ELSE
    MQTTPUBLISH("shellies/" + bulb5topic + "/color/0/command", "off");
END
```

Zápis odstínu

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb5topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis saturace

```taphome
IF !ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb5topic + "/color/0/set";
VAR rgbColor := HSVTORGB(Hd, Sa, 1);

VAR data := "{\"mode\": \"color\", \"gain\": " + ROUND(Hb*100.0) + ", \"transition\":" + transitionTime + ",\"red\":" + rgbColor.red + ",\"green\":" + rgbColor.green + ",\"blue\":" + rgbColor.blue + "}";

MQTTPUBLISH(topic, data);
```

Zápis barevné teploty

```taphome
IF ISNAN(Ct)
    RETURN(0);
END

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

VAR topic := "shellies/" + bulb5topic + "/color/0/set";

MQTTPUBLISH(topic, "{\"mode\": \"white\", \"brightness\": " + ROUND(Hb*100.0) + ", \"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

**Připojení:** Packet Parser → MQTT • Hostname: `shellycolorbulb-{MAC}.local`

Možná vylepšení (4)

- Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline bulbs.
- Full Status JSON — Complete /status as JSON (fw ≥1.8.0). Could parse wifi\_sta.rssi, uptime, temperature.
- Light Effects — Effect index 0–6: off, meteors, gradual change, breath, flash, on/off gradual, red/green change. Not exposed in template.
- White Channel (RGBW) — Separate white LED channel (0–255) in color mode. Template uses RGB+gain only, white channel not exposed.

## Parametry importu

Tyto hodnoty zadáte při importu XML.

| Ptá se v aplikaci     | Výchozí       |
|-----------------------|---------------|
| Mqtt Broker IP adresa | `192.168.0.1` |
| Mqtt Broker port      | `1883`        |
| Transition time (ms)  | `300`         |

## Zdroje

- 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 RGBW — MQTT Color Bulb API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-color-bulb) 2026-03-30

## Související dokumentace

- [MQTT Integration](https://taphome.com/cs/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/cs/docs/integration/packet-parser/)
- [Funkce Packet parser](https://taphome.com/cs/docs/script/packet-parser/)
- [Funkce pro parsování](https://taphome.com/cs/docs/script/parsing-functions/)
- [Broker MQTT](https://taphome.com/cs/docs/integration/packet-parser/mqtt-broker/)
- [Listener skripty](https://taphome.com/cs/docs/script/listener-scripts/)

