OpenHAB – was „Persistence“ mit InfluxDB hat

Was in aller Welt ist “Persistence” – das hab ich mich eine ganze Weile gefragt, als ich OpenHAB kennengelernt hab. Und mich durch die Wiki gerungen hab. Durchs KNX-Forum , damals offizielles OpenHAB-Forum, daneben gab es noch die Google-Mailing-List , inzwischen gibt es die OpenHAB-Community .

Persistence – Beständigkeit, Beharrlichkeit, Ausdauer. Das Nachleuchten. So die Übersetzungen, die zumindest mir das Dunkel nicht wesentlich erhellt haben. Ich würde OpenHAB-Persistence mit “Datenbank-Anbindung” übersetzen. Persistence-Module sorgen dafür, dass Daten über die Zeitachse aufgezeichnet werden. Wie eigentlich überall bei OpenHAB ist die Vielfalt groß, wir dürfen (siehe dazu die Wiki ) den Standard MySQL verwenden, MongoDB, auch Web-Services wie Cosm, db4o als Java-Datenbank, Logging als konfigurierbare Log-Dateien, RRD4J ist eine sogenannte Round-Robin-Datenbank (wenn die Datei voll ist, werden die ältesten Werte wieder überschrieben), und: InfluxDB.

Für InfluxDB habe ich mich entschieden, weil, ich geb es zu, in Kombination mit Grafana wunderschöne Grafen in den Browser gezaubert werden (dazu mehr demnächst). Außerdem soll InfluxDB für Zeitreihen optimiert sein und somit viel weniger Overhead produzieren als eine klassische relationale Datenbank .

Und schon geht’s los: Die InfluxDB-Installation erfordert den Besuch der InfluxData-Website , dort ab in den Download-Bereich und die Debian-ARM-Version gesucht. Zum Zeitpunkt der Drucklegung dieser Niederschrift war mein Download-Link:

wget https://dl.influxdata.com/influxdb/releases/influxdb_0.13.0_armhf.deb

Das deb-Paket ausgepackt und installiert mit:

dpkg -i influxdb_0.13.0_armhf.deb

Den Dienst starten:

service influxd start

Wollen wir einfach mal eine Datenbank erzeugen?

influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 0.13.0
InfluxDB shell version: 0.13.0
>

Ein Prompt fordert uns zu Befehlen auf! Mit exit kämen wir wieder raus, aber das heben wir uns für gleich auf. Wie machen wir eine Datenbank?

CREATE DATABASE openhab

Keine Fehlermeldung? Also haben wir wohl jetzt eine neue Datenbank mit Namen “openhab”, oder?

SHOW DATABASES
name: databases
---------------
name
_internal
openhab

Gibt wohl auch schon eine “_internal”, die uns aber nicht weiter stört. Mehr brauchen wir nicht für OpenHAB, also wieder raus mit exit. Die in der OpenHAB-Konfiguration genannten Anmeldedaten (User, Password) brauchen wir nicht einrichten, weil sie in den Standard-Einstellungen von InfluxDB einfach ignoriert werden (im Heimnetz können wir darauf verzichten).

Jetzt braucht OpenHAB noch das Addon, also das Modul, um mit InfluxDB zu kommunizieren:

apt-get install openhab-addon-persistence-influxdb

Schon ist es installiert, wie immer ist ein Neustart von OpenHAB erforderlich, um das neue Modul zu benutzen, aber vorher sollten wir die Konfiguration vornehmen, wie immer in der Datei /etc/openhab/configurations/openhab.cfg.

In der Datei suchen wir den Abschnitt “InfluxDB Persistence Service”. Da wir überall die Standard-Werte verwenden (die Datenbank haben wir ja “openhab” genannt), brauchen wir nur das Kommentar-# beim Passwort zu entfernen und ein beliebiges Passwort einzutragen.

Zum Schluss noch OpenHAB neustarten (service openhab restart), und die Datenbank kann befüllt werden. Befüllt werden? Aber womit? Und wie? Was soll denn jetzt wie oft gespeichert werden? Diese Entscheidung liegt natürlich bei dir, dem Benutzer. Und du legst es fest in Persistence-Dateien, anzulegen im Ordner /etc/openhab/configurations/persistence. Die Persistence-Datei für unsere InfluxDB nennen wir auch so, nämlich influxdb.persist. Die Persistence-Dateien haben wieder eine eigene Syntax, dazu gucken wir uns mal ein Beispiel an:

// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
	everyMinute		: "0 * * * * ?"
	every5Minutes	: "0 0/5 * * * ?"
	everyHour 		: "0 0 * * * ?"
	everyDay 		: "0 0 0 * * ?"
// if no strategy is specified for an item entry below, the default list will be used
	default = everyChange
}
/* 
 * Each line in this section defines for which item(s) which strategy(ies) should be applied.
 * You can list single items, use "*" for all items or "groupitem*" for all members of a group
 * item (excl. the group item itself).
 */
Items {
	// persist all items once a day and on every change and restore them from the db at startup
	// careful, this might result in huge databases - that's why it is in comment here ;-)
	// * : strategy = everyChange, everyDay, restoreOnStartup	
	Temperature_Wohnzimmer : strategy = everyMinute
}

Das habe ich weitgehend aus dem OpenHAB-Beispiel entlehnt, im ersten Block “Strategies” werden Zeitpunkte definiert, und zwar (fast) nach dem cron-Standard . Da brauchen wir aber erstmal nichts dran zu drehen.
Im zweiten Block “Items” stehen die Elemente aus der Items-Datei, die wir speichern wollen, hier im Beispiel also die Wohnzimmer-Temperatur, und zwar jede Minute einen Wert. Da können wir jetzt beliebige Zeilen für weitere Elemente hinzufügen, z.B. auch unsere Schalter:

Schalter1 : strategy = everyChange, restoreOnStartup

Was das bedeutet, ist selbsterklärend: Der Schalterzustand wird bei jeder Änderung der Schaltstellung gespeichert, und außerdem beim Neustart von OpenHAB ausgelesen, so dass die Schalterstellung den Neustart überlebt!

Das war’s zum Thema Persistence – Daten speichern mit OpehHAB. Für Fragen – fragen.

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.