TapHome

Yeelight

Packet Parser → TCP
Pridal
Posledná aktualizácia: 04. 2026
Yeelight

Yeelight je značka Wi-Fi inteligentných LED svietidiel — jednofarebných žiaroviek, žiaroviek s nastaviteľnou bielou a plnofarebných žiaroviek, LED pásov a stropných svietidiel — ktoré vyrába spoločnosť Qingdao Yeelink (súčasť ekosystému Xiaomi). Každý Yeelight produkt s podporou LAN používa rovnaký JSON-RPC protokol Inter-Operation Protocol na TCP porte 55443, takže jedna šablóna TapHome pokrýva celú produktovú rodinu.

Šablóna sprístupňuje zariadenie typu stmievač: jas (0–100 %) a zapnutie/vypnutie s plynulými prechodmi. Aktuálny farebný režim a teplota bielej sa zobrazujú ako servisné atribúty len na čítanie. TapHome komunikuje so žiarovkou priamo v lokálnej sieti — po zapnutí LAN Control na žiarovke nie je potrebný účet v cloude Yeelight.

Hardvérové pripojenie

Yeelight žiarovky sa napájajú zo štandardnej siete (typicky E27, E14, GU10 alebo 24 V zdroj pre LED pásy — podľa produktu). Medzi TapHome a žiarovkou nie je potrebná žiadna kabeláž — celá komunikácia prebieha cez Wi-Fi. Žiarovka musí byť v rovnakej LAN / VLAN ako TapHome CCU, pretože JSON-RPC protokol nepoužíva autentifikáciu ani šifrovanie a komunikácia nikdy neprechádza cez cloud Yeelight.

LAN protokol Yeelight je nezašifrovaný. Nevystavuj TCP port 55443 do verejného internetu a umiestni žiarovky do dôveryhodného sieťového segmentu — ktokoľvek s prístupom do LAN môže žiarovke posielať príkazy.

Konfigurácia

Zapnutie LAN Control

LAN Control (v niektorých regiónoch označovaný ako Developer Mode) je na žiarovke predvolene vypnutý. Bez neho žiarovka odmieta TCP pripojenia na porte 55443.

  1. Otvor mobilnú aplikáciu Yeelight a spáruj žiarovku s lokálnou Wi-Fi sieťou cez SmartConfig / QuickConnect, ak ešte nie je spárovaná.
  2. Vyber cieľovú žiarovku v aplikácii.
  3. Ťukni na ikonu nastavení (vpravo hore) a otvor LAN Control (v niektorých firmvéroch označené ako Developer Mode).
  4. Prepni LAN Control na ON.
  5. Poznač si IP adresu žiarovky — zobrazuje sa v informáciách o zariadení v aplikácii Yeelight alebo ju možno zistiť z tabuľky DHCP leases na routeri.

Po zapnutí LAN Control žiarovka počúva na TCP porte 55443 a pravidelne sa inzeruje cez UDP multicast 239.255.255.250:1982.

Sieťová konfigurácia
  • IP adresa — šablóna TapHome nerobí automatické vyhľadávanie žiaroviek. Prideľ žiarovke statickú IP alebo DHCP rezerváciu v routeri, aby sa adresa po obnove lease nezmenila.
  • Rovnaký LAN segment — TapHome CCU a žiarovka musia byť v tej istej broadcast doméne. Ak sú Wi-Fi a drôtoví klienti v rôznych VLAN, pridaj firewall pravidlo povoľujúce TCP 55443 medzi nimi.
Importné parametre

Počas importu šablóny v TapHome používateľ zadáva tri hodnoty:

ParameterPopisPredvolená hodnota
ipAddressIP adresa Yeelight žiarovky v LAN192.168.0.1 (placeholder — nahraď skutočnou IP)
PortTCP ovládací port žiarovky55443
Internal poll intervalInterval, v akom šablóna posiela get_prop (v milisekundách)10000 (10 s)

Predvolený port 55443 je štandardný Yeelight LAN Control port a nemal by sa meniť, pokiaľ žiarovka nebola nakonfigurovaná na neštandardný port.

Medzi pollmi šablóna tiež reaguje na notifikácie props, ktoré žiarovka sama posiela pri každej zmene stavu. V praxi to znamená, že zmeny jasu alebo zapnutia/vypnutia vykonané z aplikácie Yeelight, nástenného spínača alebo inej inštancie Home Assistant sa v TapHome prejavia takmer okamžite, bez čakania na ďalší poll.

Možnosti zariadenia

Stmievač (jas a zapnutie/vypnutie)

Šablóna sprístupňuje jedno stmievačové zariadenie. Pri každom polli posiela:

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

a spracuje odpoveď result[0] (jas 1–100, delený 100 na rozsah TapHome 0.0–1.0) a result[1] ("on" / "off").

Zápisy sa prekladajú na dva JSON-RPC príkazy:

  • Ak je cieľová úroveň väčšia ako nula, šablóna pošle set_power ["on","smooth",300] a následne set_bright [round(level*100),"smooth",500]. 300 ms prechod pre zapnutie a 500 ms prechod pre jas poskytujú jemný fade namiesto tvrdého skoku.
  • Ak je cieľová úroveň nula, šablóna pošle set_power ["off","smooth",300].

Stmievač tiež spracováva notifikácie props posielané žiarovkou (power / brightness), takže externé zmeny stavu sa v TapHome prejavia bez čakania na ďalší poll.

Farebný režim a teplota bielej (len na čítanie)

Dva servisné atribúty na úrovni modulu sa čítajú samostatným get_prop požiadavkom (id=981):

  • Color modeRGB, Temperature alebo HSV, dekódované z číselnej vlastnosti color_mode (1 / 2 / 3) pomocou výrazu SWITCH v listener skripte.
  • Color temperature — hodnota v Kelvinoch reportovaná ako "{ct}K" (napríklad "4000K"). Zmysluplná len vtedy, keď je žiarovka v režime Temperature. Typický rozsah podľa modelu: 1700–6500 K pre farebné žiarovky a pásy, 2700–6500 K pre stropné svietidlá (ceiling3 je obmedzený na 6000 K).

Oba atribúty sú len diagnostické — šablóna nedokáže prepnúť farebný režim ani zapísať novú teplotu bielej.

Ďalšie možnosti

Yeelight LAN protokol tiež ponúka ovládanie farieb RGB a HSV (set_rgb, set_hsv), nastavenie teploty bielej (set_ct_abx), programy farebných zmien (start_cf / stop_cf), preddefinované scény (set_scene), časovače spánku na žiarovke (cron_add), ovládanie zadného svetla na dvojsvetelných svietidlách (bg_* metódy) a music mode (set_music, reverzný TCP kanál obchádzajúci limit rýchlosti). Žiadnu z týchto funkcií súčasná TapHome šablóna stmievača neimplementuje — používatelia, ktorí potrebujú plnú farbu alebo efekty, musia šablónu rozšíriť alebo používať súbežne natívnu Yeelight aplikáciu.

Farbu, teplotu bielej a scény je možné pridať v budúcej aktualizácii šablóny cez ten istý TCP kanál. Read/write skripty PacketParser je možné rozšíriť o set_ct_abx, set_rgb alebo set_scene bez zmeny importných parametrov.

Riešenie problémov

Žiarovka nereaguje na príkazy
  1. Over, že LAN Control je na žiarovke zapnutý (Yeelight app → nastavenia žiarovky → LAN Control). Bez neho žiarovka odmieta všetky TCP pripojenia na porte 55443.

  2. Skontroluj IP adresu žiarovky v aplikácii Yeelight alebo v DHCP tabuľke routera a uisti sa, že sa zhoduje s importným parametrom ipAddress. Yeelight žiarovky predvolene nemajú pevnú IP — lease mohol expirovať a adresa sa zmenila.

  3. Prideľ žiarovke statickú IP alebo DHCP rezerváciu, aby sa adresa nemenila.

  4. Skontroluj, že TapHome CCU a žiarovka sú v rovnakej LAN / VLAN a že TCP 55443 nie je blokovaný firewallom medzi nimi.

  5. Otestuj pripojenie manuálne: telnet {bulb-ip} 55443 a pošli surový request ukončený \r\n:

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

    Platná žiarovka odpovie {"id":1,"result":["<bright>","<power>"]}.

Read error: client quota exceeded

Každé TCP pripojenie k Yeelight žiarovke je obmedzené na 60 príkazov za minútu a žiarovka akceptuje maximálne 4 súčasné pripojenia (spolu 144 príkazov/minútu v celej LAN). Ak žiarovku súčasne polluje iný systém — Home Assistant, cloudová session Yeelight, vlastný skript — spojená premávka môže spôsobiť chyby rate-limitu, ktoré sa v TapHome hlásia ako Read error: client quota exceeded.

  1. Vypni alebo spomaľ ostatné integrácie, ktoré zdieľajú žiarovku.
  2. Ponechaj interval pollu v TapHome na predvolenej hodnote 10000 ms alebo vyššej. Jeden get_prop plus dva set_* zápisy na zmenu bezpečne zostávajú pod kvótou 60 príkazov/minútu.
  3. Zavri nepoužívané telnet debug sessions — tie sa počítajú do limitu 4 pripojení.
Servisný atribút Color temperature ukazuje “error”

Servisné atribúty Color mode a Color temperature čítajú color_mode a ct zo žiarovky. Ak ide o mono model (iba biela), ktorý nepodporuje nastaviteľnú bielu, alebo ak je žiarovka práve v režime RGB alebo HSV, hodnota ct nie je zmysluplná a listener skript hlási Color temperature ako "error". Ide o očakávané správanie, nie o chybu.

Zmeny v aplikácii Yeelight sa neprejavujú

Šablóna reaguje na notifikácie props posielané žiarovkou, takže externé zmeny sa bežne prejavia do sekundy. Ak nie:

  1. Notifikácia mohla prísť v čase, keď sa TCP socket obnovoval — nasledujúci poll (predvolene 10 s) ich zosynchronizuje.
  2. Niektoré staršie firmvéry posielajú notifikácie iba pri aktívne odoslanom príkaze. Aktualizuj firmvér žiarovky cez aplikáciu Yeelight.
  3. Žiarovka možno dosiahla limit 4 pripojení — zníž počet súčasných klientov v LAN.

Dostupné zariadenia

Yeelight modul Modul
Servisné atribúty
Farebný režimAktívny farebný režim nahlasovaný žiarovkou — RGB, Temperature (nastaviteľná biela) alebo HSV. Len na čítanie — šablóna farebný režim neprepína.
Teplota bielejAktuálny biely bod v Kelvinoch (platný len v režime Temperature). Len na čítanie — šablóna teplotu bielej nezapisuje. Rozsah podľa modelu: 1700–6500 K pre farebné žiarovky a pásy, 2700–6500 K pre stropné svietidlá.
Vlastné premenné

Yeelight 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
Servisné atribúty
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);
Color temperature
Yeelight stmievač Stmievač

Jas (0–100 %) a zapnutie/vypnutie s plynulými prechodmi 300–500 ms. Farbu, teplotu bielej a efekty táto šablóna nesprístupňuje.

numeric Jednotka: brightness 0–100 %
Premenná: receiveError, Premenná: notificationError, Premenná: sendError

Yeelight stmievač

Čítanie úrovne
VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"bright\", \"power\"]}";
SENDDATA(json);
Zápis úrovne
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
Listener
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
Pripojenie: Packet Parser → TCP
Možné vylepšenia (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.

Zdroje