New: Read this article in english
This article is now available in english on siio.com.[/vc_column_text][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Die Philips Hue Leuchten als erste ihrer Art, genießen inzwischen trotz des hohen Preises immer mehr Beliebtheit. Die Smartphone Steuerung ist ein nettes Gadget aber auch Fluch zugleich. So lassen sich die bunten Birnen zwar ganz nett als "Appcessories" verwenden, aber wer möchte schon jedesmal nach dem Smartphone kramen wenn er ein Zimmer betritt, um das Licht einzuschalten.
Seit einiger Zeit hat Philips die API für die Hue geöffnet, so das man die bunten Birnen nun in verschiedene Systeme einbinden kann. RWE SmartHome hat es vorgemacht (wir haben berichtet) und die Philips Hue in ihre Hausautomatisierung integriert.
Wie wäre es wenn du die Philips Hue Leuchten in dein Fibaro Home Center 2 einbinden könntest?
Klingt erst einmal nach einem netten Gadget, ist aber auf den zweiten Blick viel mehr. Denn als virtuelles Modul in die Fibaro HC2 eingebunden, ist es möglich die Philips Hue wie eine physische Hardware Komponente anzusprechen. Du kannst diese so per Schalter, Fernbedienung oder Bewegungsmelder ein- und ausschalten. Du kannst Sie auch in Szenen einbinden, um dir so zum Beispiel ein offenes Fenster optisch signalisieren zu lassen.
[carousel arrows="display" buttons="display"] [panel] [/panel] [panel] [/panel] [panel] [/panel] [panel] [/panel] [/carousel]So bindest du die Philips Hue in das Fibaro HC2 ein. Leider nicht für die Fibaro HCL geeignet, da LUA Code erforderlich ist.
Benutzer auf der Philips Hue Bridge anlegen
Zunächst benötigst du einen Benutzernamen auf der Philips Hue Bridge, um mit diesem später die Philips Hue API anzusprechen. Dazu gehst du über deinen Browser auf die Weboberfläche der Hue Bridge unter der Adresse:
http:///debug/clip.html
Die IP Adresse der Hue Bridge findest du am einfachsten über die Weboberfläche deines Routers heraus.
Auf der Weboberfläche der Philips Hue Bridge findest du neben den Buttons GET, PUT, POST, DELETE, drei Boxen:
- URL
- Message Body
- Command Response
Um einen neuen User anzulegen schreibst du in die URL Zeile:
http://ip address>/api
In den Message Body kommt folgendes:
1 |
{"devicetype":"test user","username":"newdeveloper"} |
Damit wird dann der User "newdeveloper" erzeugt. Du kannst ihn natürlich auch Fibaro oder HeinzHorst nennen. Bevor du auf den Button POST drückst, musst du kurz auf den (physikalischen) Button an der Philips Hue Bridge drücken. Nachdem du nun auf POST gedrückt hast, solltest du eine "success" Meldung erhalten. Eine Step by Step Anleitung, findest du für die Philips Hue API auch noch einmal hier "Getting started"
Virtuelles Modul erstellen
Nun kannst du auf die Weboberfläche deines Fibaro HC2 wechseln. Dort legst du unter "Module" > Add or remove > Virtuelles Modul hinzufügen - ein neues virtuelles Modul an. Vergebe dem Modul einen Namen deiner Wahl. Dieses Modul wird eine Philips Hue Bulb steuern, daher hab ich die Module bei mir Philips Hue Bulb 1 bis 3 benannt. Vergebe noch einen Raum. Das Feld für die IP Adresse und den TCP Port kannst du frei lassen.
Gehe auf die Registerkarte "Fortgeschritten" und füge einen Slider hinzu.
Dieser Slider wird später die Helligkeit regulieren. Benenne Ihn am besten mit "Brightness", als ID vergebe "sldBrightness" und wähle für den Slider "LUA Code" aus.
Upload Icon Set
Damit das virtuelle Modul nachher je nach Helligkeit der Philips Hue ein passendes Icon erhält, benötigst du als nächstes das Icon Set. Dieses kannst du dir hier herunterladen:
[icons icon="icon-folder-open"]Icon Set Leuchten
Nach dem Download entpacke es auf deinem PC. In dem Ordner findest du 13 Icons. Lade sie über den Button "Symbol ändern" in der nummerierten Reihenfolge hoch.
Sobald die Icons hochgeladen sind, erhalten diese eine ID von dem Fibaro Home Center. In der Regel erhält das erste Icon die ID 1000, das nächste die 1001 und so weiter. Um sicher zu gehen ob bei dir die IDs ebenfalls bei 1000 beginnen, denn es kann ja sein das du schon einmal Icons hochgeladen hast, schaue nochmal nach. Am einfachsten geht dies über den Google Chrom Browser oder beim Firefox über die Entwickler Tools. Mit einem rechtsklick auf das Icon > dann "Element untersuchen" findet sich im Quelltext fix die vergebene ID.
Im Quelltext findest du die vergebene ID. Diese benötigst du dann im Script.
Slider LUA Code
Der zuvor hinzugefügte Slider, soll nun endlich das Script erhalten, welches die Philips Hue in der Helligkeit reguliert. Da der Wert bei der Philips Hue Leuchte für die volle Helligkeit 255 ist, der Slider aber nur einen Wert von 0-100 annehmen kann, müssen wir diesen stets mit 2.55 multiplizieren. Den folgenden Code kannst du so in den Slider (sldBrightness) kopieren:
1 2 |
hueBrightness = math.floor(_sliderValue_ * 2.55) hueOn = true |
Im Kopf des LUA Scripts findest du drei Werte (in Rot) welche du anpassen musst.
1 2 3 4 |
hueIP = fibaro:get(selfId, "IPAddress") huePort = fibaro:get(selfId, "TCPPort") hueUser = "newdeveloper" hueLightID = 1 |
Dies ist zum einen die IP Adresse deiner Philips Hue Bridge. Solltest du im ersten Schritt deinen Benutzer anders als "newdeveloper" benannt haben, so musst du diesen ebenfalls ersetzen. Der Wert "hueLightID" gibt an, welche Hue Bulb gesteuert werden soll. Im Starterpack der Philips Hue befinden sich drei Leuchten, demzufolge könnte der Wert hier 1-3 annehmen.
Sollte deine Fibaro HC2 bei den Icons nicht ab 1000 begonnen haben die IDs zu vergeben, musst du dies ggf. noch anpassen - ab der Funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
selfId = fibaro:getSelfId() hueIP = fibaro:get(selfId, "IPAddress") huePort = fibaro:get(selfId, "TCPPort") hueUser = "newdeveloper" hueLightID = 1 -- set the id of the HC2 Virtual Device vDeviceID = fibaro:getSelfId(); -- function to select the correct icon based on the slider value -- NOTE: change the icon IDs if needed function getIcon(sValue) if(sValue >= 90) then return 1010 -- 90%-99% 11_s_light100.png elseif(sValue >= 80) then return 1009 -- 80%-89% 10_s_light90.png elseif(sValue >= 70) then return 1008 -- 70%-79% 09_s_light80.png elseif(sValue >= 60) then return 1007 -- 60%-69% 08_s_light70.png elseif(sValue >= 50) then return 1006 -- 50%-59% 07_s_light60.png elseif(sValue >= 40) then return 1005 -- 40%-49% 06_s_light50.png elseif(sValue >= 30) then return 1004 -- 30%-39% 05_s_light40.png elseif(sValue >= 20) then return 1003 -- 20%-29% 04_s_light30.png elseif(sValue >= 10) then return 1002 -- 10%-19% 03_s_light20.png elseif(sValue >= 1) then return 1001 -- 1%-9% 02_s_light10.png else return 1000 end -- 0% 01_s_light0.png end -- define the new values for hueBrightness and hueOn if (_sliderValue_ == 0) then hueBrightness = _sliderValue_ hueOn = false else -- multiply the slider value with 2.55 and round it DOWNWARDS -- to get the hueBrightness value (0-255) hueBrightness = math.floor(_sliderValue_ * 2.55) hueOn = true end -- connect to the Hue bridge Hue = Net.FHttp(hueIP,huePort) -- HTTP PUT to set the new values response, status, errorCode = Hue:PUT('/api/'..hueUser..'/lights/'..hueLightID..'/state', '{"on":'..tostring(hueOn)..',"bri":'..hueBrightness..'}') -- continue if HTTP status code is 200 if (tonumber(status) == 200) then -- change the icon based on the new slider value fibaro:call(vDeviceID, "setProperty", "currentIcon", getIcon(_sliderValue_)) end |
Main loop LUA Code - Status abfragen
Der Main Loop Code wird den Status deiner Philips Hue Bulb stetig aktualisieren, um den Status des Slider, das Icon und die Informationsbar zu aktualisieren. Denn falls du zwischendurch mal die Philips Hue App nutzen solltest um die Helligkeit zu regulieren, so wird der Status Slider im virtuellen Modul der Fibaro HC2 automatisch aktualisiert. Diese Informationen holt sich die Fibaro HC2 alle 3 Sekunden (Standard, kannst du im Script ändern) von der Philips Hue Bridge. Kopiere das folgende Script in das Feld "Main loop". Auch hier musst du im Kopf des Scripts die Werte "hueIP"; "hueUser" und die "hueLightID" anpassen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
-- set the Hue bridge properties -- http://developers.meethue.com/gettingstarted.html -- go to http:///api//lights to get the ID of all your Hue lights selfId = fibaro:getSelfId() hueIP = fibaro:get(selfId, "IPAddress") huePort = fibaro:get(selfId, "TCPPort") hueUser = "newdeveloper" hueLightID = 1 -- set the id of the HC2 Virtual Device vDeviceID = fibaro:getSelfId(); -- set the id of the icons used -- NOTE: change the icon IDs if needed iconUnreachable = 1011 iconError = 1012 -- specify the delay in milliseconds (3000 = 3 seconds) -- the lower the delay, the more traffic is send to the Hue bridge delay = 3000 -- function to select the correct icon based on the slider value -- NOTE: change the icon IDs if needed function getIcon(sValue) if(sValue >= 90) then return 1010 -- 90%-99% 11_s_light100.png elseif(sValue >= 80) then return 1009 -- 80%-89% 10_s_light90.png elseif(sValue >= 70) then return 1008 -- 70%-79% 09_s_light80.png elseif(sValue >= 60) then return 1007 -- 60%-69% 08_s_light70.png elseif(sValue >= 50) then return 1006 -- 50%-59% 07_s_light60.png elseif(sValue >= 40) then return 1005 -- 40%-49% 06_s_light50.png elseif(sValue >= 30) then return 1004 -- 30%-39% 05_s_light40.png elseif(sValue >= 20) then return 1003 -- 20%-29% 04_s_light30.png elseif(sValue >= 10) then return 1002 -- 10%-19% 03_s_light20.png elseif(sValue >= 1) then return 1001 -- 1%-9% 02_s_light10.png else return 1000 end -- 0% 01_s_light0.png end -- connect to the Hue bridge Hue = Net.FHttp(hueIP,huePort) -- HTTP GET to get all the info from the light response ,status, errorCode = Hue:GET('/api/'..hueUser..'/lights/'..hueLightID); -- continue if HTTP status code is 200 if (tonumber(status) == 200) then jsonTable = json.decode(response) -- check if error table exists if (jsonTable[1] ~= nil) then -- show error information errorType = jsonTable[1].error.type errorDescription = jsonTable[1].error.description fibaro:debug("Error type = "..errorType) fibaro:debug("Error description = "..errorDescription) if (errorType == 1) then fibaro:log("Hue: Unauthorized user") elseif (errorType == 3) then fibaro:log("Hue: Incorrect light ID") end -- set slider value to 0 fibaro:call(vDeviceID, "setProperty", "ui.sldBrightness.value", 0) -- change the icon to iconError fibaro:call(vDeviceID, "setProperty", "currentIcon", iconError) else -- get the on state hueOn = jsonTable.state.on fibaro:debug("hueOn = " .. tostring(hueOn)); -- get the brightness value (0-255) hueBrightness = tonumber(jsonTable.state.bri) fibaro:debug("hueBrightness = "..hueBrightness); -- get the reachable state hueReachable = jsonTable.state.reachable fibaro:debug("hueReachable = " .. tostring(hueReachable)); if (hueReachable == true) then if (hueOn == false) then hueSlider = 0; else -- devide the hueBrightness value by 2.55 and round it UPWARDS -- to get the hueSlider value (0-100) hueSlider = math.ceil(hueBrightness / 2.55); end fibaro:debug("hueSlider = "..hueSlider); -- show brightness and state info on the bottom bar of the Virtual Device fibaro:log("brightness: "..hueBrightness.." | on: "..tostring(hueOn)); -- set the actual slider value fibaro:call(vDeviceID, "setProperty", "ui.sldBrightness.value", hueSlider) -- change the icon of the Virtual Device based on the hueSlider value fibaro:call(vDeviceID, "setProperty", "currentIcon", getIcon(hueSlider)) else fibaro:log("Hue: Light not reachable"); -- set slider value to 0 fibaro:call(vDeviceID, "setProperty", "ui.sldBrightness.value", 0) -- change the icon to unreachable fibaro:call(vDeviceID, "setProperty", "currentIcon", iconUnreachable) end end end -- delay the Main loop fibaro:sleep(delay); |
Sollten deine Icons nicht mit der ID 1000 aufwärts beginnen, so musst dies auch hier in der "function getIcon" anpassen.
Jetzt kommt Farbe ins Spiel
Bis hier hin hast du ein fertiges virtuelles Modul, welches deine Philips Hue ein- und ausschalten, sowie dimmen kann. Wenn du jetzt noch die Farbe im virtuellen Modul verändern möchtest, so benötigst du jetzt noch einen weiteren Slider. Füge also einfach einen weiteren Slider hinzu und nenne ihn beispielsweise "Farbe".
Die ID kannst du hier frei vergeben, ich habe es im Beispiel color genannt. Füge folgenden Code hinzu:
1 2 3 4 5 6 7 8 9 |
selfId = fibaro:getSelfId() hueIP = fibaro:get(selfId, "IPAddress") huePort = fibaro:get(selfId, "TCPPort") hueUser = "newdeveloper" hueLightID = 1 HueGtw = Net.FHttp(hueIP,huePort) vHue = math.floor(_sliderValue_ * 655.35) HueGtw:PUT('/api/'..hueUser..'/lights/'..hueLightID..'/state', '{"hue":'.. vHue .. '}') |
Auch hier musst du, wie bei den anderen beiden Scripten, die Variablen "hueIP" ; "hueUser" ; und "hueLightID" anpassen.
Nun kannst du nicht nur die Helligkeit mit dem virtuellen Modul variieren, sondern auch die Farbe. Du kannst beide Slider auch in Szenen ansprechen und die Philips Hue so zum Beispiel mit dem Fibaro Motion Sensor einschalten, wenn Bewegung erkannt wurde. Du könntest die Farbe der Philips Hue auch auf eine vordefinierte Farbe ändern, wenn zum Beispiel der Fensterkontakt ein offenes Fenster erkannt hat.
Noch ein Tipp, vergebe der Philis Hue Bridge eine feste IP Adresse, damit du die IP nicht ständig im virtuellen Modul anpassen musst. Wenn du eine FRITZ!Box verwendest, kannst du dort den Haken setzten bei "diesem Gerät immer die gleiche IP Adresse vergeben".
Das virtuelle Modul kannst du dir auch hier herunterladen und in deinem Fibaro Home Center 2 importieren. Das Icon Set musst du nachladen, dieses lässt sich in den virtuellen Modulen leider nicht exportieren.
[icons icon="icon-folder-open" size="13"]virtuelles Modul - Philips Hue Leuchten
************** Update 16.Aug. 2014 **************
Vielen Dank an Simon, er hat das virtuelle Modul für die Philips Hue noch einem Feintuning unterzogen.
- Saturation (Sättigung) per Slider einstellbar
- State: on|off wird nur noch durch die Helligkeit beeinflusst (nicht mehr auch durch Brightness)
- IP und TCPPort werden aus dem Modul gelesen
Heißt die IP Adresse muss nicht mehr direkt im LUA Code geändert werden, sondern kann im virtuellen Modul in der Registerkarte "Allgemein" unter IP Adresse eingetragen werden.
Die Variable "hueIP" füllt Simon mit folgendem Befehl
1 2 3 |
selfId = fibaro:getSelfId() hueIP = fibaro:get(selfId, "IPAddress") huePort = fibaro:get(selfId, "TCPPort") |
Vielen Dank Simon für die Weiterentwicklung des virtuellen Moduls.
Ihr könnt euch das Update hier herunterladen:
[icons icon="icon-folder-open" size="13"]Update - virtuelles Modul - Philips Hue Leuchten[/vc_column_text][/vc_column][/vc_row]