Da wir nun ja Temperaturwerte regelmäßig erfassen und auch persistieren, bietet es sich natürlich an auch Temperaturverläufe grafisch darzustellen.
Für die Persistierung haben wir mySQL implementiert und können somit bereits auf diese Werte zurückgreifen.
Zuerst sollten wir eine Gruppe definieren und somit die Items und Persistierung darüber festlegen.
Dementsprechend passen wir den Bereich Items in der mysql.persist an:
//...
Items {
// persist all items once a day and on every change and restore them from the db at startup
// speichern aller Zustände einmal am Tag/bei Zustandsänderung und lesen beim Start aus der Datenbank
* : strategy = everyChange, everyDay, restoreOnStartup
// additionally, persist all temperature and weather values every hour
// Temperartursensoren stündlich erfassen
gChartTemperatur* : strategy = everyHour, restoreOnStartup
gChartWeather* : strategy = everyHour, restoreOnStartup
}
Dementsprechend haben wir Zwei neue Gruppen definiert:
gChartWeather - hier sollen alle relevanten Wetterdaten gezeigt werden
gChartTemperatur - hier sollen zukünftig die alle Temperaturen visualisiert werden (Aussen & Innen). Bei beiden Gruppen sollte eine stündliche Speicherung ausreichen.
Dementsprechend passen wir nun die relevanten Items an in der weather.items:
Group gweather
Group gChartWeather
Group gChartTemperatur
Number Temperatur "Temperatur [%.2f °C]" (gweather,gChartTemperatur,gChartWeather){weather="locationId=home, type=temperature, property=current"}
Number Luftfeuchte "Luftfeucht. [%d %%]" (gweather,gChartWeather) {weather="locationId=home, type=atmosphere, property=humidity"}
Number Druck "Luftdruck [%.2f mb]" (gweather,gChartWeather) {weather="locationId=home, type=atmosphere, property=pressure"}
Und nun sollte nur noch die Darstellung und Einbindung fehlen. Also, ab an die Sitemap Weather.sitemap
Frame label="Wetter" {
Group item=gweather label="Wetter" icon="sun_clouds" // Items dieser Gruppe darstellen
Chart item=gChartWeather period=2W refresh=600000
Group item=gweather_all label="Wetter (alles)"
}
Zwischen meine Wetterdaten habe ich nun einen Chart gepackt, der alle Items der angelegten Gruppe darstellt.
Über die Periode kann das Intervall definiert werden. Mögliche Intervallwerte sind:
Wert | Zeitraum |
h/4h/12h | 1/4/12 Stunde(n) |
D/3D | 1/3 Tag(e) |
W/2W | 1/ 3 Woche(n) |
M/2M/4M | 1/ 2/ 4 Monat(e) |
Y | Jahr |
Über den Parameter "refresh" wird das Aktualisierungsintervall definiert. Da dies auf Basis Milisekunden ist haben wir uns für ein 10min Intervall entschieden.
Und so sieht das ganze somit aus:
Den Zweiten Chart werde ich in einen separaten Temperaturchart einbauen der die Raumtemperaturen als auch die Aussentemperatur darstellt. Allerdings sind die Sensoren hierfür noch im Anflug.
Allerdings währe es ganz nett, das dargestellte Intervall dynamisch zu gestalten. Aber auch hierfür gibt es einen Weg.
Fangen wir einmal rückwärts an:
Anlegen der Anzeige:
- Ein Frame-Item welches die Daten darstellen soll und das Intervall umschalten lassen soll
- Einen Schalter mit den drei vorgesehen Werten (über Mapping)
- Drei Charts zur Darstellung der jeweilig möglichen Intervalle. Hierbei wird nur jener Chart visualisiert, welcher laut Schalter ausgewählt ist. Zusätzlich sollte bei einem Chart auch der nicht-initialisierte Status abgefangen werden.
sitemap default label="Temperatur"{
Text label="Temp. Chart" icon="temperature" {
Frame label="Temperatur" {
Switch item=var_chart_temp_intervall label="Temperaturverlauf" mappings=[0="Tag",1="Woche",2="Monat"]
Chart item=gChartTemperatur period=D refresh=2400000 visibility=[var_chart_temp_intervall==0, var_chart_temp_intervall=="Uninitialized"]
Chart item=gChartTemperatur period=W refresh=2400000 visibility=[var_chart_temp_intervall==1]
Chart item=gChartTemperatur period=M refresh=2400000 visibility=[var_chart_temp_intervall==2]
}
}
}
Damit sollte nur noch die Definition der Items fehlen um mit einem Temperaturverlauf zu beginnen. Da wir bislang als Temperatur lediglich die Wetterdaten haben, setzen wir hier an.
Dementsprechend definieren wir in der weather.items(Ausschnitt) das Item für die Aussentemperatur und das Dummy-Item für den Umschalter.
// Temperaturkopie für Temperaturchart
Number Temperatur_out "Temp.Aussen [%.1f °C]" (gChartTemperatur) {weather="locationId=home, type=temperature, property=current"}
// Intervallwert für Temperaturgraphen
Number var_chart_temp_intervall "Chart Intervall"
Damit sollte der Fall abgeschlossen sein (jedenfalls bis die anderen Sensoren angebunden werden können).
Und so sieht es bislang aus: