---
title: "Shelly DUO MQTT"
description: "Sterowanie do 5 białymi żarówkami Shelly DUO przez MQTT — jasność, CCT 3000-6500 K z płynnymi przejściami i pomiar kW/kWh każdej żarówki. TapHome Gen1."
url: "https://taphome.com/pl/compatibility/shelly-duo-mqtt/"
language: pl
lastmod: 2026-04-25
generator: hugo
ai:
  topics: ["mqtt","lighting","wifi","tunable-white","cct","power-metering","led-bulb","gen1","mdns"]
  questions: ["Jak zintegrować Shelly DUO z TapHome przez MQTT?","Jak znaleźć MQTT Device ID żarówki Shelly DUO?","Jak sterować wieloma żarówkami Shelly DUO z jednego szablonu TapHome?","Dlaczego Shelly DUO pokazuje w TapHome zerowe zużycie?","Dlaczego najcieplejsza temperatura barwowa to tylko 3000 K zamiast 2700 K?","Czy włączenie MQTT na Shelly DUO wyłącza Shelly Cloud?"]
---

# Shelly DUO MQTT

Komunikacja: Packet Parser → MQTT

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

> Adres w sieci
> 
> Przy brokerze MQTT wbudowanym w TapHome wpisz w TapHome jako adres brokera `127.0.0.1`. W urządzeniu wpisz adres IP TapHome Core i nadaj jednostce Core rezerwację IP w routerze.
> 
> [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/)

## Poradnik integracji

Shelly DUO (model **SHBDUO-1**) to inteligentna żarówka LED Wi-Fi Gen1 dostępna w wersjach **E27** i **GU10**. Standardowa DUO jest **wyłącznie biała** z regulowaną temperaturą barwową i ściemnialną jasnością — nie ma kanałów RGB (wariant z RGB to *DUO RGBW* / `shellycolorbulb-` i używa osobnego szablonu). To jest **wariant MQTT** integracji z TapHome; dla pojedynczej żarówki dostępny jest również [wariant HTTP](https://taphome.com/pl/compatibility/shelly-duo/).

Szablon obsługuje do **5 żarówek DUO** na moduł poprzez wspólnego brokera MQTT w sieci lokalnej. Każda żarówka jest identyfikowana zmienną modułu `bulbNtopic` wskazującą na MQTT Device ID żarówki i udostępnia zarówno urządzenie białego światła, jak i licznik energii — łącznie 10 urządzeń.

## Konfiguracja

### Broker MQTT

Szablon wymaga brokera MQTT dostępnego w sieci lokalnej — działa dowolny standardowy broker (Mosquitto, EMQX lub broker wbudowany w Home Assistant). Broker działa na **porcie 1883** bez TLS (sprzęt Gen1 Shelly nie obsługuje MQTT przez TLS), dlatego trzymaj go w zaufanym segmencie.

Po zaimportowaniu szablonu skonfiguruj połączenie z brokerem w parametrach importu modułu:

| Parametr | Domyślne | Opis |
|----------|----------|------|
| **MQTT Broker IP** (`IpAddress`) | `192.168.0.1` | Adres brokera w sieci lokalnej |
| **MQTT Broker port** (`Port`) | `1883` | Standardowy port MQTT (bez TLS) |
| **Transition time** (`TransitionTime`) | `300` | Domyślny czas przejścia jasności/CCT każdej żarówki w milisekundach |

### Włączanie MQTT na żarówce

Każda Shelly DUO musi być wskazana na brokera, zanim zacznie publikować lub przyjmować polecenia:

1. Otwórz interfejs webowy żarówki pod `http://<bulb-ip>` (IP znajdziesz w tabeli DHCP routera lub w aplikacji Shelly)
2. Przejdź do **Internet & Security** → **Advanced — MQTT** i włącz **MQTT**
3. Wpisz **server** brokera (IP i port, np. `192.168.0.10:1883`) i pozostaw **username** / **password** puste (szablon TapHome nie udostępnia uwierzytelniania brokera)
4. Opcjonalnie zmień **MQTT prefix**, jeśli nie chcesz domyślnego `shellies/ShellyBulbDuo-<MAC6>`
5. Zapisz i zrestartuj żarówkę — po ponownym połączeniu zacznie publikować na `shellies/ShellyBulbDuo-<id>/light/0/status`

### Device ID (`bulbNtopic`)

Każda Shelly DUO ma unikalne MQTT Device ID w formacie **`ShellyBulbDuo-<MAC6>`**, gdzie `<MAC6>` to ostatnie 6 znaków szesnastkowych adresu MAC (np. `ShellyBulbDuo-B929CC`). Ta sama wartość jest również nazwą hosta mDNS żarówki (`ShellyBulbDuo-<MAC6>.local`).

Device ID można znaleźć:

- W Shelly web UI: **Settings** → **Device Info** → pole `mqtt.id`
- Przez HTTP: `GET http://<bulb-ip>/settings` → `mqtt.id`
- Na etykiecie urządzenia / opakowaniu (ostatnie 6 znaków MAC, małe hex)
- Jako nazwa hosta mDNS, np. `ShellyBulbDuo-b929cc.local`

Otwórz moduł **Shelly DUO MQTT** w TapHome i wypełnij zmienne topicu dla każdej żarówki, której chcesz używać:

| Zmienna | Domyślne | Opis |
|---------|----------|------|
| `bulb1topic` | `ShellyBulbDuo-deviceid1` | MQTT Device ID pierwszej żarówki DUO |
| `bulb2topic` | `ShellyBulbDuo-deviceid2` | MQTT Device ID drugiej żarówki DUO |
| `bulb3topic` | `ShellyBulbDuo-deviceid3` | MQTT Device ID trzeciej żarówki DUO |
| `bulb4topic` | `ShellyBulbDuo-deviceid4` | MQTT Device ID czwartej żarówki DUO |
| `bulb5topic` | `ShellyBulbDuo-deviceid5` | MQTT Device ID piątej żarówki DUO |

Zastąp placeholder rzeczywistym Device ID dla każdej żarówki, którą chcesz sterować (np. `ShellyBulbDuo-B929CC`). Moduł subskrybuje `shellies/#`, a skrypty listenerów dla poszczególnych żarówek filtrują wiadomości po prefiksie topicu. Sloty pozostawione na wartości placeholder generują błąd w TapHome, dopóki nie zostaną skonfigurowane lub usunięte z szablonu.

### Czas przejścia każdej żarówki

Każde urządzenie Light udostępnia zmienną `transitionTime` (w milisekundach, zakres 0-5000 ms), która domyślnie dziedziczy parametr importu `TransitionTime` z poziomu modułu. Nadpisz ją na poszczególnych żarówkach, jeśli chcesz różne czasy przejścia — wartość jest wysyłana przy każdej zmianie jasności lub CCT jako pole `transition` w payloadzie JSON `/light/0/set`.

> [!WARNING]
> Włączenie MQTT na urządzeniu Gen1 Shelly **wyłącza Shelly Cloud** — oba nie mogą działać jednocześnie. HTTP REST i CoIoT pozostają dostępne, więc żarówka jest nadal osiągalna z sieci lokalnej.

## Funkcje urządzenia

Szablon udostępnia 10 urządzeń na moduł — 5 świateł białych z regulacją barwy i 5 liczników energii, jedną parę na fizyczną żarówkę. Wszystkie 5 par są funkcjonalnie identyczne, różnią się tylko `bulbNtopic`, na który nasłuchują.

### Sterowanie światłem

Każde urządzenie Light jest mapowane w TapHome jako **White Light** z dwoma właściwościami sterowania:

- **Jasność** — odczytywana z pola `$.brightness` (0-100) JSON-a `light/0/status`, skalowana do zakresu TapHome 0.0-1.0; zapisywana przez `light/0/set` z `"turn":"on", "brightness":N, "transition":<ms>`
- **Temperatura barwowa** — odczytywana z `$.temp` (3000-6500 K), zapisywana przez `light/0/set` z `"temp":K, "transition":<ms>`

Wyłączanie światła używa osobnego topicu `light/0/command` z payloadem `off`, co jest szybsze niż konstruowanie wiadomości JSON `set`. Aktualizacje jasności i CCT zawsze zawierają pole `transition`, dzięki czemu żarówka płynnie przechodzi zamiast skakać.

### Pomiar zużycia

Każdy Electric Meter subskrybuje dwa skalarne topicy publikowane przez żarówkę mniej więcej raz na sekundę:

| Wartość TapHome | Topic źródłowy | Jednostka źródłowa | Konwersja | Jednostka wyświetlania |
|-----------------|----------------|---------------------|-----------|------------------------|
| Moc chwilowa | `shellies/ShellyBulbDuo-<id>/light/0/power` | W | `÷ 1000` | kW |
| Zużycie całkowite | `shellies/ShellyBulbDuo-<id>/light/0/energy` | watominuty | `÷ 60000` | kWh |

Konwersja watominut → kWh jest potrzebna, ponieważ firmware Shelly Gen1 raportuje energię skumulowaną w W·min, a nie w W·h.

> [!TIP]
> Pomiar zużycia po cichu zwraca zero, dopóki **Settings → Device Model** (E27 lub GU10) nie zostanie skonfigurowane w aplikacji Shelly lub web UI. Listener TapHome przy pierwszym odczycie wyświetla baner informacyjny przypominający o tym. Po ustawieniu modelu żarówka natychmiast zaczyna raportować niezerowe wartości `power`/`energy`.

## Rozwiązywanie problemów

### Żarówka nie reaguje

1. Sprawdź, że żarówka jest podłączona do Wi-Fi i osiągalna w LAN — otwórz `http://<bulb-ip>/shelly`. Odpowiedź zawierająca `"type":"SHBDUO-1"` potwierdza urządzenie.
2. Spróbuj nazwy hosta mDNS (`ShellyBulbDuo-<MAC6>.local`) zamiast adresu IP — odnowienia DHCP lub restarty routera mogą zmienić IP.
3. Potwierdź, że MQTT jest włączone w ustawieniach **Internet & Security → Advanced — MQTT** żarówki i że IP/port brokera zgadzają się z parametrami importu TapHome.
4. Użyj klienta MQTT (np. **MQTT Explorer** lub `mosquitto_sub -h <broker> -t 'shellies/#' -v`), aby zweryfikować, że żarówka publikuje na `shellies/ShellyBulbDuo-<id>/...`.

### Błąd "Set correct 'bulbNtopic' value"

Skrypt listenera zgłasza ten błąd, gdy `bulbNtopic` nadal jest ustawiony na domyślny placeholder (`ShellyBulbDuo-deviceid`). Wpisz prawdziwe Device ID dla danego slotu lub usuń nieużywane urządzenia z szablonu, jeśli masz tylko kilka żarówek.

### Moc i energia pozostają na zero

1. Otwórz aplikację Shelly (lub web UI) → **Settings** → **Device Model** i wybierz odpowiedni sub-model (**Shelly Bulb DUO E27** lub **Shelly Bulb DUO GU10**). Żarówka zaczyna obliczać `power`/`energy` dopiero po rozpoznaniu modelu.
2. Potwierdź, że żarówka faktycznie świeci — licznik aktualizuje się tylko podczas przepływu prądu.
3. Subskrybuj bezpośrednio `shellies/ShellyBulbDuo-<id>/light/0/power` klientem MQTT i sprawdź, czy żarówka publikuje wartość niezerową.

### Najcieplejsza CCT schodzi tylko do 3000 K

XML TapHome ogranicza CCT do **3000-6500 K**, aby pasować do reklamowanego zakresu E27. Sam sprzęt obsługuje **2700-6500 K** w sub-modelu GU10 oraz przez surowe API `/light/0/set`, więc najcieplejsze 300 K zakresu GU10 jest nieosiągalne przez szablon TapHome.

### Przejścia światła wyglądają na szarpane

Zwiększ zmienną `transitionTime` na danej żarówce (lub domyślną wartość modułu `TransitionTime`). 300 ms wystarcza dla małych kroków ściemniania, ale przy dużych zmianach jasności lub CCT może wyglądać schodkowo — wypróbuj 800-1500 ms dla płynniejszego przejścia.

> [!WARNING]
> Urządzenia Shelly Gen1 używają **zwykłego MQTT** na porcie 1883 — TLS nie jest obsługiwany. Szablon TapHome również nie udostępnia `username` / `password` brokera, dlatego użyj brokera bez uwierzytelniania w zaufanej sieci lokalnej lub VLAN.

## Jak zainstalować w TapHome

### Wymagania wstępne

- Urządzenie Shelly połączone z Wi-Fi (2,4 GHz), np. przez aplikację Shelly lub własny punkt dostępowy urządzenia
- Broker MQTT działający w sieci lokalnej (np. Mosquitto, Home Assistant lub wbudowany broker TapHome)
- TapHome CCU w tej samej sieci co broker

> [!WARNING]
> Na urządzeniach **Gen1** włączenie MQTT **wyłącza Shelly Cloud**. Oba nie mogą działać jednocześnie. Na urządzeniach Gen2/Plus to ograniczenie nie obowiązuje.

### Krok 1 — Włącz MQTT na urządzeniu Shelly

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

1. Otwórz interfejs webowy Shelly: `http://<device-ip>/`
2. Przejdź do **Internet & Security** → **Advanced — MQTT**
3. Włącz **MQTT**
4. Ustaw **MQTT Server**: `<broker-ip>:<port>` (np. `192.168.1.10:1883`)
5. Opcjonalnie ustaw **MQTT User** i **MQTT Password**, jeśli broker wymaga uwierzytelniania
6. Kliknij **Save** — urządzenie zrestartuje się i połączy z brokerem

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

1. Otwórz interfejs webowy Shelly: `http://<device-ip>/`
2. Przejdź do **Settings** → **MQTT**
3. Włącz **MQTT**
4. Ustaw **Server**: `<broker-ip>:<port>` (np. `192.168.1.10:1883`)
5. **Client ID** jest wstępnie wypełnione identyfikatorem urządzenia (np. `shellyplus1pm-AABBCCDDEE`) — pozostaw bez zmian, chyba że masz konkretny powód do zmiany
6. Kliknij **Save** i zrestartuj urządzenie

Przy wbudowanym brokerze TapHome `<broker-ip>` to adres IP TapHome Core. Nadaj jednostce Core rezerwację IP w routerze, w przeciwnym razie urządzenie straci brokera, gdy router zmieni adres → [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/).

> [!TIP]
> Aby sprawdzić, czy MQTT działa, użyj klienta MQTT (np. MQTT Explorer) i zasubskrybuj `shellies/#` (Gen1) lub `<device-id>/#` (Gen2). Powinieneś zobaczyć komunikaty o stanie z urządzenia.

### Krok 2 — Znajdź Device ID / MQTT Client ID

Niektóre szablony wymagają parametru **Device ID** lub **MQTT Client ID**. Jest to unikalny identyfikator używany w topikach MQTT.

- **Gen1:** znajduje się na etykiecie jako adres MAC (np. `AABBCCDDEE`). Device ID = `shelly<model>-<mac>`, np. `shelly1pm-AABBCCDDEE`
- **Gen2/Plus:** znajduje się w interfejsie webowym Shelly w sekcji **Settings** → **Device Info** → **Device ID** lub na etykiecie urządzenia

### Krok 3 — Konfiguracja w TapHome

1. W TapHome dodaj nowy moduł **Packet Parser (MQTT)**
2. **IP Address:** dla wbudowanego brokera TapHome `127.0.0.1` (jednostka łączy się sama ze sobą, adres nigdy się nie zmienia); dla zewnętrznego brokera jego adres IP (np. `192.168.1.10`)
3. **Port:** `1883` (domyślny; użyj `8883` dla TLS)
4. **Device ID / MQTT Client ID:** wprowadź wartość z kroku 2 (jeśli wymagane przez szablon)
5. Zaimportuj szablon — TapHome automatycznie zasubskrybuje topiki urządzenia

## Dostępne urządzenia 10

Te urządzenia pojawią się w TapHome po imporcie.

Shelly DUO MQTT Moduł

Zmienne niestandardowe

`bulb1topic` (string) = ShellyBulbDuo-deviceid1 MQTT Device ID pierwszej żarówki Shelly DUO — format '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 drugiej żarówki Shelly DUO 

`bulb3topic` (string) = ShellyBulbDuo-deviceid3 MQTT Device ID trzeciej żarówki Shelly DUO 

`bulb4topic` (string) = ShellyBulbDuo-deviceid4 MQTT Device ID czwartej żarówki Shelly DUO 

`bulb5topic` (string) = ShellyBulbDuo-deviceid5 MQTT Device ID piątej żarówki Shelly DUO

Licznik energii 1 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 1 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Nasłuchiwanie

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

Światło 1 Białe światło Odczyt i zapis

Żarówka 1 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json\_path

Zmienna: `transitionTime` — Czas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Nasłuchiwanie

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

Zapis jasności

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

Zapis temperatury barwowej

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

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

Licznik energii 2 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 2 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Nasłuchiwanie

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

Światło 2 Białe światło Odczyt i zapis

Żarówka 2 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json\_path

Zmienna: `transitionTime` — Czas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Nasłuchiwanie

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

Zapis jasności

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

Zapis temperatury barwowej

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

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

Licznik energii 3 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 3 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Nasłuchiwanie

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

Światło 3 Białe światło Odczyt i zapis

Żarówka 3 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json\_path

Zmienna: `transitionTime` — Czas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Nasłuchiwanie

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

Zapis jasności

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

Zapis temperatury barwowej

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

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

Licznik energii 4 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 4 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Nasłuchiwanie

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

Światło 4 Białe światło Odczyt i zapis

Żarówka 4 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json\_path

Zmienna: `transitionTime` — Czas przejścia każdej żarówki w milisekundach (0-5000 ms), dziedziczony z parametru importu TransitionTime

Nasłuchiwanie

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

Zapis jasności

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

Zapis temperatury barwowej

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

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

Licznik energii 5 Licznik energii Tylko do odczytu

Moc chwilowa (kW) i energia skumulowana (kWh) żarówki 5 — wymaga ustawienia Settings → Device Model w aplikacji Shelly, w przeciwnym razie obie wartości pozostają na 0

numeric Jednostka: kW / kWh

Nasłuchiwanie

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

Światło 5 Białe światło Odczyt i zapis

Żarówka 5 z regulowaną bielą — wł/wył, jasność 0-100 % i temperatura barwowa 3000-6500 K z płynnymi przejściami

json Jednostka: % / K json\_path

Zmienna: `transitionTime` — Czas przejścia każdej żarówki w milisekundách (0-5000 ms), dziedziczony z parametru importu TransitionTime

Nasłuchiwanie

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

Zapis jasności

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

Zapis temperatury barwowej

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

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

**Połączenie:** Packet Parser → MQTT • Hostname: `ShellyBulbDuo-{MAC}.local`

Możliwe ulepszenia (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

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji  | Domyślnie     |
|----------------------|---------------|
| Mqtt Broker Adres IP | `192.168.0.1` |
| Mqtt Broker port     | `1883`        |
| Transition time (ms) | `300`         |

## Źródła

- 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 producentów są © ich właścicieli. Udostępniamy je w formie opublikowanej przez producenta, wyłącznie w celach informacyjnych.

## Powiązana dokumentacja

- [MQTT Integration](https://taphome.com/pl/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/pl/docs/integration/packet-parser/)
- [Funkcje Packet parser](https://taphome.com/pl/docs/script/packet-parser/)
- [Funkcje parsowania](https://taphome.com/pl/docs/script/parsing-functions/)
- [Broker MQTT](https://taphome.com/pl/docs/integration/packet-parser/mqtt-broker/)
- [Skrypty listener](https://taphome.com/pl/docs/script/listener-scripts/)

