BL-NET mit dem HTTP-Binding auslesen


Meine Heizung wird von einer UVR 1611 der Technischen Alternative aus Östereich gesteuert. Zu dieser Steuerung gab es einen sogenannten Bootloader bzw. Datenlogger. Diesen Datenlogger gab es in verschiedenen Ausführungen. Ich hatte mich für den BL-NET entschieden, da er über eine Netzwerkschnittstelle verfügt und eine Webseite mit den aktuellen Temperaturen und zuständen der Relais bereitstellt. Zusätzlich kann man mit der Software WinSol die gespeicherten Datensätze auslesen und sich das Verhalten der Heizungssteuerung über einen größeren Zeitraum anzeigen lassen.Das funktioniert auch heute noch sehr gut und sehr stabil. Allerdings speichert der BL-NET nur 8.000 Datensätze zwischen, was bei einminütigen abspeichern der Messwerte nach 5½ Tagen zu einem Überlauf des Speichers führt. Gerade im Urlaub und im Sommer ist das eher ungünstig, da ich meine Solarthermieanlage gerne im Auge behalte.
Bild vom BL-NET

BL-NET vorbereiten

Zur Einbindung habe ich das Ausgabeformat im BL-NET verändert. Da ich nicht mehr direkt auf das Gerät zugreifen möchte, muss die Ausgabe auch nicht schön aussehen, sondern nur lesbar sein.

bl-net-ausgabeMit der Software Memory Manager, die von der Technischen Alternative zur Verfügung gestellt wird, kann man eine Datei (GRAFIK.html) in den BL-NET laden, die unter der URL

http://IP-des BL-NET/GRAFIK1.html

abgerufen werden kann. Hier mal ein Ausschnitt aus meiner GRAFIK.html.

Warmwasser: $d1e0<br>Puffer1o: $d1e1<br>Puffer1m: $d1e2<br>Puffer1u: $d1e3<br>VorlaufHK: $d1e4<br>Aussentemp: $d1e5<br>

Alles was mit „$“ beginnt wird durch den entsprechnenden Temperaturwert, den Relaiszustand oder den Leistungszähler ersetzt. Sind alle Werte so aufbereitet, kann die Einbindung in OpenHAB erfolgen.

Einbindung in OpenHAB

Als erstes muss dass HTTP-Binding installiert und konfiguriert werden.

apt-get install openhab-addon-binding-http

Im zweiten Schritt muss die openhab.cfg angepasst werden.

# http binding
http:blnet1.url=http://ip-des-blnet/GRAFIK1.html
http:blnet1.updateInterval=60000

Hier wird der BL-NET alle 60 Sekunden abgefragt. Die abgefragte URL wird auch bis zur nächsten Abfrage zwischengespeichert. Das Caching ist sehr wichtig, da unter Umständen sehr viele Items darauf zugreifen werden. Theoretisch wären 16 Items für Temperaturen, 16 Items für Ausgänge und 4 Items für die Leistungs- und Energiezählung möglich. Ein kleinerer Intervall als 20 Sekunden ist übrigens nicht möglich, da der BL-NET die Webseite nur alle 20 Sekunden aktualisiert. Nach einem Neustart des OpenHAB Daemons können die ersten Items erstellt werden.

service openhab restart

Items erstellen

Hier gleich ein Hinweis vorweg: die Werte die vom BL-NET geliefert werden, können nicht direkt gespeichert oder weiterverwendet werden. Das Problem ist, dass der BL-NET ein Komma als Dezimaltrennzeichen verwendet, OpenHAB aber ein Punkt erwartet. Wenn man ein String-Item erzeugt und sich die Werte nur ansehen möchte, ist es kein Problem. Will man aber später ein Diagramm mit einer oder mehreren Kurven haben, so müssen pro Wert zwei Items und eine Regel erstellt werden. Da ich die Werte später speichern möchte, hier also der lange Weg.

Ich habe zur besseren Übersicht eine neue Items Datei angelegt. Bei mir heißt sie „BL-NET.items“ und befindet sich im Verzeichnis „/etc/openhab/configurations/items/“. In dieser Datei habe ich ein Item erzeugt das „WarmWasser_temp“ heißt und mit dem Binding „http“ verbunden ist.

String	WarmWasser_temp	""	{ http="<[blnet1:60000:REGEX(.*?Warmwasser:.*?([0-9][0-9],[0-9]).*)]" }

Dem Item wird ein Wert zugewiesen, den ein regulärer Ausdruck aus dem Inhalt der Webabfrage ermittelt. Man muss darauf achten, den regulären Ausdruck so zu gestalten, dass die benötigten Werte im ersten Subpattern landen. Nun kann man testweise das Item in die Sitemap einbinden.

Frame {
       Text item=WarmWasser_temp label="Warmwasser [%S C]" icon="temperature"		
      }

blnet-sitemapWem die Anzeige reicht, der ist hier fertig mit der Konfiguration. Um später die Daten aber in einer Datenbank speichern zu können, muss der ausgelesene Wert in eine Zahl umgewandelt werden. Hierfür wird eine Regel benötigt. Immer wenn sich der Wert von „WarmWasser_temp“ ändert wird diese Regel aufgerufen und konvertiert den Wert vom Typ String in einen Wert vom Typ Fließkomma (Float) und schreibt ihn in ein neues Item.

Rule erstellen

Nun muss ein zweites Item erstellt werden.

Number	WarmWasser	" [%.1f]"

In dieses Item wird dann der konvertierte Wert geschrieben. Ist dies geschehen muss die Regel („/etc/openhab/configurations/rules/“) erstellt werden.

var String ww

rule "WarmWasser"
when
  Item WarmWasser_temp changed
then
  ww = WarmWasser_temp.state.toString
  logInfo("WarmWasser","WarmWasser:" + ww.replace(',','.'))
  postUpdate(WarmWasser,new Float(ww.replace(',','.')))
end

Das erste was definiert werden muss ist eine Variable. Da die Variable Text enthält ist sie vom Typ String. Weil es hier um Warmwasser geht, heißt sie „ww“. Die Regel heißt treffender weise auch „WarmWasser“. Sie reagiert auf Änderungen im Item „WarmWasser_temp“. Ändert sich also der Wert von „WarmWasser_temp“, so wird er in die Variable „ww“ geschrieben. Die Anweisung „ww.replace“ ersetzt das Komma durch einen Punkt. Mit der Anweisung „postUpdate“ wird dem Item „WarmWasser“ der nach Fließkomma konvertierte Inhalt von „ww“ übergeben. Nun muss noch die Sitemap geändert werden, so dass das Item „WarmWasser“ angezeigt wird.

Frame {
	Text item=WarmWasser label="Warmwasser [%.1f C]" icon="temperature"		
      }

Erstaunlicher Weise ändert sich die Anzeige auf der Webseite nicht. Allerdings habe ich zum Prüfen der Regel eine Funktion eingebaut. Die Anweisung „loginfo“ schreibt hier den Inhalt der Variable „ww“ in das OpenHAB Logfile.

[INFO ] [penhab.model.script.WarmWasser] - WarmWasser:40.2

Funktioniert alles richtig, sollte man die loginfo-Funktion deaktivieren, da das Logfile sonst zu groß und zu unübersichtlich wird.

Links:

Technische Alternative
OpenHAB http-Binding Wiki


Schreibe einen Kommentar