---
title: "Shelly DUO"
description: "Shelly DUO żarówka Wi-Fi CCT — jasność i temperatura barwowa (2700–6500 K) plus pomiar mocy przez HTTP lub MQTT. Szablon TapHome dla Shelly DUO Gen1."
url: "https://taphome.com/pl/compatibility/shelly-duo/"
language: pl
lastmod: 2026-03-30
generator: hugo
ai:
  topics: ["http","mqtt","lighting","wifi","cct","power-metering","led-bulb"]
  questions: ["Jak zintegrować Shelly DUO z TapHome?","Jak sterować jasnością i temperaturą barwową Shelly DUO z TapHome?","Jak podłączyć Shelly DUO przez HTTP do TapHome?","Jak podłączyć wiele żarówek Shelly DUO przez MQTT do TapHome?","Dlaczego Shelly DUO pokazuje zerową moc?","Czym jest mechanizm debounce w szablonie Shelly DUO?"]
---

# Shelly DUO

Komunikacja: Packet Parser → HTTP

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

> Adres w sieci
> 
> TapHome łączy się z urządzeniem pod adresem podanym przy imporcie. Nadaj urządzeniu stały adres — rezerwację IP w routerze albo jego nazwę mDNS, jeśli ją obsługuje — inaczej integracja przestanie działać, gdy router zmieni adres.
> 
> [Przygotowanie sieci](https://taphome.com/pl/docs/setup/network-preparation/)

## Poradnik integracji

Shelly DUO to żarówka LED Wi-Fi z gwintem E27, obsługująca ściemnianie jasności i regulowaną temperaturę barwową białego światła (CCT) w zakresie od 2700 K (ciepła biel) do 6500 K (światło dzienne). TapHome integruje się z żarówką lokalnie przez Wi-Fi za pomocą HTTP REST API lub MQTT. Połączenie z chmurą nie jest wymagane.

Dostępne są dwa szablony TapHome: **szablon HTTP** dla pojedynczej żarówki i **szablon MQTT**, który może sterować do 5 żarówek DUO przez jedno połączenie z brokerem MQTT. Oba szablony udostępniają te same typy urządzeń na żarówkę — urządzenie świetlne ze sterowaniem jasnością i CCT oraz licznik energii do pomiaru mocy.

## Konfiguracja

### Szablon HTTP

Szablon HTTP wymaga adresu IP żarówki (lub nazwy hosta mDNS `ShellyBulbDuo-{MAC}.local`). TapHome odpytuje endpoint `/status` co 2,5 sekundy i zapisuje odpowiedź JSON do zmiennej niestandardowej `jsonStatus`. Poszczególne skrypty urządzeń parsują zapisaną odpowiedź bez zbędnych wywołań HTTP.

Szablon akceptuje dwa parametry importu:

- **Adres IP** — lokalny IP żarówki (domyślny `192.168.0.1`)
- **Czas przejścia** — czas trwania przejścia światła w milisekundach (domyślne 300 ms)

### Szablon MQTT

Szablon MQTT wymaga IP brokera, portu i **Device ID** dla każdej żarówki (format: `ShellyBulbDuo-DEVICEID`). Device ID można znaleźć w interfejsie web Shelly w **Settings** > **Device Info** lub przez `GET http://{bulb-ip}/settings` w polu `mqtt.id`.

Szablon obsługuje do **5 żarówek DUO** przez jeden moduł. Każda żarówka jest identyfikowana przez własną zmienną topic (`bulb1topic` do `bulb5topic`). Nieużywane sloty żarówek mogą pozostać na domyślnej wartości placeholder.

Szablon akceptuje trzy parametry importu:

- **MQTT Broker IP** — adres brokera (domyślny `192.168.0.1`)
- **MQTT Broker port** — port brokera (domyślny `1883`)
- **Czas przejścia** — czas trwania przejścia światła w milisekundach (domyślne 300 ms)

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

## Funkcje urządzenia

### Sterowanie światłem

Szablon udostępnia DUO jako urządzenie białego światła z dwoma sterowalnymi parametrami:

- **Jasność** — odczytywana z `lights[0].brightness` (0–100, wewnętrznie konwertowana na 0,0–1,0) i `lights[0].ison`; sterowana przez `/light/0?turn=on|off&brightness=N` (HTTP) lub publikowanie JSON do topicu `light/0/set` (MQTT)
- **Temperatura barwowa** — odczytywana z `lights[0].temp` (2700–6500 K); sterowana przez `/light/0?temp=K` (HTTP) lub pole `temp` w payloadzie JSON (MQTT)

Oba parametry są wysyłane razem w jednym poleceniu zapisu. Parametr czas przejścia steruje czasem trwania płynnego przejścia dla wszystkich zmian.

Gdy światło jest wyłączane (jasność ustawiona na 0), szablon wysyła `turn=off` (HTTP) lub publikuje `off` do topicu `light/0/command` (MQTT).

### Mechanizm debounce

Szablon HTTP zawiera ochronę debounce zapobiegającą nieaktualnym odczytom podczas przejść świetlnych. Po każdym poleceniu zapisu szablon ignoruje odczyty `/status` przez czas trwania przejścia plus 500 ms. W tym okresie skrypty odczytu zwracają ostatnie znane wartości zamiast odpytywać urządzenie. Zapobiega to krótkotrwałemu wyświetlaniu stanów pośrednich w interfejsie, podczas gdy żarówka przechodzi.

Szablon MQTT nie wymaga debounce — otrzymuje aktualizacje stanu bezpośrednio z żarówki, gdy się pojawiają.

### Pomiar mocy

Wbudowany licznik energii odczytuje dwie wartości:

- **Moc chwilowa** — `meters[0].power` w watach, konwertowana na kW (dzielona przez 1000)
- **Całkowite zużycie** — `meters[0].total` w watominutach, konwertowane na kWh (dzielone przez 60 000)

Licznik jest tylko do odczytu i aktualizuje się automatycznie z każdym cyklem odpytywania (HTTP) lub z każdą wiadomością MQTT.

> [!NOTE]
> Aby włączyć monitorowanie mocy, model urządzenia musi być skonfigurowany w aplikacji Shelly lub przeglądarce web w Settings > Device Model. Jeśli żarówka jest włączona, ale moc pokazuje zero, szablon wyświetla ostrzeżenie o tym kroku konfiguracji.

### Diagnostyka serwisowa (szablon HTTP)

Szablon HTTP udostępnia 10 atrybutów serwisowych:

- **Info sieciowe** — adres IP, adres MAC (formatowany z separatorami dwukropkowymi), siła sygnału Wi-Fi (dB)
- **Łączność** — chmura włączona/połączona, MQTT połączony
- **Info o urządzeniu** — czas urządzenia, czas pracy (formatowany jako dni/godziny/minuty), użycie RAM
- **Firmware** — dostępna aktualizacja firmware

### Akcje serwisowe (szablon HTTP)

Dostępne są dwie akcje serwisowe:

- **Włącz chmurę** — włącza lub wyłącza łączność Shelly Cloud
- **Restart** — wyzwala restart urządzenia

### Dodatkowe funkcje

Shelly DUO udostępnia również timer światła (flaga aktywna i pozostałe sekundy), automatyczny timer wyłączenia na endpoincie światła, temperaturę wewnętrzną urządzenia, siłę sygnału Wi-Fi jako samodzielne urządzenie czujnikowe oraz topic MQTT online/offline LWT do wykrywania stanu połączenia. Te funkcje mogą zostać dodane w przyszłej aktualizacji szablonu.

## Rozwiązywanie problemów

### Żarówka nie odpowiada (HTTP)

1. Sprawdź, czy DUO jest podłączona do Wi-Fi i ma prawidłowy adres IP
2. Spróbuj użyć nazwy hosta mDNS (`ShellyBulbDuo-AABBCCDDEE.local`) zamiast adresu IP — IP mógł się zmienić po odnowieniu DHCP
3. Otwórz `http://{bulb-ip}/shelly` w przeglądarce — jeśli odpowiada JSON zawierającym `"type":"SHBDUO-1"`, żarówka jest dostępna
4. Sprawdź, czy TapHome CCU i DUO są w tej samej sieci / VLAN

### Moc pokazuje zero

1. Potwierdź, że model urządzenia jest skonfigurowany w aplikacji Shelly (Settings > Device Model)
2. Sprawdź, czy żarówka jest włączona — licznik mierzy tylko gdy przepływa prąd
3. Odpytaj `/status` ręcznie i zweryfikuj, że `meters[0].power` zwraca wartość różną od zera

### Żarówka MQTT nie odpowiada

1. Sprawdź, czy MQTT jest włączone w interfejsie web Shelly (Internet & Security > Advanced — MQTT)
2. Potwierdź, że adres brokera i port są poprawne zarówno w urządzeniu Shelly, jak i w ustawieniach modułu TapHome
3. Sprawdź, czy zmienna niestandardowa `bulbNtopic` dokładnie odpowiada Device ID żarówki (np. `ShellyBulbDuo-B929CC`)
4. Użyj klienta MQTT (np. MQTT Explorer) do subskrypcji `shellies/#` i sprawdź, czy żarówka publikuje wiadomości

### Przejścia świetlne wydają się szarpane

1. Zwiększ parametr czas przejścia — domyślne 300 ms może być za krótkie dla dużych zmian jasności
2. Jeśli używasz HTTP, upewnij się, że żaden inny system nie odpytuje żarówki jednocześnie — urządzenia Gen1 obsługują tylko 2 jednoczesne połączenia

> [!WARNING]
> Urządzenia Shelly Gen1 obsługują tylko **2 jednoczesne połączenia HTTP**. Jeśli TapHome i inny system (np. Home Assistant) odpytują to samo urządzenie jednocześnie, komunikacja może być zawodna. Rozważ przejście na szablon MQTT dla środowisk z wieloma systemami.

## Jak zainstalować w TapHome

### Wymagania wstępne

- Urządzenie Shelly zainstalowane i włączone
- Lokalna sieć Wi-Fi (2,4 GHz)
- TapHome CCU w tej samej sieci

### Krok 1 — Podłącz Shelly do Wi-Fi

**Opcja A — Aplikacja Shelly (zalecana):**

1. Pobierz [aplikację Shelly](https://www.shelly.com/en/support/shelly-app) (iOS / Android)
2. Dotknij **+** → **Add Device** i postępuj zgodnie z kreatorem parowania Bluetooth
3. Wprowadź dane logowania Wi-Fi, gdy zostaniesz o to poproszony

**Opcja B — Tryb AP (bez aplikacji):**

1. Przy pierwszym uruchomieniu urządzenie tworzy hotspot: `ShellyXXX-AABBCCDDEE`
2. Połącz telefon/PC z tym hotspotem
3. Otwórz `http://192.168.33.1` → **Internet & Security** → **Wi-Fi Mode - Client**
4. Wprowadź SSID i hasło → **Save**

> [!NOTE]
> Shelly obsługuje tylko sieci **2,4 GHz**. Sieci 5 GHz nie pojawią się podczas skanowania.

### Krok 2 — Znajdź adres IP

Po połączeniu z Wi-Fi znajdź przypisany adres IP za pomocą jednej z poniższych metod:

- **Aplikacja Shelly:** Szczegóły urządzenia → **Device info** → Adres IP
- **Interfejs webowy Shelly:** Połącz się z AP urządzenia przed konfiguracją Wi-Fi — IP zostanie wyświetlone po zapisaniu
- **Tabela DHCP routera:** Szukaj nazwy hosta takiej jak `shelly1pm-AABBCCDDEE`
- **mDNS:** Pinguj `shelly<model>-<mac>.local` (np. `shelly1pm-AABBCCDDEE.local`) z tej samej sieci

> [!TIP]
> Przypisz urządzeniu Shelly **statyczny IP** (rezerwację DHCP) w routerze, aby adres nie zmieniał się po ponownym uruchomieniu routera.

### Krok 3 — Konfiguracja w TapHome

1. W TapHome dodaj nowy moduł **Packet Parser (HTTP)**
2. **IP Address:** wprowadź IP z kroku 2 (np. `192.168.1.50`)
3. **Port:** `80` (domyślny, nie wymaga zmiany)
4. Zaimportuj szablon — TapHome będzie okresowo odpytywać `/status` w celu odczytu stanu urządzenia

> [!NOTE]
> Uwierzytelnianie HTTP jest domyślnie wyłączone na urządzeniach Shelly. Jeśli włączyłeś ochronę logowaniem, TapHome obecnie nie obsługuje HTTP Basic Auth — pozostaw uwierzytelnianie wyłączone dla integracji z TapHome.

## Dostępne urządzenia 2

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

Shelly DUO Moduł

Atrybuty serwisowe

|                          |
|--------------------------|
| Adres IP                 |
| Adres MAC                |
| Sygnał WiFi              |
| Chmura włączona          |
| Chmura połączona         |
| MQTT połączony           |
| Czas urządzenia          |
| Dostępna aktualizacja FW |
| Czas pracy               |
| RAM                      |

Akcje serwisowe

|              |
|--------------|
| Włącz chmurę |
| Restart      |

Zmienne niestandardowe

|                                             |                                                                                     |
|---------------------------------------------|-------------------------------------------------------------------------------------|
| `transitionTime` (numeric) = TransitionTime | Czas trwania przejścia światła w milisekundach (parametr importu, domyślnie 300 ms) |

Odczyt (moduł)

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

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

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

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

Atrybuty serwisowe

IP Address

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

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

VAR address := PARSEJSON(jsonStatus, "$.wifi_sta.ip", 1);
IF (ISNULL(address), "-", address)
```

MAC Address

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

STRING mac;
INT i := 0;
INT len := LENGTH(value);

WHILE i < len
    mac += GETAT(value, i);
    i += 1;
    
    IF MOD(i, 2) = 0 AND i < len
        mac += ":";
    END
LOOP

mac
```

WIFI signal

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

Cloud enabled

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

Cloud connected

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

MQTT connected

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

Device time

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

FW update available

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

Uptime

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

VAR days := FLOOR(value/86400, 1);
value := MOD(value, 86400);
VAR hours := FLOOR(value/3600, 1);
value := MOD(value, 3600);
VAR minutes := FLOOR(value/60, 1);

days + "day(s) " + hours + "h " + minutes + "m"
```

RAM

```taphome
VAR ramFree := PARSEJSON(jsonStatus, "$.ram_free", 1);
VAR ramTotal := PARSEJSON(jsonStatus, "$.ram_total", 1);

IF ISNULL(ramFree) OR ISNULL(ramTotal)
    RETURN("-");
END

ramFree + " bytes free of " + ramTotal
```

Akcje serwisowe

Enable cloud

Parametry: Enable (Enable / Disable)

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

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

Reboot

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

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

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

Białe światło CCT (2700–6500 K) — ściemnianie jasności i sterowanie temperaturą barwową

numeric Jednostka: %, K json\_path

Odczyt jasności

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

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

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

IF ISNULL(value)
    RETURN(NaN);
END

BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison", 1);

IF ISNULL(isOn)
    RETURN(NaN);
END

IF(isOn, value/100.0, 0);
```

Zapis jasności

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

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

Odczyt temperatury barwowej

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

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

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

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

Zapis temperatury barwowej

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

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

Licznik energii Licznik energii Tylko do odczytu

Pomiar zużycia energii — moc chwilowa (kW) i energia skumulowana (kWh)

numeric Jednostka: W / kWh json\_path

Odczyt całkowitego zużycia

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

VAR power := PARSEJSON(jsonStatus, "$.meters[0].power");
VAR total := PARSEJSON(jsonStatus, "$.meters[0].total");
BOOL isOn := PARSEJSON(jsonStatus, "$.lights[0].ison");

IF ISNULL(power) OR ISNULL(total) OR (ison AND power=0)
	ADDWARNING("To enable power monitoring, open device settings in Shelly app or web browser and configure device model in Settings->Device Model");
	
    RETURN(NaN);
END

total / 60000.0
```

Odczyt zapotrzebowania

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

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

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
```

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

Możliwe ulepszenia (7)

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

## Parametry importu

Te wartości podajesz podczas importu pliku XML.

| Pytanie w aplikacji  | Domyślnie     |
|----------------------|---------------|
| Adres IP             | `192.168.0.1` |
| 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 — Device-Specific API
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/#shelly-duo) 2026-03-30
- Shelly DUO — Product Datasheet
  
  [shellystore.co.uk](https://shellystore.co.uk/wp-content/uploads/2021/05/Duo-specs.pdf) 2026-03-30
  
  [PDF](https://taphome.com/compatibility/devices/shelly-duo/manufacturer/duo-specs.pdf)

Dokumenty producentów są © ich właścicieli. Udostępniamy je w formie opublikowanej przez producenta, wyłącznie w celach informacyjnych.

## Powiązana dokumentacja

- [Integracja Packet Parser](https://taphome.com/pl/compatibility/packet-parser-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/)

