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