Wetterstation Statistik - SBorg2014/WLAN-Wetterstation GitHub Wiki
Hierbei handelt es sich um ein Javascript für den ioBroker, welches verschiedene Werte für den Vortag, Vorjahresmonat, Jahreswerte und des aktuellen Monats liefert:
Wichtig: Das Script funktioniert nur mit der Default-Datenstruktur des WLAN-Shellskriptes.
Die Datenpunkte müssen also unter javascript oder 0_userdata liegen. Die Instanz und die weitere Ordnerstruktur ist wahlfrei (kann im Script in den User-Einstellungen konfiguriert werden), der eigentliche Datenpunkt muss dann wieder wie die Defaultbezeichnung des Shell-Skriptes lauten.
Beispiele (Außentemperatur der Station):
javascript.1.test.meinWetter.Aussentemperatur
0_userdata.0.Daten.Wetterstation.Aussentemperatur
Voraussetzung: laufendes WLAN-Wetterstation Shellscript, laufender Javascript- und InfluxDB-Adapter im ioBroker, aktiviertes logging per InfluxDB der drei benötigten Datenpunkte "Aussentemperatur", "Wind_max" und "Regen_Tag" (falls diese noch nicht für Grafana oä. schon geloggt werden)
Installation: wir legen ein neues Javascript (siehe zB. beim Shell-Skript "Anlegen der Datenobjekte im ioBroker") im Ordner common an. Wie ihr es nennt, und ob ihr es ggf. in einen Unterordner packt, ist euch überlassen. Ihr kopiert nun einfach den gesamten Inhalt von wetterstation-statistik.js
in das soeben neu angelegte Javascript und speichert es.
Begrifflichkeiten
- Schedule = Der Zeitpunkt wann das Skript ausgeführt wird ("Zeitplan" im Skript). Per Default 1:03 Uhr
-
GradTage = Bezeichnung der warmen-, kalten-, heißen-, Frost- usw. Tage[n]
Konfiguration: Diese erfolgt im Bereich der "User-Einstellungen" zu Beginn des Skriptes. Sofern man nichts an den Pfad-Einstellungen des Shell-Skriptes geändert hat kann man die Einstellungen so lassen. Andernfalls sind die Pfade anzupassen. Der "Zeitplan" (=wann das Skript läuft und seine Arbeit verrichtet) steht per Default auf 01:03 Uhr Nachts. Ab diesem Zeitpunkt liegt die Statistik bis 23:59 Uhr vom Vortag bereit.
Warum nicht 0:00 Uhr oder ein paar Minuten nach Mitternacht eintragen? Nun, die wenigsten werden wirklich um paar Minuten nach Mitternacht eine aktuelle Statistik benötigen (bis zum Vortag liegt sie sowieso schon vor), aber der Hauptgrund liegt an Influx bzw. an euren Einstellungen. Wenn man viele Messwerte im RAM behält bevor man diese von Influx schreiben lässt (Stichwort "Schreibaktionen sammeln..." im Influx-Adapter), kann es u.U. sein, dass sich noch Messwerte im RAM des Systemes befinden und noch nicht in die InfluxDB geschrieben wurden. Diese würden dann in der Statistik fehlen.
Wir können das Skript nun starten und die Datenpunkte werden im angegebenen Ordner angelegt.
Die Datenpunkte im Einzelnen:
-
Control - zeigt einige Informationen an und dient zur weiteren Konfiguration des Skriptes (Einstellungen die man ggf. öfters ändert oder zB. über die VIS verändern möchte). Änderungen werden aus Sicherheitsgründen erst zum Schedule ausgeführt! Sonst ein falscher Klick und die Daten wären sofort weg...
1.1. AutoDelete_Data - [Zahl: 0...n] wann sollen Daten in Data (siehe Punkt 2.) gelöscht werden? (Beispiel 36 wären also nach 3 Jahren). Man sollte mindestens 12 Monate vorhalten, Erklärung warum folgt weiter unten.
1.2. AutoReset_Jahresstatistik - [Zahl: 0,1,2] was soll am 01.01. des Jahres mit den Statistikdaten passieren?
0 = Aus | die Daten werden einfach fortlaufend weitergeführt
1 = Ein | die Werte werden "genullt" und ggf. (zB. Höchst-/Tiefstwert) auf Extreme gesetzt, damit dann wieder korrekte Höchst-/Tiefstwerte oä. ermittelt werden können
2 = Ein+Backup | wie 1, nur werden zusätzlich Daten in einer Jahresstatistik gespeichert
1.3. Reset_Jahresstatistik - [Boolean: true/false] bei true wird die komplette Jahresstatistik zum Schedule resettet. Die Werte werden "genullt" und ggf. (zB. Höchst-/Tiefstwert) auf Extreme gesetzt, damit dann wieder korrekte Höchst-/Tiefstwerte oä. ermittelt werden können.
1.4. ScriptVersion - [Infotext] zeigt die aktuelle Versionsnummer des Skriptes an
1.5. ScriptVersion_Update - [Infotext] --- = kein Update auf GitHub verfügbar / URL = direkte URL zu GitHub auf das Update
1.6. ScriptVersion_UpdateCheck - [Boolean: true/false] bei false wird der automatische Update-Check auf GitHub abgeschaltet. Bei true wird die Abfrage ausgeführt (nur zum Schedule).
1.7. Statusmeldung - [Infotext] Meldungen vom Skript: "Skript gestartet", "erfolgreich", Fehlermeldung -
Data - enthält alte Statistiken (ist beim 1. Start des Skriptes und bis zum nächsten Ersten des Monats nur ein leerer Datenpunkt!)
Hier werden alte Statistiken nach Jahren sortiert in entsprechenden Datenpunkten im JSON-Format gespeichert:{"Tiefstwert":5.72,"Hoechstwert":32.88,"Temp_Durchschnitt":11.84,"Max_Windboee":21.88,"Max_Regenmenge":18,"Regenmenge_Monat":52,"warme_Tage":14,"Sommertage":9,"heisse_Tage":3,"Frost_Tage":0,"kalte_Tage":0,"Eistage":0,"sehr_kalte_Tage":0,"Wuestentage":0,"Tropennaechte":0}
Hierauf wirkt sich von Punkt 1. AutoDelete_Data aus. Nach der Anzahl der eingestellten Monate werden die Datenpunkte gelöscht. Enthält ein Jahresordner keine weiteren Datenpunkte (=Monate) mehr, wird der Jahresordner ebenfalls gelöscht. Am 01. des Monats wird für die Vorjahres_Monatswerte versucht hier eine Statistik zu lesen. Gelingt dies nicht (weil man bspw. gerade eben erst mit dem Skript begonnen hat), wird eine Auswertung über den gesamten Monat ausgeführt. Da dies rechenintensiv ist sollte man eben 12 Monate vorhalten (das lesen des JSON-Strings dauert den Bruchteil einer Sekunde, die Auswertung auf einem Raspberry Pi kann schon 1-2 Minuten dauern). Schlägt die Auswertung fehl weil man vom Vorjahresmonat auch keine Influx-Daten hat, werden die Werte zur besseren Kenntlichkeit dass keine Daten vorhanden sind auf "99999" gesetzt. -
- 6. Jahreswerte, VorTag, Vorjahres_Monat und aktueller_Monat sollten selbsterklärend sein
Bitte daran denken: Es handelt sich hierbei um eine Statistik, d.h. die Daten können immer erst mit einem Tag Verspätung angezeigt werden! Ich kann erst bspw. eine Durchschnittstemperatur des Tages berechnen, wenn ich auch alle Messwerte von 0:00 Uhr bis 23:59 Uhr des entsprechenden Tages habe, was erst am Folgetag um 0:00 Uhr der Fall ist.
Ebenso ist die Statistik erst repräsentativ wenn man den entsprechenden Zeitraum komplett hat. Fängt man bspw. Mitte des Monates und mitten im Jahr an, kann man für den aktuellen Monat und das aktuelle Jahr keine aussagefähige Statistik erwarten. Es fehlen schlichtweg die Daten dafür.