Dieser Post soll das Endergebnis des Zusammenspiels zwischen folgenden Komponenten zeigen:
- Philips Hue Lights
- Logitech Harmony Remote
- Eventghost
- IP Symcon (IPS)
- Homematic (HM)
Die Grundlagen für das Setup sind in 2 weiteren Posts beschrieben:
IP Symcon und Eventghost – Schnittstelle nutzen Part1
IP Symcon und Eventghost – Schnittstelle nutzen – Part 2
Ich habe zunächst das IPSLight Modul (aus IPS Library) verwendet, um die Hue Lights anzusteuern. Mir erschien dieses Modul aber nach einigen Versuchen nicht leichtgewichtig genug für meinen Anwendungsfall. Schnelle Anpassungen konnte ich daran auch nicht machen, sodass ich auf “einzelne” Scripts aus dem IPS Forum zurückgegriffen und diese erweitert habe. Zu finden sind die Scripts im IPS Forum: http://www.ip-symcon.de/forum/threads/20855-PhilIPS-hue-LED-Leuchten?p=223885#post223885
Folgende Schritte sind nötig:
- IPS Library Installation
- Import der Hue Scripts
- Anpassung der Scripts (Bridge IP und API User Key)
- Schedulen der hue_query
- Script als Szene hinzufügen
- Szene über Eventghost Server Socket triggern
- Harmony Aktion anpassen
1. IPSLibrary Installation
Um die zuvor genannten Scripts verwenden zu können, braucht man die “IPSInstaller.inc.php”, welche sich in der IPS Library befindet. So muss man also zunächst die IPS Library installieren. Dazu muss man den BaseLoader einmalig ausführen. Dazu einfach ein neues Script erstellen und den Code einfügen. Nach der Installation bzw. der Ausführung des BaseLoader Scripts sollte im Location Tree die IPSLibrary sichtbar sein.
2. Import der Hue Scripts
Leider habe ich keinen Weg gefunden, mehrere Scripts auf einmal in IPS zu importieren. Diese Funktion scheint es mal gegeben zu haben. So musste ich die ganzen Scripts anlegen und einzeln importieren.
3. Anpassung der Scripts
Als weitere Vorbereitung kann man 2 neue (statische) Variablen anlegen, welche die IP der Hue Bridge und den API User speichern sollen. Man könnte es natürlich auch im Code selbst spezifizieren. Um einen API User anzulegen geht man wie in Philips’ “Getting started” Guide vor.
Wenn man wie ich die Scripts einzeln importiert, kann es sein, dass bei der Ausführung der Scripts die referenzierten anderen Scripte nicht ausgeführt bzw. nicht gefunden werden. Dann muss man die Scripts durchgehen und eventuell im oberen Bereich anpassen. Bei mir sieht es so aus:
1 |
include(IPS_GetScriptFile(27818 /*[Hue\hue_include]*/)/*[Hue\hue_include]*/); |
In der hue_include.php gibt man seinen API User und die Bridge IP ein. Falls Ihr wissen wollt, wie ihr die IP über die API ändern wollt, schaut hier: Statische IP Adresse für die Hue Bridge vergeben über API
1 2 3 4 |
$config = array( 'hue_bridge_ip' => '192.168.0.7', 'hue_key' => 'jatadeveloper' ); |
Nutzt man die IPS Variablen, sollte man hier anstatt der jeweiligen Werte, z.B. per GetValue die Werte der Variablen holen.
4. Schedulen der hue_query
Die hue_query.php sorgt dafür, dass Dummies für die Lampen angelegt werden und die Daten (Farbe, Helligkeit etc) über die API geholt werden. Dieses Script sollte in regelmäßigen Abständen ausgeführt werden, damit man die aktuellen Statusinformationen bekommt. Mit einem Rechtsklick auf das Script -> Add Object -> Add Event kann man einstellen, dass dieses Script zyklisch ausgeführt wird. Ich habe bei mir einen 5 Sekunden Zyklus eingestellt. Ist das Script erfolgreich gelaufen, so sollte der Location Tree ähnlich wie meiner aussehen:
5. Scripts als Szene hinzufügen
Für ein einfacheres Handling der Lampen habe ich angefangen meine eigene “hue_Commons.php” zu bauen, in der ich nun meine Hilfsmethoden usw. programmiere. Diese ist noch nicht sehr groß. Bei Interesse bitte einfach anschreiben und ich kann eine aktualisierte Version zur Verfügung stellen.
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 |
<? //Prerequisites $bridgeIp = GetValueString(38615 /*[Hue\Bridge IP]*/ ); $apiUser=GetValueString(33618 /*[Hue\ApiUser]*/ ); $wohnzimmer = 1; // Wohnzimmer //$lampGroup = $wohnzimmer; $baseUrl = 'http://'.$bridgeIp.'/api/'.$apiUser; function SetWholeHueGroup($lampGroup,$hueColor) { //refer to global scope $baseUrlGroup = $GLOBALS['baseUrl'].'/groups/'.$lampGroup.'/action'; $jsonGroupState = '{"on":true, "hue":'.$hueColor.',"sat":255, "bri":255}'; CurlHueOperation($jsonGroupState, $baseUrlGroup); } function DimDownHueAndTurnOff($lampGroup,$transitionSeconds) //can be either group or single light { $baseUrlGroup = $GLOBALS['baseUrl'].'/groups/'.$lampGroup.'/action'; $h=GetValue(51497 /*[Hue\Lampengruppen\Wohnzimmer\Hue]*/ ); $transitionTime = $transitionSeconds * 10; $jsonGroupState = '{"on":false, "hue":'.$h.',"transitiontime":'.$transitionTime.', "bri":0, "sat":255}'; CurlHueOperation($jsonGroupState, $baseUrlGroup); } function CurlHueOperation($jsonPostField, $baseUrlGroup) { $curlOptions = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => array('Content-type: application/json') , CURLOPT_POSTFIELDS => $jsonPostField ); $ch = curl_init($baseUrlGroup); curl_setopt_array($ch, $curlOptions); $result = curl_exec($ch); print_r("\n".$result); } ?> |
Ich habe momentan 2 Szenen. Eine für die PlayStation, bei der das Wohnzimmer in einem ähnlichen blauen Licht durchflutet wird, wie es im StartScreen der PS4 ist.
Einen weiteren Cinema Mode habe ich als Szene hinzugefügt, der beim Start des HTPCs (und Beamer, Leinwand) die ganze Lampengruppe im Wohnzimmer auf ein dunkles Rot setzt und die ganze Gruppe langsam ausmacht (fade-out).
1 2 3 4 5 6 7 8 9 10 |
<? // Color convertion library require_once(IPS_GetScriptFile(55141 /*[Hue\hue_colors]*/ )); // commonly used variables include(IPS_GetScriptFile(59053 /*[Hue\hue_Commons]*/)); $h = 47843; // Deep Blue PlayStation like light SetWholeHueGroup($wohnzimmer,$h); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<? // Color convertion library require_once(IPS_GetScriptFile(55141 /*[Hue\hue_colors]*/ )); // commonly used variables include(IPS_GetScriptFile(59053 /*[Hue\hue_Commons]*/)); //Colors $hex="#ff4c32";//dark red $lux = NEW Lux_Color(); $hex2hsv = $lux->hex2hsv("$hex"); $h = $hex2hsv['0']*360*182; $h = (int)$h; SetWholeHueGroup($wohnzimmer,$h); sleep(1); DimDownHueAndTurnOff($wohnzimmer,30); ?> |
6. Szene über Eventghost Server Socket triggern
Im letzten Schritt soll eine Szene nun über die Logitech Harmony getriggert werden. An dieser Stelle gehe ich mal davon aus, dass Ihr die oben genannten anderen Beiträge zum Thema IP Symcon und Eventghost gelesen habt.
In meinem Eventghost Eventhandler fange ich folgende Payloads ab und starte damit andere Scripte bzw. Events:
1 2 3 4 5 6 7 8 9 10 11 |
if($code == "Gee_LeinwandRunter_CinemaLight") { HM_WriteValueFloat(31556 /*[Wohnzimmer\Wohnzimmer BeamerLeinwand]*/, "LEVEL", 0); IPS_RunScript(54306 /*[Hue\Szenen\Cinema]*/ ); } if($code == "Gee_LeinwandRunter_PlayStationLight") { HM_WriteValueFloat(31556 /*[Wohnzimmer\Wohnzimmer BeamerLeinwand]*/, "LEVEL", 0); IPS_RunScript(15514 /*[Hue\Szenen\PlayStation]*/ ); } |
Entsprechend triggere ich die Events im Eventghost. Ich habe zunächst auch probiert 2 “Network Event Sender” Events in einem Makro ausführen zu lassen. Dabei kommt aber immer nur ein Event bei IPS an, sodass ich jetzt einen Payload sende und die Scripts in IPS ausführe.
7. Harmony Aktion anpassen
Letztlich fügt man als Device noch sein IR Remote Adapter hinzu und passt eine Aktion an, bei der man die Hue Lights mit den Scripts steuern will. In meinem Fall ist das eine Hama MCE Remote.
Meine Aktion für die PS4 sieht so aus:
Um die Lichter dann beim Ausschalten der Aktion auch mit auszuschalten, sollte ein entsprechendes Event über einen “Befehl für Aktionsende” getriggert werden.
Man könnte weitergehend noch optimieren, dass das Licht nur angeht, wenn es auch draußen oder im Raum dunkel ist. Oder, dass das Licht angeht wenn man die “Entertainment Anlage” ausschaltet, damit man nicht im Dunklen steht 🙂
No Comment
You can post first response comment.