TapHome

Shelly DUO RGBW

Packet Parser → HTTP
Pridal
Posledná aktualizácia: 03. 2026
Shelly DUO RGBW

Shelly DUO RGBW je Wi-Fi inteligentná LED žiarovka Gen1 vo formáte GU10. Podporuje plné RGB farby a nastaviteľnú bielu (CCT 3000–6500 K) s plynulými prechodovými efektmi. TapHome komunikuje so zariadením cez lokálnu sieť — cloudové pripojenie nie je potrebné.

K dispozícii sú dve TapHome šablóny: HTTP šablóna na ovládanie jednej žiarovky cez REST API a MQTT šablóna, ktorá dokáže ovládať až 5 žiaroviek cez zdieľaný MQTT broker. Obe šablóny exponujú plné ovládanie svetla a meranie spotreby.

Konfigurácia

HTTP šablóna

HTTP šablóna vyžaduje IP adresu žiarovky (predvolený placeholder 192.168.0.1) a voliteľný čas prechodu v milisekundách (predvolených 300 ms). TapHome dotazuje endpoint /status každých 2,5 sekundy na čítanie stavu svetla, farebných hodnôt a údajov o spotrebe energie.

Čítací skript na úrovni modulu ukladá odpoveď /status do vlastnej premennej jsonStatus, takže skripty jednotlivých zariadení môžu parsovať údaje bez zbytočných HTTP volaní.

MQTT šablóna

MQTT šablóna vyžaduje údaje o pripojení k brokeru a jedno alebo viac Device ID — jedno na žiarovku. Device ID každej žiarovky sa konfiguruje cez vlastnú premennú bulbNtopic (formát: shellycolorbulb-DEVICEID). Device ID nájdete vo webovom rozhraní Shelly v časti Settings > Device Info.

Šablóna podporuje až 5 žiaroviek súčasne. Konfigurujte premenné bulbNtopic len pre žiarovky, ktoré skutočne máte — nepoužité sloty môžu zostať na predvolených placeholder hodnotách.

Po zapnutí MQTT na Shelly DUO RGBW (Internet & Security > Advanced — MQTT) sa TapHome prihlási na odber shellies/# a smeruje správy na správnu inštanciu žiarovky podľa prefixu topicu.

Na zariadeniach Shelly Gen1 zapnutie MQTT vypne Shelly Cloud. Oboje nemôže bežať súčasne.

Funkcie zariadenia

Ovládanie svetla

Žiarovka pracuje v dvoch vzájomne výlučných režimoch:

  • Farebný režim — plné RGB ovládanie cez červený, zelený a modrý kanál (0–255 každý) plus zosilnenie (jas, 0–100 %). TapHome to reprezentuje ako HSB svetlo — odtieň (0–360), sýtosť (0,0–1,0) a jas (0,0–1,0) sa konvertujú z RGB pomocou funkcie RGBTOHSV.
  • Biely režim — nastaviteľná biela cez teplotu chromatickosti (3000–6500 K) a jas (0–100 %). Nastavenie hodnoty CCT v TapHome automaticky prepne žiarovku do bieleho režimu.

Režim sa prepína automaticky podľa toho, ktorú vlastnosť nastavíte:

  • Nastavenie odtieňa alebo sýtosti odošle príkaz /light/0?mode=color (HTTP) alebo JSON payload s "mode":"color" cez color/0/set (MQTT)
  • Nastavenie CCT odošle príkaz /light/0?mode=white (HTTP) alebo payload s "mode":"white" (MQTT)

Všetky príkazy zápisu obsahujú nakonfigurovaný parameter transitionTime pre plynulé stmievanie medzi stavmi. Debounce mechanizmus zabraňuje zastaralým čítaniam počas prechodov — šablóna ignoruje odpovede /status krátku dobu po každom zápise.

V MQTT režime je debounce okno 3 sekundy po každom zápise (dlhšie ako HTTP šablóna) kvôli latencii doručovania MQTT správ.

Meranie spotreby

Obe šablóny exponujú elektromer, ktorý číta dve hodnoty:

  • Okamžitý výkon — vo wattoch, konvertovaný na kW delením 1000
  • Celková spotreba — vo watt-minútach, konvertovaná na kWh delením 60 000

HTTP šablóna číta meters[0].power a meters[0].total z odpovede /status. MQTT šablóna počúva topicy shellies/{id}/light/0/power a shellies/{id}/light/0/energy pre každú žiarovku nezávisle.

Monitorovanie spotreby vyžaduje nakonfigurovanie modelu zariadenia v aplikácii Shelly alebo webovom rozhraní v časti Settings > Device Model. Ak model nie je nastavený a žiarovka je zapnutá, ale výkon ukazuje nulu, šablóna zobrazí varovanie.

Servisná diagnostika (len HTTP)

HTTP šablóna exponuje 10 servisných atribútov na monitorovanie zariadenia:

  • Sieťové info — IP adresa, MAC adresa, sila WiFi signálu (dB)
  • Pripojiteľnosť — cloud povolený/pripojený, MQTT pripojený
  • Systém — čas zariadenia, dostupná aktualizácia firmvéru, doba prevádzky, využitie RAM
Servisné akcie (len HTTP)

V HTTP šablóne sú k dispozícii dve servisné akcie:

  • Povoliť cloud — zapne alebo vypne pripojenie Shelly Cloud
  • Reštart — spustí reštart zariadenia
Ď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 vo farebnom režime a MQTT stav pripojenia (LWT). Tieto funkcie môžu byť pridané v budúcej aktualizácii šablóny.

Riešenie problémov

Žiarovka neodpovedá (HTTP)
  1. Overte, že žiarovka je pripojená k Wi-Fi a má platnú IP adresu
  2. Skúste použiť mDNS hostname (shellycolorbulb-AABBCCDDEE.local) namiesto IP adresy — IP sa mohla zmeniť po obnovení DHCP
  3. Otvorte http://{device-ip}/shelly v prehliadači — ak odpovedá, zariadenie je dostupné
  4. Skontrolujte, že TapHome CCU a žiarovka sú v rovnakej sieti / VLAN
Farby sa zobrazujú nesprávne
  1. Overte, že žiarovka je v správnom režime — RGB farby fungujú len vo farebnom režime, nie v bielom režime
  2. Pri nastavovaní farby cez TapHome skontrolujte, že sýtosť je väčšia ako nula — sýtosť 0 produkuje biele svetlo bez ohľadu na odtieň
  3. Skontrolujte, že zosilnenie (jas vo farebnom režime) nie je nastavené na nulu
Výkon ukazuje nulu
  1. Potvrďte, že model zariadenia je nakonfigurovaný v aplikácii Shelly (Settings > Device Model)
  2. Skontrolujte, že žiarovka je zapnutá — elektromer meria len keď preteká prúd
  3. Zavolajte /status manuálne a overte, že meters[0].power vracia nenulovú hodnotu
MQTT žiarovky neodpovedajú
  1. Overte, že MQTT je zapnuté vo webovom rozhraní každej žiarovky (Internet & Security > Advanced — MQTT)
  2. Potvrďte, že adresa brokera a port sú správne v nastaveniach zariadenia Shelly aj modulu TapHome
  3. Skontrolujte, že vlastná premenná bulbNtopic sa presne zhoduje s Device ID žiarovky (napr. shellycolorbulb-B929CC)
  4. Použite MQTT klienta (napr. MQTT Explorer) na odber shellies/# a overte, že každá žiarovka publikuje správy

Zariadenia Shelly Gen1 podporujú len 2 súčasné HTTP pripojenia. Ak TapHome a iný systém (napr. Home Assistant) dotazujú rovnakú žiarovku súčasne, komunikácia môže byť nespoľahlivá. Zvážte prechod na MQTT šablónu pre prostredia s viacerými systémami.

Ako nainštalovať v TapHome

Predpoklady

  • Zariadenie Shelly nainštalované a zapnuté
  • Lokálna Wi-Fi sieť (2,4 GHz)
  • TapHome CCU v rovnakej sieti

Krok 1 — Pripojte Shelly k Wi-Fi

Možnosť A — Aplikácia Shelly (odporúčané):

  1. Stiahnite si aplikáciu Shelly (iOS / Android)
  2. Klepnite na +Add Device a postupujte podľa sprievodcu Bluetooth párovaním
  3. Po výzve zadajte svoje Wi-Fi prihlasovacie údaje

Možnosť B — AP režim (bez aplikácie):

  1. Pri prvom zapnutí zariadenie vytvorí hotspot: ShellyXXX-AABBCCDDEE
  2. Pripojte telefón/PC k tomuto hotspotu
  3. Otvorte http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Zadajte SSID a heslo → Save

Shelly podporuje iba 2,4 GHz siete. 5 GHz siete sa pri skenovaní nezobrazia.

Krok 2 — Zistite IP adresu

Po pripojení k Wi-Fi zistite priradenú IP adresu jedným z nasledujúcich spôsobov:

  • Aplikácia Shelly: Detail zariadenia → Device info → IP adresa
  • Webové rozhranie Shelly: Pripojte sa k AP zariadenia pred nastavením Wi-Fi — IP sa zobrazí po uložení
  • DHCP tabuľka routera: Hľadajte hostname ako shelly1pm-AABBCCDDEE
  • mDNS: Pingnite shelly<model>-<mac>.local (napr. shelly1pm-AABBCCDDEE.local) z rovnakej siete

Priraďte zariadeniu Shelly statickú IP (DHCP rezerváciu) vo vašom routeri, aby sa adresa nezmenila po reštarte routera.

Krok 3 — Konfigurácia v TapHome

  1. V TapHome pridajte nový modul Packet Parser (HTTP)
  2. IP Address: zadajte IP z kroku 2 (napr. 192.168.1.50)
  3. Port: 80 (predvolený, nie je potrebné meniť)
  4. Importujte šablónu — TapHome bude pravidelne čítať /status pre zistenie stavu zariadenia

HTTP autentifikácia je na zariadeniach Shelly štandardne vypnutá. Ak ste povolili ochranu prihlásením, TapHome momentálne nepodporuje HTTP Basic Auth — pre integráciu s TapHome ponechajte autentifikáciu vypnutú.

Dostupné zariadenia

Shelly DUO RGBW Module Modul
Servisné atribúty
IP Address
MAC Address
WIFI signal
Cloud enabled
Cloud connected
MQTT connected
Device time
FW update available
Uptime
RAM
Servisné akcie
Enable cloud
Reboot
Vlastné premenné
jsonStatus (string)
debounceTimestamp (numeric)
transitionTime (numeric) = TransitionTime

Shelly DUO RGBW Module

Čítanie (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é atribúty
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é akcie
Enable cloud
Parametre: 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 svetlo

Shelly DUO RGBW ${deviceType_Light}

Čítanie 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;
Čítanie odtieňa
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 odtieňa
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;
Čítanie saturácie
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 saturácie
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;
Čítanie farebnej 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 farebnej 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 Elektromer

Shelly DUO RGBW Electric meter

Čítanie celkovej spotreby
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
Čítanie odberu
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

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

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
Pripojenie: Packet Parser → HTTP
Možné vylepšenia (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