Smart Home – openHAB 2 Hue Dimmschalter Integration
Im heutigen Beitrag geht es um die Integration eines Hue Dimmschalter in openHAB 2. Die Integration eines Dimmschalter bzw. generell eines Schalter ist eben nicht so einfach gemacht. Warum eigentlich nicht? Nun openHAB 2 ist an und für sich ja schon eine Schaltzentrale. Anders gesagt, warum soll ich Befehle an eine Fernbedienung per App senden? Macht keinen Sinn? Doch in bestimmten Fällen macht es schon Sinn. Marijana S. hat uns über das Kontaktformular auf MyFreeHome angeschrieben und um eine Lösung für 4 Lichtquellen, eine Steckdose und ihren Sharp Fernseher gebeten. Mir ist es wichtig, dass auch bei einem Ausfall vom Alexa Sprachservice weiterhin eine Kontrolle unseres barrierenfreien Smart Home möglich ist. Warum nicht per Hue App? Kann doch jeder und außerdem liebe ich alles in einer App und Hersteller unabhängig zu haben. Openhab ermöglicht dies. Herausgestellt hat sich zudem, dass der Hue Dimmschalter eine günstige Alternative ist.
openHAB 2 Hue Dimmschalter Integration – benötigte Hardware
Für die Bedienung von Geräten in openHAB 2 mittels Hue Dimmschalter benötigt ihr Hue Funkschalter. Ich finde den Dimmschalter sehr attraktiv, da hier 4 Geräte gesteuert werden können und dieser preislich so an die günstige Version mittels Dashbutton (4×5€) heranreicht (vorrausgesetzt ihr habt bereits eine Hue Bridge).
Philips Hue Wireless Dimming Schalter, komfortabel dimmen ohne Installation, Standard Verpackung 8718696506943,...
- Zubehör für Ihr smartes Philips Hue System: Mit dem Hue Dimmschalter genießen Sie kabellose Lichtsteuerung und komfortables Dimmen, ganz ohne Installation
- Personalisierte Einstellungen: Der Hue Dimmschalter lässt sich einfach in ein Hue System integrieren und über die Philips Hue App individuell einrichten - zum Beispiel Lichtszenen und Räume auswählen
- Zubehör für Ihr smartes Philips Hue System: Mit dem Hue Dimmschalter genießen Sie kabellose Lichtsteuerung und komfortables Dimmen, ganz ohne Installation
- Personalisierte Einstellungen: Der Hue Dimmschalter lässt sich einfach in ein Hue System integrieren und über die Philips Hue App individuell einrichten - zum Beispiel Lichtszenen und Räume auswählen
- Individuelle Platzierung: Bringen Sie den Hue Dimmschalter einfach mit Schrauben oder dem mitgelieferten Klebeband an einer beliebigen Stelle in Ihrem Zuhause an
- Komfortables Dimmen: Erleben Sie stufenloses Dimmen und nutzen Sie Ihren Hue Dimmer nicht nur als Lichtschalter, sondern auch als abnehmbare Fernbedienung
- Reichweite des Schalters: Steuern Sie mit einer Reichweite von 12 Metern bis zu 10 Hue Lampen gleichzeitig
- Schalter enthält Batterie (CR2450 Knopfzelle)
- Funktionen: an/aus/dimmen
Eine weitere Möglichkeit ist der Hue Tap. Sieht schön aus. Ist mir aber zu teuer.
Philips Hue Tap, kabelloser, intelligenter Schalter, Zubehör für Ihr Philips Hue System
- Vier voreingestellte Lichtszenen können mithilfe der Hue App programmiert und auf Knopfdruck abgerufen werden - Steuern Sie Ihr Licht ganz so wie Sie es möchten
- Hue Tap kann an einer beliebigen Stelle mit Schrauben oder mit dem mitgelieferten Klebeband angebracht und wie ein normaler Lichtschalter genutzt werden
- Vier voreingestellte Lichtszenen können mithilfe der Hue App programmiert und auf Knopfdruck abgerufen werden - Steuern Sie Ihr Licht ganz so wie Sie es möchten
- Hue Tap kann an einer beliebigen Stelle mit Schrauben oder mit dem mitgelieferten Klebeband angebracht und wie ein normaler Lichtschalter genutzt werden
- Der Schalter kann durch eine Drehbewegung abgenommen und als Fernbedienung genutzt werden
- Hue Tap basiert auf kinetischer Energie - Batterien sind nicht notwendig
Weitehin braucht ihr eine Hue Bridge.
Philips Hue Bridge, zentrales, intelligentes Steuerelement des Hue Systems
- Zentrales Steuerelement: Die Philips Hue Bridge bildet den Anfang und macht es möglich, ihr Philips Hue System zusammenzustellen
- Einfache Einrichtung: Verbinden Sie die Bridge mit dem LAN-Kabel mit ihrem Router, laden Sie die Hue App herunter und die Steuerung Ihrer Hue Lampen liegt in Ihren Händen
- Zentrales Steuerelement: Die Philips Hue Bridge bildet den Anfang und macht es möglich, ihr Philips Hue System zusammenzustellen
- Einfache Einrichtung: Verbinden Sie die Bridge mit dem LAN-Kabel mit ihrem Router, laden Sie die Hue App herunter und die Steuerung Ihrer Hue Lampen liegt in Ihren Händen
- Erweiterte Steuerung: Mit der Philips Hue App können Sie jetzt bis zu 50 Hue Lampen und Leuchten sowie bis zu 12 Hue Zubehörteile zu Ihrem System hinzufügen
- Apple HomeKit kompatibel: Fordern Sie Siri auf, Ihr Licht zu dimmen, oder rufen Sie Voreinstellungen aus der Hue App ab, ohne auch nur einen einzigen Knopf zu berühren
- Intelligente Beleuchtung: Philips Hue ist kompatibel mit dem Amazon Echo Dot (3.Generation), Echo Plus und Echo Show (2.Generation)
- Kein EEL-Label notwendig: Dieses Produkt fällt nicht unter die Regelung für EEL-Label und ist daher nicht klassifiziert.
Wollt ihr so wie ich diverse Dinge und Technologien über die Fernbedienung schalten, bietet sich openHAB 2 an. Alles was ihr hierfür benötigt könnt ihr im Beitrag Smart Home openHAB 2 Raspberry Pi Installation nachlesen.
openHAB 2 Hue Dimmschalter Integration – Hue API User erstellen
Damit ihr an die relevanten Daten kommt, benötigt ihr einen Hue API User. Diesen richtet ihr direkt auf der Hue Bridge ein. Hierfür ruft die folgende Adresse über Euren Browser auf.
http://<HueBridge_IP>/debug/clip.html
Hier gebt nun folgendes ein. Als URL (1) gebt /api/ ein. Um den User zu erstellen, gebt im Message Body (2) {„devicetype“:“my_hue_app#<HueUser>“} ein. Im Anschluss drückt auf Post (3). Ihr werdet im Anschluss eine Fehlermeldung erhalten. Drückt den Knopf auf der Hue Bridge. Nun bekommt ihr den API User im Bereich Command Response (4).
openHAB 2 Hue Dimmschalter Integration – Dimmer Switch Werte ermitteln
Bevor ihr weitermacht, müsst ihr per Hue App die Fernbedienung mit der Hue Bridge verbinden.
[appbox googleplay com.philips.lighting.hue2]
[appbox appstore id1055281310]
Ich habe meine Fernbedienung einfach „Fernbedienung“ genannt. Falls ihr bereits Lampen in der Hue App für die Fernbedienung zugewiesen habt, entfernt diese bitte. Sonst kommt es später zu Verhalten, die ihr nicht versteht. Hue App und openHAB steuern gleichzeitig Lampen? Bestimmt lustig, aber nichts für mich. Seht es wie Highlander. Es kann nur einen geben. 😉
Im Anschluss benötigt ihr die Daten für den Zugriff über den Hue Dimmschalter. Hierfür ruft den folgenden Link auf. <HueBridge_IP> durch die IP Eurer Hue Bridge und <HueUserName>, den ihr über die API erstellt haben, ersetzen.
http://<HueBridge_IP>/api/<HueUserName>/sensors/
Ihr werdet nun einen recht langen Text zu sehen bekommen. Als Tipp geht wie folgt vor. Sucht als erstes im Text den Namen, den ihr der Fernbedienung gegeben habt. Bei mir ist dies Ferbedienung (unten rot). Lest anschließend von rechts nach links. Sucht den Text buttonevent (grün) und die ID (blau).
{"1":{"state":{"daylight":null,"lastupdated":"none"},"config":{"on":true,"configured":false,"sunriseoffset":30,"sunsetoffset":-30},"name":"Daylight","type":"Daylight","modelid":"PHDL00","manufacturername":"Philips","swversion":"1.0"},"2":{"state":{"buttonevent":4002,"lastupdated":"2017-09-21T07:37:44"},"config":{"on":true,"battery":100,"reachable":true,"pending":[]},"name":"Fernbedienung","type":"ZLLSwitch","modelid":"RWL021","manufacturername":"Philips","swversion":"5.45.1.17846","uniqueid":""},"3":{"state":{"status":0,"lastupdated":"2017-09-21T07:37:54"},"config":{"on":true,"reachable":true},"name":"Dimmer Switch 2 SceneCycle","type":"CLIPGenericStatus","modelid":"PHWA01","manufacturername":"","swversion":"1.0","uniqueid":"WA0001","recycle":true}}
Wenn ihr an die Sensor URL die ID hängt, also http://<HueBridge_IP>/api/<HueUserName>/sensors/2 , bekommt ihr nur die Werte für diese ID. Nun drückt auf der Hue Fernbedienung die verschiedenen Tasten und beobachtet den Wert von buttonevent.
{"2":{"state":{"buttonevent":1002,"lastupdated":"2017-09-21T07:37:44"},"config":{"on":true,"battery":100,"reachable":true,"pending":[]},"name":"Fernbedienung","type":"ZLLSwitch","modelid":"RWL021","manufacturername":"Philips","swversion":"5.45.1.17846","uniqueid":""}}
Ich habe folgende Werte ermittelt.
- 1002 an
- 4002 aus
- 3002 runter dimmen
- 2002 rauf dimmen
openHAB 2 Hue Dimmschalter Integration – Items und Regeln erstellen
Ruft als erstes die openHAB2 Addons über die folgende Adresse auf.
http://<openHAB_IP>:8080/paperui/index.html#/extensions
Unter Bindings installiert das HTTP Binding.
Nun geht auf Transformations und installiert JSONPath.
Das folgende Item wird den Wert des Buttonevent entgegenehmen und diese in der Sitemap anzeigen. So könnt ihr auch noch mal kontrollieren, ob alle Werte richtig ermittelt werden. Diesen Wert verwenden wir später in unserer Regel. Ersetzt die Werte <HueBridge_IP> und <HueAPIUser> durch eure Werte.
String HueFernbedienung "Fernbedienung [%s]" (gRaum) {http="<[http://<HueBridge_IP>/api/<HueAPIUser>/sensors/2:6000:JSONPATH($.state.buttonevent)]"}
Der Wert des Buttonevent wird Euch für die Regel allerdings nicht reichen. Warum nicht? Mir ist es auch erst im Nachhinein aufgefallen. Ich habe eine Lampe über die Fernbedienung eingeschaltet. Ich habe über Alexa die gleiche Lampe ausgeschaltet und wieder eingeschaltet. Ein neuer Tastendruck auf Ein auf der Hue Fernbedienung hat den Wert nicht geändert und so hat meine erste Regel nicht richtig funktioniert. Gelöst habe ich es durch eine zweites Item, welches den letzten Update des Sensors aus der API abgreift.
String HueFernbedienung_upd "Update [%s]" {http="<[http://<HueBridge_IP>/api/<HueAPIUser>/sensors/4:6000:JSONPATH($.state.lastupdated)]"
Nun könnt ihr per Regel auf den Wert von buttonevent aus der API reagieren. Für unser Projekt schalte ich über zwei Knöpfe eine Steckdose. Über zwei weitere alle Lampen ein / aus.
import java.lang.String var String lastUpd rule "Fernbedienung" when Item HueFernbedienung_upd changed then if ( HueFernbedienung_upd.state.toString != lastUpd ) switch HueFernbedienung.state.toString { case "2002": sd_wz.sendCommand(ON) case "3002": sd_wz.sendCommand(OFF) case "1002": { li_sz_dim.sendCommand(ON) li_wz_dim.sendCommand(ON) li_ez_dim.sendCommand(ON) li_ku_dim.sendCommand(ON) } case "4002": { li_sz_dim.sendCommand(OFF) li_wz_dim.sendCommand(OFF) li_ez_dim.sendCommand(OFF) li_ku_dim.sendCommand(OFF) } } lastUpd = HueFernbedienung_upd.state.toString end
Findet ihr heraus wie die Regel arbeitet? Bin gespannt auf Eure Kommentare.
So einen Schalter habe ich noch rumliegen. Danke für die Idee.
Nur: Verstehe ich das richtig, dass du per http-Binding an den rangehst?
Bedeutet dass, dass im Sekundentakt der Zustand abgefragt werden muss und permanent http-Requests laufen müssen?
Hallo Michael,
ja, leider ist das so wie Du schreibst. Intervall muss man überlegen, aber jeder Verlängerung verzögert eben das Schalten über die Regel. Geht vielleicht auch eleganter. Aber mit der Möglichkeit über die Bridge bei Änderung einen Wert an openHAB zu senden habe ich mich nicht beschäftigt. Die Zeit ist aktuell sehr knapp bemessen, da wir einige Bewerbungen auf http://myfreehome.de haben. Solche Beiträge sind dann eher Nebensache =).
Eventuell meldet sich hier ja noch ein Hue Papst, der weiß wie man Werte an andere Geräte sendet.
Grüße
Thomas
[…] Smart Home openHAB 2 Hue Dimmschalter Integration […]
Hallo
Toller Artikel aber bei mir klappt was noch nicht so ganz.
String HueFernbedienung "Fernbedienung [%s]" (gRaum) {http="<[http:///api//sensors/2:6000:JSONPATH($.state.buttonevent)]"}
Hier habe ich bei mir aus 2:6000 5:6000 abgeändert, weil das die Zahl war, die ich vorher ermittelt hatte ( Ich hoffe, das war richtig). Das gleiche bei der zweiten Codezeile.Bei rules zeigt es mir aber immer den Fehler an
The method or field lastUpd is undefined (in beiden Codezeilen in denen lastUpd vorkommt.
Habe ich etwas übersehen?
Mit freundlichen Grüßen
Christian
Hallo Christian,
ja, es ist richtig, die Zahl 2 zu ändern. ID wie im Beitrag beschrieben suchen unter der URL.
Du hast aber einen Fehler in meiner Regel entdeckt. Da fehlte noch die Datendeklartion. Die habe ich übersehen.
import java.lang.String
var String lastUpd
Ist angepasst.
Danke für deine Rückmeldung
Thomas
Danke für die schnelle Hilfe, werde ich morgen direkt testen 🙂
Mit freundichen Grüßen
Christian
Funktioniert prinzipiell mit Deklaration.
Ich musste auch die ID von „4“ auf „2“ abändern. Warum Du bei der Update-Variablen state „4“ abfragst, habe ich allerdings nicht verstanden. Sind die anderen IDs nicht die Lampen und nicht die Fernbedienung?
Zwei Sachen verstehe ich aktuell bei mir noch nicht:
1) Die Buttons wechseln fleißig von 1002 auf 2002 etc und nach Ändern der ID auf „2“ bekomme ich auch die richtigen Zeitstempel.
Der Status wechselt ab und zu auf 1000 bzw. 2000 und ich weiß noch nicht warum. Kann das jetzt am zu schnellen drücken der Tasten für den Test liegen? Habt ihr das auch?
2) Die Reihenfolge in der Regel passt nicht zu den hinterlegten IDs.
case 2002 wird ausgeführt, wenn ich 3002 drücke…
Peter
Hallo Peter,
1) Ich habe das Phänomen auch und habe es folgendermaßen gelöst: Ich nehme vom Status nur das erste Zeichen und mache den switch nur über 1, 2, 3 und 4:
var Button = HueFernbedienung.state.toString().substring(0,1)
switch Button {
case "1": { // 1002 AN
// do something
}
case "2": { // 2002 DIMMER+
// do something
}
case "3": { // 3002 DIMMER-
// do something
}
case "4": { // 4002 AUS
// do something
}
default: {
// do something
}
}
2) Das scheint daran zu liegen, dass sich HueFernbedienung_upd und HueFernbedienung zu unterschiedlichen Zeiten ändern. Dies löse ich durch das Design Pattern: Rule Latching, also mit einem lock() am Anfang und einem unlock() am Ende. Am Anfang der Rule habe ich außerdem ein
Thread::sleep(250)
platziert.Damit funktioniert es bei mir sehr zuverlässig!
Viele Grüße,
Michael
Danke!
Super Tutorial.
Hat etwas gedauert aber funktioniert. Funktioniert übrigens auch mit den Hue Bewegungsmeldern, die gab es mal günstig bei Amazon, wenn nichts Zeitkritisches geschaltet werden soll durchaus eine alternative.
String HueMotion „Motion [%s]“ {http=“<[http:///api//sensors/15:6000:JSONPATH($.state.presence)]“}
String HueMotion_upd „M_Update [%s]“ {http=“<[http:///api//sensors/15:6000:JSONPATH($.state.lastupdated)]“}
MfG
Dennis
Hallo Dennis,
Klasse, danke für die Rückmeldung und Tipps.
Beste Grüße
Thomas
Hallo,
guter Beitrag.
Ich beschäftige mich auch schon länger mit diesem Thema. Wie würde eine Lösung mit direkter Zigbee Einbindung der Fernbedienung funktionieren. (Raspi mit Openhub und Zigbee USB Stick). Konkret geht es um die Paulmann Zigbee FB?
Viele Grüße
Michael