openHAB :: Datenspeicherung und Statistiken mit RRD4J

openhabchartWenn wir bereits items zu openHAB hinzugefügt haben, wäre eine Anzeige eines Werteverlaufes sehr interessant. Beispielsweise haben wir ein Thermometer im Wasser unseres Aquariums. Die aktuelle Wassertemperatur wird zwar in openHAB angezeigt, aber wie entwickelt sich die Temperatur im Tagesverlauf? Um einen solchen Verlauf anzuzeigen ist es notwendig, das openHAB Daten speichert, um auf eine Historie zugreifen zu können.

 

 

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

 


openHAB bietet mehrere Anbindungen an Datenbanken, wo unsere Werte gespeichert und ausgelesen werden können. Die für die meisten Fälle effektivste Möglichkeit bietet uns RRD4J. Diese “Round-Robin Datenbank” speichert zwar zunächst alle Werte, aber umso länger die Daten in der Vergangenheit liegen, um so “durchschnittlicher” werden diese gespeichert. Das heißt, dass für Temperaturwerte, die vor einem halben Jahr erfasst wurden, nicht mehr jeder einzelne Wert gespeichert wird, sondern nur noch der Durchschnitt. Damit ergibt sich der Vorteil der Platzersparnis, auch die Zugriffszeit auf die Daten erhöht sich deutlich.

Weitere Möglichkeiten der Datenspeicherung bietet openHAB für die Backends InfluxDB, MongoDB, MQTT, MySQL uvm. In diesem Artikel wird zunächst nur das Backend RRD4J beschrieben. Vielleicht folgen später weitere Artikel zu anderen Backends.

 

Installation

Die Installation verläuft ziemlich unspektakulär. Wir benutzen die apt-Paketverwaltung und installieren das Addon mit:

apt-get install openhab-addon-persistence-rrd4j

 

Grundkonfiguration

Nun erstellen wir eine Konfigurationsdatei im Ordner “/etc/openhab/configurations/persistence“, beispielsweise mit dem Dateinamen “rrd4j.persist“. Die Dateiendung ist dabei wie im Beispiel zu wählen, damit die Konfigurationsdatei von openHAB als solche erkannt wird.

In dieser Konfigurationsdatei werden zunächst Strategien erstellt, wann Daten gespeichert werden sollen. Dies könnte beispielsweise so aussehen:

Strategies {
    everyMinute : "0 * * * * ?"
    everyHour : "0 0 * * * ?"
    everyDay : "0 0 0 * * ?"
}

 

Dann geben wir an, für welche Items welche Strategie zählt. Im einfachsten Fall lassen wir sämtliche Items minütlich speichern und stellen den letzten Wert des Items beim Start von openHAB wieder her:

Items {
    * : strategy = everyMinute, restoreOnStartup
}

 

Abschließend übertragen wir den Besitz dieser Konfigurationsdatei an openHAB mit:

chown openhab: /etc/openhab/configurations/persistence/rrd4j.persist

 

Diagramm in der Sitemap

In unserer Sitemap lassen wir ein Diagramm zu einem bestehenden Item wie folgt anzeigen, eine Erweiterung der Item-Definition ist hierfür nicht notwendig.

Chart item=INET_PING period=W refresh=3600

 

Mit item geben wir das Item an, für welches das Diagramm erzeugt werden soll, period gibt an, über welchen Zeitraum sich die Anzeige erstreckt. Für period sind beispielsweise folgende Werte zulässig:

h, 4h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y

refresh gibt den Aktualisierungsintervall an, in welchem die Grafik in der Sitemap erneuert werden soll. Mit service könnten wir noch angeben, welche Datenquelle zu nutzen ist, da wir jedoch nur eine einzige einsetzen, kann der Punkt entfallen.

 

openhab-speed

 

 

Datenbereich dynamisch wählen

zeitspanne

 

Mit einer Erweiterung unserer Konfiguration ist es sogar möglich, direkt am Diagramm den Datenbereich zu wählen, um beispielsweise von einer Wochenansicht mit einem Button zu einer Tagesansicht zu wechseln. Dazu erstellen wir zunächst ein neues Item, dass den Zustand der Datenbereichsauswahl speichert:

Number CHART_PERIOD

 

Dann setzen wir die Schalter für das Umschalten der Ansicht über das Diagramm:

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

und die Einbindung des Diagramms erweitern bzw. ändern wir wie folgt:

Chart item=INET_PING period=h refresh=300 visibility=[CHART_PERIOD==0, CHART_PERIOD=="Uninitialized"]
Chart item=INET_PING period=D refresh=1800 visibility=[CHART_PERIOD==1]
Chart item=INET_PING period=W refresh=3600 visibility=[CHART_PERIOD==2]

 

In der Sitemap sieht das Ganze dann in etwa so aus:

 

ping

 

Dieser Schalter mit seiner item-Definition kann für alle eingebundenen Diagramme verwendet werden, wenn es nicht stört, dass die Datenbereichsanzeige aller Diagramme gleichzeitig geändert wird.

 

Diagramm extern anzeigen

Es besteht die Möglichkeit, dass wir unser Diagramm auch außerhalb der openHAB-Sitemap anzeigen lassen können.

Dazu rufen wir das Diagramm z.B. im Browser wie folgt auf:

http://IP_VON_OPENHAB:PORT/chart?items=INET_PING&period=W&h=800&w=1200

Die Angabe “items” kann durch “groups” ersetzt werden, wenn eine solche Gruppe zuvor definiert wurde. Mit “h” (height) und “w” (width) geben wir die Größe an, in welcher das Diagramm dargestellt werden soll. “period” gibt, wie bereits zuvor gezeigt, den Datenbereich an, der angezeigt werden soll, in diesem Beispiel die letzte Woche.

Wenn mehrere Items kommasepariert angegeben werden, werden diese kombiniert in einem Diagramm dargestellt:

http://IP_VON_OPENHAB:PORT/chart?items=INET_PING,INET_UP,INET_DOWN&period=W&h=300&w=400

 

chart2

 

Wer sich nun fragt, wie man überhaupt solche Daten der Internetleitung in openHAB bekommt, dem sei dieser Artikel empfohlen.