Werbung
Hinweis: Diese Seite enthält Werbelinks

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).

  • Produkt
  • Features
  • Fotos

Philips Hue Wireless Dimming Schalter, komfortabel dimmen ohne Installation, Standard Verpackung 8718696506943,...

Last update was on: 27. März 2023 15:50

Eine weitere Möglichkeit ist der Hue Tap. Sieht schön aus. Ist mir aber zu teuer.

  • Produkt
  • Features
  • Fotos

Philips Hue Tap, kabelloser, intelligenter Schalter, Zubehör für Ihr Philips Hue System

& Versandkostenfrei
Last update was on: 27. März 2023 15:50
99.00

Weitehin braucht ihr eine Hue Bridge.

  • Produkt
  • Features
  • Fotos

Philips Hue Bridge, zentrales, intelligentes Steuerelement des Hue Systems

Last update was on: 27. März 2023 15:50
64.50

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).

Smart-Home-openHAB-2-Hue-Binding-Remote-API-User-1

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. 😉

Smart-Home-openHAB-2-Hue-Fernbedienung

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

Smart-Home-openHAB-2-Hue-Dimmschalter

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.

Smart-Home-openHAB-2-HTTP-Binding

Nun geht auf Transformations und installiert JSONPath.

Smart-Home-openHAB-2-Hue-Binding-Remote-JSONpath-Transformation-1

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.

11 Comments
  1. Reply
    Michael Aschenborn 9. Oktober 2017 at 8:06

    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

  2. […] Smart Home openHAB 2 Hue Dimmschalter Integration […]

  3. 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

  4. 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

  5. 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

  6. 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

    Hinterlasse einen Kommentar

    Smarthome Training and Tutorials
    Logo