Yeelight je přední světová značka inteligentního osvětlení původně zaštiťovaná značkou Xiaomi. Společnost nabízí nepřeberné množství druhů osvětlení. Od samotných zdrojů osvětlení, tedy monochromatických či RGB žárovek, bodových světel, LED pásků, až po kompletní stropní svítidla či lampy. Všechny tyto prvky lze připojit do inteligentní domácnosti (většinou pomocí wifi) a ovládat je pomocí dodávané mobilní aplikace. Yeelight samozřejmě nabízí i integraci do platforem Apple HomeKit, Google Assistant a Amazon Alexa, s čímž je spojena i možnost hlasového ovládání.

Kvůli vysoké popularitě těchto světel mezi uživateli byla do prostředí Mosaic implementována knihovna YeelightLib pro možnost jejich ovládání z aplikačního programu PLC Tecomat. To umožňuje definované aplikační rozhraní pro komunikaci v lokální síti, které má každé světlo Yeelight implementováno. Pokud uživatel chce zpřístupnit své světlo k ovládání aplikačním programem PLC, musí u daného světla v mobilní aplikaci povolit Ovládání přes LAN.

Pro použití knihovny YeelightLib k ovládání světel je důležité, aby uživatel měl na svém wifi routeru v konfiguraci DHCP serveru nastavenou rezervaci statické IP adresy pro MAC adresu daného světelného zařízení. Jinými slovy, je nutné, aby světlo po přihlášení k síti získalo od DHCP serveru vždy stejnou IP adresu. MAC adresu zařízení, pro kterou je nutné učinit rezervaci IP adresy, lze vyčíst z mobilní aplikace Yeelight.

Pokud máme světla takto připravena, můžeme začít programovat v prostředí Mosaic. V příkladu budeme demonstrovat řízení jedné RGB žárovky (Yeelight RGB Smart Light Bulb) a jednoho stropního svítidla s funkcí ambientního osvětlení (Yeelight JIAOYUE 650).

Do příslušného projektu nejprve přidáme knihovnu YeelightLib:

 

Použití knihovny lze demonstrovat na následujícím jednoduchém programu:

PROGRAM prgYeelight
  VAR_INPUT
  END_VAR
  VAR_OUTPUT
  END_VAR
  VAR
    yeelight : fbYeelightControl;

    YEELIGHT_Units : T_YEELIGHT_UNIT_LIST := [
      (control := (enabled:= true), network:=(ip:='10.1.1.244', name:='Ceiling light')),
      (control := (enabled:= true), network:=(ip:='10.1.1.245', name:='Color Bulb'))
    ];

  END_VAR
  VAR_TEMP
  END_VAR

  yeelight(ethCode := ANY_UNI, pingEnab := TRUE, yeeLightUnits := YEELIGHT_Units, refreshTime := T#2s);
  
END_PROGRAM

Nejprve je nutné deklarovat Yeelight zařízení, která chceme řídit naším programem. Knihovna YeelightLib k tomuto účelu definuje strukturu T_YEELIGHT_UNIT.

TYPE T_YEELIGHT_UNIT :
  STRUCT
    network          : T_YEELIGHT_UNIT_NETWORK;
    status           : T_YEELIGHT_UNIT_STATUS;
    control          : T_YEELIGHT_UNIT_CONTROL;
  END_STRUCT;
END_TYPE

Ta sestává ze tří částí:

Síťová struktura network - určuje parametry pro připojení k Yeelight světlu. Především tedy IP adresu zařízení. Zároveň slouží pro signalizaci stavu připojení. Pomocí proměnné name si lze danou instanci případně pojmenovat.

TYPE T_YEELIGHT_UNIT_NETWORK :
  STRUCT
    online           : bool;            // signalizace zařízení je online
    lastSee          : dt;              // čas poslední detekce zařízení 
    ip               : string [20];     // nastavená IP adresa zařízení pro komunikaci
    port             : uint := 55443;   // port pro komunikace (výchozí 55443)
    name             : string [24];     // pojmenování zařízení
  END_STRUCT;
END_TYPE

Stavová zóna status - struktura udržující aktuální stav zařízení, tedy nastavení parametrů daného světla, které je periodicky vyčítáno. Prvky struktury jsou pouze pro čtení.

TYPE T_YEELIGHT_UNIT_STATUS :
  STRUCT
    power            : bool;                 // zařízení zapnuto(true)/vypnuto(false)
    bright           : usint;                // jas (0 - 100%)
    ct               : uint;                 // barevná teplota (Kelvin)
    rgb              : udint;                // RGB 
    hue              : uint;                 // odstín
    sat              : usint;                // sytost
    color_mode       : TYeelightColorMode;   // nastavený režim světla:
                                             // YEELIGHT_RGB_MODE - režim RGB
                                             // YEELIGHT_CT_MODE - režim barevné teploty
                                             // YEELIGHT_HSV_MODE - režim HSV
    bg_power         : bool;                 // podsvětlění zapnuto (true) / vypnuto (false)
    bg_bright        : usint;                // jas podsvětlení (0 - 100%)
    bg_ct            : uint;                 // barevná teplota podsvětlení (Kelvin)
    bg_rgb           : udint;                // RGB podsvětlení
    bg_hue           : uint;                 // odstín podsvětlení
    bg_sat           : usint;                // sytost podsvětlení
    bg_lmode         : TYeelightColorMode;   // nastavený režim podsvětlení
    moon             : bool;                 // noční režim (režim Měsíc)
    moon_bright      : usint;                // jas nočního režimu
    name             : string [24];          // nastavený název zařízení
  END_STRUCT;
END_TYPE

Řídicí zóna control - struktura umožňující řízení světla. Používá se v aplikačním programu pro vyvolání požadavku na změnu stavu zařízení.

TYPE T_YEELIGHT_UNIT_CONTROL :
  STRUCT
    enabled          : bool;   // celkové povolení obsluhy světla
    power            : bool;   // zapnutí nebo vypnutí světla
    toggle           : bool;   // přepnutí stavu světla
    bright           : usint;  // nastavení úrovně jasu (0-100%)
    ct               : uint;   // nastavení barevné teploty (1700-6500K)
    rgb              : udint;  // nastavení barvy světla pomocí složek RGB
    hue              : uint;   // nastavení odstínu světla (HSV)
    sat              : usint;  // nastavení sytosti světla (HSV)
    color_mode       : TYeelightColorMode; // nastavení barevného módu světla
    smooth           : bool;   // zapnutí pozvolné změny
    duration         : udint;  // doba trvání pozvolné změny
    bg_power         : bool;   // zapnutí nebo vypnutí podsvícení
    bg_bright        : usint;  // nastavení úrovně jasu podsvícení (0-100%)
    bg_ct            : uint;   // nastavení barevné teploty podsvícení (1700-6500K)
    bg_rgb           : udint;  // nastavení barvy podsvícení pomocí složek RGB
    bg_hue           : uint;   // nastavení odstínu podsvícení (HSV)
    bg_sat           : usint;  // nastavení sytosti podsvícení (HSV)
    moon             : bool;   // zapnutí nebo vypnutí režimu nočního světla (režim Měsíc)
    moon_bright      : usint;  // nastavení úrovně jasu nočního světla (0-100%)
    default          : bool;   // nastavení výchozího stavu po zapnutí
  END_STRUCT;
END_TYPE

Pomocí knihovny YeelightLib je možné řídit až 16 takových zařízení definovaných strukturou T_YEELIGHT_UNIT. Ve formě seznamu T_YEELIGHT_UNIT_LIST se tyto deklarace v aplikačním programu předávají funkčnímu bloku fbYeelightControl, který je hlavním a jediným funkčním blokem v knihovně YeelightLib. Ve výše uvedeném příkladu je tedy patrné, že pro inicializaci jednotek v seznamu stačí zapsat IP adresy koncových zařízení a nastavit v řídicí struktuře příznak enabled na hodnotu true

Při volání funkčního bloku fbYeelightControl stačí specifikovat pouze ethernet kanál, který se má použít pro komunikaci. Kanál by měl být v režimu UNI s minimální velikostí vysílací a přijímací zóny 512 B. U systému Foxtrot 2 lze pro specifikaci kanálu použít konstantu ANY_UNI, čímž je zajištěno automatické vytvoření komunikačního kanálu v těle funkčního bloku. Není třeba ho pak zakládat v HW konfiguraci. Zbylými vstupními parametry funkčního bloku lze specifikovat různé časové periody pro kontrolu síťového spojení, cyklické vyčítání stavových dat, či intenzity vysílání příkazů. Tyto parametry je nutné volit s rozvahou, neboť nesprávné nastavení parametrů může zapříčinit dočasné zablokování komunikace s koncovým zařízením. Yeelight zařízení mají totiž dle specifikace aplikačního rozhraní nastaveno omezení maximálně 60 přístupů za 1 minutu. Je tedy doporučeno zachovat časové parametry funkčního bloku na svých výchozích hodnotách, které byly navrženy s ohledem na toto omezení.

Po úspěšném spuštění aplikačního programu v PLC bude funkční blok ve stanoveném intervalu ověřovat síťovou dostupnost všech zařízení definovaných IP adresou a s nastaveným příznakem enabled v řídicí struktuře control. Všechny záznamy v seznamu T_YEELIGHT_UNIT_LIST s nenastaveným příznakem enabled jsou ignorovány. Pokud je dané zařízení dostupné, je u odpovídající položky v seznamu zařízení ve struktuře network automaticky nastaven příznak online. Ze všech detekovaných zařízení v síti jsou pak periodicky vyčítána stavová data, čili aktuálně nastavené parametry světla. Metody periodického vyčítání dat funkční blok používá z důvodu chybějící podpory technologie IP multicast u komunikačních kanálů sytému Tecomat, kterou světla Yeelight používají pro reportování změn stavů. Získaná stavová data jsou ukládána do odpovídajících zón status. Ovládat vybrané světlo lze zápisem požadovaných parametrů do řídicí struktury control v příslušné položce v seznamu zařízení. Jakmile funkční blok fbYeelightControl detekuje rozdílné nastavení parametrů ve stavové a řídicí struktuře, vytvoří a následně odešle odpovídající příkaz k danému světlu dle řídicí struktury.

Některé parametry řídicí struktury control lze ovládat přímo z webových stránek systému. Použitím prvku Dvoustavový obrázek v nástroji WebMaker v prostředí Mosaic lze například řídit zapnutí/vypnutí světla. Jednoduše tomuto prvku nastavíme atribut Proměnná na odpovídající položku řídicí struktury zvoleného světla.

 

Výsledné ovládání pomocí webového rozhraní pak kombinací různých prvků a využitím knihovny CanvasLib může vypadat následovně: