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?
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!