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.

 

8 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“.

  2. Moin,

    bei mit klappt es leider nicht

    http.cfg
    homematic-vars-cache.url=http://123.456.78.90/addons/xmlapi/sysvarlist.cgi
    homematic-vars-cache.updateInterval=30000

    Item
    Number Geofence6N „Geofence 6 [%]“ (Garden_Garden) { http=“<[homematic-vars-cache:300000:XPATH(systemVariables/systemVariable[@name='hcgeo:GeoTest3-CF-100_8AF6B']/@value)]"}

    Xpath ist installiert, den Link in der http.cfg habe ich angepasst, da ich nur so per Browser auf die xml zugreifen kann

    Bekomme als Rückmeldung leider nur "Err"

  3. Hallo,
    wäre es so möglich die Servicemeldungen aus der CCU2 auszulesen und sie in OH2 in einem Item anzeigen zu lassen?

    Gruß Tom

  4. Hallo zusammen,
    bei mir läuft das iwie nicht und ich finde den Fehler einfach nicht…

    in der http.cfg hab ich folgendes drin:
    homematic-vars-cache.url=http://192.168.1.90/config/xmlapi/sysvarlist.cgi
    homematic-vars-cache.updateInterval=30000

    und als Item dies:

    Number Rain_Today „Regen heute [%.2f mm]“ (Central) {http=“[homematic-vars-cache:60000:XPATH(systemVariables/systemVariable[@name=’Regen_heute‘]/@value)]“ }

    Binding auf OH2 ist installiert und auf der CCU2 das xml adon, aber iwie klappt das nicht… wenn ich die geschweiften Klammern weg lasse, wie oben im Beispiel, dann kommt nicht mal mehr die NULL als anzeige on der Sitemap….

    verzweifel noch….

    Gruss Tom

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

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

*