TapHome

Yeelight

Packet Parser → TCP
Trimis de
Ultima actualizare: 04. 2026
Yeelight

Yeelight este o marcă de iluminat LED inteligent Wi-Fi — becuri monocrome, becuri cu alb reglabil și color, benzi LED și plafoniere — a companiei Qingdao Yeelink (parte a ecosistemului Xiaomi). Toate produsele Yeelight cu acces LAN folosesc același protocol JSON-RPC Inter-Operation Protocol pe portul TCP 55443, așa că un singur șablon TapHome acoperă întreaga familie.

Șablonul oferă un dispozitiv dimmer: luminozitate (0–100 %) și pornire/oprire cu tranziții graduale. Modul de culoare curent și temperatura de culoare sunt raportate ca atribute de service doar pentru citire. TapHome comunică cu becul direct în rețeaua locală — după activarea LAN Control pe bec nu este necesar un cont în cloudul Yeelight.

Conectarea hardware

Becurile Yeelight se alimentează de la rețeaua electrică standard (de obicei E27, E14, GU10 sau sursa de alimentare de 24 V a benzii, în funcție de produs). Între TapHome și bec nu este necesar niciun cablu — întreaga comunicație se face prin Wi-Fi. Becul trebuie să fie în aceeași rețea LAN / VLAN ca TapHome CCU, deoarece protocolul JSON-RPC nu are autentificare și nici criptare, iar traficul nu trece niciodată prin cloudul Yeelight.

Protocolul LAN Yeelight nu este criptat. Nu expuneți portul TCP 55443 pe internetul public și plasați becurile într-un segment de rețea de încredere — oricine are acces la rețeaua LAN poate trimite comenzi becului.

Configurare

Activarea LAN Control

LAN Control (în unele regiuni numit și Developer Mode) este dezactivat implicit pe bec. Fără el, conexiunile TCP pe portul 55443 sunt refuzate.

  1. Deschideți aplicația mobilă Yeelight și asociați becul cu rețeaua Wi-Fi locală prin procedura SmartConfig / QuickConnect, dacă nu a fost asociat încă.
  2. Selectați becul în aplicație.
  3. Atingeți pictograma de setări (dreapta sus) și deschideți LAN Control (în unele versiuni de firmware se numește Developer Mode).
  4. Comutați LAN Control pe ON.
  5. Notați adresa IP a becului — este afișată în informațiile despre dispozitiv din aplicația Yeelight sau se poate citi din tabelul de alocări DHCP al routerului.

După activarea LAN Control, becul ascultă pe portul TCP 55443 și se anunță periodic prin multicast UDP 239.255.255.250:1982.

Configurarea rețelei
  • Adresă IP — șablonul TapHome nu descoperă becurile automat. Atribuiți în router o adresă IP statică sau o rezervare DHCP, ca adresa becului să nu se schimbe după reînnoirea alocării.
  • Același segment LAN — TapHome CCU și becul trebuie să fie în același domeniu de broadcast. Dacă clienții Wi-Fi și cei pe cablu sunt în VLAN-uri separate, adăugați o regulă de firewall care permite TCP 55443 între ele.
Parametri de import

La importul șablonului în TapHome, utilizatorul introduce trei valori:

ParametruDescriereValoare implicită
ipAddressAdresa IP a becului Yeelight în rețeaua LAN192.168.0.1 (valoare provizorie — înlocuiți-o cu adresa IP reală)
PortPortul TCP de control al becului55443
Internal poll intervalCât de des trimite șablonul get_prop (în milisecunde)10000 (10 s)

Portul implicit 55443 este portul standard Yeelight LAN Control și nu trebuie schimbat decât dacă becul a fost configurat pentru un port nestandard.

Între interogări, șablonul reacționează și la notificările props pe care becul le trimite la fiecare schimbare de stare. În practică, schimbările de luminozitate / pornire-oprire făcute din aplicația Yeelight, dintr-un adaptor de întrerupător de perete sau dintr-o altă instanță Home Assistant apar în TapHome aproape imediat, fără a aștepta următoarea interogare.

Funcțiile dispozitivului

Dimmer (luminozitate și pornire/oprire)

Șablonul oferă un singur dispozitiv dimmer. La fiecare interogare trimite:

1
{"id":951,"method":"get_prop","params":["bright","power"]}

și analizează răspunsul result[0] (luminozitate 1–100, împărțită la 100 pentru intervalul TapHome 0,0–1,0) și result[1] ("on" / "off").

Scrierile se traduc în două comenzi JSON-RPC:

  • Dacă nivelul țintă este mai mare decât zero, șablonul trimite set_power ["on","smooth",300], urmat de set_bright [round(level*100),"smooth",500]. Tranziția de pornire de 300 ms și tranziția de luminozitate de 500 ms dau o estompare lină în locul unui salt brusc.
  • Dacă nivelul țintă este zero, șablonul trimite set_power ["off","smooth",300].

Dimmerul preia și notificările props trimise de bec (pornire/oprire și luminozitate), astfel încât schimbările de stare externe apar în TapHome fără a aștepta următorul ciclu de interogare.

Mod de culoare și temperatură de culoare (doar pentru citire)

Două atribute de service la nivel de modul se citesc printr-o cerere get_prop separată (id=981):

  • Mod de culoare — RGB, Temperature sau HSV, decodat din proprietatea numerică color_mode (1 / 2 / 3) cu o expresie SWITCH în scriptul listener.
  • Temperatură de culoare — valoare în kelvini raportată ca "{ct}K" (de exemplu "4000K"). Are sens doar când becul este în modul Temperature. Interval tipic, în funcție de model: 1700–6500 K pentru becuri color și benzi, 2700–6500 K pentru plafoniere (ceiling3 are maximum 6000 K).

Ambele atribute sunt doar pentru diagnoză — șablonul nu schimbă modul de culoare și nu scrie o nouă temperatură de culoare.

Funcții suplimentare

Protocolul LAN Yeelight oferă și controlul culorilor RGB și HSV (set_rgb, set_hsv), controlul temperaturii de culoare (set_ct_abx), programe color-flow (start_cf / stop_cf), scene predefinite (set_scene), temporizatoare de oprire în dispozitiv (cron_add), controlul luminii de fundal la corpurile de iluminat cu două surse de lumină (metodele bg_*) și modul muzică (set_music, un canal TCP invers care ocolește limita de comenzi). Niciuna dintre acestea nu este implementată în actualul șablon dimmer TapHome — utilizatorii care au nevoie de control complet al culorilor sau de efecte trebuie să extindă șablonul sau să folosească în paralel aplicația Yeelight.

Culoarea, temperatura de culoare și scenele pot fi adăugate într-o actualizare viitoare a șablonului, pe același canal TCP. Scripturile PacketParser de citire / scriere pot fi extinse pentru a trimite set_ct_abx, set_rgb sau set_scene fără a schimba parametrii de import.

Rezolvarea problemelor

Becul nu răspunde la comenzi
  1. Verificați dacă LAN Control este activat pe bec (aplicația Yeelight → setările becului → LAN Control). Fără el, becul refuză toate conexiunile TCP pe portul 55443.

  2. Confirmați adresa IP a becului în aplicația Yeelight sau în tabelul de alocări DHCP al routerului și asigurați-vă că se potrivește cu parametrul de import ipAddress. Implicit, becurile Yeelight nu păstrează o adresă IP fixă — este posibil ca alocarea DHCP să fi expirat și adresa IP să se fi schimbat.

  3. Atribuiți becului o adresă IP statică sau o rezervare DHCP, ca adresa să nu se schimbe.

  4. Verificați dacă TapHome CCU și becul sunt în aceeași rețea LAN / VLAN și dacă TCP 55443 nu este blocat de un firewall între ele.

  5. Testați manual conexiunea: telnet {bulb-ip} 55443 și trimiteți o cerere brută urmată de \r\n:

    1
    
    {"id":1,"method":"get_prop","params":["bright","power"]}
    

    Un bec funcțional răspunde cu {"id":1,"result":["<bright>","<power>"]}.

Read error: client quota exceeded

Fiecare conexiune TCP la un bec Yeelight este limitată la 60 de comenzi pe minut, iar becul acceptă în total cel mult 4 conexiuni simultane (144 de comenzi/minut în întreaga rețea LAN). Dacă un alt sistem interoghează becul în același timp — Home Assistant, o sesiune din cloudul Yeelight, un script propriu — traficul combinat poate declanșa erori de depășire a limitei de comenzi, pe care TapHome le raportează ca Read error: client quota exceeded.

  1. Dezactivați celelalte integrări care folosesc același bec sau reduceți frecvența interogărilor acestora.
  2. Păstrați intervalul de interogare TapHome la valoarea implicită de 10000 ms sau mai mare. Un get_prop plus două scrieri set_* pentru fiecare schimbare rămân mult sub limita de 60 de comenzi/min.
  3. Închideți sesiunile de depanare telnet nefolosite — și ele intră în limita de 4 conexiuni.
Atributul de service Temperatură de culoare afișează „error”

Atributele de service Mod de culoare și Temperatură de culoare citesc color_mode și ct de la bec. Dacă becul este un model monocrom (doar alb) care nu acceptă alb reglabil sau dacă este în prezent în modul RGB sau HSV, valoarea ct nu are sens, iar scriptul listener raportează "error" pentru Temperatură de culoare. Acesta este un comportament normal și nu indică o defecțiune.

Schimbările făcute în aplicația Yeelight nu apar

Șablonul reacționează la notificările props trimise de bec, așa că schimbările externe apar de obicei în mai puțin de o secundă. Dacă nu apar:

  1. Notificarea poate să fi sosit în timp ce conexiunea TCP se restabilea — următoarea interogare (implicit 10 s) va resincroniza starea.
  2. Unele versiuni mai vechi de firmware trimit notificări doar când se trimite activ o comandă. Actualizați firmware-ul becului din aplicația Yeelight.
  3. Becul poate să fi atins limita de 4 conexiuni — reduceți numărul de clienți simultani din rețeaua LAN.

Dispozitive disponibile

Modul Yeelight Modul
Atribute de service
Mod de culoareModul de culoare activ raportat de bec — RGB, Temperature (alb reglabil) sau HSV. Doar pentru citire — șablonul nu schimbă modul de culoare.
Temperatură de culoareTemperatura de culoare curentă în kelvini (validă doar când modul de culoare este Temperature). Doar pentru citire — șablonul nu scrie temperatura de culoare. Interval în funcție de model: 1700–6500 K pentru becuri color și benzi, 2700–6500 K pentru plafoniere.
Variabile personalizate

Yeelight module

Ascultător
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
Atribute de service
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);
Color temperature
Dimmer Yeelight Dimmer

Luminozitate (0–100 %) și pornire/oprire cu tranziții graduale de 300–500 ms. Culoarea, temperatura de culoare și efectele nu sunt disponibile în acest șablon.

numeric Unitate: brightness 0–100 %
Variabilă: receiveError, Variabilă: notificationError, Variabilă: sendError

Dimmer Yeelight

Citirea nivelului
VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"bright\", \"power\"]}";
SENDDATA(json);
Scrierea nivelului
IF(Le > 0)
    VAR jsonPowerOn := "{\"id\":952,\"method\":\"set_power\",\"params\":[\"on\", \"smooth\", 300]}";
    SENDDATA(jsonPowerOn);

    VAR jsonBrightness := "{\"id\":953,\"method\":\"set_bright\",\"params\":[" + ROUND(Le*100) + ",\"smooth\", 500]}";
    SENDDATA(jsonBrightness);
ELSE
    VAR jsonPowerOff := "{\"id\":954,\"method\":\"set_power\",\"params\":[\"off\", \"smooth\", 300]}";
    SENDDATA(jsonPowerOff);
END
Ascultător
VAR jsonResponse := TOSTRING(RECEIVEDBYTES);
VAR method := PARSEJSON(jsonResponse, "method", 1);
VAR id := PARSEJSON(jsonResponse, "id", 1);
STRING onOff;

IF(id = 951)
   receiveError := PARSEJSON(jsonResponse, "error.message", 1);
   
   IF(LENGTH(receiveError) = 0)
      VAR brightnessStr := PARSEJSON(jsonResponse, "result[0]", 1);
      onOff := PARSEJSON(jsonResponse, "result[1]", 1);
   
      IF(!ISNULL(brightnessStr))
         Le := TODOUBLE(brightnessStr) / 100.0;
      END
   
      IF(onOff = "on")
         St := 1;
      ELSEIF(onOff = "off")
         Le := 0;
         St := 0;
      END
   END
END

IF(id > 951 AND id < 955)
   sendError := PARSEJSON(jsonResponse, "error.message", 1);
END

IF(method = "props")
   notificationError := PARSEJSON(jsonResponse, "error.message", 1);
   
   IF(LENGTH(notificationError) = 0)
      VAR brightness := PARSEJSON(jsonResponse, "params.bright", 1);
      onOff := PARSEJSON(jsonResponse, "params.power", 1);
   
      IF(!ISNULL(brightness))
         Le := brightness / 100.0;
      END
   
      IF(onOff = "on")
         St := 1;
         IF(ISNULL(brightness))
            SENDDATA("{\"id\":951, \"method\":\"get_prop\", \"params\":[\"bright\", \"power\"]}");
         END
      ELSEIF(onOff = "off")
         Le := 0;
         St := 0;
      END
   END
END

IF(LENGTH(receiveError) > 0)
   ADDERROR("Read error: " + receiveError);
END

IF(LENGTH(sendError) > 0)
   ADDERROR("Write error: " + sendError);
END

IF(LENGTH(notificationError) > 0)
   ADDERROR(notificationError);
END
Conexiune: Packet Parser → TCP
Îmbunătățiri posibile (13)
  • Set color temperature — Write color temperature (1700–6500 K, model-dependent). Color temperature is exposed as a read-only service attribute but cannot be changed from TapHome.
  • Set RGB color — Write full RGB color (0–16777215). TapHome dimmer template exposes brightness + on/off only — no color control.
  • Set HSV color — Write hue (0–359) + saturation (0–100). Not exposed by dimmer template.
  • Color flow — Scripted sequences of brightness / color / CT changes (sunrise effect, strobe, ambient cycles). Not exposed by dimmer template.
  • Set scene — Jump directly to a predefined state (color, hsv, ct, cf, auto_delay_off). Not exposed by dimmer 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 brightness.
  • Save current state as power-on default — Persist current brightness/color to flash so it survives a hard power cut. Not exposed by dimmer template.
  • Background light control — Secondary light channel on dual-light fixtures (e.g., some ceiling lights). Not exposed by dimmer template.
  • Extended state properties — Additional properties pushed via props notifications (rgb, hue, sat, flowing, delayoff, music_on, name). Template only consumes bright and power.
  • 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.

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