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/
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
Vielen Dank für den wertvollen Beitrag! Ausgezeichnet Blog.
Du schreibst, dass Du in Deinem neuen Haus Home Assistant einsetzt.
Was ist bei Home Assistant besser, bzw. warum hast du das System gewechselt?
Mein OpenHab 2 funktioniert, ich muss aber öfter daran basteln, damit alles läuft.
Ist Assistant vielleicht wartungsarmer?
Hallo Ralf
Vorab, OpenHAB ist meiner Erfahrung nach ein sehr gutes und stabiles System für die Hausautomatisierung. Wenn es mal läuft, gibt es eigentlich keinen Grund, zu wechseln. Bei mir hat den Ausschlag gegeben, dass ich durch den Umzug eh alles neu einrichten muss, weswegen ich die einzelnen Systeme OpenHAB, ioBroker und Home Assistant im Vorfeld einfach mal ausprobiert habe und mich dann für das System entschieden habe, was mir persönlich und subjektiv besser gefällt.
Letztlich waren es nur wenige Punkte, die die Entscheidung zu Gunsten von Home Assistant gebracht haben:
Dennoch gibt es auch Punkte, die bei Home Assistant nicht oder nicht so gut implementiert sind. So verwende ich z.B. OpenHAB Astro Binding. So detailliert gibt’s das für Home Assistant nicht, aber mir reicht es, das zumindest Sonnenaufgang/-untergang, Mondaufgang/-untergang und Jahreszeiten/Sternzeichen vorhanden sind.
Was das basteln angeht: je nach Ausprägung deiner Komponenten und deren Anzahl geht kein System auf die Dauer ohne etwas Bastelarbeit. Ich hatten in OpenHAB ja eigentlich nur die Philips Hue Beleuchtung, Media Komponenten und ein paar Spielereien drin. Da hielt sich das in Grenzen. Wie das in Zukunft mit Beleuchtung, Heizung, Fenstersensoren und sonstigen Komponenten wird, kann ich selbst noch nicht abschätzen.
Gruß
Andreas