openHAB :: Konfiguration

konfiguration

Die Konfigurationen von openHAB legen fest, welche Aktoren und Sensoren eingesetzt werden. Zudem lassen sich mit diesen mehr oder weniger komplexe Regelwerke erstellen, um ereignisabhängige oder zeitgesteuerte Aktion durchführen zu lassen. Der wohl wichtigste Konfigurationsbereich bildet die sogenannte Sitemap; in dieser wird die gesamte Darstellung der openHAB-Weboberfläche festgelegt und nach den eigenen Wünschen angepasst.

 

Verfügbare Artikel zu openHAB

little_blue_dot Einleitunglittle_blue_dot Einbinden der Internetgeschwindigkeitlittle_blue_dot RFID-Lesegerät einbinden
little_blue_dot Installationlittle_blue_dot Präsenzerkennung via Bluetooth und Pinglittle_blue_dot Einbinden von DS18B20-Sensoren
little_blue_dot Konfigurationlittle_blue_dot Kleines Netzwerkmonitoringlittle_blue_dot ical-Abfallkalender einbinden
little_blue_dot Reverse-Proxy für OpenHABlittle_blue_dot Einbinden von LG-Fernsehern [Update]little_blue_dot openHAB als Wecker
little_blue_dot Datenspeicherung und Statistikenlittle_blue_dot Einbinden Schaltern und Kontaktenlittle_blue_dot Einbinden von Bewegungssensoren
little_blue_dot Regeln planen und konfigurierenlittle_blue_dot Einbinden von Funksteckdosen (433 MHz)little_blue_dot Einbinden einer FritzBox
little_blue_dot Einbinden von USB-Steckdosenleisten (SIS-PMS)little_blue_dot Infrarotgesteuerte Geräte einbindenlittle_blue_dot Sprachausgabe auf einem Raspberry
little_blue_dot Einbinden von Temperatursensorenlittle_blue_dot Steuerung mit NFC-Tagslittle_blue_dot Schaltbare Steckdosenleiste mit Relais
little_blue_dot Externer Zugriff mit my.openhab

 

 

Drei Hauptbereiche

Die Konfiguration von openHAB setzt sich (neben vielen weiteren) aus drei Hauptbereichen zusammen. Erst wenn diese konfiguriert und mit Inhalten befüllt wurden, lässt sich openHAB praktikabel nutzen und bedienen. Nennt man beispielsweise ein Phillips Hue Set sein Eigen, wird dieses zunächst als “item” mit einem eindeutigen Namen definiert. Anschließend wird dieses “item” in die “sitemap” platziert, um auf der Weboberfläche an der gewünschten Stelle angezeigt zu werden. Dort lassen sich die Lampen nun ein- oder ausschalten oder dimmen. Letztendlich kann eine Regel erstellt werden, dass die Lampen des Sets jeden Morgen um 08:42 Uhr eingeschaltet werden.

 

Der Bereich “items”

In dieser Konfigurationsdatei werden alle “Einzelteile” definiert, die einen Teil der Hausautomatisierung darstellen. Dazu gehören sämtliche Sensoren und Aktoren, unabhängig davon, mit welchem System diese angebunden sind. Sogar Daten aus dem Internet oder von der Shell können mit dem entsprechenden Binding ausgelesen bzw. gesteuert werden.
Auch werden hier sog. Dummies definiert, die zwar als Items gehandhabt werden, aber hinter denen kein realer Aktor oder Sensor steckt. Dies dient für interne Schaltungen und Abfragen. Beispielhaft können die Präsenzen von zwei Personen in einem Haushalt zu einer totalen Präsenz (ist überhaupt Jemand da?) zusammengefasst werden.

Ohne installierte Addons stehen grundsätzlich folgende Datentypen zur Verfügung, die als Item definiert werden können:

Datentyp Definition Beispiel
Number Einfache Zahl, z.B. Temperaturen 1
Contact Kontaktschalter, z.B. Reed-Kontakte.
Dient nur zur Anzeige
2
Switch Schalter, zeigt Schaltstatus und
kann Items ein- und ausschalten
3
Dimmer Legt prozentuale Werte fest,
beispielsweise die Lichthelligkeit
4
String Gibt einfachen Text aus, dieser kann
jedoch auch Variablen enthalten
8
Color Setzt ein Item auf einen frei
wählbaren RGB-Wert
5
Rollershutter Legt ähnlich wie “Dimmer” den
prozentualen Wert eines Rollos fest
6
Group Gruppiert mehrere Items, um
Gruppenschaltungen zu realisieren
7

 

Aufbau der Itemdefinition

Der generelle Aufbau einer Itemdefinition unterliegt immer dem gleichen Schema. Die erste Spalte legt den Namen des Items fest, wie er auch an anderen Stellen wieder verwendet wird. Anschließend wird die Ausgabe definiert, die bei Verwendung dieses Items auf der Sitemap erscheint. In diesem Fall wird der definierte Text nebst dem eigentlichen Inhalt, der Temperatur, ausgegeben. Die nächste Spalte definiert das Symbol, welches zu diesem Item dargestellt wird. Eine Anzahl an bereits vorhandenen Symbolen befindet sich nach der Installation im Ordner “webapps/images”. Anschließend wird in der folgenden Spalte in spitzen Klammern die Gruppe festgelegt, zu welcher dieses Item gehört. Erst die letzte Spalte definiert nun die eigentlichen Datenwerte.

 

Befüllung der Daten

Es stellt sich die Frage, wie nun die definierten Items mit Daten(-werten) befüllt werden. Dazu gibt es unterschiedliche Möglichkeiten. Entweder ist der Datenursprung direkt in der Definitionszeile festgelegt oder wird von extern geändert. Wurde der Ursprung der Daten im Item festgelegt, wird gemäß dieser Angaben verfahren und openHAB prüft beispielsweise alle 5 Minuten, ob sich der Wert eines Sensors geändert hat. Alternativ kann ein Itemwert auch von außerhalb geändert werden. Zum Einen durch eine Regel, die den Wert des Items ändert oder zum Anderen durch die sogenannte REST-API, durch die mittels bestimmter HTTP-Aufrufe Werte gesetzt werden. Dazu ein Beispiel:

/usr/bin/curl --header "Content-Type: text/plain" --request POST --data "ON" http://IP_VON_OPENHAB/rest/items/PIR_WZ

 

Der Itemtyp “Number”

Dieser Datentyp kann einfache Zahlen erfassen. Als einfaches Beispiel kann dies eine Temperatur sein, die aus angeschlossenen Sensoren ausgelesen oder aus dem Internet bezogen werden.
Im ersten Beispiel wird die Außentemperatur online vom Yahoo-Wetterdienst ausgelesen und in konfigurierbaren Abständen in das Item “Weather_Temperature” gelegt:

Number Weather_Temperature "Outside Temperature [%.1f °C]" <temperature> (Weather_Chart) { http="<[http://weather.yahooapis.com/forecastrss?w=638242&u=c:60000:XSLT(yahoo_weather_temperature.xsl)]" }

 

Hier ein weiteres Beispiel:

Number WTR_AX "Water Level [%s]" <cistern> (GRP_WTR) { exec="<[/scripts/wtrlvl.sh 235 5:60000:REGEX((.*?))]" }

In dieser Definition soll der Wasserstand eines Beckens ermittelt werden. Dazu wird alle 60 Sekunden ein Script (wtrlvl.sh) mit zwei Attributen (235,5) aufgerufen und die Ausgabe in das Item (WTR_AX) geschrieben.

 

Der Itemtyp “Switch”

Der Typ Switch ist der am häufigst genutzten. Sämtliche Geräte oder Lampen lassen sich mit diesem Typ ein- und ausschalten. Zudem lässt sich dieser Typ gern zweckentfremden, beispielsweise um wie folgt gezeigt die Lautstärke des Fernsehers zu ändern:

Switch TVC65_VOLUME "Lautstärke" <volume> { exec=">[ON:/scripts/lgcommander.sh 24] >[OFF:/scripts/lgcommander.sh 25]", autoupdate="false" }

Grundsätzlich jedoch schaltet man, wie bereits erwähnt, lediglich Geräte ein und aus, wofür ich auch im folgenden Beispiel eigene Scripte verwende:

Switch XBOX <xbox> (grp_SPIEL) { exec=">[ON:/scripts/fsd.sh 11101 1 1] , >[OFF:/scripts/fsd.sh 11101 1 0]" }

 

Der Itemtyp “Group”

Wurden bei der bisherigen Definition der Items sinnvolle Gruppierungen geschaffen, ist es mit dem Itemtyp “Group” möglich, ganze Gruppen zu schalten. Befinden sich beispielsweise alle Lichter in der Gruppe “All”, können diese mit dem folgenden Item zugleich ein- und ausgeschaltet werden:

Group:Switch:OR(ON, OFF) Lights "All Lights [(%d)]" (All)

Die Angabe “%d” zeigt zudem die Anzahl der eingeschalteten Lichter auf der entsprechenden Stelle der Sitemap an.

 

Der Itemtyp “String”

In diesen Datentyp lässt sich jegliche Information setzen, die lediglich der Informationsausgabe dienen und mit keinem anderen Itemtyp abgebildet werden können. Im folgenden Beispiel wird der aktuell abgespielte Titel einer Logitech Squeezebox in das Item “RDO61_TITLE” gelegt:

String AW_RDO61_TITLE      "Titel [%s]" <nowplaying> { squeeze="rdo61:title" }

Dazu ist natürlich das entsprechende Addon notwendig. Des Weiteren wird dieser Typ oft genutzt, um wie bereits oben beschrieben, durch Regeln oder externe Aktionen mit Inhalten befüllt zu werden.

 

Der Bereich “sitemap”

In dieser Konfigurationsdatei wird die eigentliche Darstellung nach außen hin (Webseite, Smartphone-/Tablet-App) definiert.
Hier werden neben der Definition von Räumen, Etagen, Häusern und sonstigen Verschachtelungen die Items aus dem vorhergehenden Punkt eingebunden.
Die Sitemap beginnt zunächst mit der Bezeichnung der Übersichtsseite. Diese wird mit folgender Zeile definiert:

sitemap demo label="Demo House"

Anschließend lassen sich die Untergliederungen bzw. Unterseiten mittels “Frames” festlegen. Eine Unterseite namens “Multimedia” lässt sich beispielsweise mit dem Abschnitt

Frame label="Multimedia" icon="video" {
   ...
}

definieren, wobei sämtliche Inhalte dieses Unterbereichs innerhalb der geschweiften Klammern aufgeführt werden. Hier kann zudem bereits ein Symbol für den Eintrag gewählt werden. Dieser Abschnitt würde auf der Hauptseite wie folgt dargestellt werden:

91

 

 

Text-Items

Im einfachsten Fall lassen sich vorher definierte Text-Items einfach mit

Text item=NAME_DES_ITEMS

einfügen, wenn bereits in der Itemdefinition die Bezeichnung sowie das Symbol konfiguriert wurden. Alternativ können diese Optionen auch in der Sitemap gewählt werden:

Text item=Date icon="calendar"

oder

Text item=TEMP_AUSSEN label="Außentemp. [%.1f °C]"

Eine weitere interessante Option ist die Darstellung des Wertes in werteabhängigen Textfarben. Im folgenden Beispiel wird die Temperatur in orangener Textfarbe dargestellt, wenn diese mehr als 25° beträgt, bei mehr als 15° in grüner Farbe, über 5° ebenfalls in orange und unter oder gleich 5° in blauer Textfarbe:

Text item=Weather_Temp_Max valuecolor=[>25="orange",>15="green",>5="orange",<=5="blue"]

 

Text-Items können genauso wie Frames mit einer geschweiften Klammer einen Bereich öffnen, um eine Unterseite zu definieren. Diese Unterseite erreicht man im Browser, indem man auf den entsprechenden Text klickt. Eine solche Definition eines Unterbereichs mittels Textitems könnte beispielhaft so konfiguriert werden:

Text label="IP-Cam 1" icon="camera" {
   ...(weitere Items)
}

 

 

Switch-Items

Unsere konfigurierten Schalter lassen sich in ähnlicher Weise wie Text-Items in die Sitemap einbinden. Wurden bereits alle notwendigen Darstellungsinformationen in der Itemdefinition festgelegt, reicht ein einfaches Einbinden des Schalters mit der Zeile:

Switch item=FISCHE_TAG

 

Wurden beim Item weder Icon noch Bezeichnung festgelegt, kann dies hier nachgeholt werden:

Switch item=FISCHE_TAG label="Fische Tageslicht" icon="fisch"

 

Zudem besteht hier die Möglichkeit, den Text der Schaltflächen zu ändern:

Switch item=FISCHE_TAG label="Fische Tageslicht" mappings=[ON="An", OFF="Aus"]

 

Wurde weder in der Itemdefinition noch in der Sitemap ein Icon für diesen Schalter gesetzt, wird das Standardicon für Schalter angezeigt, in diesem Fall eine Glühbirne, die je nach Schaltzustand leuchtet oder nicht. Das sähe als Ergebnis wie folgt aus:

 

10

 

 

Zudem besteht die Möglichkeit, eine ganze Gruppe zu schalten, wenn die dazugehörigen Items der entsprechenden Gruppe in der Itemdefinitionsdatei hinzugefügt wurden. Die folgende, beispielhafte Zeile schaltet sämtliche Tageslichter gesammelt Ein oder Aus und zeigt zudem die Anzahl der eingeschalteten Gruppenmitglieder:

Switch item=grpTier_TAG label="alle Taglichter (Tiere) [(%d)]" icon="light" mappings=[OFF="Alle aus", ON="Alle an"]

 

Dies sieht in der Sitemap anschließend so aus:

11

 

 

 

Auch können wir die bereits angesprochenen Dummies in der Sitemap mit Werten versehen. Hier beispielsweise kann der Dummy “CHART_PERIOD”, hinter welchem kein realer Schalter steckt, mit den Werten 0,1 oder 2 geschaltet werden, wobei die einzelnen Werte in lesbarer Form auf der Sitemap angezeigt werden:

Switch item=CHART_PERIOD label="Zeitspanne" mappings=[0="Stunde", 1="Tag", 2="Woche"]

 

12

 

 

 

Bilder anzeigen

Es besteht die Möglichkeit, in der Sitemap Bilder anzuzeigen. Dabei spielt es keine Rolle, ob diese lokal bei der openHAB-Instanz gespeichert sind oder von einer Online-Quelle aus eingefügt werden. Beispielsweise lässt sich so die Einbindung eines Webcam-Bilds realisieren. Zunächst definieren wir eine entsprechende Unterseite, damit das Bild nicht neben allen anderen Schaltern und Texten störend wirkt:

Text label="IP-Cam 1" icon="camera" {
   Image url="http://IP_DER_WEBCAM/image/jpeg.cgi" label="IP-Cam 1"
}

 

Sollte die Online-Quelle des Bildes, in unserem Fall die IP-Cam, eine Anmeldung mit Nutzernamen und Kennwort voraussetzen, können diese Daten mit an die aufzurufende URL angehangen werden:

Text label="IP-Cam 1" icon="camera" {
   Image url="http://NUTZERNAME:PASSWORT@IP_DER_WEBCAM/image/jpeg.cgi" label="IP-Cam 1"
}

 

 

Videos anzeigen

Genauso wie soeben anhand von Bildern beschrieben lassen sich ebenso Videos in der Sitemap einbinden:

Video url="http://demo.openhab.org/Hue.m4v"

 

 

Webseiten anzeigen

In der Sitemap ist es sogar möglich, ganze Webseiten einzubinden. Hier empfiehlt es sich allerdings aufgrund des Platzes eine mobile Version der gewünschten Webseite zu wählen. Der Parameter “height” gibt an, in welche Höhe die Seite als iframe eingebunden werden soll, in dessen der Nutzer der Sitemap auf der Seite Scrollen muss.

Webview url="http://heise-online.mobi/" height=8

 

Der Typ Selection

Dieser Typ bietet die Möglichkeit, eine Auswahlliste darzustellen, aus welcher ein beliebiger Listenpunkt gewählt werden kann. Dies wird unter anderem für die Auswahl sogenannter Szenen verwendet, bei denen mehrere Items in einen vorher festgelegten Zustand geschaltet werden.

13

 

14

 

Ich nutze diesen Typ für die Auswahl des Radiosenders für eine Logitech Squeezebox:

15

 

16

 

 

 

Diese Liste wird mit folgender Zeile in die Sitemap eingebunden:

Selection item=RDO61_SELECT label="Senderauswahl" mappings=[0="WDR 2", 1="TechnoBase", 2="Irish", 3="Radio KW", 4="sunshine Live", 5="WDR 5", 6="Folk Alley"]

Für die Funktionalität sind jedoch zusätzlich definierte Regeln notwendig, die ich zwar folgend zeige, jedoch in einem späteren Beitrag genauer erläutere:

rule "Senderauswahl rdo61"
when
   Item RDO61_SELECT received command
then
   switch(receivedCommand) {
      //WDR 2
      case 0 : squeezeboxPlayUrl("rdo61", "http://wdr2-koeln-ogg.akacast.akamaistream.net/7/999/199781/v1/gnl.akacast.akamaistream.net/wdr2-koeln-ogg")
      //TechnoBase.fm
      case 1 : squeezeboxPlayUrl("rdo61", "http://mp3.stream.tb-group.fm/tb.mp3?")
      //IrishPub Radio
      case 2 : squeezeboxPlayUrl("rdo61", "http://www.irishpubradio.com/streams1/listen.pls")
      //Radio KW
      case 3 : squeezeboxPlayUrl("rdo61", "http://edge.live.mp3.mdn.newmedia.nacamar.net/ps-radiokw_mobile_mp3/livestream.mp3")
      //sunshine Live
      case 4 : squeezeboxPlayUrl("rdo61", "http://85.239.108.1/sunshinelive-mp3-128")
      //WDR 5
      case 5 : squeezeboxPlayUrl("rdo61", "http://wdr5-ogg.akacast.akamaistream.net/7/232/199784/v1/gnl.akacast.akamaistream.net/wdr5-ogg")
      //Folk Alley
      case 6 : squeezeboxPlayUrl("rdo61", "http://www.folkalley.com/sidestream.pls")
   }
end

 

 

 

Statistiken einbinden

Wenn ein Datenbankaddon (Persistence), wie beispielsweise RRD4J installiert und konfiguriert ist, werden je nach Konfiguration sämtliche Messerwerte gespeichert. So ist es beispielsweise möglich, für eine Raumtemperatur Graphen auf der Sitemap darzustellen oder das jeweilige Maximum und Minimum zu ermitteln. Dies könnte in der Sitemap wie folgt aussehen:

17

 

Dazu sind mehrere Vorbereitungen notwendig, die in diesem Beitrag beschrieben sind.

 

 

Der Farbwähler

Für RGB-Licht(erschläuche) ist dieser Typ des Reglers vorgesehen. Mit diesem lässt sich der genaue Farbwert, welcher am Endgerät dargestellt werden soll, anhand einer Farbskala wählen und setzen. Der entsprechende Menüpunkt sowie das dazugehörende Untermenü sehen so aus:

18

 

19

 

 

In die Sitemap eingebunden wird dieser Regler mit dieser Zeile, nachdem zuvor ein Color-Item definiert wurde:

Colorpicker item=RGBLight icon="slider"

 

 

 

Rollos steuern

Für die Einbindung von Rollos in die Sitemap stehen mit dieser Methode drei Schaltflächen zur Verfügung. Zwei Schaltflächen zum Ablassen bzw. Hochfahren des Rollos sowie eine weitere Schaltfläche zum Abbrechen bzw. Anhalten des Vorgangs.

 

20

 

Eingebunden wird dieser Menüpunkt wie ein normaler Schalter, nachdem das Item zuvor als “Rollershutter” definiert wurde:

Switch item=DemoShutter

 

 

 

Prozentual schalten

Im Gegensatz zur vorigen Schaltmethode lassen sich Rollos zudem auch prozentual schalten.

21

 

Dabei wird bei jedem Druck auf einen der beiden Pfeile das Rollo jeweils um einige Prozent geöffnet bzw. geschlossen. Diese Methode lässt sich jedoch auch wunderbar zweckentfremden. Ich nutze diesen Typ beispielsweise für die Justierung der Lautstärke meines Radios:

22

 

Realisiert wird das mit folgender Sitemap-Konfiguration…

Slider item=RDO61_VOLUME

…nachdem das Item zuvor wie folgt definiert wurde:

Dimmer RDO61_VOLUME      "Lautstärke [%.1f %%]"

 

 

 

Der Bereich “rules”

Hier werden sämtliche Regeln definiert. Im einfachsten Fall von einer regulären Zeitschaltuhr (im Sinne eines CRON-Jobs) bishin zu komplexen Bedingungen und Aktionen wie oben im Beispiel der Jalousien. Im ersten Abschnitt sollten zunächst die Datentypen importiert werden, die in den darauffolgenden Regelsätzen genutzt werden. Die notwendigen Bibliotheken werden meistens bei der entsprechenden Anleitung genannt, wenn diese benötigt werden. In meinem Fall importiere ich folgende Bibliotheken:

import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*

 

Regeln sind immer in einer vorgegebenen Struktur abgebildet. Eingeleitet wird diese zunächst mit der Bezeichnung der Regel, festgelegt an einem “rule“. Darauf folgt der Block “when“, der definiert, WANN die Regel ausgeführt werden soll. Zum Schluss folgt der Block “then“, in welchem definiert wird, WAS dann geschehen soll. Hierzu ein Beispiel:

rule "Morgens Taglichter an"
when
    Time cron "0 30 5 * * ?"
then
    grpTier_TAG?.members.forEach[Switch|
        sendCommand(Switch, ON)
        Thread::sleep(2000)
    ]
end

Diese Regel schaltet, wenn die Uhrzeit den Wert 05:30 erreicht, alle Mitglieder der Gruppe “grpTier_TAG” ein. Zwischen jeder Schaltung der einzelnen Mitglieder wird 2 Sekunden pausiert.

 

Im folgenden Artikel werden die openHAB-Regeln näher erläutert.