---
title: "Shelly DUO RGBW MQTT"
description: "Ovládajte až 5 Shelly DUO RGBW žiaroviek cez MQTT — plné RGB farby, laditeľná biela 3000–6500 K, plynulé prechody a meranie spotreby."
url: "https://taphome.com/sk/compatibility/shelly-duo-rgbw-mqtt/"
language: sk
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["mqtt","lighting","wifi","rgbw","color-temperature","power-metering"]
  questions: ["Ako integrovať Shelly DUO RGBW s TapHome cez MQTT?","Čo ovláda TapHome šablóna Shelly DUO RGBW MQTT?","Ako pripojiť viacero Shelly DUO RGBW žiaroviek cez MQTT k TapHome?","Ako nájsť MQTT Device ID Shelly DUO RGBW?","Prečo Shelly DUO RGBW ukazuje nulové hodnoty spotreby?","Ako prepínať medzi RGB a bielym režimom na Shelly DUO RGBW cez MQTT?"]
---

# Shelly DUO RGBW MQTT

Komunikácia: Packet Parser → MQTT

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

> Adresa v sieti
> 
> Pri MQTT brokeri vstavanom v TapHome zadajte v TapHome ako adresu brokera `127.0.0.1`. V zariadení zadajte IP adresu TapHome Core a jednotke Core dajte rezerváciu IP v routeri.
> 
> [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/)

## Návod na integráciu

Shelly DUO RGBW (model SHCB-1) je inteligentná Wi-Fi LED žiarovka Gen1 dostupná v prevedeniach E27 a GU10. Podporuje plné RGB farby a laditeľnú bielu (CCT 3000–6500 K) s plynulými prechodovými efektmi. Toto je **MQTT variant** integrácie TapHome — šablóna komunikuje so žiarovkami cez zdieľaný MQTT broker v lokálnej sieti. K dispozícii je aj [HTTP variant](https://taphome.com/sk/compatibility/shelly-duo-rgbw/) pre zostavy s jednou žiarovkou.

Šablóna podporuje až **5 Shelly DUO RGBW žiaroviek** na modul. Každá inštancia žiarovky je rozlíšená vlastnou premennou `bulbNtopic`, ktorá odkazuje na MQTT Device ID žiarovky. Každá žiarovka poskytuje RGBW svetlo a elektromer — celkovo 10 zariadení.

## Konfigurácia

### Device ID

Každá Shelly DUO RGBW žiarovka má unikátne MQTT Device ID vo formáte `shellycolorbulb-<DEVICEID>`, kde `<DEVICEID>` je odvodené z MAC adresy (napr. `shellycolorbulb-B929CC`).

Device ID nájdete:

- Na obale zariadenia alebo štítku (MAC adresa)
- V Shelly webovom rozhraní: **Settings** → **Device Info**
- Cez API: `GET http://<device-ip>/settings` → pole `mqtt.id`

### Premenné modulu

Po importe šablóny v TapHome nakonfigurujte premenné pre topicy žiaroviek:

| Premenná | Predvolená hodnota | Popis |
|----------|-------------------|-------|
| `bulb1topic` | `shellycolorbulb-deviceid1` | MQTT Device ID pre žiarovku 1 |
| `bulb2topic` | `shellycolorbulb-deviceid2` | MQTT Device ID pre žiarovku 2 |
| `bulb3topic` | `shellycolorbulb-deviceid3` | MQTT Device ID pre žiarovku 3 |
| `bulb4topic` | `shellycolorbulb-deviceid4` | MQTT Device ID pre žiarovku 4 |
| `bulb5topic` | `shellycolorbulb-deviceid5` | MQTT Device ID pre žiarovku 5 |

Nahraďte predvolený zástupný text skutočným Device ID každej žiarovky (napr. `shellycolorbulb-B929CC`). Konfigurujte len sloty, ktoré skutočne používate — nepoužité sloty s predvoleným zástupným textom zobrazia chybu vyzývajúcu nastaviť správny topic.

Modul sa prihlasuje na `shellies/#` (QoS 0, port 1883) a listener skripty filtrujú správy podľa nakonfigurovaného prefixu topicu pre každú žiarovku.

> [!WARNING]
> Na Gen1 Shelly zariadeniach zapnutie MQTT **vypne Shelly Cloud**. Obe funkcie nemôžu bežať súčasne.

## Funkcie zariadenia

### Ovládanie svetla

Každá žiarovka je mapovaná ako HSB Light zariadenie v TapHome. Žiarovka pracuje v dvoch vzájomne sa vylučujúcich režimoch:

- **Farebný režim** — plné RGB ovládanie cez červený, zelený a modrý kanál (0–255 každý) plus gain (0–100 %). TapHome konvertuje RGB na HSV interne — odtieň (0–360°), sýtosť a jas sú dostupné ako ovládacie vlastnosti. Nastavenie odtieňa alebo sýtosti odošle `color/0/set` JSON payload s `"mode":"color"`.
- **Biely režim** — laditeľná biela cez teplotu farby (3000–6500 K) a jas (0–100 %). Nastavenie hodnoty CCT v TapHome automaticky prepne žiarovku do bieleho režimu publikovaním `"mode":"white"` s teplotou a jasom.

Všetky príkazy na zápis obsahujú konfigurovateľný čas prechodu (predvolene 300 ms) pre plynulé stmievanie medzi stavmi. Mechanizmus debounce zabraňuje čítaniu neaktuálnych údajov počas prechodov — šablóna ignoruje prichádzajúce MQTT stavové správy po dobu `transitionTime + 3000 ms` po každom príkaze na zápis.

### Meranie spotreby

Každá inštancia žiarovky obsahuje elektromer, ktorý číta dve hodnoty:

- **Okamžitý výkon** — z `shellies/{id}/light/0/power`, hlásený vo wattoch, konvertovaný na kW (payload / 1000)
- **Celková spotreba** — z `shellies/{id}/light/0/energy`, hlásená vo watt-minútach, konvertovaná na kWh (payload / 60 000)

> [!TIP]
> Meranie spotreby vyžaduje nakonfigurovanie modelu zariadenia v Shelly aplikácii alebo webovom rozhraní v **Settings** > **Device Model**. Bez tejto konfigurácie zostávajú hodnoty spotreby na nule.

### Ďalšie funkcie

Shelly DUO RGBW tiež podporuje svetelné efekty (meteor shower, gradual change, breath, flash, on/off gradual, red/green change), dedikovaný biely LED kanál (0–255) vo farebnom režime, stav MQTT pripojenia cez LWT topic a kompletný JSON stavový report (firmware ≥1.8.0) s Wi-Fi RSSI, uptime a teplotnými údajmi. Tieto funkcie môžu byť pridané v budúcej aktualizácii šablóny.

## Riešenie problémov

### Žiarovky nereagujú

1. Overte, že MQTT je zapnuté vo webovom rozhraní každej žiarovky (**Internet & Security** > **Advanced — MQTT**)
2. Potvrďte správnosť adresy brokera a portu v nastaveniach Shelly zariadenia aj v konfigurácii TapHome modulu
3. Skontrolujte, či každá vlastná premenná `bulbNtopic` presne zodpovedá Device ID žiarovky (napr. `shellycolorbulb-B929CC`)
4. Použite MQTT klienta (napr. MQTT Explorer) na prihlásenie k `shellies/#` a overte, že každá žiarovka publikuje správy

### Farby sa zobrazujú nesprávne

1. Overte, že žiarovka je vo farebnom režime — RGB farby fungujú len vo farebnom režime, nie v bielom
2. Uistite sa, že sýtosť je väčšia ako nula — sýtosť 0 produkuje biele svetlo bez ohľadu na odtieň
3. Skontrolujte, že gain (jas vo farebnom režime) nie je nastavený na nulu

### Hodnoty spotreby ukazujú nulu

1. Potvrďte, že model zariadenia je nakonfigurovaný v Shelly aplikácii alebo webovom rozhraní (**Settings** > **Device Model**)
2. Overte, že žiarovka je zapnutá — merač číta len keď žiarovka odoberá energiu

> [!WARNING]
> Gen1 Shelly zariadenia **nepodporujú** MQTT cez TLS. Komunikácia medzi žiarovkami a MQTT brokerom je nešifrovaná (plain MQTT, port 1883). Uistite sa, že MQTT broker je v dôveryhodnej lokálnej sieti.

## Ako nainštalovať v TapHome

### Predpoklady

- Zariadenie Shelly pripojené k Wi-Fi (2,4 GHz), napr. cez aplikáciu Shelly alebo vlastný prístupový bod zariadenia
- MQTT broker bežiaci vo vašej lokálnej sieti (napr. Mosquitto, Home Assistant alebo vstavaný broker TapHome)
- TapHome CCU v rovnakej sieti ako broker

> [!WARNING]
> Na zariadeniach **Gen1** povolenie MQTT **vypne Shelly Cloud**. Oboje nemôže bežať súčasne. Na zariadeniach Gen2/Plus toto obmedzenie neplatí.

### Krok 1 — Povoľte MQTT na zariadení Shelly

#### Zariadenia Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

1. Otvorte webové rozhranie Shelly: `http://<device-ip>/`
2. Prejdite na **Internet & Security** → **Advanced — MQTT**
3. Povoľte **MQTT**
4. Nastavte **MQTT Server**: `<broker-ip>:<port>` (napr. `192.168.1.10:1883`)
5. Voliteľne nastavte **MQTT User** a **MQTT Password**, ak váš broker vyžaduje autentifikáciu
6. Kliknite na **Save** — zariadenie sa reštartuje a pripojí k brokeru

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

1. Otvorte webové rozhranie Shelly: `http://<device-ip>/`
2. Prejdite na **Settings** → **MQTT**
3. Povoľte **MQTT**
4. Nastavte **Server**: `<broker-ip>:<port>` (napr. `192.168.1.10:1883`)
5. **Client ID** je predvyplnené ID zariadenia (napr. `shellyplus1pm-AABBCCDDEE`) — ponechajte tak, pokiaľ nemáte konkrétny dôvod na zmenu
6. Kliknite na **Save** a reštartujte zariadenie

Pri vstavanom brokeri TapHome je `<broker-ip>` IP adresa TapHome Core. Dajte jednotke Core rezerváciu IP v routeri, inak zariadenie stratí broker, keď router adresu zmení → [Príprava siete](https://taphome.com/sk/docs/setup/network-preparation/).

> [!TIP]
> Na overenie funkčnosti MQTT použite MQTT klienta (napr. MQTT Explorer) a prihláste sa na odber `shellies/#` (Gen1) alebo `<device-id>/#` (Gen2). Mali by ste vidieť stavové správy zo zariadenia.

### Krok 2 — Zistite Device ID / MQTT Client ID

Niektoré šablóny vyžadujú parameter **Device ID** alebo **MQTT Client ID**. Ide o jedinečný identifikátor používaný v MQTT topicoch.

- **Gen1:** nachádza sa na štítku ako MAC adresa (napr. `AABBCCDDEE`). Device ID = `shelly<model>-<mac>`, napr. `shelly1pm-AABBCCDDEE`
- **Gen2/Plus:** nachádza sa vo webovom rozhraní Shelly v časti **Settings** → **Device Info** → **Device ID**, alebo na štítku zariadenia

### Krok 3 — Konfigurácia v TapHome

1. V TapHome pridajte nový modul **Packet Parser (MQTT)**
2. **IP Address:** pre vstavaný broker TapHome `127.0.0.1` (jednotka sa pripája sama k sebe, adresa sa nikdy nezmení); pre externý broker jeho IP adresa (napr. `192.168.1.10`)
3. **Port:** `1883` (predvolený; pre TLS použite `8883`)
4. **Device ID / MQTT Client ID:** zadajte hodnotu z kroku 2 (ak to šablóna vyžaduje)
5. Importujte šablónu — TapHome sa automaticky prihlási na odber topicov zariadenia

## Dostupné zariadenia 10

Tieto zariadenia sa po importe zobrazia v TapHome.

Shelly DUO RGBW MQTT Modul

Vlastné premenné

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

Elektromer 1 Elektromer Len na čítanie

Meranie spotreby žiarovky 1 — okamžitý výkon (kW) a kumulatívna energia (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 svetlo 1 HSB svetlo Čítanie aj zápis

HSB svetlo s dvoma režimami — plné RGB farby s gainom, alebo laditeľná biela (3000–6500 K) s jasom

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 odtieňa

```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 saturácie

```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 farebnej 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 + "}");
```

Elektromer 2 Elektromer Len na čítanie

Meranie spotreby žiarovky 2 — okamžitý výkon (kW) a kumulatívna energia (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 svetlo 2 HSB svetlo Čítanie aj zápis

HSB svetlo s dvoma režimami — plné RGB farby s gainom, alebo laditeľná biela (3000–6500 K) s jasom

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 odtieňa

```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 saturácie

```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 farebnej 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 + "}");
```

Elektromer 3 Elektromer Len na čítanie

Meranie spotreby žiarovky 3 — okamžitý výkon (kW) a kumulatívna energia (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 svetlo 3 HSB svetlo Čítanie aj zápis

HSB svetlo s dvoma režimami — plné RGB farby s gainom, alebo laditeľná biela (3000–6500 K) s jasom

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 odtieňa

```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 saturácie

```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 farebnej 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 + "}");
```

Elektromer 4 Elektromer Len na čítanie

Meranie spotreby žiarovky 4 — okamžitý výkon (kW) a kumulatívna energia (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 svetlo 4 HSB svetlo Čítanie aj zápis

HSB svetlo s dvoma režimami — plné RGB farby s gainom, alebo laditeľná biela (3000–6500 K) s jasom

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 odtieňa

```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 saturácie

```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 farebnej 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 + "}");
```

Elektromer 5 Elektromer Len na čítanie

Meranie spotreby žiarovky 5 — okamžitý výkon (kW) a kumulatívna energia (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 svetlo 5 HSB svetlo Čítanie aj zápis

HSB svetlo s dvoma režimami — plné RGB farby s gainom, alebo laditeľná biela (3000–6500 K) s jasom

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 odtieňa

```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 saturácie

```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 farebnej 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 + "}");
```

**Pripojenie:** Packet Parser → MQTT • Hostname: `shellycolorbulb-{MAC}.local`

Možné vylepšenia (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.

## Parametre importu

Tieto hodnoty zadáte pri importe XML.

| Pýta sa v aplikácii   | Predvolené    |
|-----------------------|---------------|
| 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

## Súvisiaca dokumentácia

- [MQTT Integration](https://taphome.com/sk/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/sk/docs/integration/packet-parser/)
- [Funkcie Packet parsera](https://taphome.com/sk/docs/script/packet-parser/)
- [Parsovacie funkcie](https://taphome.com/sk/docs/script/parsing-functions/)
- [MQTT broker](https://taphome.com/sk/docs/integration/packet-parser/mqtt-broker/)
- [Listener skripty](https://taphome.com/sk/docs/script/listener-scripts/)

