TapHome

Yeelight Color

Packet Parser → TCP
Dodane przez
Ostatnia aktualizacja: 06. 2026
Yeelight Color

Szablon Yeelight Color rozszerza szablon tylko ściemniający Yeelight o pełną kontrolę kolorów HSB i regulowaną biel (temperaturę bieli). Celuje w tę samą rodzinę Wi-Fi smart LED — kolorowe żarówki, taśmy i lampy sufitowe — wykorzystując identyczny Yeelight Inter-Operation Protocol na porcie TCP 55443. Kluczowa różnica to model urządzenia: zamiast prostego ściemniacza szablon udostępnia PacketParserHSBLight, który daje TapHome natywne właściwości odcienia, nasycenia, jasności i temperatury bieli w jednym urządzeniu.

TapHome komunikuje się z żarówką bezpośrednio w sieci lokalnej przez JSON-RPC — po włączeniu LAN Control na żarówce połączenie z chmurą nie jest wymagane. Szablon odpytuje wszystkie sześć właściwości kolorów jednocześnie i reaguje na powiadomienia props wysyłane przez żarówkę, więc zmiany z aplikacji Yeelight lub innego kontrolera pojawiają się w TapHome niemal natychmiast.

Połączenie sprzętowe

Żarówki Yeelight są zasilane ze standardowej sieci (typowo E27, E14, GU10 lub zasilacz 24 V do taśm LED w zależności od produktu). Między TapHome a żarówką nie jest potrzebne żadne okablowanie — cała komunikacja odbywa się przez Wi-Fi. Żarówka musi być w tej samej LAN / VLAN co TapHome CCU, ponieważ protokół JSON-RPC nie ma uwierzytelniania ani szyfrowania, a ruch nigdy nie jest kierowany przez chmurę Yeelight.

Protokół LAN Yeelight jest nieszyfrowany. Nie wystawiaj portu TCP 55443 na publiczny internet i umieszczaj żarówki w zaufanym segmencie sieci — każdy z dostępem do LAN może wysyłać polecenia do żarówki.

Konfiguracja

Włączenie LAN Control

LAN Control (w niektórych regionach nazywany Developer Mode) jest domyślnie wyłączony na żarówce. Bez niego połączenia TCP na porcie 55443 są odrzucane.

  1. Otwórz aplikację mobilną Yeelight i sparuj żarówkę z lokalną siecią Wi-Fi procedurą SmartConfig / QuickConnect, jeśli jeszcze nie jest sparowana.
  2. Wybierz docelową żarówkę w aplikacji.
  3. Dotknij ikony ustawień (prawy górny róg) i otwórz LAN Control (w niektórych wersjach firmware oznaczony jako Developer Mode).
  4. Przełącz LAN Control na ON.
  5. Zanotuj adres IP żarówki — jest wyświetlany w informacjach o urządzeniu w aplikacji Yeelight lub można go odczytać z tablicy dzierżaw DHCP routera.

Po włączeniu LAN Control żarówka nasłuchuje na porcie TCP 55443 i okresowo ogłasza się przez UDP multicast 239.255.255.250:1982.

Konfiguracja sieci
  • Adres IP — szablon TapHome nie wykrywa żarówek automatycznie. Przypisz statyczny IP lub rezerwację DHCP w routerze, aby adres żarówki nie zmieniał się po odnowieniu dzierżawy.
  • Ten sam segment LAN — TapHome CCU i żarówka muszą być w tej samej domenie rozgłoszeniowej. Jeśli klienci Wi-Fi i przewodowi są w oddzielnych VLAN, dodaj regułę firewall zezwalającą na TCP 55443 między nimi.
Parametry importu

Podczas importu szablonu w TapHome użytkownik wprowadza trzy wartości:

ParametrOpisDomyślna
ipAddressAdres IP żarówki Yeelight w LAN192.168.0.1 (symbol zastępczy — zastąp prawdziwym IP)
PortPort TCP sterowania na żarówce55443
Internal poll intervalJak często szablon wysyła get_prop (w milisekundach)10000 (10 s)

Domyślny port 55443 to standardowy port Yeelight LAN Control i nie powinien być zmieniany, chyba że żarówka jest skonfigurowana na niestandardowy port.

Między odpytywaniami szablon reaguje również na powiadomienia props, które żarówka wysyła przy zmianie stanu. W praktyce oznacza to, że zmiany koloru, jasności i włączania/wyłączania z aplikacji Yeelight, adaptera przełącznika ściennego lub innego kontrolera pojawiają się w TapHome niemal natychmiast, bez czekania na następne odpytanie.

Możliwości urządzenia

Światło kolorowe HSB (odcień, nasycenie, jasność i wł./wył.)

Szablon udostępnia jedno urządzenie światła HSB. W każdym cyklu odpytywania wysyła żądanie get_prop na wszystkie sześć właściwości jednocześnie:

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

Skrypt listener parsuje odpowiedź i mapuje ją na natywne właściwości TapHome:

  • Hue (Hd) — result[0], liczba całkowita 0–359 stopni
  • Saturation (Sa) — result[1], procent 0–100, dzielone przez 100 na zakres TapHome 0,0–1,0
  • Brightness (Hb) — result[2], procent 1–100, dzielone przez 100 na zakres TapHome 0,0–1,0
  • Power (St) — result[3], "on" mapowane na 1, "off" mapowane na 0 (jasność również ustawiana na 0 przy wyłączeniu)
  • Color temperature (Ct) — result[4], wartość w Kelvinach ustawiana tylko gdy color_mode = 2 (tryb biały); w przeciwnym razie ustawiana na NaN
  • Color moderesult[5], określa czy Ct jest zapisywane (1 = RGB, 2 = Temperature, 3 = HSV)
Przełączanie trybu koloru

Szablon używa właściwości Ct do określenia aktywnego trybu koloru:

  • Ct = NaN — żarówka jest w trybie koloru HSV. Zapisy używają set_hsv dla odcienia i nasycenia.
  • Ct = liczba — żarówka jest w trybie białym (temperatura bieli). Zapisy używają set_ct_abx.

TapHome nie wysyła jawnego polecenia przełączenia trybu. Zamiast tego użytkownik ustawia temperaturę bieli na warto��ć liczbową, aby wejść w tryb biały, lub ustawia ją na NaN (wybierając kolor w selektorze HSB), aby wejść w tryb HSV. Skrypty zapisu sprawdzają Ct przed wysłaniem i pomijają nieistotne polecenie — writesaturation wraca natychmiast jeśli Ct nie jest NaN, a writecct wraca natychmiast jeśli Ct jest NaN.

Polecenia zapisu

Trzy skrypty zapisu obsługują różne aspekty światła:

  • Jasność / zasilanie (writebrightness) — jeśli jasność > 0, wysyła set_power ["on","smooth",300] a następnie set_bright [poziom,"smooth",300]. Jeśli jasność = 0, wysyła set_power ["off","smooth",300].
  • Odcień i nasycenie (writesaturation) — wysyła set_power ["on","smooth",300] a następnie set_hsv [odcień, nasycenie,"smooth",300]. Uruchamia się tylko gdy Ct = NaN (tryb HSV).
  • Temperatura bieli (writecct) — wysyła set_power ["on","smooth",300] a następnie set_ct_abx [ct,"smooth",300]. Uruchamia się tylko gdy Ct jest liczbą (tryb biały). Prawidłowy zakres: 1700–6500 K (dokładne limity zależą od modelu żarówki).

Wszystkie zapisy używają 300 ms płynnego przejścia dla łagodnego przyciemnienia zamiast ostrego skoku. Po każdym zapisie zmienna debounce jest ustawiana na 1, co powoduje pominięcie następnego cyklu odpytywania — zapobiega to odczytywaniu nieaktualnego stanu podczas przejścia żarówki.

Diagnostyka usług

Dwa atrybuty usługowe na poziomie modułu są odczytywane przez oddzielne żądanie get_prop (id=981):

  • Tryb koloruRGB, Temperature lub HSV, dekodowany z numerycznej właściwości color_mode (1 / 2 / 3) za pomocą wyrażenia SWITCH w skrypcie listener modułu.
  • Temperatura bieli — wartość w Kelvinach raportowana jako "{ct}K" (na przykład "4000K"). Znacząca tylko gdy żarówka jest w trybie Temperature.

Te atrybuty to diagnostyka tylko do odczytu — faktyczna kontrola temperatury bieli odbywa się przez właściwość Ct na poziomie urządzenia i opisany powyżej skrypt writecct.

Rozwiązywanie problemów

Żarówka nie reaguje na polecenia
  1. Sprawdź, czy LAN Control jest włączony na żarówce (aplikacja Yeelight → ustawienia żarówki → LAN Control). Bez niego żarówka odrzuca wszystkie połączenia TCP na porcie 55443.

  2. Potwierdź IP żarówki w aplikacji Yeelight lub w tablicy dzierżaw DHCP routera i upewnij się, że odpowiada parametrowi importu ipAddress. Żarówki Yeelight domyślnie nie utrzymują stałego IP — dzierżawa mogła wygasnąć i IP się zmienić.

  3. Przypisz żarówce statyczny IP lub rezerwację DHCP, aby zapobiec zmianie adresu.

  4. Sprawdź, czy TapHome CCU i żarówka są w tej samej LAN / VLAN i czy TCP 55443 nie jest blokowany przez firewall między nimi.

  5. Przetestuj łączność ręcznie: telnet {bulb-ip} 55443 i wyślij surowe żądanie zakończone \r\n:

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

    Działająca żarówka odpowiada {"id":1,"result":["<hue>","<sat>","<bright>","<power>","<ct>","<color_mode>"]}.

Polecenia kolorów są ignorowane (odcień/nasycenie się nie zmienia)

Skrypt writesaturation sprawdza Ct przed wysłaniem set_hsv. Jeśli Ct jest ustawione na wartość liczbową (tryb biały), skrypt wraca bez wysyłania jakiegokolwiek polecenia. Aby sterować kolorem HSV, najpierw ustaw temperaturę bieli na NaN, wybierając kolor w selektorze HSB TapHome.

Podobnie writecct wraca bez wysyłania jeśli Ct = NaN (tryb HSV). Aby zapisać temperaturę bieli, żarówka musi już być w trybie białym.

Błąd odczytu: client quota exceeded

Każde połączenie TCP z żarówką Yeelight jest ograniczone do 60 poleceń na minutę, a żarówka akceptuje maksymalnie 4 jednoczesne połączenia łącznie. Jeśli inny system odpytuje żarówkę jednocześnie — Home Assistant, sesja chmury Yeelight, własny skrypt — łączny ruch może wyzwolić błędy limitu szybkości.

  1. Wyłącz lub spowolnij inne integracje współdzielące żarówkę.
  2. Pozostaw interwał odpytywania TapHome na domyślnych 10000 ms lub wyższych. Szablon kolorowy wysyła jedno get_prop na odpytanie plus do trzech zapisów set_* na zmianę, co jest znacznie poniżej kwoty 60 cmd/min.
  3. Zamknij nieużywane sesje debug telnet — wliczają się do limitu 4 połączeń.
Błąd zapisu HueSat lub temperatury bieli

Skrypt listener śledzi błędy zapisu oddzielnie dla każdego typu polecenia — writeErrorBrightness dla zapisów zasilania/jasności, writeErrorHueSat dla zapisów set_hsv i writeErrorCt dla zapisów set_ct_abx. Jeśli pojawi się błąd:

  1. Potwierdź, że żarówka jest włączona — wszystkie polecenia set_* oprócz set_power są akceptowane tylko gdy żarówka jest w stanie on.
  2. Sprawdź, czy wartość temperatury bieli jest w zakresie specyficznym dla modelu (typowo 1700–6500 K dla kolorowych żarówek, 2700–6500 K dla lamp sufitowych, 2700–6000 K dla ceiling3).
  3. Sprawdź surową wiadomość błędu w diagnostyce usług TapHome dla konkretnego kodu błędu zwróconego przez żarówkę.
Zmiany z aplikacji Yeelight nie są widoczne

Szablon reaguje na powiadomienia props wysyłane przez żarówkę, więc zewnętrzne zmiany normalnie pojawiają się w ciągu sekundy. Jeśli nie:

  1. Powiadomienie mogło nadejść podczas ponownego ustanawiania gniazda TCP — następne odpytanie (domyślnie 10 s) zsynchronizuje stan.
  2. Niektóre starsze wersje firmware wysyłają powiadomienia tylko gdy aktywnie wysyłane jest polecenie. Zaktualizuj firmware żarówki z aplikacji Yeelight.
  3. Żarówka mogła osiągnąć limit 4 poł��czeń — zmniejsz liczbę jednoczesnych klientów w LAN.

Urządzenia Yeelight obsługują tylko 4 jednoczesne połączenia TCP i 60 poleceń na minutę na połączenie. Jeśli TapHome i inny system (np. Home Assistant) odpytują tę samą żarówkę jednocześnie, komunikacja może stać się zawodna. Używaj interwału odpytywania 10 sekund lub wyższego.

Dostępne urządzenia

Moduł Yeelight color Moduł
Atrybuty serwisowe
Tryb koloruAktualny tryb koloru żarówki — RGB, Temperature lub HSV — dekodowany z właściwości color_mode
Temperatura bieliTemperatura bieli w Kelvinach, raportowana tylko gdy żarówka jest w trybie Temperature (color_mode=2)

Yeelight color module

Nasłuchiwanie
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
Atrybuty serwisowe
Color mode
VAR json := "{\"id\":981, \"method\":\"get_prop\", \"params\":[\"color_mode\", \"ct\"]}";
SENDDATA(json);

RETURN(NULL);
Color temperature
Światło HSB Światło HSB

Pełnokolorowe światło HSB z obsługą temperatury bieli — steruje odcieniem, nasyceniem, jasnością i włączaniem/wyłączaniem przez set_hsv, set_ct_abx i set_bright z płynnymi przejściami

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

Światło HSB

Odczyt (moduł)
IF(debounce > 0)
    debounce := 0;
ELSE
    VAR json := "{\"id\":951, \"method\":\"get_prop\", \"params\":[\"hue\", \"sat\", \"bright\", \"power\", \"ct\", \"color_mode\"]}";
    SENDDATA(json);
END
Nasłuchiwanie
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 jasności
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 nasycenia
#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 temperatury barwowej
#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;
Połączenie: Packet Parser → TCP
Możliwe ulepszenia (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.

Źródła

Znalazłeś problem z tym szablonem urządzenia?

Napisz nam, co nie działa, czego brakuje lub jak powinien zachowywać się szablon. Twoja opinia pomaga nam utrzymać katalog dokładnym.

Zweryfikowane przez TapHome

Chcesz tego użyć w swoim TapHome Core?

Otwórz ten szablon w portalu klienta, aby zastosować go w swoim domu, lub zaproponuj modyfikację i wyślij ją z powrotem do katalogu.

Otwórz w portalu