In diesem Beitrag möchte ich zeigen, wie System-Variablen aus Homematic, in openHAB 2 gelesen und aktuell gehalten werden.
Inhalt
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.
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“.
Danke für die Beschreibung. Hinweis: die XPATH Transformation sollte ebenfalls noch installiert werden, sonst klappt es nicht.
Stimmt, das habe ich vergessen zu erwähnen. Danke für den Hinweis.
Hallo,
Danke für diese Anleitung es funktioniert.
Gruss Michael
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"
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
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