Homematic Variablen in openHAB 2 aktualisieren

In diesem Beitrag möchte ich zeigen, wie System-Variablen aus Homematic, in openHAB 2 gelesen und aktuell gehalten werden.

Problem

In Homematic habe ich einige Variablen, die in openHAB 2 angezeigt werden. Mit openHAB 1 war die Synchronisation kein Problem, in openHAB 2 habe ich das zunächst nicht hin bekommen. Die offizielle Doku beschreibt die Anbindung von Variablen aus Homematic in openHAB 2, leider funktioniert das bei mir nicht.
Mit folgender Lösung habe ich es hin bekommen.

Lösungsstrategie

Mit dem Add-On XML-API stellt die Homematic CCU eine HTTP Schnittstelle zur Verfügung, über die alle Systemvariablen ausgelesen werden können. Diese lese ich über das HTTP Binding in openHAB aus. Da alle Systemvariablen in einem XML übertragen werden, filtere ich über einen XPath Ausdruck die benötigten Werte heraus und weise sie einem Item in openHAB zu. Die Abfrage der Werte erfolgt zyklisch alle n Sekunden.

Umsetzung

Homematic

In Homematic muss das Add-On XML-API installiert sein. Dieses stellt verschiedene Schnittstellen zur Verfügung, die über HTTP aufgerufen werden können. Die Systemvariablen können über folgende URL aufgerufen werden:

http://{IP-der Homematic-CCU}/config/xmlapis/sysvarlist.cgi

Als Ergebnis bekommt man ein XML mit allen Systemvariablen und deren aktuelle Werte.

<systemVariables>
<systemVariable name="Alarmzone_1" variable="4" value="" value_list="" ise_id="1233" min="" max="" unit="" type="2" subtype="6" logged="false" visible="true" timestamp="0" value_name_0="nicht ausgelöst" value_name_1="ausgelöst"/>
<systemVariable name="Anwesenheit" variable="1" value="true" value_list="" ise_id="950" min="" max="" unit="" type="2" subtype="2" logged="false" visible="true" timestamp="1501317240" value_name_0="nicht anwesend" value_name_1="anwesend"/>
<systemVariable name="Regen_gestern" variable="0.000000" value="0.000000" value_list="" ise_id="1492" min="0" max="1000" unit="mm" type="4" subtype="0" logged="false" visible="true" timestamp="1506922200" value_name_0="" value_name_1=""/>
<systemVariable name="Regen_heute" variable="0.295000" value="0.295000" value_list="" ise_id="1491" min="0" max="1000" unit="mm" type="4" subtype="0" logged="false" visible="true" timestamp="1506933951" value_name_0="" value_name_1=""/>
<systemVariable name="Secure" variable="1" value="true" value_list="" ise_id="3121" min="" max="" unit="" type="2" subtype="2" logged="true" visible="true" timestamp="1506798800" value_name_0="unsecure" value_name_1="secure"/>
<systemVariable name="Tageszeit" variable="3" value="3" value_list="Nacht;Frühmorgens;Morgengrauen;Vormittag;Mittag;Nachmittag;Dämmerung;Abend;" ise_id="3564" min="" max="" unit="" type="16" subtype="29" logged="true" visible="true" timestamp="1501317230" value_name_0="" value_name_1=""/>
</systemVariables>

openHAB

HTTP-Binding installieren

In openHAB 2 muss zunächst das HTTP-Binding als Add-On installiert werden. Dies geht ganz einfach im Paper UI unter dem Menüpunkt Add-ons und dort im Tab Bindings. In der Suche einfach http eingeben und das Binding installieren.

HTTP-Binding konfigurieren

Um das HTTP-Binding zu konfigurieren wird im Config-Ordner von openHAB im Verzeichnis services ein File mit dem Namen http.cfg angelegt.
In der Config wird ein Cache für die HTTP-Schnittstelle konfiguriert. Damit wird verhindert, dass bei jedem Zugriff auf eine HTTP-Schnittstelle ein HTTP-Call erfolgt.
Jeder Cache bekommt einen symbolischen Namen. Der symbolische Name wird später in der Item-Konfiguration verwendet. Im aktuellen Beispiel verwende ich den Namen homematic-vars-cache.
Dem Cache können verschiedene Config-Werte zugewiesen werden. Dies erfolgt unter Angabe des symbolischen Namens und dem Config-Parameter-Namen, getrennt durch einen Punkt. Im Beispiel werden folgende Werte konfiguriert:

  • Die URL der HTTP-Schnittstelle von Homematic.
  • Das Update-Intervall, wie oft die Werte von Homematic gelesen werden. Die Angabe erfolgt in Millisekunden.
homematic-vars-cache.url=http://{IP-Homematic-CCU}/config/xmlapi/sysvarlist.cgi
homematic-vars-cache.updateInterval=240000

Item konfigurieren

Die Werte der Variablen werden Items in openHAB zugewiesen. Dazu wird bei der Item-Konfiguration das HTTP-Binding verwendet.

http="<[<url>:<refreshintervalinmilliseconds>:<transformationrule>]"

Als URL wird der symbolische Name aus der HTTP-Binding Config verwendet. Als Transformations-Rule verwende ich einen XPath Ausdruck um genau den Wert aus dem XML auszulesen, den ich dem Item zuweisen will.
Im konkreten Beispiel interessieren mich die Regenmengen von gestern und von heute.

Number Rain_Today		"Regen heute [%.2f mm]"						<rain>			(Weather)				{ http="<[homematic-vars-cache:300000:XPATH(systemVariables/systemVariable[@name='Regen_heute']/@value)]"}
Number Rain_Yesterday	"Regen gestern [%.2f mm]"					<rain>			(Weather)				{ http="<[homematic-vars-cache:300000:XPATH(systemVariables/systemVariable[@name='Regen_gestern']/@value)]"}

Damit haben die Items immer die aktuellen Werte der Homemativ Variablen und können in openHAB verwendet werden.

 

5 Replies to “Homematic Variablen in openHAB 2 aktualisieren”

  1. Danke für den Beitrag, ich stehe/stand vor dem gleichen Problem. Interessant wäre noch zu erklären wie Du das mit der transformation umgesetzt hast.

    Grüße

    • Die Transformation ist ein XPath Ausdruck und ist Teil des Bindings beim Item:
      XPATH(systemVariables/systemVariable[@name=’Regen_heute‘]/@value)

      Mit diesem Ausdruck lese ich aus dem XML, das von Homematic über HTTP gelesen wird, aus dem Element „systemVariables/systemVariable“, den Wert des Attributes mit dem Namen „Regen_heute“.

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

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

*