TapHome

Yeelight

Packet Parser → TCP
Přidal
Poslední aktualizace: 04. 2026
Yeelight

Yeelight je značka Wi-Fi chytrých LED svítidel — jednobarevných žárovek, žárovek s nastavitelnou bílou a plnobarevných žárovek, LED pásků a stropních svítidel — kterou vydává společnost Qingdao Yeelink (součást ekosystému Xiaomi). Každý Yeelight produkt s podporou LAN používá stejný JSON-RPC protokol Inter-Operation Protocol na TCP portu 55443, takže jedna šablona TapHome pokrývá celou produktovou rodinu.

Šablona zpřístupňuje zařízení typu stmívač: jas (0–100 %) a zapnutí/vypnutí s plynulými přechody. Aktuální barevný režim a teplota bílé se zobrazují jako servisní atributy pouze pro čtení. TapHome komunikuje se žárovkou přímo v lokální síti — po zapnutí LAN Control na žárovce není potřeba účet v cloudu Yeelight.

Hardwarové připojení

Yeelight žárovky se napájejí ze standardní sítě (typicky E27, E14, GU10 nebo 24 V zdroj pro LED pásky — podle produktu). Mezi TapHome a žárovkou není potřeba žádná kabeláž — veškerá komunikace probíhá přes Wi-Fi. Žárovka musí být ve stejné LAN / VLAN jako TapHome CCU, protože JSON-RPC protokol nepoužívá autentizaci ani šifrování a komunikace nikdy neprochází cloudem Yeelight.

LAN protokol Yeelight je nešifrovaný. Nevystavuj TCP port 55443 do veřejného internetu a umísti žárovky do důvěryhodného síťového segmentu — kdokoliv s přístupem do LAN může žárovce posílat příkazy.

Konfigurace

Zapnutí LAN Control

LAN Control (v některých regionech označovaný jako Developer Mode) je na žárovce ve výchozím nastavení vypnutý. Bez něj žárovka odmítá TCP spojení na portu 55443.

  1. Otevři mobilní aplikaci Yeelight a spáruj žárovku s lokální Wi-Fi sítí přes SmartConfig / QuickConnect, pokud ještě není spárovaná.
  2. Vyber cílovou žárovku v aplikaci.
  3. Klepni na ikonu nastavení (vpravo nahoře) a otevři LAN Control (v některých firmwarech označené jako Developer Mode).
  4. Přepni LAN Control na ON.
  5. Poznamenej si IP adresu žárovky — zobrazuje se v informacích o zařízení v aplikaci Yeelight nebo ji lze zjistit z tabulky DHCP leases na routeru.

Po zapnutí LAN Control žárovka naslouchá na TCP portu 55443 a pravidelně se inzeruje přes UDP multicast 239.255.255.250:1982.

Síťová konfigurace
  • IP adresa — šablona TapHome neumí automatické vyhledávání žárovek. Přiděl žárovce statickou IP nebo DHCP rezervaci v routeru, aby se adresa po obnově lease nezměnila.
  • Stejný LAN segment — TapHome CCU a žárovka musí být ve stejné broadcast doméně. Pokud jsou Wi-Fi a drátoví klienti v různých VLAN, přidej firewall pravidlo povolující TCP 55443 mezi nimi.
Importní parametry

Během importu šablony v TapHome uživatel zadává tři hodnoty:

ParametrPopisVýchozí hodnota
ipAddressIP adresa Yeelight žárovky v LAN192.168.0.1 (placeholder — nahraď skutečnou IP)
PortTCP ovládací port žárovky55443
Internal poll intervalInterval, v jakém šablona posílá get_prop (v milisekundách)10000 (10 s)

Výchozí port 55443 je standardní Yeelight LAN Control port a neměl by se měnit, pokud žárovka nebyla nakonfigurována na nestandardní port.

Mezi polly šablona také reaguje na notifikace props, které žárovka sama posílá při každé změně stavu. V praxi to znamená, že změny jasu nebo zapnutí/vypnutí provedené z aplikace Yeelight, nástěnného vypínače nebo jiné instance Home Assistant se v TapHome projeví téměř okamžitě, bez čekání na další poll.

Možnosti zařízení

Stmívač (jas a zapnutí/vypnutí)

Šablona zpřístupňuje jedno stmívačové zařízení. Při každém pollu posílá:

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

a zpracuje odpověď result[0] (jas 1–100, dělený 100 na rozsah TapHome 0.0–1.0) a result[1] ("on" / "off").

Zápisy se překládají na dva JSON-RPC příkazy:

  • Pokud je cílová úroveň větší než nula, šablona pošle set_power ["on","smooth",300] a následně set_bright [round(level*100),"smooth",500]. 300 ms přechod pro zapnutí a 500 ms přechod pro jas poskytují jemný fade namísto tvrdého skoku.
  • Pokud je cílová úroveň nula, šablona pošle set_power ["off","smooth",300].

Stmívač také zpracovává notifikace props posílané žárovkou (power / brightness), takže externí změny stavu se v TapHome projeví bez čekání na další poll.

Barevný režim a teplota bílé (pouze pro čtení)

Dva servisní atributy na úrovni modulu se čtou samostatným get_prop požadavkem (id=981):

  • Color modeRGB, Temperature nebo HSV, dekódované z číselné vlastnosti color_mode (1 / 2 / 3) pomocí výrazu SWITCH v listener skriptu.
  • Color temperature — hodnota v Kelvinech reportovaná jako "{ct}K" (například "4000K"). Smysluplná pouze tehdy, když je žárovka v režimu Temperature. Typický rozsah podle modelu: 1700–6500 K pro barevné žárovky a pásky, 2700–6500 K pro stropní svítidla (ceiling3 je omezen na 6000 K).

Oba atributy jsou pouze diagnostické — šablona neumí přepnout barevný režim ani zapsat novou teplotu bílé.

Další možnosti

Yeelight LAN protokol rovněž nabízí ovládání barev RGB a HSV (set_rgb, set_hsv), nastavení teploty bílé (set_ct_abx), programy barevných změn (start_cf / stop_cf), předdefinované scény (set_scene), časovače spánku na žárovce (cron_add), ovládání zadního světla na dvousvětelných svítidlech (bg_* metody) a music mode (set_music, reverzní TCP kanál obcházející rate limit). Žádnou z těchto funkcí současná TapHome šablona stmívače neimplementuje — uživatelé, kteří potřebují plnou barvu nebo efekty, musí šablonu rozšířit nebo používat souběžně nativní Yeelight aplikaci.

Barvu, teplotu bílé a scény lze přidat v budoucí aktualizaci šablony přes stejný TCP kanál. Read/write skripty PacketParser lze rozšířit o set_ct_abx, set_rgb nebo set_scene bez změny importních parametrů.

Řešení problémů

Žárovka nereaguje na příkazy
  1. Ověř, že LAN Control je na žárovce zapnutý (Yeelight app → nastavení žárovky → LAN Control). Bez něj žárovka odmítá všechna TCP spojení na portu 55443.

  2. Zkontroluj IP adresu žárovky v aplikaci Yeelight nebo v DHCP tabulce routeru a ujisti se, že odpovídá importnímu parametru ipAddress. Yeelight žárovky ve výchozím nastavení nemají pevnou IP — lease mohl vypršet a adresa se změnila.

  3. Přiděl žárovce statickou IP nebo DHCP rezervaci, aby se adresa neměnila.

  4. Zkontroluj, že TapHome CCU a žárovka jsou ve stejné LAN / VLAN a že TCP 55443 není blokován firewallem mezi nimi.

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

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

    Platná žárovka odpoví {"id":1,"result":["<bright>","<power>"]}.

Read error: client quota exceeded

Každé TCP spojení k Yeelight žárovce je omezeno na 60 příkazů za minutu a žárovka akceptuje maximálně 4 souběžná spojení (dohromady 144 příkazů/minutu v celé LAN). Pokud žárovku souběžně polluje jiný systém — Home Assistant, cloudová session Yeelight, vlastní skript — spojený provoz může způsobit chyby rate-limitu, které se v TapHome hlásí jako Read error: client quota exceeded.

  1. Vypni nebo zpomal ostatní integrace, které sdílejí žárovku.
  2. Ponech interval pollu v TapHome na výchozí hodnotě 10000 ms nebo vyšší. Jeden get_prop plus dva set_* zápisy na změnu bezpečně zůstávají pod kvótou 60 příkazů/minutu.
  3. Zavři nepoužívané telnet debug sessions — ty se počítají do limitu 4 spojení.
Servisní atribut Color temperature ukazuje “error”

Servisní atributy Color mode a Color temperature čtou color_mode a ct ze žárovky. Pokud jde o mono model (pouze bílá), který nepodporuje nastavitelnou bílou, nebo pokud je žárovka právě v režimu RGB nebo HSV, hodnota ct není smysluplná a listener skript hlásí Color temperature jako "error". Jde o očekávané chování, ne o chybu.

Změny v aplikaci Yeelight se neprojeví

Šablona reaguje na notifikace props posílané žárovkou, takže externí změny se běžně projeví do sekundy. Pokud ne:

  1. Notifikace mohla přijít v okamžiku, kdy se TCP socket obnovoval — následující poll (výchozí 10 s) je zresynchronizuje.
  2. Některé starší firmwary posílají notifikace pouze při aktivně odeslaném příkazu. Aktualizuj firmware žárovky přes aplikaci Yeelight.
  3. Žárovka možná dosáhla limitu 4 spojení — sniž počet souběžných klientů v LAN.

Dostupná zařízení

Yeelight modul Modul
Servisní atributy
Barevný režimAktivní barevný režim hlášený žárovkou — RGB, Temperature (nastavitelná bílá) nebo HSV. Pouze pro čtení — šablona barevný režim nepřepíná.
Teplota bíléAktuální bílý bod v Kelvinech (platný pouze v režimu Temperature). Pouze pro čtení — šablona teplotu bílé nezapisuje. Rozsah dle modelu: 1700–6500 K pro barevné žárovky a pásky, 2700–6500 K pro stropní svítidla.
Vlastní proměnné

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í atributy
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);
Color temperature
Yeelight stmívač Stmívač

Jas (0–100 %) a zapnutí/vypnutí s plynulými přechody 300–500 ms. Barvu, teplotu bílé a efekty tato šablona nezpřístupňuje.

numeric Jednotka: brightness 0–100 %
Proměnná: receiveError, Proměnná: notificationError, Proměnná: sendError

Yeelight stmívač

Čtení úrovně
VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"bright\", \"power\"]}";
SENDDATA(json);
Zápis úrovně
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
Připojení: Packet Parser → TCP
Možná vylepšení (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