Smart Home openHAB Installation Teil 7 – Beleuchtung


Update 12.11.2020

Ab Dezember  2020 habe ich das Glück, ein Eigenheim zu besitzen. Mit dem Umzug werde ich mein Smart Home zukünftig mit Home Assistant steuern, sodass die Serie Smart Home openHAB Installation nicht länger fortgeführt und gepflegt wird.


Im siebten Teil der Reihe Smart Home openHAB Installation geht’s endlich an die Konfiguration der Gerätesteuerung. Ich widme mich als erstes dem Thema Beleuchtung. Hierzu verwende ich Philips Hue Komponenten. Zwar sind diese nicht gerade günstig, aber das System ist lange auf dem Markt, relativ ausgereift, durch das ZigBee Protokoll lassen sich auch kostengünstigere Komponenten in das System integrieren und es ist ein Binding für openHAB 2 verfügbar. Die Beleuchtung möchte ich zudem per Sprache mit Amazon Echo steuern. Die dafür nötigen Konfigurationen sind im Folgenden mit roter Schrift dargestellt.

Bridge Konfiguration

Nach der ersten Inbetriebnahme der Hue Bridge konfiguriere ich einige Einstellungen, um die Bridge meiner Umgebung anzupassen. Dazu gehört hauptsächlich die Vergabe einer festen IP-Adresse. Statt diesem Schritt lässt sich natürlich auch eine DHCP Reservierung für die MAC der Bridge anlegen, damit sie immer die gleiche IP Adresse bekommt.

API-User

Als ersten Schritt lege ich einen API-User an. Dieser wird später noch benötigt, z.B. für die Konfiguration einer statischen IP.

Zur Anlage des Users nutze ich im Browser die URL des Clip-Formulars der Hue Bridge:

http://<IP-Adresse>/debug/clip.html

Bevor man den User anlegen kann, muss an der Bridge der Link Button geklickt werden. Danach hat man 30 Sekunden Zeit, den User anzulegen. Den API-User lege ich innerhalb der Zeit mit folgenden Werten an:

URL

/api

Body

{ "devicetype": "<API-User-Display-Name>#<API-User-Name>" }                  /* neuere API Versionen */
{ "devicetype": "<API-User-Display-Name>", "username":"<API-User-Name>" }    /* ältere API Versionen */

Method

POST

Wird der User erfolgreich angelegt, wird folgender Wert im Command Response Feld ausgegeben:

{ "success": { "username": "<API-User-String (40-stellig)>" } }

IP Konfiguration

Server und Controller Komponenten sollten möglichst eine feste IP konfiguriert haben. Im Falle der Hue Bridge ist dies leider nicht über die GUI möglich, sondern ich konfiguriere die IP per API. Auch für diese Konfiguration dient das o.g. Clip-Formular. Dort trage ich folgende Werte ein:

URL

/api/<API-User-String (40-stellig)>/config

Body

{ "ipaddress":"<neue IP-Adresse>", "dhcp":false, "netmask": "255.255.255.0", "gateway": "<Gateway IP-Adresse>" }

Method

PUT

Bei erfolgreicher Konfiguration wird folgende Command Response ausgegeben:

{ "success": { "/config/dhcp": false } },
{ "success": { "/config/ipaddress": "<neue IP-Adresse>" } },
{ "success": { "/config/netmask": "255.255.255.0" } },
{ "success": { "/config/gateway": "<Gateway IP-Adresse>" } }

Nach 1-2 Minuten ist die Hue Bridge über die neue IP-Adresse erreichbar.

Leuchtmittel

Aktuell habe ich in der Wohnung ausschließlich LED Lampen mit GU10 Sockel. Diese habe ich durch GLEDOPTO GU10 Leuchtmittel ausgetauscht. Einerseits sind die Leuchtmittel erheblich günstiger, als Philips, andererseits waren das die einzigen GU10 Leuchtmittel, mit einem großen 120 Grad Abstrahlwinkel. Die Erkennung im Hue System war eigentlich kein Problem, man muss die Leuchtmittel i.d.R. nur vorher einmal resetten. Dazu müssen die Leuchtmittel lediglich 5 mal ein- und ausgeschaltet werden, wobei zwischen jedem Schaltvorgang 2 Sekunden gewartet werden muss. Zur Bestätigung des erfolgreichen Resets blinken die Leuchtmittel dann 4 mal. Wer allerdings auf Drittanbieter ausweicht, muss mit ein paar Einschränkungen rechnen. Im Fall der GLEDOPTOs ist dies einerseits, dass sich die Firmware der Leuchtmittel nicht über die Hue App aktualisieren lässt und andererseits, dass das Einschaltverhalten (was passiert, wenn der „echte“ Lichtschalter versehentlich betätigt wurde) nicht konfiguriert werden kann. Da ich jedoch alle ursprünglichen Lichtschalter unbedienbar gemacht habe (siehe unten, Thema „Schalter Montage“), stört mich das nicht wirklich.

Schalter Montage

Um die Lampen zu schalten, habe ich mir Philips Hue Dimmer Schalter zugelegt. Da stellt sich jedoch die Frage, wie vermeidet man, dass der ursprüngliche Lichtschalter betätigt und die ganze schöne Installation ausgeschaltet wird. Wer in Miete wohnt kann die Schalter i.d.R. nicht einfach von einem Elektriker durchschleifen und ausbauen lassen. Abhilfe schaffen Adapter, bei denen nur der Schaltwippenaufsatz und der Rahmen des ursprünglichen Schalters ersetzt werden müssen. Die eigentliche Schalttechnik im Inneren bleibt erhalten und der Ursprungszustand kann ganz einfach beim Auszug wieder hergestellt werden. Ich habe mir daher für Einzelschalter Samotech SM201 Adapter und für Doppelschalter Samotech SM202 Adapter mit passender Blindabdeckung zugelegt. Wer bei Doppelschaltern auch wieder 2 eigene Dimmerschalter benötigt, kann die ursprünglichen Schalter z.B. durch Gira Fläche-Serie Rahmen mit Blindabdeckung unbrauchbar machen und sich eine Doppelhalterung daneben schrauben.

openHAB 2 Binding

Das openHAB Binding wird wie gewohnt über die PaperUI oder über HABmin installiert. Im Regelfall erscheint dann kurz darauf die Bridge in der PaperUI Inbox. Diese verbinde ich kurz, damit ich anschließend im Thing den API User auslesen und notieren kann, der für openHAB verwendet wird. Danach lösche ich die Bridge wieder aus Konfiguration, damit ich sie über die üblichen Things-Dateien händisch einbinden kann.

Nach der Installation des Bindings geht’s an die Konfiguration der Bridge, der Leuchtmittel und der Schalter/Sensoren. Im folgenden Beispiel verbinde ich die Hue Bridge mit der vorher konfigurierten IP und dem API User und lege drei Leuchtmittel light1, light2 und light3 , sowie einen Dimm-Schalter switch1 und einen Bewegungsmelder motion1 an. Die IDs der Leuchtmittel und des Dimm-Schalters erhält man z.B. aus dem Clip-Formular der Hue Bridge:

http://<Hue-Bridge-IP-Adresse>/debug/clip.html

Eingabe

URL

/api/<API-User-String (40-stellig)>/lights   -> für Leuchtmittel
/api/<API-User-String (40-stellig)>/sensors  -> für Schalter/Bewegungsmelder

Method

GET

Im Ausgabefenster werden nun alle benötigten Infos zu den Lights/Sensors angezeigt. Hier ein Beispiel für ein Leuchtmittel und einen Dimmer-Switch (die rot markierten Wert ist die ID):

{  "1": {  ..., "type": "Extended color light", "name": "Light 1", "modelid": "GL-S-007Z", "manufacturername": "GLEDOPTO", "productname": "Extended color light", ...  }  }
{  "1": {  ... , "name": "Dimmer Switch 1", "type": "ZLLSwitch", "modelid": "RWL021", "manufacturername": "Signify Netherlands B.V.", "productname": "Hue dimmer switch", ...  }  }

Hat man so die IDs zur Hand, kann die Konfiguration in openHAB durchgeführt werden.

$OPENHAB_CONF/things/hue.things

Bridge  hue:bridge:hue01  "Bridge: HUE01"  [ ipAddress="<Bridge-IP>", userName="<API-User-String>", pollingInterval="15", sensorPollingInterval="1000" ]
{
   0210   light1    "Light: Light 1" @ "Room 1"              [ lightId="1" ]
   0210   light2    "Light: Light 2" @ "Room 1"              [ lightId="2" ]
   0210   light3    "Light: Light 3" @ "Room 1"              [ lightId="3" ]
   0820   switch1   "Sensor: Dimmer Switch 1" @ "Room 1"     [ sensorId="1" ]
   0107   motion1   "Sensor: Motion Detector 1" @ "Room 1"   [ sensorId="2" ]
}

$OPENHAB_CONF/items/hue.items

Item-Groups

Viele meiner Leuchtmittel sind GU10 Spots. Dadurch benötige ich als erstes Gruppen, da ich nicht jedes Leuchtmittel einzeln schalten möchte. Ein Vorteil der Gruppen ist weiterhin, dass man Leuchtmittel entfernen und hinzufügen kann, ohne gleich unzählige Änderungen vornehmen zu müssen. Wichtig bei den Gruppen ist es, openHAB mitzuteilen, welche Funktion die Gruppe hat. Das wird durch die jeweiligen Erweiterungen Switch, Dimmer und Color erreicht.

Hier ein Beispiel:

Group                      Group_Lights1             "Light Group: Lights 1"                     <light>                           { alexa="Endpoint.Light" [category="LIGHT"] }
Group:Switch:OR(ON, OFF)   Group_Lights1_OnOff       "Light Group: Lights 1 On/Off"              <light>        (Group_Lights1)    { alexa="PowerController.powerState" [category="LIGHT"] }
Group:Dimmer:AVG           Group_Lights1_Dimmer      "Light Group: Lights 1 Dimmer"              <slider>       (Group_Lights1)    { alexa="BrightnessController.brightness" [category="LIGHT"] }
Group:Color                Group_Lights1_Color       "Light Group: Lights 1 Color"               <colorwheel>   (Group_Lights1)    { alexa="ColorController.color" [category="LIGHT"] }
Group:Dimmer:AVG           Group_Lights1_ColorTemp   "Light Group: Lights 1 Color Temperature"   <slider>       (Group_Lights1)    { alexa="ColorTemperatureController.colorTemperatureInKelvin" [category="LIGHT"] }

Items (Lights)

Nachdem mit Gruppen die Vorbereitungen für die Steuerung abgeschlossen sind, werden nun die Items für die Light Channels konfiguriert und die vorher angelegten Gruppen bei Bedarf zugewiesen. Für ein beispielhaftes Farbleuchtmittel light1 an der Bridge hue01 mit der Thing-ID hue:0210:hue01:light1 sieht eine Konfiguration dann wie folgt aus (light2 und light3 entsprechend analog):

Switch   Light1_OnOff       "Light: Light 1 On/Off"              <light>        (Group_Lights1_OnOff)       { channel="hue:0210:hue01:light1:color" }
Dimmer   Light1_Dimmer      "Light: Light 1 Dimmer"              <slider>       (Group_Lights1_Dimmer)      { channel="hue:0210:hue01:light1:color" }
Color    Light1_Color       "Light: Light 1 Color"               <colorwheel>   (Group_Lights1_Color)       { channel="hue:0210:hue01:light1:color" }
Dimmer   Light1_ColorTemp   "Light: Light 1 Color Temperature"   <slider>       (Group_Lights1_ColorTemp)   { channel="hue:0210:hue01:light1:color_temperature" }
String   Light1_Alert       "Light: Light 1 Alarm"               <light>                                    { channel="hue:0210:hue01:light1:alert" }
Switch   Light1_Effect      "Light: Light 1 Effect"              <light>                                    { channel="hue:0210:hue01:light1:effect" }

Items (Sensors)

Neben der eigentlichen Konfiguration für die Leuchtmittel, lassen sich auch Sensoren (Schalter, Bewegungsmelder) konfigurieren. Bei den Dimm-Schaltern möchte ich mir in der Sitemap den Batterie-Stand ausgeben lassen. Beim Bewegungsmelder möchte ich den Anwesenheitsstatus anzeigen und ebenfalls den Batterie-Stand. Deswegen lege ich mir auch dafür Items für die Sensor Channels an.

Number   Switch1_BatteryLevel   "Sensor: Dimmer Switch 1 Battery Level [%d %%]"     <batterylevel>   { channel="hue:0820:hue01:switch1:battery_level" }
Switch   Motion1_Presence       "Sensor: Motion Detector 1 Presence"                <presence>       { channel="hue:0107:hue01:motion1:presence" }
Number   Motion1_BatteryLevel   "Sensor: Motion Detector 1 Battery Level [%d %%]"   <batterylevel>   { channel="hue:0107:hue01:motion1:battery_level" }

Items (Scenes)

Neben der eigentlichen Lichtsteuerung möchte ich auch Szenen schalten können, die bestimmte Einstellungen automatisch durchführen. Daher lege ich mir für jede Szene ein neues Item ohne Konfiguration eines Channels an. Die dazugehörige Aktion wird anschließend über die Rules definiert. Im folgenden Beispiel lege ich ein Item für den Nachtmodus und einen für eine blau-weiß-blaue „Bayern-Szene“ an:

Switch   Scene_Lights1_Nightmode   "Light Scene: Lights 1 Nightmode"   <colorpicker>
Switch   Scene_Lights1_Bavaria     "Light Scene: Lights 1 Bavaria"     <colorpicker>

$OPENHAB_CONF$/rules/hue.rules

Um das vorher angelegte Scene-Items nutzen zu können, benötige ich eine Rule die definiert, was zu tun ist, wenn das Item geschaltet wird. Im Beispiel der Nightmode Szene sollen die Leuchtmittel auf Rot bei 30% Dimmung geschaltet werden. Dazu schaut die Regel, ob das Item auf ON geschaltet wird und sendet dann ein HSB Kommando (Hue, Saturation, Brightness) an die Lichtgruppe Lights_1. Abschließend wird der Status des Items wieder auf OFF gesetzt, damit es erneut geschaltet werden kann.

rule "Scene Lights 1: Nightmode"
when
   Item Scene_Lights1_Nightmode received command ON
then
   Group_Lights1_Color.sendCommand(new HSBType(new DecimalType(0), new PercentType(100), new PercentType(30)))
   Scene_Lights1_Nightmode.postUpdate(OFF)
end

Möchte man nicht die Gruppe zur Schaltung verwendet oder z.B. für 3 Leuchtmittel auch zwei oder drei unterschiedliche Einstellungen verwenden, lassen sich die Items auch direkt ansteuern. Im folgenden Beispiel schalte ich alle Leuchtmittel auf blau und stelle die Sättigung des zweiten Leuchtmittels aber auf 10%.

rule "Scene Lights 1: Bavaria"
when
   Item Scene_Lights1_Bavaria received command ON
then
   Light1_Color.sendCommand(new HSBType(new DecimalType(240), new PercentType(100), new PercentType(100)))
   Light2_Color.sendCommand(new HSBType(new DecimalType(240), new PercentType(10), new PercentType(100)))
   Light3_Color.sendCommand(new HSBType(new DecimalType(240), new PercentType(100), new PercentType(100)))
   Scene_Lights1_Bavaria.postUpdate(OFF)
end
Allgemeine Infos zur Hue Konfiguration

HSB Wert (Hue, Saturation, Brightness)

Hue (Farbwert):
Die Farbwerte werden als Dezimalwert zwischen 0 und 360 definiert. Dabei gilt:

0   = rot
60  = gelb
120 = grün
180 = türkis
240 = blau
300 = lila
360 = rot

Saturation (Sättigung), Brightness (Helligkeit)

Die Werte für Saturation und Brightness werden als Prozentwert zwischen 0 und 100 angeben.

Farbtemperatur

Der Wert für die Farbtemperatur wird Prozentwert zwischen 0 und 100 angeben.  Dabei gilt, je höher der Wert, desto wärmer.

Update 15.05.2020

Seit der Addon Version 2.5.5 von openHAB 2 A können nun auch Gruppen (Rooms, Zones, LightGroups), die z.B. über mobile Apps angelegt wurden, direkt in openHAB addressiert werden. Die umständliche und fehleranfällige Konfiguration mit Item-Gruppen entfällt. Daher hier eine kurze Anleitung, wie das group Thing funktioniert und in openHAB 2 eingebunden werden kann.

Für die direkte Adressierung von Gruppen benötigt man deren IDs aus der Hue Bridge. Diese erhält man wieder aus dem Clip-Formular der Hue Bridge:

http://<Hue-Bridge-IP-Adresse>/debug/clip.html

Eingabe

URL

/api/<API-User-String (40-stellig)>/groups

Method

GET

Im Ausgabefenster werden nun alle benötigten Infos zu den Gruppen angezeigt. Hier ein Beispiel (der rot markierte Wert ist die ID):

{  "1": {  "name": "Room 1", "lights": [ "1", "2", "3" ], "type": "Room", ...  }  }

Die Konfiguration erfolgt dann in den Items und den Things wie folgt:

$OPENHAB_CONF/things/hue.things

Bridge hue:bridge:hue01 "Bridge: HUE01" [ ..... ]
{
   group  group1    "Light: Group 1" @ "Room 1"        [ groupId="1" ]
}

$OPENHAB_CONF/items/hue.items

Group    Group1             "Light: Group 1"                     <light>        { alexa="Endpoint.Light" [category="LIGHT"] }
Switch   Group1_OnOff       "Light: Group 1 On/Off"              <light>        { channel="hue:group:hue01:group1:color", alexa="PowerController.powerState" [category="LIGHT"] }
Dimmer   Group1_Dimmer      "Light: Group 1 Dimmer"              <slider>       { channel="hue:group:hue01:group1:color", alexa="BrightnessController.brightness" [category="LIGHT"] }
Color    Group1_Color       "Light: Group 1 Color"               <colorwheel>   { channel="hue:group:hue01:group1:color", alexa="ColorController.color" [category="LIGHT"] }
Dimmer   Group1_ColorTemp   "Light: Group 1 Color Temperature"   <slider>       { channel="hue:group:hue01:group1:color_temperature", alexa="ColorTemperatureController.colorTemperatureInKelvin" [category="LIGHT"] }

Noch ein Hinweis:
Standardmäßig existiert eine Gruppe All lights vom Typ LightGroup auf der Hue-Bridge. Die Gruppe hat die GroupID „0“ und wird von der Bridge selbst verwaltet.

Quellen:
https://www.openhab.org/
https://www.openhab.org/docs/ecosystem/alexa/

2 Antworten

  1. Max2020 sagt:

    Congratulations, I carefully and passionately followed all your articles on OpenHab and I managed to make everything work.
    Your instructions are clear and precise and I have learned a lot.
    I will continue to follow you for other topics, I consider you a good reference.
    Thanks

  2. Vielen Dank für den wertvollen Beitrag! Ausgezeichnet Blog.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.