Grenton - Gate Http - Philips HUE
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
- URL ustawiamy na
W GATE HTTP tworzymy następujące cechy użytkownika:
hue_api_name
- (string) nazwa użytkownika wygenerowana w wcześniejszych krokachhue_bri_1
- (number) wartość jasności świeceniahue_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 HUEPath
- /apiMethod
- PUTRequestType
iResponseType
- JSON
Do sterowania wykorzystany zostanie Smart Panel i zdarzenia przycisków:
OnClick
- włączenie/wyłączenie, zwiększenie/zmniejszenie jasnościOnHold
- 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