TapHome

Yeelight Color

Packet Parser → TCP
Autor
Posljednje ažuriranje: 04. 2026
Yeelight Color

Predložak Yeelight Color proširuje predložak Yeelight, koji podržava samo prigušivanje, potpunim upravljanjem HSB bojama i podesivom bijelom (temperaturom boje). Namijenjen je istoj obitelji pametnih Wi-Fi LED proizvoda (žarulje u boji, trake i stropne svjetiljke) i koristi isti protokol Yeelight Inter-Operation Protocol na TCP portu 55443. Ključna razlika je model uređaja: umjesto jednostavnog dimera predložak daje PacketParserHSBLight, koji sustavu TapHome u jednom uređaju pruža izvorna svojstva nijanse, zasićenosti, svjetline i temperature boje.

TapHome komunicira sa žaruljom izravno u lokalnoj mreži preko JSON-RPC-a, pa nakon uključivanja LAN Control na žarulji nije potrebna veza s oblakom. Predložak očitava svih šest svojstava boje odjednom i reagira na obavijesti props koje šalje žarulja, pa se promjene napravljene u aplikaciji Yeelight ili s drugog upravljača u sustavu TapHome pojavljuju gotovo odmah.

Hardversko spajanje

Žarulje Yeelight napajaju se iz standardne mreže (ovisno o proizvodu najčešće grla E27, E14, GU10 ili napajanje trake 24 V). Između sustava TapHome i žarulje nije potrebno nikakvo ožičenje, sva komunikacija ide preko Wi-Fi mreže. Žarulja mora biti u istoj lokalnoj mreži / VLAN-u kao centralna jedinica TapHome (CCU), jer protokol JSON-RPC nema provjeru autentičnosti ni šifriranje, a promet nikada ne ide preko oblaka Yeelight.

Lokalni protokol Yeelight nije šifriran. TCP port 55443 nemojte izlagati javnom internetu, a žarulje postavite u pouzdani segment mreže. Svatko s pristupom lokalnoj mreži može žarulji slati naredbe.

Konfiguracija

Uključivanje LAN Control

LAN Control (u nekim regijama naziva se i Developer Mode) na žarulji je prema zadanim postavkama isključen. Bez njega žarulja odbija TCP veze na portu 55443.

  1. Otvorite mobilnu aplikaciju Yeelight i, ako žarulja još nije uparena, uparite je s lokalnom Wi-Fi mrežom postupkom SmartConfig / QuickConnect.
  2. U aplikaciji odaberite željenu žarulju.
  3. Dodirnite ikonu postavki (gore desno) i otvorite LAN Control (u nekim verzijama firmvera naziva se Developer Mode).
  4. Prebacite LAN Control na ON.
  5. Zapišite IP adresu žarulje. Prikazuje se u informacijama o uređaju u aplikaciji Yeelight, a može se pročitati i iz tablice DHCP zakupa na usmjerivaču.

Nakon uključivanja LAN Control žarulja sluša na TCP portu 55443 i povremeno se oglašava preko UDP multicasta 239.255.255.250:1982.

Mrežne postavke
  • IP adresa: predložak TapHome ne pronalazi žarulje automatski. Na usmjerivaču dodijelite statičku IP adresu ili DHCP rezervaciju kako se adresa žarulje ne bi promijenila nakon obnove zakupa.
  • Isti segment lokalne mreže: centralna jedinica TapHome i žarulja moraju biti u istoj domeni emitiranja. Ako su Wi-Fi i žičani klijenti u odvojenim VLAN-ovima, dodajte pravilo vatrozida koje između njih dopušta TCP 55443.
Parametri uvoza

Pri uvozu predloška u TapHome korisnik unosi tri vrijednosti:

ParametarOpisZadano
ipAddressIP adresa žarulje Yeelight u lokalnoj mreži192.168.0.1 (privremena vrijednost, zamijenite stvarnom IP adresom)
PortTCP port za upravljanje na žarulji55443
Internal poll intervalKoliko često predložak šalje get_prop (u milisekundama)10000 (10 s)

Zadani port 55443 standardni je port za Yeelight LAN Control i ne treba ga mijenjati, osim ako je žarulja konfigurirana za nestandardni port.

Između dva očitavanja predložak reagira i na obavijesti props koje žarulja šalje pri svakoj promjeni stanja. U praksi to znači da se promjene boje, svjetline ili uključenosti napravljene u aplikaciji Yeelight, preko adaptera za zidni prekidač ili s drugog upravljača u sustavu TapHome pojavljuju gotovo odmah, bez čekanja na sljedeće očitavanje.

Mogućnosti uređaja

HSB svjetlo u boji (nijansa, zasićenost, svjetlina i uključivanje/isključivanje)

Predložak daje jedno HSB svjetlo. U svakom ciklusu očitavanja šalje zahtjev get_prop za svih šest svojstava odjednom:

1
{"id":951,"method":"get_prop","params":["hue","sat","bright","power","ct","color_mode"]}

Skripta slušatelja raščlanjuje odgovor i preslikava ga na izvorna svojstva TapHome:

  • Nijansa (Hd): result[0], cijeli broj 0–359 stupnjeva
  • Zasićenost (Sa): result[1], postotak 0–100, dijeli se sa 100 radi raspona TapHome 0,0–1,0
  • Svjetlina (Hb): result[2], postotak 1–100, dijeli se sa 100 radi raspona TapHome 0,0–1,0
  • Uključenost (St): result[3], "on" se preslikava na 1, "off" na 0 (kada je isključeno, i svjetlina se postavlja na 0)
  • Temperatura boje (Ct): result[4], vrijednost u kelvinima postavlja se samo kada je color_mode = 2 (bijeli način), inače se postavlja na NaN
  • Način boje: result[5], određuje upisuje li se Ct (1 = RGB, 2 = Temperature, 3 = HSV)
Prebacivanje načina boje

Predložak prema svojstvu Ct određuje aktivni način boje:

  • Ct = NaN: žarulja je u načinu boje HSV. Upisi koriste set_hsv za nijansu i zasićenost.
  • Ct = broj: žarulja je u bijelom načinu (temperatura boje). Upisi koriste set_ct_abx.

TapHome ne šalje izričitu naredbu za promjenu načina. Korisnik umjesto toga postavlja temperaturu boje na brojčanu vrijednost kako bi prešao u bijeli način ili je postavlja na NaN (odabirom boje u HSB biraču) kako bi prešao u način HSV. Skripte za upis prije slanja provjeravaju Ct i preskaču nepotrebnu naredbu: writesaturation odmah završava ako Ct nije NaN, a writecct odmah završava ako je Ct NaN.

Naredbe za upis

Tri skripte za upis upravljaju različitim svojstvima svjetla:

  • Svjetlina / uključenost (writebrightness): ako je svjetlina > 0, šalje set_power ["on","smooth",300], a zatim set_bright [level,"smooth",300]. Ako je svjetlina = 0, šalje set_power ["off","smooth",300].
  • Nijansa i zasićenost (writesaturation): šalje set_power ["on","smooth",300], a zatim set_hsv [hue, saturation,"smooth",300]. Izvršava se samo kada je Ct = NaN (način HSV).
  • Temperatura boje (writecct): šalje set_power ["on","smooth",300], a zatim set_ct_abx [ct,"smooth",300]. Izvršava se samo kada je Ct broj (bijeli način). Valjani raspon: 1700–6500 K (točne granice ovise o modelu žarulje).

Svi upisi koriste postupni prijelaz od 300 ms umjesto naglog skoka. Nakon svakog upisa pomoćna varijabla za odgodu očitavanja (debounce) postavlja se na 1, pa se sljedeći ciklus očitavanja preskače. Tako se izbjegava čitanje zastarjelog stanja dok je žarulja u prijelazu.

Servisna dijagnostika

Dva servisna atributa na razini modula čitaju se posebnim zahtjevom get_prop (id=981):

  • Način boje: RGB, Temperature ili HSV, dekodiran iz brojčanog svojstva color_mode (1 / 2 / 3) izrazom SWITCH u skripti slušatelja modula.
  • Temperatura boje: vrijednost u kelvinima prikazana kao "{ct}K" (na primjer "4000K"). Ima smisla samo kada je žarulja u načinu Temperature.

Ti atributi služe samo za dijagnostiku i samo se čitaju. Stvarno upravljanje temperaturom boje odvija se preko svojstva uređaja Ct i gore opisane skripte writecct.

Rješavanje problema

Žarulja ne reagira na naredbe
  1. Provjerite je li na žarulji uključen LAN Control (aplikacija Yeelight → postavke žarulje → LAN Control). Bez njega žarulja odbija sve TCP veze na portu 55443.

  2. Provjerite IP adresu žarulje u aplikaciji Yeelight ili u tablici DHCP zakupa na usmjerivaču i uvjerite se da odgovara parametru uvoza ipAddress. Žarulje Yeelight prema zadanim postavkama nemaju fiksnu IP adresu, pa je zakup možda istekao i IP adresa se promijenila.

  3. Žarulji dodijelite statičku IP adresu ili DHCP rezervaciju kako se adresa ne bi mijenjala.

  4. Provjerite jesu li centralna jedinica TapHome i žarulja u istoj lokalnoj mreži / VLAN-u te propušta li vatrozid TCP 55443 između njih.

  5. Ručno testirajte vezu: telnet {bulb-ip} 55443 i pošaljite neobrađeni zahtjev završen s \r\n:

    1
    
    {"id":1,"method":"get_prop","params":["hue","sat","bright","power","ct","color_mode"]}
    

    Ispravna žarulja odgovara s {"id":1,"result":["<hue>","<sat>","<bright>","<power>","<ct>","<color_mode>"]}.

Naredbe za boju se zanemaruju (nijansa / zasićenost se ne mijenja)

Skripta writesaturation prije slanja set_hsv provjerava Ct. Ako je Ct postavljen na brojčanu vrijednost (bijeli način), skripta završava bez slanja naredbe. Za upravljanje bojom HSV najprije postavite temperaturu boje na NaN odabirom boje u HSB biraču u sustavu TapHome.

Jednako tako writecct završava bez slanja ako je Ct = NaN (način HSV). Za upis temperature boje žarulja već mora biti u bijelom načinu.

Read error: client quota exceeded

Svaka TCP veza sa žaruljom Yeelight ograničena je na 60 naredbi u minuti, a žarulja ukupno prihvaća najviše 4 istodobne veze. Ako žarulju u isto vrijeme očitava i drugi sustav (Home Assistant, sesija oblaka Yeelight, vlastita skripta), zajednički promet može izazvati pogreške ograničenja.

  1. Isključite ili usporite druge integracije koje dijele žarulju.
  2. Interval očitavanja u sustavu TapHome ostavite na zadanih 10000 ms ili više. Predložak za boju šalje jedan get_prop po očitavanju i najviše tri upisa set_* po promjeni, što ostaje daleko ispod ograničenja od 60 naredbi u minuti.
  3. Zatvorite nekorištene telnet sesije za otklanjanje pogrešaka jer se ubrajaju u ograničenje od 4 veze.
Pogreška upisa HueSat ili temperature boje

Skripta slušatelja prati pogreške upisa zasebno za svaku vrstu naredbe: writeErrorBrightness za upise uključenosti i svjetline, writeErrorHueSat za upise set_hsv i writeErrorCt za upise set_ct_abx. Ako se pojavi pogreška:

  1. Provjerite je li žarulja uključena. Sve naredbe set_* osim set_power prihvaćaju se samo kada je žarulja u stanju on.
  2. Provjerite je li vrijednost temperature boje unutar raspona za taj model (obično 1700–6500 K za žarulje u boji, 2700–6500 K za stropne svjetiljke, 2700–6000 K za ceiling3).
  3. U servisnoj dijagnostici TapHome provjerite neobrađenu poruku o pogrešci s konkretnim kodom pogreške koji je vratila žarulja.
Promjene napravljene u aplikaciji Yeelight ne prikazuju se

Predložak reagira na obavijesti props koje šalje žarulja, pa se vanjske promjene obično prikažu u roku od jedne sekunde. Ako se ne prikažu:

  1. Obavijest je možda stigla dok se TCP veza ponovno uspostavljala. Sljedeće očitavanje (zadano 10 s) ponovno će uskladiti stanje.
  2. Neke starije verzije firmvera šalju obavijesti samo dok se aktivno šalje naredba. Ažurirajte firmver žarulje u aplikaciji Yeelight.
  3. Žarulja je možda dosegnula ograničenje od 4 veze. Smanjite broj istodobnih klijenata u lokalnoj mreži.

Uređaji Yeelight podržavaju samo 4 istodobne TCP veze i 60 naredbi u minuti po vezi. Ako TapHome i drugi sustav (npr. Home Assistant) istodobno očitavaju istu žarulju, komunikacija može postati nepouzdana. Koristite interval očitavanja od 10 sekundi ili više.

Dostupni uređaji

Modul Yeelight Color Modul
Servisni atributi
Način bojeTrenutačni način boje žarulje — RGB, Temperature ili HSV — dekodiran iz svojstva color_mode
Temperatura bojeTemperatura boje u kelvinima, javlja se samo kada je žarulja u načinu Temperature (color_mode=2)

Yeelight color module

Listener
VAR jsonResponse := TOSTRING(RECEIVEDBYTES);
VAR id := PARSEJSON(jsonResponse, "id", 1);

IF(id = 981)
   VAR error := PARSEJSON(jsonResponse, "error.message", 1);
   
   IF(!ISNULL(error))
      COMPLETESERVICEATTRIBUTE("Color mode", "", "error");
      COMPLETESERVICEATTRIBUTE("Color temperature", "", "error");
   ELSE
      VAR colorMode := PARSEJSON(jsonResponse, "result[0]", 1);
      VAR colorTemp := PARSEJSON(jsonResponse, "result[1]", 1);
      
      IF(!ISNULL(colorMode))
         VAR colorModeValue := SWITCH(TODOUBLE(colorMode), 1, "RGB", 2, "Temperature", 3, "HSV", "Unknown");
         COMPLETESERVICEATTRIBUTE("Color mode", colorModeValue, "");
      ELSE
         COMPLETESERVICEATTRIBUTE("Color mode", "", "error");
      END
      
      IF(!ISNULL(colorTemp))
         COMPLETESERVICEATTRIBUTE("Color temperature", colorTemp + "K", "");
      ELSE
         COMPLETESERVICEATTRIBUTE("Color temperature", "", "error");
      END
   END
END
Servisni atributi
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);

RETURN(NULL);
Color temperature
HSB svjetlo HSB svjetlo

HSB svjetlo s punim spektrom boja i podrškom za temperaturu boje — upravlja nijansom, zasićenošću, svjetlinom te uključivanjem i isključivanjem preko set_hsv, set_ct_abx i set_bright s postupnim prijelazima

numeric Jedinica: hue 0-359, sat/bright 0-100 %, CCT 2700-6500 K

HSB svjetlo

Čitanje (modul)
IF(debounce > 0)
    debounce := 0;
ELSE
    VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"hue\", \"sat\", \"bright\", \"power\", \"ct\", \"color_mode\"]}";
    SENDDATA(json);
END
Listener
VAR jsonResponse := TOSTRING(RECEIVEDBYTES);
VAR method := PARSEJSON(jsonResponse, "method", 1);
VAR id := PARSEJSON(jsonResponse, "id", 1);
VAR error := PARSEJSON(jsonResponse, "error.message", 1);

#response to ReadScript
IF(id = 951)
   receiveError1 := error;
   
   IF(LENGTH(receiveError1) = 0)
      VAR hueStr := PARSEJSON(jsonResponse, "result[0]", 1);
      VAR satStr := PARSEJSON(jsonResponse, "result[1]", 1);
      VAR brightnessStr := PARSEJSON(jsonResponse, "result[2]", 1);
      VAR onOffStr := PARSEJSON(jsonResponse, "result[3]", 1);
      VAR ctStr := PARSEJSON(jsonResponse, "result[4]", 1);
      VAR colorModeStr := PARSEJSON(jsonResponse, "result[5]", 1);
      
      IF(!ISNULL(hueStr))
         Hd := TODOUBLE(hueStr);
      END

      IF(!ISNULL(satStr))
        Sa := TODOUBLE(satStr) / 100.0;
      END
      
      IF(!ISNULL(brightnessStr))
        Hb := TODOUBLE(brightnessStr) / 100.0;
      END
   
      VAR cm := TODOUBLE(colorModeStr);
      IF(!ISNULL(ctStr) AND cm = 2)
        Ct := TODOUBLE(ctStr);
      ELSE
        Ct := NaN;
      END
      
      IF(onOffStr = "on")
         St := 1;
      ELSEIF(onOffStr = "off")
         Hb := 0;
         St := 0;
      END
   END
ELSEIF(id = 952)
   receiveError2 := error;
   
   IF(LENGTH(receiveError2) = 0)
      brightnessStr := PARSEJSON(jsonResponse, "result[0]", 1);
      
      IF(!ISNULL(brightnessStr))
        Hb := TODOUBLE(brightnessStr) / 100.0;
      END
   END
END

IF(id >= 941 AND id <= 942)
   writeErrorBrightness := error;
ELSEIF(id = 943)
   writeErrorHueSat := error;
ELSEIF(id = 944)
   writeErrorCt := error;
END

#general notification
IF(method = "props")
   notificationError := error;
   
   IF(LENGTH(notificationError) = 0)
      VAR brightJson := PARSEJSON(jsonResponse, "params.bright", 1);
      VAR onOffJson := PARSEJSON(jsonResponse, "params.power", 1);
      VAR hue := PARSEJSON(jsonResponse, "params.hue", 1);
      VAR sat := PARSEJSON(jsonResponse, "params.sat", 1);
      VAR colorMode := PARSEJSON(jsonResponse, "params.color_mode", 1);
      VAR ctJson := PARSEJSON(jsonResponse, "params.ct", 1);
      
      IF(!ISNULL(brightJson))
         Hb := brightJson / 100.0;
      END
      
      IF(!ISNULL(hue))
         Hd := hue;
         Ct := NaN;
      END      

      IF(!ISNULL(sat))
        Sa := sat / 100;
        Ct := NaN;
      END 
      
      IF(!ISNULL(ctJson))
        Ct := ctJson;
      END 
      
      IF(onOffJson = "on")
         St := 1;
         IF(ISNULL(brightJson))
            SENDDATA("{\"id\":952, \"method\":\"get_prop\", \"params\":[\"bright\"]}");
         END
      ELSEIF(onOffJson = "off")
         Hb := 0;
         St := 0;
      END
   END
END

IF(LENGTH(receiveError1) > 0)
   ADDERROR(951, "Read error: " + receiveError1);
END

IF(LENGTH(receiveError2) > 0)
   ADDERROR(952, "Read error: " + receiveError2);
END

IF(LENGTH(writeErrorBrightness) > 0)
   ADDERROR(941, "Brightness write error: " + writeErrorBrightness);
END

IF(LENGTH(writeErrorHueSat) > 0)
   ADDERROR(943, "HueSat write error: " + writeErrorHueSat);
END

IF(LENGTH(writeErrorCt) > 0)
   ADDERROR(944, "Color temperature write error: " + writeErrorCt);
END

IF(LENGTH(notificationError) > 0)
   ADDERROR(1, notificationError);
END
Zapis svjetline
IF(Hb > 0)
    VAR jsonBrightness := "{\"id\":941,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 300]}\r\n{\"id\":942,\"method\":\"set_bright\",\"params\":[" + ROUND(Hb*100) + ",\"smooth\", 300]}";
    SENDDATA(jsonBrightness);
ELSE
    VAR jsonPowerOff := "{\"id\":942,\"method\":\"set_power\",\"params\":[\"off\", \"smooth\", 300]}";
    SENDDATA(jsonPowerOff);
END

debounce := 1;
Zapis zasićenosti
#do not send HUESAT when COLOR mode is active
IF !ISNAN(Ct)
    RETURN(0);
END

VAR hueSatJson := "{\"id\":941,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 300]}\r\n{\"id\":943,\"method\":\"set_hsv\",\"params\":[" + ROUND(MOD(Hd, 360)) + ", " + ROUND(Sa*100) + ", \"smooth\", 300]}";

SENDDATA(hueSatJson);
debounce := 1;
Zapis temperature boje
#do not set CT in COLOR mode
IF ISNAN(Ct)
    RETURN(0);
END

VAR ctJson := "{\"id\":941,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 300]}\r\n{\"id\":944,\"method\":\"set_ct_abx\",\"params\":[" + Ct + ", \"smooth\", 300]}";
SENDDATA(ctJson);

debounce := 1;
Povezivanje: Packet Parser → TCP
Moguća poboljšanja (12)
  • Set RGB color — Write full RGB color (0-16777215). Template uses set_hsv instead, which maps naturally to the HSBLight device model.
  • Color flow — Scripted sequences of brightness / color / CT changes (sunrise effect, strobe, ambient cycles). Not exposed by this template.
  • Set scene — Jump directly to a predefined state (color, hsv, ct, cf, auto_delay_off). Not exposed by this template.
  • Toggle power — Single-parameter power toggle. Not exposed — TapHome writes explicit on/off via set_power instead.
  • Sleep timer (cron) — On-device auto-off timer in minutes. Not exposed — TapHome uses its own Smart Rules for scheduling instead.
  • Music mode — Reverse-TCP channel bypassing the 60 cmd/min rate limit. Not used by TapHome.
  • Relative adjustments — Relative +/- changes without knowing the current value. Not exposed — TapHome always writes absolute values.
  • Save current state as power-on default — Persist current brightness/color to flash so it survives a hard power cut. Not exposed by this template.
  • Set device name — Set device name (max 64 bytes). Not exposed by this template.
  • Background light control — Secondary light channel on dual-light fixtures (e.g., some ceiling lights). Not exposed by this template.
  • Extended notification properties — Additional properties pushed via props notifications. Template consumes hue, sat, bright, power, color_mode and ct — remaining properties (rgb, flowing, delayoff, music_on, name) are ignored.
  • LAN auto-discovery — User must enter the bulb IP manually during import — template does not perform SSDP discovery. A static DHCP lease is strongly recommended.

Izvori

Pronašli ste problem s ovim predloškom uređaja?

Recite nam što ne radi, što nedostaje ili kako bi se predložak trebao ponašati. Vaše povratne informacije pomažu nam da katalog bude točan.

Provjerio TapHome

Želite ovo koristiti u svojoj centralnoj jedinici TapHome Core?

Otvorite ovaj predložak na portalu Customer Portal kako biste ga primijenili na jedan od svojih domova ili predložili poboljšanje i poslali ga natrag u katalog.

Otvorite na portalu