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ě: