---
title: "Shelly DUO MQTT"
description: "Ovládání až 5 bílých žárovek Shelly DUO přes MQTT — jas, CCT 3000-6500 K s plynulými přechody a měření kW/kWh každé žárovky. TapHome Gen1."
url: "https://taphome.com/cs/compatibility/shelly-duo-mqtt/"
language: cs
lastmod: 2026-04-25
generator: hugo
ai:
  topics: ["mqtt","lighting","wifi","tunable-white","cct","power-metering","led-bulb","gen1","mdns"]
  questions: ["Jak integrovat Shelly DUO s TapHome přes MQTT?","Jak zjistit MQTT Device ID žárovky Shelly DUO?","Jak ovládat více žárovek Shelly DUO z jedné šablony TapHome?","Proč Shelly DUO ukazuje v TapHome nulovou spotřebu?","Proč je nejteplejší barva světla pouze 3000 K místo 2700 K?","Vypne zapnutí MQTT na Shelly DUO i Shelly Cloud?"]
---

# Shelly DUO MQTT

Komunikace: Packet Parser → MQTT

- [Stránka produktu Shelly DUO](https://www.shelly.com/en/products/shop/shelly-bulb-duo)
- [Dokumentace Shelly Gen1 MQTT API](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo-mqtt)

> 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 (model **SHBDUO-1**) je Gen1 Wi-Fi LED chytrá žárovka dostupná v provedení **E27** a **GU10**. Běžná verze DUO je **pouze bílá** s laditelnou teplotou barvy a stmívatelným jasem — nemá žádné RGB kanály (RGB-schopná verze je *DUO RGBW* / `shellycolorbulb-` a používá samostatnou šablonu). Toto je **MQTT varianta** integrace do TapHome; pro jednu žárovku je k dispozici i [HTTP varianta](https://taphome.com/cs/compatibility/shelly-duo/).

Šablona podporuje až **5 žárovek DUO** na jeden modul přes sdílený MQTT broker v lokální síti. Každá žárovka je identifikována proměnnou modulu `bulbNtopic`, která ukazuje na MQTT Device ID žárovky, a poskytuje zařízení bílého světla i elektroměr — celkem 10 zařízení.

## Konfigurace

### MQTT broker

Šablona potřebuje MQTT broker dostupný v lokální síti — funguje jakýkoli standardní broker (Mosquitto, EMQX nebo broker zabudovaný v Home Assistant). Broker běží na **portu 1883** bez TLS (Gen1 hardware Shelly nepodporuje MQTT přes TLS), proto ho ponechte v důvěryhodném segmentu.

Po importu šablony nastavte připojení k brokeru v import parametrech modulu:

| Parametr | Výchozí | Popis |
|----------|---------|-------|
| **MQTT Broker IP** (`IpAddress`) | `192.168.0.1` | Adresa brokeru v lokální síti |
| **MQTT Broker port** (`Port`) | `1883` | Standardní MQTT port (bez TLS) |
| **Transition time** (`TransitionTime`) | `300` | Výchozí čas přechodu jasu/CCT na každé žárovce v milisekundách |

### Zapnutí MQTT na žárovce

Každá Shelly DUO musí být nasměrována na broker, než začne publikovat nebo přijímat příkazy:

1. Otevřete webové rozhraní žárovky na `http://<bulb-ip>` (IP najdete v DHCP tabulce routeru nebo v Shelly app)
2. Přejděte na **Internet & Security** → **Advanced — MQTT** a zapněte **MQTT**
3. Zadejte **server** brokeru (IP a port, např. `192.168.0.10:1883`) a **username** / **password** ponechte prázdné (TapHome šablona autentizaci brokeru nepodporuje)
4. Volitelně upravte **MQTT prefix**, pokud nechcete výchozí `shellies/ShellyBulbDuo-<MAC6>`
5. Uložte a restartujte žárovku — po opětovném připojení začne publikovat na `shellies/ShellyBulbDuo-<id>/light/0/status`

### Device ID (`bulbNtopic`)

Každá Shelly DUO má unikátní MQTT Device ID ve formátu **`ShellyBulbDuo-<MAC6>`**, kde `<MAC6>` je posledních 6 hex znaků MAC adresy (např. `ShellyBulbDuo-B929CC`). Stejná hodnota je i mDNS hostname žárovky (`ShellyBulbDuo-<MAC6>.local`).

Device ID najdete:

- V Shelly web UI: **Settings** → **Device Info** → pole `mqtt.id`
- Přes HTTP: `GET http://<bulb-ip>/settings` → `mqtt.id`
- Na štítku zařízení / obalu (posledních 6 znaků MAC, malé hex)
- Jako mDNS hostname, např. `ShellyBulbDuo-b929cc.local`

Otevřete modul **Shelly DUO MQTT** v TapHome a vyplňte topic proměnné pro každou žárovku, kterou chcete použít:

| Proměnná | Výchozí | Popis |
|----------|---------|-------|
| `bulb1topic` | `ShellyBulbDuo-deviceid1` | MQTT Device ID první žárovky DUO |
| `bulb2topic` | `ShellyBulbDuo-deviceid2` | MQTT Device ID druhé žárovky DUO |
| `bulb3topic` | `ShellyBulbDuo-deviceid3` | MQTT Device ID třetí žárovky DUO |
| `bulb4topic` | `ShellyBulbDuo-deviceid4` | MQTT Device ID čtvrté žárovky DUO |
| `bulb5topic` | `ShellyBulbDuo-deviceid5` | MQTT Device ID páté žárovky DUO |

Nahraďte placeholder skutečným Device ID pro každou žárovku, kterou chcete ovládat (např. `ShellyBulbDuo-B929CC`). Modul se přihlásí na `shellies/#` a listener skripty pro jednotlivé žárovky filtrují zprávy podle prefixu topicu. Sloty, které zůstaly na placeholder hodnotě, vyhodí chybu v TapHome, dokud je nenakonfigurujete nebo neodstraníte ze šablony.

### Čas přechodu pro každou žárovku

Každé Light zařízení má proměnnou `transitionTime` (v milisekundách, rozsah 0-5000 ms), která je ve výchozím stavu odvozena z modulového import parametru `TransitionTime`. Přepište ji na jednotlivých žárovkách, pokud chcete jiné časy přechodu — hodnota se odešle při každé změně jasu nebo CCT jako pole `transition` v JSON payloadu `/light/0/set`.

> [!WARNING]
> Zapnutí MQTT na Gen1 zařízení Shelly **vypne Shelly Cloud** — obě nemohou běžet současně. HTTP REST a CoIoT zůstávají dostupné, takže žárovka je nadále dosažitelná z lokální sítě.

## Schopnosti zařízení

Šablona poskytuje 10 zařízení na modul — 5 laditelných bílých světel a 5 elektroměrů, jeden pár na fyzickou žárovku. Všech 5 párů je funkčně identických, liší se pouze `bulbNtopic`, na který naslouchají.

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

Každé Light zařízení je v TapHome mapováno jako **White Light** se dvěma ovládacími vlastnostmi:

- **Jas** — čtený z pole `$.brightness` (0-100) JSON zprávy `light/0/status`, škálovaný na rozsah 0.0-1.0 v TapHome; zapisovaný přes `light/0/set` s `"turn":"on", "brightness":N, "transition":<ms>`
- **Teplota světla** — čtená z `$.temp` (3000-6500 K), zapisovaná přes `light/0/set` s `"temp":K, "transition":<ms>`

Vypnutí světla používá samostatný topic `light/0/command` s payloadem `off`, což je rychlejší než sestavovat JSON `set` zprávu. Aktualizace jasu a CCT vždy obsahují pole `transition`, takže žárovka přechází plynule místo skoku.

### Měření spotřeby

Každý Electric Meter se přihlašuje na dva skalární topicy, které žárovka publikuje přibližně jednou za sekundu:

| Hodnota v TapHome | Zdrojový topic | Zdrojová jednotka | Konverze | Zobrazená jednotka |
|-------------------|----------------|-------------------|----------|---------------------|
| Okamžitý výkon | `shellies/ShellyBulbDuo-<id>/light/0/power` | W | `÷ 1000` | kW |
| Celková spotřeba | `shellies/ShellyBulbDuo-<id>/light/0/energy` | watt-minuty | `÷ 60000` | kWh |

Konverze watt-minut na kWh je nutná, protože firmware Shelly Gen1 reportuje kumulativní energii ve W·min, nikoli ve W·h.

> [!TIP]
> Měření spotřeby tiše vrací nulu, dokud není nastaven **Settings → Device Model** (E27 nebo GU10) v Shelly app nebo web UI. TapHome listener při prvním čtení zobrazí informační banner, který na to upozorní. Po nastavení modelu žárovka okamžitě začne reportovat nenulové hodnoty `power`/`energy`.

## Řešení potíží

### Žárovka nereaguje

1. Ověřte, že žárovka je připojena k Wi-Fi a dosažitelná v LAN — otevřete `http://<bulb-ip>/shelly`. Odpověď obsahující `"type":"SHBDUO-1"` potvrdí zařízení.
2. Zkuste mDNS hostname (`ShellyBulbDuo-<MAC6>.local`) místo IP adresy — obnovení DHCP nebo restarty routeru mohou změnit IP.
3. Potvrďte, že MQTT je zapnuté v nastavení **Internet & Security → Advanced — MQTT** žárovky a že IP/port brokeru se shodují s import parametry v TapHome.
4. Použijte MQTT klienta (např. **MQTT Explorer** nebo `mosquitto_sub -h <broker> -t 'shellies/#' -v`), abyste ověřili, že žárovka publikuje na `shellies/ShellyBulbDuo-<id>/...`.

### Chyba "Set correct 'bulbNtopic' value"

Listener skript hodí tuto chybu, když je `bulbNtopic` stále nastaven na výchozí placeholder (`ShellyBulbDuo-deviceid`). Buď doplňte skutečné Device ID pro daný slot, nebo odstraňte nepoužívaná zařízení ze šablony, pokud máte jen pár žárovek.

### Spotřeba a energie zůstávají na nule

1. Otevřete Shelly app (nebo web UI) → **Settings** → **Device Model** a vyberte odpovídající sub-model (**Shelly Bulb DUO E27** nebo **Shelly Bulb DUO GU10**). Žárovka začne počítat `power`/`energy` až po identifikaci modelu.
2. Ověřte, že žárovka je skutečně zapnutá — měřič se aktualizuje pouze při protékajícím proudu.
3. Přihlaste se přímo na `shellies/ShellyBulbDuo-<id>/light/0/power` přes MQTT klienta a ověřte, že žárovka publikuje nenulovou hodnotu.

### Nejteplejší CCT klesá pouze na 3000 K

TapHome XML omezuje CCT na **3000-6500 K**, aby odpovídalo marketingovému rozsahu E27. Samotný hardware podporuje **2700-6500 K** na sub-modelu GU10 a přes syrové API `/light/0/set`, takže nejteplejších 300 K rozsahu GU10 je přes TapHome šablonu nedosažitelných.

### Přechody světla působí trhaně

Zvyšte proměnnou `transitionTime` na dané žárovce (nebo výchozí modulovou hodnotu `TransitionTime`). 300 ms je v pořádku pro malé kroky stmívání, ale při velkých změnách jasu nebo CCT to může působit stupňovitě — zkuste 800-1500 ms pro plynulejší přechod.

> [!WARNING]
> Zařízení Shelly Gen1 používají **holé MQTT** na portu 1883 — TLS není podporováno. TapHome šablona také nezpřístupňuje broker `username` / `password`, proto použijte neautentizovaný broker v důvěryhodné lokální síti nebo VLAN.

## 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 MQTT Modul

Vlastní proměnné

`bulb1topic` (string) = ShellyBulbDuo-deviceid1 MQTT Device ID první žárovky Shelly DUO — formát je 'ShellyBulbDuo-DEVICEID'

Open http://shellyIpAddress in a browser → Settings → Device Info → copy the mqtt.id (or Device ID) field. Default mDNS hostname matches the MQTT id (ShellyBulbDuo-{MAC6}.local).

`bulb2topic` (string) = ShellyBulbDuo-deviceid2 MQTT Device ID druhé žárovky Shelly DUO 

`bulb3topic` (string) = ShellyBulbDuo-deviceid3 MQTT Device ID třetí žárovky Shelly DUO 

`bulb4topic` (string) = ShellyBulbDuo-deviceid4 MQTT Device ID čtvrté žárovky Shelly DUO 

`bulb5topic` (string) = ShellyBulbDuo-deviceid5 MQTT Device ID páté žárovky Shelly DUO

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

Okamžitý výkon (kW) a kumulativní spotřeba (kWh) žárovky 1 — vyžaduje nastavení Settings → Device Model v Shelly app, jinak obě hodnoty zůstávají na 0

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, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'ShellyBulbDuo-<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
```

Světlo 1 Bílé světlo Čtení i zápis

Žárovka 1 s laditelnou bílou — zap/vyp, jas 0-100 % a teplota světla 3000-6500 K s plynulými přechody

json Jednotka: % / K json\_path

Proměnná: `transitionTime` — Čas přechodu pro danou žárovku v milisekundách (0-5000 ms), odvozený z import parametru TransitionTime

Listener

```taphome
IF(INDEXOF(bulb1topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb1topic' value in module variables. Topic format is 'ShellyBulbDuo-<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/status") != 0
    RETURN(0);
END

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

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

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

Zápis jasu

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

Zápis barevné teploty

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

VAR topic := "shellies/" + bulb1topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Okamžitý výkon (kW) a kumulativní spotřeba (kWh) žárovky 2 — vyžaduje nastavení Settings → Device Model v Shelly app, jinak obě hodnoty zůstávají na 0

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, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'ShellyBulbDuo-<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
```

Světlo 2 Bílé světlo Čtení i zápis

Žárovka 2 s laditelnou bílou — zap/vyp, jas 0-100 % a teplota světla 3000-6500 K s plynulými přechody

json Jednotka: % / K json\_path

Proměnná: `transitionTime` — Čas přechodu pro danou žárovku v milisekundách (0-5000 ms), odvozený z import parametru TransitionTime

Listener

```taphome
IF(INDEXOF(bulb2topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb2topic' value in module variables. Topic format is 'ShellyBulbDuo-<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/status") != 0
    RETURN(0);
END

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

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

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

Zápis jasu

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

Zápis barevné teploty

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

VAR topic := "shellies/" + bulb2topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Okamžitý výkon (kW) a kumulativní spotřeba (kWh) žárovky 3 — vyžaduje nastavení Settings → Device Model v Shelly app, jinak obě hodnoty zůstávají na 0

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(bulb3topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'ShellyBulbDuo-<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
```

Světlo 3 Bílé světlo Čtení i zápis

Žárovka 3 s laditelnou bílou — zap/vyp, jas 0-100 % a teplota světla 3000-6500 K s plynulými přechody

json Jednotka: % / K json\_path

Proměnná: `transitionTime` — Čas přechodu pro danou žárovku v milisekundách (0-5000 ms), odvozený z import parametru TransitionTime

Listener

```taphome
IF(INDEXOF(bulb3topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb3topic' value in module variables. Topic format is 'ShellyBulbDuo-<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/status") != 0
    RETURN(0);
END

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

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

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

Zápis jasu

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

Zápis barevné teploty

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

VAR topic := "shellies/" + bulb3topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Okamžitý výkon (kW) a kumulativní spotřeba (kWh) žárovky 4 — vyžaduje nastavení Settings → Device Model v Shelly app, jinak obě hodnoty zůstávají na 0

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(bulb4topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'ShellyBulbDuo-<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
```

Světlo 4 Bílé světlo Čtení i zápis

Žárovka 4 s laditelnou bílou — zap/vyp, jas 0-100 % a teplota světla 3000-6500 K s plynulými přechody

json Jednotka: % / K json\_path

Proměnná: `transitionTime` — Čas přechodu pro danou žárovku v milisekundách (0-5000 ms), odvozený z import parametru TransitionTime

Listener

```taphome
IF(INDEXOF(bulb4topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb4topic' value in module variables. Topic format is 'ShellyBulbDuo-<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/status") != 0
    RETURN(0);
END

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

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

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

Zápis jasu

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

Zápis barevné teploty

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

VAR topic := "shellies/" + bulb4topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Okamžitý výkon (kW) a kumulativní spotřeba (kWh) žárovky 5 — vyžaduje nastavení Settings → Device Model v Shelly app, jinak obě hodnoty zůstávají na 0

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(bulb5topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'ShellyBulbDuo-<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
```

Světlo 5 Bílé světlo Čtení i zápis

Žárovka 5 s laditelnou bílou — zap/vyp, jas 0-100 % a teplota světla 3000-6500 K s plynulými přechody

json Jednotka: % / K json\_path

Proměnná: `transitionTime` — Čas přechodu pro danou žárovku v milisekundách (0-5000 ms), odvozený z import parametru TransitionTime

Listener

```taphome
IF(INDEXOF(bulb5topic, "ShellyBulbDuo-deviceid") = 0)
    ADDERROR("Set correct 'bulb5topic' value in module variables. Topic format is 'ShellyBulbDuo-<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/status") != 0
    RETURN(0);
END

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

VAR ison := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.ison", 1);
VAR bright := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.brightness");

IF ISNULL(ison) OR ISNULL(bright)
    RETURN(0);
END

Ct := PARSEJSON(RECEIVEDMSG.PAYLOAD, "$.temp", 1);

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

Zápis jasu

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

Zápis barevné teploty

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

VAR topic := "shellies/" + bulb5topic + "/light/0/set";
MQTTPUBLISH(topic, "{\"transition\": " + transitionTime + ", \"temp\":" + Ct + "}");
```

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

Možná vylepšení (7)

- Connection Status (LWT) — Last Will and Testament — true on connect, false on disconnect. Could detect offline bulbs.
- Full Status JSON — Complete /status as JSON. Could expose wifi\_sta.rssi, has\_update, uptime, source of last command.
- Device Announce — Emitted on boot/announce — payload {id, model, mac, ip, fw\_ver, new\_fw}. Useful for auto-discovery.
- White channel (0-100 %) — Separate 'white' parameter (0-100) on the set JSON; template only writes brightness/temp.
- Timer (auto on/off) — Auto-off timer in seconds via set JSON. Not surfaced as TapHome capability.
- Warm-white below 3000 K — TapHome XML clamps MinColorTemperature to 3000 K; the bulb hardware can go down to 2700 K (GU10). E27 marketed range starts at 3000 K — clamp matches E27 spec but loses 300 K of GU10 range.
- MQTT broker authentication — Shelly device side supports MQTT username/password, but TapHome import parameters do not expose them. Workaround: open broker without auth on a trusted segment.

## 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 — MQTT Bulb API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo-mqtt) 2026-04-25
- Shelly DUO — Product Datasheet
  
  [shellystore.co.uk](https://shellystore.co.uk/wp-content/uploads/2021/05/Duo-specs.pdf) 2026-04-25
  
  [PDF](https://taphome.com/compatibility/devices/shelly-duo-mqtt/manufacturer/duo-specs.pdf)

Dokumenty výrobců jsou © jejich příslušných vlastníků. Poskytujeme je tak, jak je výrobce zveřejnil, pouze pro informaci.

## 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/)

