Konkurentem w inteligentnym oświetleniu domów dla IKEA Tradfri jest Philips HUE. W tym tutorialu chciałbym pokazać jak sterować oświetleniem HUE z systemu Grenton.
Do integracji też jest wymagane posiadanie mostka HUE, z tym, że w przypadku HUE nie potrzebujemy pośrednictwa Node-Red. Philips HUE udostępnia REST Web API, za pomocą którego można się komunikować bezpośrednio z użyciem modułu Gate Http.
API dla Philips HUE jest rozbudowane i pozwala na bardzo dużo. Jest ono dostępne na stronie https://developers.meethue.com/ , wymagana jest darmowa rejestracja jako developer aplikacji.
W przykładzie pokażę jak włączyć/wyłączyć, sterować jasnością grupy świateł.
Wykorzystamy Groups API od "Hue API": /api/<username>/groups
- 
Na samym początku należy skonfigurować instalację oświetlenia Philips HUE za pomocą dedykowanej aplikacji mobilnej "Hue".
 - 
Następnie trzeba poznać adres IP mostka HUE jaki otrzymała od routera. Trzeba się zalogować do panelu administracyjnego routera i zanotować adres IP.
 - 
Mostek Philips HUE udostępnia interfejs do testowania API za pomocą przeglądarki internetowej. Interfejs jest dostępny pod adresem https://<adresip mostka>/debug/clip.html
 - 
Dzięki testowemu interfejsowi możemy uzyskać nazwę użytkownika (klucz do API) na potrzeby integracji
- klikamy przycisk na mostku Hue
 - w "Message Body" wpisujemy
 
 
{"devicetype":"my_hue_app#gate http" }- URL "/api"
 - wysyłamy zapytanie klikając przycisk "POST"
 - W polu "response" pojawi się nazwa użytkownika. Należy ja sobie zapisać. Będzie potrzebna.
 

- 
Teraz z użyciem tego samego interfejsu możemy pobrać informacje o grupach:
- URL ustawiamy na /api/<username>/groups
 - Message Body zostawiamy puste
 - Klikamy GET
 - W oknie "Command Response" otrzymamy JSON z którego możemy odczytać identyfikatory grupy i nazwy oraz pozostałe atrybuty opisujące stan w danej chwili
 
 - 
W GATE HTTP tworzymy następujące cechy użytkownika:
- hue_api_name - (string) nazwa użytkownika wygenerowana w wcześniejszych krokach
 - hue_bri_1 - (number) wartość jasności świecenia
 - hue_on_1 - (boolean) wskazanie czy światło jest włączone czy wyłączone
 
 - 
W nazwie dobrze jest dać identyfikator grupy lub nazwę. W przykładzie używany jest identyfikator grupy 1.
Tworzymy wirtualny obiekt HttpRequest, który będzie wykorzystany do obsługi połączenia z mostkiem Philips HUE. Konfigurujemy go następująco:
- Host - adres IP mostka HUE
 - Path - /api
 - Method - PUT
 - RequestType i ResponseType - JSON
 
 - 
Do sterowania wykorzystany zostanie Smart Panel i zdarzenia przycisków:
- OnClick - włączenie/wyłączenie, zwiększenie/zmniejszenie jasności
 - OnHold - zwiększanie i zmniejszanie jasności
 
 - 
Skrypt do włączania wyłączania światła Hue w grupie 1 "work room":
local var = GATE_HTTP->hue_on_1 local reqJson = nil if var == 0 then var = 1 reqJson = { on = true } else reqJson = { on = false } var = 0 end local path1 = "/api/".. GATE_HTTP->hue_api_name .."/groups/1/action" GATE_HTTP->hue_on_1 = var GATE_HTTP->hueRequest->SetPath(path1) GATE_HTTP->hueRequest->SetRequestBody(reqJson) GATE_HTTP->hueRequest->SendRequest()
Skrypt do rozjaśniania oświetlenia, z parametrem upVar:
local bright = GATE_HTTP->hue_bri_1 if (bright + upVar) <= 255 then bright = bright + upVar GATE_HTTP->hue_bri_1 = bright else GATE_HTTP->hue_bri_1 = 255 bright = 255 end local hueJSON = { on = true, bri = bright } local path1 = "/api/".. GATE_HTTP->hue_api_name .."/groups/1/action" GATE_HTTP->hueRequest->SetPath(path1) GATE_HTTP->hueRequest->SetRequestBody(hueJSON) GATE_HTTP->hueRequest->SendRequest()
Skrypt do ściemniania oświetlenia z parametrem downVar
local bright = GATE_HTTP->hue_bri_1 if (bright - downVar) >= 0 then bright = bright - downVar GATE_HTTP->hue_bri_1 = bright else bright = 0 GATE_HTTP->hue_bri_1 = 0 end local hueJSON = nil if bright == 0 then hueJSON = { on = false, bri = bright } else hueJSON = { on = true, bri = bright } end local path1 = "/api/".. GATE_HTTP->hue_api_name .."/groups/1/action" GATE_HTTP->hueRequest->SetPath(path1) GATE_HTTP->hueRequest->SetRequestBody(hueJSON) GATE_HTTP->hueRequest->SendRequest()
Skrypty przyjmują parametry, które definiują wielkość o jaką rozjaśnić/ściemnić światło, oraz pilnują by nie przekroczyć wartości skrajnych