Speicherung von Daten in openHAB

In den letzten Blog-Artikeln habe ich ein paar Wetterdaten in openHAB integriert und diese Daten entsprechend visualisiert.

In diesem Artikel sollen jetzt Daten aus dem WetherBinding von ForecastIo langristig im System gespeichert werden. Dazu wird die Round-Robin-Datenbank RRD4j verwendet.

Die Idee zur Speicherung der Daten ist mir beim Lesen des Beitrags auf  zukunftathome.de gekommen.

Es soll die erfasste Außentemperatur einmal am Tag gespeichert und in einem Diagramm visualisiert werden.

ACHTUNG: RRD4j ist nicht für die langfristige Datenspeicherung geeignet, da ältere Werte immer weniger verfügbar sind.

Installation

Die Installation erfolgt ganz einfach über die Paper UI:

  • Add-ons – Persitence – RRD4j Persistence

Dort die Schaltfläche INSTALL auswählen und die Persistenzschicht ist installiert.

Konfiguration

Mit einem beliebigen Editor (bei mir Visual Studio Code) die Datei rrd4j.persist im Ordner persistence mit folgendem Inhalt anlegen:

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

Items
{
    weatherTemperature : strategy = everyMinute, restoreOnStartup
}

In den Strategies wird definiert in welchen Zeitinverallen Daten abgespeichert werden. Die Strategie für everyMinute muss zwingend angelegt werden.

Unter Items werden die Daten hinterlegt die in der Datenbank gespeichert werden sollen.  Die Daten müssen in den zugehörigen *.items-Dateien vorhanden sein.

In meinem Beispiel wird einmal am Tag die Variable weatherTemperature (also meine Außentemperatur) gespeichert.

Items

In den zugehörigen Items-Dateien muss normalerweise nichts angepasst werden.

Es wird aber eine Hilfsvariable für die Darstellung des Zeitraums in einem Diagramm benötigt:

Number Chart_Zeitraum_D_W_M_Y

Sitemap

Für die Visualisierung können die Daten dann wie folgt eingebunden werden:

Frame label=”Historie Außentemperatur (Altomünster)” {

Switch item=Chart_Zeitraum_D_W_M_Y label=”” mappings=[0=”Tag”, 1=”Woche”, 2=”Monat”, 3=”Jahr”]

Chart item=weatherTemperature period=D refresh=60000 visibility=[Chart_Zeitraum_D_W_M_Y==0, Chart_Zeitraum_D_W_M_Y==”Uninitialized”]

Chart item=weatherTemperature period=W refresh=60000 visibility=[Chart_Zeitraum_D_W_M_Y==1]

Chart item=weatherTemperature period=M refresh=60000 visibility=[Chart_Zeitraum_D_W_M_Y==2]

Chart item=weatherTemperature period=Y refresh=60000 visibility=[Chart_Zeitraum_D_W_M_Y==3]

}

Funktionstest

Da ich momentan die Daten nur einmal am Tag speichere, wollte ich auch sehen ob etwas in den RRD4j-Datenbanken ankommt.

Dazu kann die REST-API wie folgt aufgerufen werden – http://IP:PORT/doc/index.html

Mit dieser URL kann ein Item aus der Persistenzschicht abgerufen werden (hier weatherTemperature):

http://IP:PORT/rest/persistence/items/weatherTemperature

Als Ergebnis sollte dann eine Struktur wie hier dargestellt werden:

{“name”:”weatherTemperature”,”datapoints”:”1″,”data”:[{“time”:1535463840000,”state”:”24.64999999999999857891452847979962825775146484375″}]}

Fazit

Mit ein paar Handgriffen kann man seine openHAB-Daten in einer Datenbank ablegen. Für einen ersten Test sollte RRD4j für meine Anforderungen ausreichen (eine langfristige Speicherung der Wetterdaten werde ich erst mit einer eigenen Wetterstation umsetzen).

Welche Daten würdet Ihr langfristig aus eurem System speichern? Habt Ihr andere Datenbanken verwendet?

1 Kommentar
  1. Reinhard Eidelsburger
    Reinhard Eidelsburger sagte:

    Es war ein Fehler in der rrd4j.persist. Der Inhalt muss wie folgt bei der Strategie aussehen:

    weatherTemperature : strategy = everyMinute, restoreOnStartup

    Ansonsten werden die Werde nicht zuverlässig in RRD4J gespeichert!

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

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.