TapHome

Shelly DUO

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

Shelly DUO je Wi-Fi LED žiarovka s päticou E27, ktorá podporuje stmievanie jasu a nastaviteľnú teplotu chromatickosti bieleho svetla (CCT) v rozsahu 2700 K (teplá biela) až 6500 K (denné svetlo). TapHome sa so žiarovkou integruje lokálne cez Wi-Fi pomocou HTTP REST API alebo MQTT. Cloudové pripojenie nie je potrebné.

K dispozícii sú dve TapHome šablóny: HTTP šablóna pre jednu žiarovku a MQTT šablóna, ktorá dokáže ovládať až 5 DUO žiaroviek cez jedno MQTT broker pripojenie. Obe šablóny exponujú rovnaké typy zariadení na žiarovku — svetlo s ovládaním jasu a CCT a elektromer na meranie spotreby.

Konfigurácia

HTTP šablóna

HTTP šablóna vyžaduje IP adresu žiarovky (alebo mDNS hostname ShellyBulbDuo-{MAC}.local). TapHome dotazuje endpoint /status každých 2,5 sekundy a ukladá JSON odpoveď do vlastnej premennej jsonStatus. Jednotlivé skripty zariadení parsujú uloženú odpoveď bez zbytočných HTTP volaní.

Šablóna akceptuje dva importné parametre:

  • IP adresa — lokálna IP žiarovky (predvolená 192.168.0.1)
  • Čas prechodu — trvanie svetelného prechodu v milisekundách (predvolené 300 ms)
MQTT šablóna

MQTT šablóna vyžaduje IP brokera, port a Device ID pre každú žiarovku (formát: ShellyBulbDuo-DEVICEID). Device ID nájdete vo webovom rozhraní Shelly v časti Settings > Device Info, alebo cez GET http://{bulb-ip}/settings v poli mqtt.id.

Šablóna podporuje až 5 DUO žiaroviek cez jeden modul. Každá žiarovka sa identifikuje vlastnou topic premennou (bulb1topicbulb5topic). Nepoužité sloty žiaroviek môžu zostať na predvolenej placeholder hodnote.

Šablóna akceptuje tri importné parametre:

  • MQTT Broker IP — adresa brokera (predvolená 192.168.0.1)
  • MQTT Broker port — port brokera (predvolený 1883)
  • Čas prechodu — trvanie svetelného prechodu v milisekundách (predvolené 300 ms)

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

Funkcie zariadenia

Ovládanie svetla

Šablóna exponuje DUO ako zariadenie bieleho svetla s dvoma ovládateľnými parametrami:

  • Jas — čítaný z lights[0].brightness (0–100, interne konvertovaný na 0,0–1,0) a lights[0].ison; ovládaný cez /light/0?turn=on|off&brightness=N (HTTP) alebo publikovaním JSON do topicu light/0/set (MQTT)
  • Teplota chromatickosti — čítaná z lights[0].temp (2700–6500 K); ovládaná cez /light/0?temp=K (HTTP) alebo poľom temp v JSON payload (MQTT)

Oba parametre sa odosielajú spoločne v jednom príkaze zápisu. Parameter čas prechodu ovláda trvanie plynulého prechodu pre všetky zmeny.

Keď sa svetlo vypne (jas nastavený na 0), šablóna odošle turn=off (HTTP) alebo publikuje off do topicu light/0/command (MQTT).

Debounce mechanizmus

HTTP šablóna obsahuje debounce ochranu na prevenciu zastaralých údajov počas svetelných prechodov. Po každom príkaze zápisu šablóna ignoruje čítania /status po dobu trvania prechodu plus 500 ms. Počas tohto obdobia skripty čítania vracajú posledné známe hodnoty namiesto dopytovania zariadenia. Tým sa zabráni krátkemu zobrazeniu medzistavov v UI, kým žiarovka prechádza.

MQTT šablóna debounce nepotrebuje — prijíma aktualizácie stavu priamo zo žiarovky, keď nastanú.

Meranie spotreby

Vstavaný elektromer číta dve hodnoty:

  • Okamžitý výkonmeters[0].power vo wattoch, konvertovaný na kW (delený 1000)
  • Celková spotrebameters[0].total vo watt-minútach, konvertovaný na kWh (delený 60 000)

Elektromer je len na čítanie a aktualizuje sa automaticky pri každom cykle dopytovania (HTTP) alebo pri každej MQTT správe.

Pre zapnutie monitorovania spotreby musí byť model zariadenia nakonfigurovaný v aplikácii Shelly alebo webovom prehliadači v časti Settings > Device Model. Ak je žiarovka zapnutá, ale výkon ukazuje nulu, šablóna zobrazí varovanie o tomto konfiguračnom kroku.

Servisná diagnostika (HTTP šablóna)

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

  • Sieťové info — IP adresa, MAC adresa (formátovaná s dvojbodkovými oddeľovačmi), sila Wi-Fi signálu (dB)
  • Pripojiteľnosť — cloud povolený/pripojený, MQTT pripojený
  • Info o zariadení — čas zariadenia, doba prevádzky (formátovaná ako dni/hodiny/minúty), využitie RAM
  • Firmware — dostupná aktualizácia firmvéru
Servisné akcie (HTTP šablóna)

K dispozícii sú dve servisné akcie:

  • Povoliť cloud — zapne alebo vypne pripojenie Shelly Cloud
  • Reštart — spustí reštart zariadenia
Ďalšie funkcie

Shelly DUO tiež exponuje svetelný časovač (aktívny príznak a zostávajúce sekundy), automatický časovač vypnutia na svetelnom endpointe, internú teplotu zariadenia, silu Wi-Fi signálu ako samostatné senzorové zariadenie a MQTT online/offline LWT topic pre detekciu stavu pripojenia. Tieto funkcie môžu byť pridané v budúcej aktualizácii šablóny.

Riešenie problémov

Žiarovka neodpovedá (HTTP)
  1. Overte, že DUO je pripojená k Wi-Fi a má platnú IP adresu
  2. Skúste použiť mDNS hostname (ShellyBulbDuo-AABBCCDDEE.local) namiesto IP adresy — IP sa mohla zmeniť po obnovení DHCP
  3. Otvorte http://{bulb-ip}/shelly v prehliadači — ak odpovedá JSON obsahujúci "type":"SHBDUO-1", žiarovka je dostupná
  4. Skontrolujte, že TapHome CCU a DUO sú v rovnakej sieti / VLAN
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 žiarovka neodpovedá
  1. Overte, že MQTT je zapnuté vo webovom rozhraní Shelly (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. ShellyBulbDuo-B929CC)
  4. Použite MQTT klienta (napr. MQTT Explorer) na odber shellies/# a overte, že žiarovka publikuje správy
Svetelné prechody pôsobia trhaným dojmom
  1. Zvýšte parameter čas prechodu — predvolených 300 ms môže byť príliš málo pre veľké zmeny jasu
  2. Ak používate HTTP, uistite sa, že žiadny iný systém nedotazuje žiarovku súčasne — zariadenia Gen1 podporujú len 2 súčasné pripojenia

Zariadenia Shelly Gen1 podporujú len 2 súčasné HTTP pripojenia. Ak TapHome a iný systém (napr. Home Assistant) dotazujú rovnaké zariadenie 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 Modul
Servisné atribúty
IP adresa
MAC adresa
WiFi signál
Cloud povolený
Cloud pripojený
MQTT pripojený
Čas zariadenia
Dostupná aktualizácia FW
Doba prevádzky
RAM
Servisné akcie
Povoliť cloud
Reštart
Vlastné premenné
transitionTime (numeric) = TransitionTimeLight transition duration in milliseconds (import parameter, default 300 ms)

Shelly DUO 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");
Svetlo Biele svetlo

CCT biele svetlo (2700–6500 K) — stmievanie jasu a ovládanie teploty chromatickosti

numeric Jednotka: %, K json_path

Svetlo

Čítanie jasu
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);
Zápis jasu
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;
Čítanie farebnej teploty
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
Zápis farebnej teploty
SENDHTTPREQUEST("light/0?transition=" + transitionTime + "&brightness=" + ROUND(Hb*100) + "&temp=" + Ct);

VAR now := NOW();
debounceTimestamp := now.Ticks + transitionTime + 500;
Elektromer Elektromer Len na čítanie

Meranie spotreby energie — okamžitý výkon (kW) a celková spotreba (kWh)

numeric Jednotka: W / kWh json_path

Elektromer

Čí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 (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.

Zdroje