TapHome

Yeelight

Packet Parser → TCP
Beküldő
Utoljára frissítve: 04. 2026
Yeelight

A Yeelight Wi-Fi okos LED világítási márka — egyszínű izzók, állítható fehér és teljes színű izzók, LED szalagok és mennyezeti lámpák — amelyet a Qingdao Yeelink (a Xiaomi ökoszisztéma része) forgalmaz. Minden LAN-kompatibilis Yeelight termék ugyanazt a JSON-RPC Inter-Operation Protocol protokollt beszéli a 55443-as TCP porton, így egyetlen TapHome sablon lefedi az egész terméksorozatot.

A sablon egy fényerő-szabályozó eszközt tesz elérhetővé: fényerő (0–100 %) és be/ki kapcsolás sima átmenetekkel. Az aktuális színmód és színhőmérséklet csak olvasható szervizattribútumként jelenik meg. A TapHome közvetlenül a helyi hálózaton keresztül kommunikál az izzóval — miután a LAN Control be van kapcsolva az izzón, nincs szükség Yeelight fiókra.

Hardveres csatlakozás

A Yeelight izzók normál hálózati feszültségről működnek (jellemzően E27, E14, GU10 foglalat vagy 24 V tápegység LED szalaghoz — terméktől függően). A TapHome és az izzó között nincs szükség huzalozásra — minden kommunikáció Wi-Fi-n keresztül zajlik. Az izzónak ugyanazon a LAN / VLAN hálózaton kell lennie, mint a TapHome CCU, mert a JSON-RPC protokoll nem használ hitelesítést és titkosítást, a forgalom pedig soha nem megy át a Yeelight felhőn.

A Yeelight LAN protokollja titkosítatlan. Ne tedd elérhetővé az 55443-as TCP portot a publikus internet felől, és tedd az izzókat megbízható hálózati szegmensre — bárki, aki hozzáfér a LAN-hoz, parancsokat küldhet az izzónak.

Konfiguráció

A LAN Control bekapcsolása

A LAN Control (egyes régiókban Developer Mode néven) alapértelmezésben ki van kapcsolva az izzón. Enélkül az izzó elutasítja a TCP kapcsolatokat az 55443-as porton.

  1. Nyisd meg a Yeelight mobilalkalmazást, és SmartConfig / QuickConnect eljárással párosítsd az izzót a helyi Wi-Fi hálózattal, ha még nincs párosítva.
  2. Válaszd ki a cél izzót az alkalmazásban.
  3. Koppints a beállítások ikonra (jobb felső sarok), majd nyisd meg a LAN Control menüt (egyes firmware-verziókban Developer Mode néven).
  4. Kapcsold a LAN Control-t BE állásba.
  5. Jegyezd fel az izzó IP-címét — a Yeelight alkalmazás eszközinformációs oldalán látható, vagy kiolvasható a router DHCP lease tábláiból.

A LAN Control bekapcsolása után az izzó figyeli az 55443-as TCP portot, és időnként meghirdeti magát a 239.255.255.250:1982 UDP multicast címen.

Hálózati konfiguráció
  • IP-cím — a TapHome sablon nem ismer automatikus izzókeresést. Adj az izzónak statikus IP-t vagy DHCP foglalást a routerben, hogy a lease megújítás után se változzon a címe.
  • Azonos LAN szegmens — a TapHome CCU-nak és az izzónak ugyanabban a broadcast doménben kell lennie. Ha a Wi-Fi és a kábeles kliensek külön VLAN-okon vannak, vegyél fel egy tűzfal szabályt, amely engedélyezi a TCP 55443 forgalmat közöttük.
Importálási paraméterek

A TapHome sablon importálásakor a felhasználó három értéket ad meg:

ParaméterLeírásAlapérték
ipAddressA Yeelight izzó IP-címe a LAN-on192.168.0.1 (placeholder — cseréld valós IP-re)
PortAz izzó TCP vezérlőportja55443
Internal poll intervalMilyen gyakran küldi a sablon a get_prop parancsot (milliszekundumban)10000 (10 s)

Az alapértelmezett 55443 port a Yeelight LAN Control szabványos portja, és csak akkor érdemes megváltoztatni, ha az izzó nem szabványos portra lett konfigurálva.

Pollok között a sablon reagál az izzó által küldött props értesítésekre is — ezeket az izzó minden állapotváltozáskor magától elküldi. A gyakorlatban ez azt jelenti, hogy a Yeelight alkalmazásban, fali kapcsolón vagy egy másik Home Assistant példányon végzett fényerő- vagy kapcsolási változtatások szinte azonnal megjelennek a TapHome-ban, anélkül, hogy meg kellene várni a következő pollt.

Eszközképességek

Fényerő-szabályozó (fényerő és be/ki)

A sablon egyetlen fényerő-szabályozó eszközt jelenít meg. Minden pollnál ezt küldi:

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

és feldolgozza a válasz result[0] (fényerő 1–100, 100-zal osztva a TapHome 0.0–1.0 tartományra) és result[1] ("on" / "off") értékeit.

Az írásokat két JSON-RPC parancsra fordítja:

  • Ha a célszint nullánál nagyobb, a sablon a set_power ["on","smooth",300] parancsot küldi, majd a set_bright [round(level*100),"smooth",500] parancsot. A 300 ms-os bekapcsolási és az 500 ms-os fényerő-átmenet kellemes fade-et ad a kemény ugrás helyett.
  • Ha a célszint nulla, a sablon a set_power ["off","smooth",300] parancsot küldi.

A fényerő-szabályozó az izzó által küldött props értesítéseket (power / brightness) is feldolgozza, így a külső állapotváltozások a következő poll bevárása nélkül is megjelennek a TapHome-ban.

Színmód és színhőmérséklet (csak olvasható)

Két modul-szintű szervizattribútum egy külön get_prop kérésen (id=981) keresztül olvasható:

  • Color modeRGB, Temperature vagy HSV, a numerikus color_mode tulajdonságból (1 / 2 / 3) dekódolva a listener script SWITCH kifejezésével.
  • Color temperature — Kelvin érték "{ct}K" formátumban (például "4000K"). Csak akkor értelmezhető, ha az izzó Temperature módban van. Tipikus, modellfüggő tartomány: 1700–6500 K színes izzóknál és szalagoknál, 2700–6500 K mennyezeti lámpáknál (a ceiling3 6000 K-nél lezár).

Mindkét attribútum csak diagnosztikai célú — a sablon nem képes színmódot váltani, és nem tud új színhőmérsékletet írni.

További képességek

A Yeelight LAN protokoll RGB- és HSV-színvezérlést (set_rgb, set_hsv), színhőmérséklet-vezérlést (set_ct_abx), színváltó programokat (start_cf / stop_cf), előre definiált jeleneteket (set_scene), eszközön belüli időzítőket (cron_add), kétvilágos lámpák háttérvilágításának vezérlését (bg_* metódusok) és music mode-ot (set_music, egy reverse-TCP csatorna, amely megkerüli a rate-limit-et) is kínál. Ezek közül egyiket sem valósítja meg a jelenlegi TapHome fényerő-szabályozó sablon — aki teljes színt vagy effekteket szeretne, annak ki kell bővítenie a sablont, vagy párhuzamosan használnia a natív Yeelight alkalmazást.

A szín, színhőmérséklet és jelenetek egy későbbi sablonfrissítésben ugyanazon a TCP csatornán keresztül hozzáadhatók. A PacketParser olvasási/írási scriptjei kibővíthetők a set_ct_abx, set_rgb vagy set_scene parancsokkal az importálási paraméterek módosítása nélkül.

Hibaelhárítás

Az izzó nem reagál a parancsokra
  1. Ellenőrizd, hogy a LAN Control be van-e kapcsolva az izzón (Yeelight app → izzó beállítások → LAN Control). Enélkül az izzó minden TCP kapcsolatot elutasít az 55443-as porton.

  2. Ellenőrizd az izzó IP-címét a Yeelight alkalmazásban vagy a router DHCP lease tábláiban, és győződj meg róla, hogy egyezik az ipAddress importálási paraméterrel. A Yeelight izzók alapértelmezésben nem tartják fix IP-t — a lease lejárhatott, és az IP megváltozott.

  3. Adj az izzónak statikus IP-t vagy DHCP foglalást, hogy a cím ne változzon.

  4. Ellenőrizd, hogy a TapHome CCU és az izzó ugyanazon a LAN / VLAN-on van, és hogy az 55443-as TCP portot nem blokkolja tűzfal közöttük.

  5. Teszteld a kapcsolatot manuálisan: telnet {bulb-ip} 55443, és küldj egy nyers kérést \r\n lezárással:

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

    Egy működő izzó {"id":1,"result":["<bright>","<power>"]} formátumban válaszol.

Read error: client quota exceeded

Minden Yeelight izzóhoz menő TCP kapcsolat percenként 60 parancsra van korlátozva, és az izzó összesen legfeljebb 4 egyidejű kapcsolatot fogad el (összesen 144 parancs/perc a teljes LAN-on). Ha egy másik rendszer is pollozza az izzót — Home Assistant, Yeelight felhő-session, saját script —, a kombinált forgalom rate-limit hibákat válthat ki, amelyeket a TapHome Read error: client quota exceeded formában jelent.

  1. Kapcsold ki vagy lassítsd az izzót osztozó egyéb integrációkat.
  2. Hagyd a TapHome poll intervallumát az alapértelmezett 10000 ms értéken vagy magasabban. Egy get_prop plusz két set_* írás változásonként biztonságosan a 60 parancs/perc kvóta alatt marad.
  3. Zárd be a nem használt telnet debug kapcsolatokat — ezek is beleszámítanak a 4 kapcsolatos limitbe.
A Color temperature szervizattribútum “error” értéket mutat

A Color mode és Color temperature szervizattribútumok az izzó color_mode és ct tulajdonságát olvassák. Ha mono (csak fehér) modellről van szó, amely nem támogat állítható fehéret, vagy az izzó éppen RGB vagy HSV módban van, a ct érték nem értelmezhető, és a listener script a Color temperature attribútumot "error" értékkel jelzi. Ez várt viselkedés, nem hiba.

A Yeelight alkalmazásban végzett módosítások nem jelennek meg

A sablon reagál az izzó által küldött props értesítésekre, így a külső változások általában egy másodpercen belül megjelennek. Ha mégsem:

  1. Az értesítés érkezhetett olyan pillanatban, amikor a TCP socket éppen újraépült — a következő poll (alapértelmezetten 10 s) újraszinkronizálja.
  2. Egyes régebbi firmware-verziók csak akkor küldenek értesítést, ha aktívan parancsot kapnak. Frissítsd az izzó firmware-ét a Yeelight alkalmazáson keresztül.
  3. Előfordulhat, hogy az izzó elérte a 4 kapcsolatos limitet — csökkentsd az egyidejű kliensek számát a LAN-on.

Elérhető eszközök

Yeelight modul Modul
Szerviz attribútumok
SzínmódAz izzó által jelzett aktív színmód — RGB, Temperature (állítható fehér) vagy HSV. Csak olvasható — a sablon nem vált színmódot.
SzínhőmérsékletAktuális fehérpont Kelvinben (csak Temperature módban érvényes). Csak olvasható — a sablon nem ír színhőmérsékletet. Modellfüggő tartomány: 1700–6500 K színes izzóknál és szalagoknál, 2700–6500 K mennyezeti lámpáknál.
Egyéni változók

Yeelight module

Figyelő
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
Szerviz attribútumok
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);
Color temperature
Yeelight fényerő-szabályozó Fényerőszabályzó

Fényerő (0–100 %) és be/ki vezérlés sima, 300–500 ms-os átmenetekkel. Szín, színhőmérséklet és effektek ebben a sablonban nem érhetők el.

numeric Egység: brightness 0–100 %
Változó: receiveError, Változó: notificationError, Változó: sendError

Yeelight fényerő-szabályozó

Szint olvasása
VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"bright\", \"power\"]}";
SENDDATA(json);
Szint írása
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
Figyelő
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
Kapcsolat: Packet Parser → TCP
Lehetséges fejlesztések (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.

Források