Drücken sie Ctrl/Cmd + P zum drucken
oder zum Speichern als PDF.

openHAB: Daten speichern und als Diagramm in der Sitemap anzeigen

Um Daten seines Smarten Hauses über die Zeit auswerten zu können, ist die grafische Darstellung in einem Diagramm sehr hilfreich. So kann man z.B. die CPU Temperatur des Raspberry Pi oder die Feuchtigkeit im Wohnzimmer speichern, und in verschiedenen Zeitintervallen anzeigen lassen.

Ich nutze dazu die RRD4J Persistence Erweiterung um die Daten abzulegen. (Add-ons – Persistence – RRD4J Persistence) Nachdem das Add-on installiert ist, muss noch eine Datei im Ordner var/lib/openhab2/persistence/ angelegt werden, falls keine vorhanden ist. Hier wird die Häufigkeit der Speicherung der Daten (jede Minute), sowie das Ereignis festgelegt, bei dem eine Speicherung erfolgen muss. (everyChange -> jede Änderung) In den Items können verschiedene Werte angelegt und konfiguriert werden. (wichtig ist der * im Dateinamen)

Beispiel rrd4j.persist

Strategies {
    // for rrd charts, we need cron strategy
    everyMinute : "0 * * * * ?"
    default = everyChange

}

Items {
    gTempchart1* : strategy = everyUpdate, everyMinute
    gTempchartInnen* : strategy = everyUpdate, everyMinute
    gtimeline* : strategy = everyUpdate, everyMinute
    gLuftfeuchteChart* : strategy = everyUpdate, everyMinute
    gSystemTempChart* : strategy = everyChange, everyMinute, restoreOnStartup
}

Die Items werden dann als Gruppen in der .items Datei angelegt. Das Item chartPeriode benötigen wir für die Anzeige des Diagrammes. Dann werden den benötigten Items noch die entsprechenden Gruppen zugeordnet.

Beispiel home.items Datei

Group    gTempchart1                 "Charts"             <line>          (Home)
Group    gTempchartInnen             "Charts"             <line>          (Home)
Group    gtimeline
Group    gLuftfeuchteChart
Group    gSystemTempChart
Group    gAnwesenheit

Number  chartPeriode

Number   EG_WZ_Sonoff_Luftfeuchte   "Luftfeuchtigkeit Wohnzimmer [%.1f %%]"     <humidity>      (gLuftfeuchteChart)             { mqtt="<[broker:SmartHome/Wohnzimmer/Sensorschalter/tele/SENSOR:state:JSONPATH($.AM2301.Humidity)]" }
Number   EG_WZ_Sonoff_Temp          "Temperatur Wohnzimmer [%.1f °C]"           <temperature>   (gTempchartInnen)               { mqtt="<[broker:SmartHome/Wohnzimmer/Sensorschalter/tele/SENSOR:state:JSONPATH($.AM2301.Temperature)]" }

Number CPUTemp             "CPU Temperatur [%.1f °C]"     (gSystemTempChart) { channel="systeminfo:computer:raspberrypi:sensors#cpuTemp" }

In der Sitemap wird jetzt das Diagramm eingerichtet. In diesem Fall gibt es die Möglichkeit 4 bzw. 5 zeitlich verschiedene Perioden über Tabs abzurufen.

Beispiel home.sitemap

Frame label="Dachgeschoss" icon="fts_garage_door_20" {
        Text item=CPUTemp label="Raspi System Infos [%.1f °C]" icon="attic" {
	        Frame label="CPU"{
		        Text item=CPUTemp 				
	        }
	        Frame {
		        Switch item=chartPeriode label="Temperaturverlauf" mappings=[0="1h", 1="12h", 2="24h", 3="Woche"]
		        Chart  item=gSystemTempChart period=h   refresh=60000 visibility=[chartPeriode==0]
		        Chart  item=gSystemTempChart period=12h  refresh=60000 visibility=[chartPeriode==1]
		        Chart  item=gSystemTempChart period=D  refresh=60000 visibility=[chartPeriode==2]
		        Chart  item=gSystemTempChart period=W refresh=60000 visibility=[chartPeriode==3]
	        }
                 Frame label="Luftfeuchtigkeiten im Vergleich" {
                        Switch item=chartPeriode label="Zeitraum" mappings=[0="4h", 1="Tag", 2="Woche", 3="Monat", 4="Jahr"]
                        Chart item=gLuftfeuchteChart period=4h refresh=60000 visibility=[chartPeriode==0]
                        Chart item=gLuftfeuchteChart period=D  refresh=60000 visibility=[chartPeriode==1]
                        Chart item=gLuftfeuchteChart period=W  refresh=60000 visibility=[chartPeriode==2]
                        Chart item=gLuftfeuchteChart period=M  refresh=60000 visibility=[chartPeriode==3]
                        Chart item=gLuftfeuchteChart period=Y  refresh=60000 visibility=[chartPeriode==4]
                }
        }      
    }

Dann heißt es nur noch warten. Es müssen erst Daten gesammelt werden, bevor diese angezeigt werden können. So lange bleibt das Diagramm also leer, nicht wundern… Wenn man mehrere Werte in die Gruppe aufnimmt, können so z.B. auch Vergleiche zwischen verschiedenen Temperaturen ausgewertet werden.

Diagramm in OpenHAB2 darstellen