TapHome

Shelly DUO RGBW

Packet Parser → HTTP
Přidal
Poslední aktualizace: 03. 2026
Shelly DUO RGBW

Shelly DUO RGBW je chytrá Wi-Fi LED žárovka Gen1 ve formátu GU10. Podporuje plné RGB barvy a nastavitelnou bílou (CCT 3000–6500 K) s plynulými přechodovými efekty. TapHome komunikuje se zařízením přes lokální síť — cloudové připojení není potřeba.

K dispozici jsou dvě TapHome šablony: HTTP šablona pro ovládání jedné žárovky přes REST API a MQTT šablona, která může ovládat až 5 žárovek přes sdílený MQTT broker. Obě šablony vystavují plné ovládání světla a měření spotřeby.

Konfigurace

HTTP šablona

HTTP šablona vyžaduje IP adresu žárovky (výchozí placeholder 192.168.0.1) a volitelný čas přechodu v milisekundách (výchozí 300 ms). TapHome dotazuje endpoint /status každé 2,5 sekundy pro čtení stavu světla, barevných hodnot a údajů o spotřebě energie.

Čtecí skript na úrovni modulu ukládá odpověď /status do vlastní proměnné jsonStatus, takže skripty jednotlivých zařízení mohou parsovat údaje bez zbytečných HTTP volání.

MQTT šablona

MQTT šablona vyžaduje údaje o připojení k brokeru a jedno nebo více Device ID — jedno na žárovku. Device ID každé žárovky se konfiguruje přes vlastní proměnnou bulbNtopic (formát: shellycolorbulb-DEVICEID). Device ID najdete ve webovém rozhraní Shelly v části Settings > Device Info.

Šablona podporuje až 5 žárovek současně. Konfigurujte proměnné bulbNtopic pouze pro žárovky, které skutečně máte — nepoužité sloty mohou zůstat na výchozích placeholder hodnotách.

Po zapnutí MQTT na Shelly DUO RGBW (Internet & Security > Advanced — MQTT) se TapHome přihlásí k odběru shellies/# a směruje zprávy na správnou instanci žárovky podle prefixu topicu.

Na zařízeních Shelly Gen1 zapnutí MQTT vypne Shelly Cloud. Obojí nemůže běžet současně.

Funkce zařízení

Ovládání světla

Žárovka pracuje ve dvou vzájemně výlučných režimech:

  • Barevný režim — plné RGB ovládání přes červený, zelený a modrý kanál (0–255 každý) plus gain (jas, 0–100 %). TapHome to reprezentuje jako HSB světlo — odstín (0–360), sytost (0,0–1,0) a jas (0,0–1,0) se konvertují z RGB pomocí funkce RGBTOHSV.
  • Bílý režim — nastavitelná bílá přes teplotu chromatičnosti (3000–6500 K) a jas (0–100 %). Nastavení hodnoty CCT v TapHome automaticky přepne žárovku do bílého režimu.

Režim se přepíná automaticky podle toho, kterou vlastnost nastavíte:

  • Nastavení odstínu nebo sytosti odešle příkaz /light/0?mode=color (HTTP) nebo JSON payload s "mode":"color" přes color/0/set (MQTT)
  • Nastavení CCT odešle příkaz /light/0?mode=white (HTTP) nebo payload s "mode":"white" (MQTT)

Všechny příkazy zápisu obsahují nakonfigurovaný parametr transitionTime pro plynulé stmívání mezi stavy. Debounce mechanismus zabraňuje zastaralým čtením během přechodů — šablona ignoruje odpovědi /status krátkou dobu po každém zápisu.

V MQTT režimu je debounce okno 3 sekundy po každém zápisu (delší než HTTP šablona) kvůli latenci doručování MQTT zpráv.

Měření spotřeby

Obě šablony vystavují elektroměr, který čte dvě hodnoty:

  • Okamžitý výkon — ve wattech, konvertovaný na kW dělením 1000
  • Celková spotřeba — ve watt-minutách, konvertovaná na kWh dělením 60 000

HTTP šablona čte meters[0].power a meters[0].total z odpovědi /status. MQTT šablona naslouchá topicům shellies/{id}/light/0/power a shellies/{id}/light/0/energy pro každou žárovku nezávisle.

Monitorování spotřeby vyžaduje nakonfigurování modelu zařízení v aplikaci Shelly nebo webovém rozhraní v části Settings > Device Model. Pokud model není nastaven a žárovka je zapnutá, ale výkon ukazuje nulu, šablona zobrazí varování.

Servisní diagnostika (pouze HTTP)

HTTP šablona vystavuje 10 servisních atributů pro monitorování zařízení:

  • Síťové info — IP adresa, MAC adresa, síla WiFi signálu (dB)
  • Připojitelnost — cloud povolen/připojen, MQTT připojen
  • Systém — čas zařízení, dostupná aktualizace firmwaru, doba provozu, využití RAM
Servisní akce (pouze HTTP)

V HTTP šabloně jsou k dispozici dvě servisní akce:

  • Povolit cloud — zapne nebo vypne připojení Shelly Cloud
  • Restart — spustí restart zařízení
Další funkce

Shelly DUO RGBW také podporuje světelné efekty (meteor shower, gradual change, breath, flash, on/off gradual, red/green change), dedikovaný bílý LED kanál v barevném režimu a MQTT stav připojení (LWT). Tyto funkce mohou být přidány v budoucí aktualizaci šablony.

Řešení problémů

Žárovka neodpovídá (HTTP)
  1. Ověřte, že žárovka je připojena k Wi-Fi a má platnou IP adresu
  2. Zkuste použít mDNS hostname (shellycolorbulb-AABBCCDDEE.local) místo IP adresy — IP se mohla změnit po obnovení DHCP
  3. Otevřete http://{device-ip}/shelly v prohlížeči — pokud odpoví, zařízení je dostupné
  4. Zkontrolujte, že TapHome CCU a žárovka jsou ve stejné síti / VLAN
Barvy se zobrazují nesprávně
  1. Ověřte, že žárovka je ve správném režimu — RGB barvy fungují pouze v barevném režimu, ne v bílém režimu
  2. Při nastavování barvy přes TapHome zkontrolujte, že sytost je větší než nula — sytost 0 produkuje bílé světlo bez ohledu na odstín
  3. Zkontrolujte, že gain (jas v barevném režimu) není nastaven na nulu
Výkon ukazuje nulu
  1. Potvrďte, že model zařízení je nakonfigurován v aplikaci Shelly (Settings > Device Model)
  2. Zkontrolujte, že žárovka je zapnutá — elektroměr měří pouze když protéká proud
  3. Zavolejte /status manuálně a ověřte, že meters[0].power vrací nenulovou hodnotu
MQTT žárovky neodpovídají
  1. Ověřte, že MQTT je zapnuto ve webovém rozhraní každé žárovky (Internet & Security > Advanced — MQTT)
  2. Potvrďte, že adresa brokeru a port jsou správné v nastavení zařízení Shelly i modulu TapHome
  3. Zkontrolujte, že vlastní proměnná bulbNtopic se přesně shoduje s Device ID žárovky (např. shellycolorbulb-B929CC)
  4. Použijte MQTT klienta (např. MQTT Explorer) pro odběr shellies/# a ověřte, že každá žárovka publikuje zprávy

Zařízení Shelly Gen1 podporují pouze 2 souběžná HTTP připojení. Pokud TapHome a jiný systém (např. Home Assistant) dotazují stejnou žárovku současně, komunikace může být nespolehlivá. Zvažte přechod na MQTT šablonu pro prostředí s více systémy.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly nainstalované a zapnuté
  • Lokální Wi-Fi síť (2,4 GHz)
  • TapHome CCU ve stejné síti

Krok 1 — Připojte Shelly k Wi-Fi

Možnost A — Aplikace Shelly (doporučeno):

  1. Stáhněte si aplikaci Shelly (iOS / Android)
  2. Klepněte na +Add Device a postupujte podle průvodce Bluetooth párováním
  3. Po výzvě zadejte své Wi-Fi přihlašovací údaje

Možnost B — AP režim (bez aplikace):

  1. Při prvním zapnutí zařízení vytvoří hotspot: ShellyXXX-AABBCCDDEE
  2. Připojte telefon/PC k tomuto hotspotu
  3. Otevřete http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Zadejte SSID a heslo → Save

Shelly podporuje pouze 2,4 GHz sítě. 5 GHz sítě se při skenování nezobrazí.

Krok 2 — Zjistěte IP adresu

Po připojení k Wi-Fi zjistěte přiřazenou IP adresu jedním z následujících způsobů:

  • Aplikace Shelly: Detail zařízení → Device info → IP adresa
  • Webové rozhraní Shelly: Připojte se k AP zařízení před nastavením Wi-Fi — IP se zobrazí po uložení
  • DHCP tabulka routeru: Hledejte hostname jako shelly1pm-AABBCCDDEE
  • mDNS: Pingněte shelly<model>-<mac>.local (např. shelly1pm-AABBCCDDEE.local) ze stejné sítě

Přiřaďte zařízení Shelly statickou IP (DHCP rezervaci) ve vašem routeru, aby se adresa nezměnila po restartu routeru.

Krok 3 — Konfigurace v TapHome

  1. V TapHome přidejte nový modul Packet Parser (HTTP)
  2. IP Address: zadejte IP z kroku 2 (např. 192.168.1.50)
  3. Port: 80 (výchozí, není potřeba měnit)
  4. Importujte šablonu — TapHome bude pravidelně číst /status pro zjištění stavu zařízení

HTTP autentifikace je na zařízeních Shelly standardně vypnutá. Pokud jste povolili ochranu přihlášením, TapHome momentálně nepodporuje HTTP Basic Auth — pro integraci s TapHome ponechte autentifikaci vypnutou.

Dostupná zařízení

Shelly DUO RGBW Module Modul
Servisní atributy
IP Address
MAC Address
WIFI signal
Cloud enabled
Cloud connected
MQTT connected
Device time
FW update available
Uptime
RAM
Servisní akce
Enable cloud
Reboot
Vlastní proměnné
jsonStatus (string)
debounceTimestamp (numeric)
transitionTime (numeric) = TransitionTime

Shelly DUO RGBW Module

Čtení (modul)
VAR now := NOW();

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

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

IF response.IsSuccess
    jsonStatus := response.Content;
ELSE
    jsonStatus := NULL;
END
Servisní atributy
IP Address
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
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
VAR signal := PARSEJSON(jsonStatus, "$.wifi_sta.rssi", 1);
IF (ISNULL(signal), "-", signal + "db");
Cloud enabled
VAR value := PARSEJSON(jsonStatus, "$.cloud.enabled", 1);
IF (ISNULL(value), "-", value)
Cloud connected
VAR value := PARSEJSON(jsonStatus, "$.cloud.connected", 1);
IF (ISNULL(value), "-", value)
MQTT connected
VAR value := PARSEJSON(jsonStatus, "$.mqtt.connected", 1);
IF (ISNULL(value), "-", value)
Device time
VAR value := PARSEJSON(jsonStatus, "$.time", 1);
IF (ISNULL(value), "-", value)
FW update available
VAR value := PARSEJSON(jsonStatus, "$.has_update");
IF (ISNULL(value), "-", value)
Uptime
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
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
Servisní akce
Enable cloud
Parametry: Enable (Enable / Disable)
VAR response := SENDHTTPREQUEST("/settings/cloud?enabled=" + enable);
VAR contentJson := response.Content;
VAR wasEnabled := PARSEJSON(contentJson, "enabled");

IF(wasEnabled, "Cloud enabled", "Cloud disabled");
Reboot
VAR response := SENDHTTPREQUEST("/reboot");
VAR contentJson := response.Content;
VAR wasRebooted := PARSEJSON(contentJson, "ok");

IF(wasRebooted, "Reboot successful", "Error");
Shelly DUO RGBW ${deviceType_Light} HSB světlo

Shelly DUO RGBW ${deviceType_Light}

Čtení jasu
VAR now := NOW();

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

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

IF mode = "white"
    value := PARSEJSON(jsonStatus, "$.lights[0].brightness", 1);
ELSE
    value := PARSEJSON(jsonStatus, "$.lights[0].gain", 1);
END

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);
Zápis jasu
IF St > 0.5
    VAR mode := PARSEJSON(jsonStatus, "$.lights[0].mode", 1);
    
    IF mode = "white"
        SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&brightness=" + ROUND(Hb*100.0));
    ELSE
        SENDHTTPREQUEST("light/0?turn=on&transition=" + transitionTime + "&gain=" + ROUND(Hb*100.0));
    END
ELSE
    SENDHTTPREQUEST("light/0?turn=off&transition=" + transitionTime);
END

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Čtení odstínu
VAR now := NOW();

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

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);
 
VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Hue);
Zápis odstínu
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE);


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Čtení saturace
VAR now := NOW();

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

INT r := PARSEJSON(jsonStatus, "$.lights[0].red", 1);
INT g := PARSEJSON(jsonStatus, "$.lights[0].green", 1);
INT b := PARSEJSON(jsonStatus, "$.lights[0].blue", 1);
 
VAR HSVColor := RGBTOHSV(r, g, b);
ROUND(HSVColor.Saturation * 100.0) / 100.0;
Zápis saturace
IF !ISNAN(Ct)
    RETURN(0);
END

VAR color := HSVTORGB(Hd, Sa, 1);

SENDHTTPREQUEST("light/0?mode=color&transition=" + transitionTime + "&gain=" + ROUND(Hb*100) + "&red=" + color.RED + "&green=" + color.GREEN + "&blue=" + color.BLUE);


VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Čtení barevné teploty
VAR now := NOW();

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

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

IF ISNULL(value) OR mode != "white"
    RETURN(NaN);
END
 
value
Zápis barevné teploty
IF Ct = NaN
    RETURN(0);
END

VAR temp := MIN(Ct, 6500);
temp := MAX(temp, 3000);

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

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Shelly DUO RGBW Electric meter Elektroměr

Shelly DUO RGBW Electric meter

Čtení celkové spotřeby
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
Čtení odběru
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

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

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
Připojení: Packet Parser → HTTP
Možná vylepšení (4)
  • Light Effect — Effect index (0=Off, 1=Meteor Shower, 2=Gradual Change, 3=Breath, 4=Flash, 5=On/Off Gradual, 6=Red/Green Change). Available in both /light/0 and MQTT color/0/set.
  • WiFi Signal Strength — WiFi RSSI in dBm, available in /status response (HTTP only; MQTT template reads it as service attribute already)
  • White Channel — Dedicated white LED channel (0–255) in color mode, separate from CCT. Available in /light/0?white=N.
  • Connection Status (MQTT) — LWT topic — true on connect, false on disconnect. Could detect offline bulbs.

Zdroje