TapHome

Shelly DUO RGBW

Packet Parser → HTTP
Trimis de
Ultima actualizare: 10. 2026

Acest dispozitiv acceptă mDNS

În loc să folosiți o adresă IP, puteți accesa dispozitivul la:

shellycolorbulb-{MAC}.local

Înlocuiți {MAC} cu adresa MAC a dispozitivului dvs. (majuscule, fără două puncte).

TapHome acceptă mDNS — folosirea unui nume de gazdă este mai fiabilă decât un IP static.

Shelly DUO RGBW

Shelly DUO RGBW este un bec LED inteligent Wi-Fi Gen1 în format GU10. Acceptă toate culorile RGB și alb reglabil (CCT 3000–6500 K), cu efecte de tranziție graduală. TapHome comunică cu dispozitivul prin rețeaua locală — nu este necesară conexiunea la cloud.

Sunt disponibile două șabloane TapHome: un șablon HTTP pentru comanda unui singur bec prin API REST și un șablon MQTT care poate comanda până la 5 becuri printr-un broker MQTT comun. Ambele șabloane oferă comanda completă a luminii și măsurarea puterii.

Configurare

Șablonul HTTP

Șablonul HTTP necesită adresa IP a becului (valoarea implicită: 192.168.0.1) și, opțional, timpul de tranziție în milisecunde (implicit 300 ms). TapHome interoghează endpointul /status la fiecare 2,5 secunde pentru a citi starea luminii, valorile culorilor și datele de măsurare a energiei.

Scriptul de citire de la nivelul modulului salvează răspunsul /status în variabila personalizată jsonStatus, astfel încât scripturile fiecărui dispozitiv să poată analiza datele fără apeluri HTTP redundante.

Șablonul MQTT

Șablonul MQTT necesită datele de conectare la broker și unul sau mai multe ID-uri de dispozitiv — câte unul pentru fiecare bec. ID-ul de dispozitiv al fiecărui bec se configurează prin variabila personalizată bulbNtopic (format: shellycolorbulb-DEVICEID). ID-ul dispozitivului se găsește în interfața web Shelly, la Settings > Device Info.

Șablonul acceptă simultan până la 5 becuri. Configurați variabilele bulbNtopic doar pentru becurile pe care le aveți efectiv — sloturile nefolosite pot rămâne la valorile implicite.

După activarea MQTT pe Shelly DUO RGBW (Internet & Security > Advanced — MQTT), TapHome se abonează la shellies/# și direcționează mesajele către becul corect pe baza prefixului de topic.

La dispozitivele Shelly Gen1, activarea MQTT dezactivează Shelly Cloud. Cele două nu pot funcționa simultan.

Funcțiile dispozitivului

Comanda luminii

Becul funcționează în două moduri care se exclud reciproc:

  • Modul color — comanda completă RGB prin canalele roșu, verde și albastru (fiecare 0–255) plus gain (luminozitate, 0–100 %). TapHome îl reprezintă ca lumină HSB — nuanța (0–360), saturația (0,0–1,0) și luminozitatea (0,0–1,0) se convertesc din RGB cu funcția RGBTOHSV.
  • Modul alb — alb reglabil prin temperatura de culoare (3000–6500 K) și luminozitate (0–100 %). Setarea unei valori CCT în TapHome comută automat becul în modul alb.

Modul se comută automat în funcție de proprietatea pe care o setați:

  • Setarea nuanței sau a saturației trimite comanda /light/0?mode=color (HTTP) sau payloadul JSON color/0/set cu "mode":"color" (MQTT)
  • Setarea CCT trimite comanda /light/0?mode=white (HTTP) sau un payload cu "mode":"white" (MQTT)

Toate comenzile de scriere includ parametrul transitionTime configurat, pentru o tranziție graduală între stări. Un mecanism debounce previne citirile neactualizate în timpul tranzițiilor — după fiecare scriere, șablonul ignoră pentru scurt timp răspunsurile /status.

În modul MQTT, fereastra debounce este durata tranziției plus 3 secunde după fiecare scriere (mai lungă decât în șablonul HTTP), pentru a acoperi întârzierea livrării mesajelor MQTT.

Măsurarea puterii

Ambele șabloane oferă un contor electric care citește două valori:

  • Putere în timp real — raportată în wați, convertită în kW prin împărțire la 1000
  • Consum total — raportat în wați-minut, convertit în kWh prin împărțire la 60 000

Șablonul HTTP citește meters[0].power și meters[0].total din răspunsul /status. Șablonul MQTT ascultă topicurile shellies/{id}/light/0/power și shellies/{id}/light/0/energy, independent pentru fiecare bec.

Monitorizarea puterii necesită configurarea modelului dispozitivului în aplicația Shelly sau în interfața web, la Settings > Device Model. Dacă modelul nu este setat, iar becul este aprins, dar puterea citită este zero, șablonul afișează un avertisment.

Diagnosticare de service (doar HTTP)

Șablonul HTTP oferă 10 atribute de service pentru monitorizarea dispozitivului:

  • Informații despre rețea — adresa IP, adresa MAC, puterea semnalului Wi-Fi (dBm)
  • Conectivitate — cloud activat/conectat, MQTT conectat
  • Sistem — ora dispozitivului, actualizare de firmware disponibilă, timpul de funcționare, utilizarea memoriei RAM
Acțiuni de service (doar HTTP)

În șablonul HTTP sunt disponibile două acțiuni de service:

  • Activare cloud — activează sau dezactivează conectivitatea Shelly Cloud
  • Repornire — declanșează repornirea dispozitivului
Funcții suplimentare

Shelly DUO RGBW acceptă și efecte de lumină (Meteor Shower, Gradual Change, Breath, Flash, On/Off Gradual, Red/Green Change), un canal LED alb dedicat în modul color și starea conexiunii MQTT (LWT). Aceste funcții pot fi adăugate într-o actualizare viitoare a șablonului.

Rezolvarea problemelor

Becul nu răspunde (HTTP)
  1. Verificați dacă becul este conectat la Wi-Fi și are o adresă IP validă
  2. Încercați numele de gazdă mDNS (shellycolorbulb-AABBCCDDEE.local) în locul adresei IP — adresa IP s-ar fi putut schimba după reînnoirea DHCP
  3. Deschideți http://{device-ip}/shelly într-un browser — dacă răspunde, dispozitivul este accesibil
  4. Verificați dacă unitatea de control TapHome (CCU) și becul se află în aceeași rețea / VLAN
Culorile par incorecte
  1. Verificați dacă becul este în modul corect — culorile RGB funcționează doar în modul color, nu în modul alb
  2. Când setați o culoare prin TapHome, asigurați-vă că saturația este mai mare decât zero — o saturație de 0 produce lumină albă indiferent de nuanță
  3. Verificați dacă gain (luminozitatea în modul color) nu este setat la zero
Puterea afișată este zero
  1. Verificați dacă modelul dispozitivului este configurat în aplicația Shelly / interfața web (Settings > Device Model)
  2. Verificați dacă becul este aprins — contorul măsoară doar atunci când becul consumă energie
  3. Interogați manual /status și verificați dacă meters[0].power returnează o valoare diferită de zero
Becurile MQTT nu răspund
  1. Verificați dacă MQTT este activat în interfața web a fiecărui bec (Internet & Security > Advanced — MQTT)
  2. Verificați dacă adresa și portul brokerului sunt corecte atât în dispozitivul Shelly, cât și în setările modulului TapHome
  3. Verificați dacă fiecare variabilă personalizată bulbNtopic corespunde exact ID-ului dispozitivului becului (de ex. shellycolorbulb-B929CC)
  4. Folosiți un client MQTT (de ex. MQTT Explorer) pentru a vă abona la shellies/# și verificați dacă fiecare bec publică mesaje

Dispozitivele Shelly Gen1 acceptă doar 2 conexiuni HTTP simultane. Dacă TapHome și un alt sistem (de ex. Home Assistant) interoghează același bec în același timp, comunicarea poate deveni instabilă. În mediile cu mai multe sisteme, luați în considerare trecerea la șablonul MQTT.

Cum se instalează în TapHome

Cerințe preliminare

  • Dispozitiv Shelly instalat și pornit
  • Rețea Wi-Fi locală (2,4 GHz)
  • TapHome CCU în aceeași rețea

Pasul 1 — Conectați dispozitivul Shelly la Wi-Fi

Varianta A — aplicația Shelly (recomandat):

  1. Descărcați aplicația Shelly (iOS / Android)
  2. Atingeți + → Add Device și urmați asistentul de împerechere prin Bluetooth
  3. Introduceți datele de conectare la Wi-Fi când vi se solicită

Varianta B — modul AP (fără aplicație):

  1. La prima pornire, dispozitivul creează un hotspot: ShellyXXX-AABBCCDDEE
  2. Conectați telefonul/PC-ul la acest hotspot
  3. Deschideți http://192.168.33.1 → Internet & Security → Wi-Fi Mode - Client
  4. Introduceți SSID-ul și parola → Save

Shelly acceptă doar rețele de 2,4 GHz. Rețelele de 5 GHz nu vor apărea la scanare.

Pasul 2 — Găsiți adresa dispozitivului

Dispozitivele Shelly Gen1 acceptă mDNS (Zeroconf). Puteți accesa dispozitivul folosind un nume de gazdă în locul adresei IP:

1
shelly<model>-<MAC>.local

De exemplu: shelly1pm-AABBCCDDEE.local (adresa MAC în hexazecimal cu majuscule, fără două puncte).

Recomandat: folosiți Scanner IP din TapHome. Deschideți aplicația TapHome și folosiți Scanner IP (Setări → Rețea → Scanare). Scannerul descoperă dispozitivele din rețea și afișează atât adresa IP, cât și numele de gazdă mDNS. Pentru o conexiune mai fiabilă folosiți numele de gazdă în locul adresei IP — acesta rămâne același chiar dacă adresa IP a dispozitivului se schimbă după o repornire a routerului.

Metode alternative pentru aflarea adresei IP:

  • Aplicația Shelly: detaliile dispozitivului → Device info → adresa IP
  • Interfața web Shelly: conectați-vă la AP-ul dispozitivului înainte de configurarea Wi-Fi — adresa IP se afișează după salvare
  • Tabelul DHCP al routerului: căutați un nume de gazdă de forma shelly1pm-AABBCCDDEE

Pasul 3 — Configurați dispozitivul în TapHome

  1. În TapHome adăugați un nou modul Packet Parser (HTTP)
  2. Address: introduceți numele de gazdă mDNS (de ex. shelly1pm-AABBCCDDEE.local) sau adresa IP de la pasul 2
  3. Port: 80 (implicit, nu este necesară nicio modificare)
  4. Importați șablonul — TapHome va interoga periodic /status pentru a citi starea dispozitivului

Autentificarea HTTP este dezactivată implicit pe dispozitivele Shelly. Dacă ați activat protecția prin autentificare, rețineți că TapHome nu acceptă momentan HTTP Basic Auth — pentru integrarea cu TapHome lăsați autentificarea dezactivată.

Dispozitive disponibile

Shelly DUO RGBW Modul
Atribute de service
Adresă IP
Adresă MAC
Semnal Wi-Fi
Cloud activat
Cloud conectat
MQTT conectat
Ora dispozitivului
Actualizare FW disponibilă
Timp de funcționare
RAM
Acțiuni de service
Activare cloud
Repornire
Variabile personalizate
transitionTime (numeric) = TransitionTimeLight transition duration in milliseconds (import parameter, default 300 ms)

Shelly DUO RGBW Module

Citire (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
Atribute de service
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
Acțiuni de service
Enable cloud
Parametri: 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");
Lumină RGBW Lumină HSB

Culori RGB complete + alb reglabil (CCT 3000–6500 K) cu tranziții graduale și reglarea luminozității în funcție de mod

HSB

Lumină RGBW

Citirea luminozității
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);
Scrierea luminozității
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;
Citirea nuanței
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);
Scrierea nuanței
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;
Citirea saturației
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;
Scrierea saturației
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;
Citirea temperaturii de culoare
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
Scrierea temperaturii de culoare
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;
Contor electric Contor electric Doar citire

Măsurarea consumului de putere și de energie — putere instantanee (kW) și energie cumulată (kWh)

numeric Unitate: W / kWh

Contor electric

Citirea consumului total
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
Citirea cererii
IF LENGTH(jsonStatus) = 0
    RETURN(NaN);
END

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

IF ISNULL(power)
    RETURN(NaN);
END

power / 1000.0
Conexiune: Packet Parser → HTTP • Nume gazdă: shellycolorbulb-{MAC}.local
Îmbunătățiri posibile (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.

Surse

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Verificat de TapHome

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal