NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@Negalein Sieht gut aus
Wenn man noch Zeit für die Ausgabe abzieht absolut ideal. Auch die Durchschnittsberechnung funktioniert.
Auf GitHub gibt es nun einen "beta-Branch", dort liegt zukünftig das aktuelle JS. Bitte mal testen wie schnell das ist.
Bei mir ~1.2 Sekunden, allerdings werden hier schon drei Datenbankabfragen über einen Zeitraum von einem Monat gefahren. Sind bei mir immerhin 33k Datensätze und dann noch die Auswertung. Ist ein reiner Performancetest ob auch notfalls eine Monatsauswertung durchführbar wäre.
Die Daten sollten auch soweit stimmen, nur über 20/25° stimmt dann nicht mehr und die Regenmenge ist nonsens. Die ist kein Einzelwert wie die anderen Messwerte, sondern addiert sich auf. Dann darf ich aber nicht jeden Messwert nochmals aufaddieren... -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Bei mir ~1.2 Sekunden, allerdings werden hier schon drei Datenbankabfragen über einen Zeitraum von einem Monat gefahren. Sind bei mir immerhin 33k Datensätze
15:36:18.125 info javascript.1 (1029) Start javascript script.js.common.Wetterstatistik 15:36:18.137 info javascript.1 (1029) script.js.common.Wetterstatistik: registered 0 subscriptions and 0 schedules 15:36:27.631 info javascript.1 (1029) script.js.common.Wetterstatistik: Daten ab 06. Aug 2020 00:00:00 15:36:27.632 info javascript.1 (1029) script.js.common.Wetterstatistik: Daten bis 06. Sep 2020 23:59:59 15:36:27.664 info javascript.1 (1029) script.js.common.Wetterstatistik: Temperatur lag heute über 20 °C 15:36:27.665 info javascript.1 (1029) script.js.common.Wetterstatistik: Temperatur lag heute über 25 °C 15:36:27.666 info javascript.1 (1029) script.js.common.Wetterstatistik: Tiefstwert: 9.5 °C 15:36:27.667 info javascript.1 (1029) script.js.common.Wetterstatistik: Höchstwert: 32.77 °C 15:36:27.668 info javascript.1 (1029) script.js.common.Wetterstatistik: Durchschnitt: 20.78 °C 15:36:27.669 info javascript.1 (1029) script.js.common.Wetterstatistik: Maximum Windböe: 60.51 km/h 15:36:27.689 info javascript.1 (1029) script.js.common.Wetterstatistik: Regenmenge: 97581.90 l/m² 15:36:27.700 info javascript.1 (1029) script.js.common.Wetterstatistik: Regenmenge/Tag: 21.1 l/m² 15:36:27.700 info javascript.1 (1029) script.js.common.Wetterstatistik: Erster Messwert: 2020-08-05T22:00:01.627Z ***14.72 15:36:27.700 info javascript.1 (1029) script.js.common.Wetterstatistik: Letzter Messwert: 2020-09-06T13:33:04.987Z ***18.88 15:36:27.700 info javascript.1 (1029) script.js.common.Wetterstatistik: Anzahl Datensätze: 37375
Was sagt der Meister?
Mir ist noch was aufgefallen.
Die Daten sind vom 6. 9. 2020
Heute hatten wir aber definitiv keinen Höchstwert von 32,77 °C
Oder von welchem Zeitraum nimmt er diesen Wert?Ah, sehe gerade, beim Regen 97581 l/m²
Das dürfte utopisch sein.
wären 251 l/m² seit Betreb der Station. -
19:37:01.630 info javascript.0 (3836) Start javascript script.js.Wetterstation_Statistik 19:37:01.650 info javascript.0 (3836) script.js.Wetterstation_Statistik: registered 0 subscriptions and 0 schedules 19:37:11.462 info javascript.0 (3836) script.js.Wetterstation_Statistik: Daten ab 06. Aug 2020 00:00:00 19:37:11.463 info javascript.0 (3836) script.js.Wetterstation_Statistik: Daten bis 06. Sep 2020 23:59:59 19:37:11.468 info javascript.0 (3836) script.js.Wetterstation_Statistik: Temperatur lag heute über 20 °C 19:37:11.469 info javascript.0 (3836) script.js.Wetterstation_Statistik: Temperatur lag heute über 25 °C 19:37:11.471 info javascript.0 (3836) script.js.Wetterstation_Statistik: Tiefstwert: 8.61 °C 19:37:11.472 info javascript.0 (3836) script.js.Wetterstation_Statistik: Höchstwert: 39.11 °C 19:37:11.472 info javascript.0 (3836) script.js.Wetterstation_Statistik: Durchschnitt: 23.30 °C 19:37:11.475 info javascript.0 (3836) script.js.Wetterstation_Statistik: Maximum Windböe: 47.96 km/h 19:37:11.476 info javascript.0 (3836) script.js.Wetterstation_Statistik: Regenmenge: 11029.90 l/m² 19:37:11.476 info javascript.0 (3836) script.js.Wetterstation_Statistik: Regenmenge/Tag: 47.1 l/m² 19:37:11.476 info javascript.0 (3836) script.js.Wetterstation_Statistik: Erster Messwert: 2020-08-05T22:00:29.754Z ***16.5 19:37:11.477 info javascript.0 (3836) script.js.Wetterstation_Statistik: Letzter Messwert: 2020-09-06T17:36:35.284Z ***17.61 19:37:11.477 info javascript.0 (3836) script.js.Wetterstation_Statistik: Anzahl Datensätze: 30343
Meine Zeitmessung auf nem PI4.
-
@Rushmed sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Meine Zeitmessung auf nem PI4.
Höchstwert: 39.11 °C
WOW, wo wohnst? -
@Negalein Jena City und ich wohne im Dachgeschoss
-
Danke euch beiden.
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Heute hatten wir aber definitiv keinen Höchstwert von 32,77 °C
Oder von welchem Zeitraum nimmt er diesen Wert?Ist ja auch nicht von heute (siehe meinen letzten Post "... über einen Zeitraum von einem Monat gefahren...". Schau mal genau auf ab wann die Daten ausgewertet werden ("Aug." ), und da war halt wohl so ein heißer Tag dabei. Es ging hier um den Test wie schnell eine kpl. Monatsauswertung durchgeführt werden kann. Hintergrund: s.u.
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ah, sehe gerade, beim Regen 97581 l/m²
Das dürfte utopisch sein.
wären 251 l/m² seit Betreb der Station.Steht auch im vorherigen Post
Kleiner Denkfehler meinerseits. Ich addiere jeden Messwert auf. Das ist aber falsch, da sich der Messwert nur erhöht wenn es regnet. Beispiel Messwertereihe: 0-0-0-1(es regnet einen Liter und hört dann auf)-1-1-3(regnet wieder zwei Liter)-3-3...
Korrekt ist jetzt natürlich nur drei Liter, da ich aber munter addiere: 1+1+1+3+3+3... = 12 und mehr Liter.Hintergrund für den Test der Monatsauswertung ist auch "einfach" erklärt:
Die Auswertung für den heutigen Monat ist recht einfach/schnell. Dazu wird nach Mitternacht das JS gestartet. Es wertet dann den Vortag aus und schreibt die Daten zum aktuellen Monat hinzu. Soweit so gut (und auch einfach).
Was ist aber mit den Daten aus dem Vorjahr (also aktuell Sep. 2019)?
Ich kann natürlich den aktuellen Monat immer in einem zusätzlichen Datenpunkt ablegen, dann hätte man die Vorjahreswerte aber erst in einem Jahr (also Sep. 2020 im Sep. 2021) zur Verfügung. Die DPs müssten dann auch dynamisch angelegt werden. Sind zum einen dann sehr viele, ich lege im Grunde schon wieder eine Datenbank an (obwohl ja alles schon in der Influx steht) und in der VIS kommt man wg. der dynamischen DPs nicht um Bindings herum. In Summe nicht gerade sehr prickelnd und innerhalb der VIS performant...
Deswegen möchte ich zum 1. des Monats immer eine kpl. Monatsauswertung des entsprechenden Monats aus dem Vorjahr fahren. Das dauert bei euch zwar 8-10 Sekunden, ist aber einmalig im Monat Nachts um x:xx Uhr IMHO vertretbar. Bei Multihost kann man es ggf. sogar auslagern, bei Single Host kommt es im ioB halt schlimmstenfalls mal zu einem kurzen lagg.
Dann hätte man aber keine unnütze 2. Datenbank. Der Hauptvorteil wäre aber für die VIS, man kann mit festen DPs arbeiten, also bspw. Order "aktueller Monat" und den x-DPs mit aktuellen Werten darin, und Ordner "Vorjahr" mit den entsprechenden selben fixen DPs und Vorjahreswerten. Macht den Umgang/Gestaltung in der VIS flexibler und einfacher. -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
siehe meinen letzten Post "... über einen Zeitraum von einem Monat gefahren...
Ah, vor lauter Vorfreude hab ich das ganz übersehen.
Der Hauptvorteil wäre aber für die VIS, man kann mit festen DPs arbeiten, also bspw. Order "aktueller Monat" und den x-DPs mit aktuellen Werten darin, und Ordner "Vorjahr" mit den entsprechenden selben fixen DPs und Vorjahreswerten. Macht den Umgang/Gestaltung in der VIS flexibler und einfacher.
Das denke ich auch
Deswegen möchte ich zum 1. des Monats immer eine kpl. Monatsauswertung des entsprechenden Monats aus dem Vorjahr fahren. Das dauert bei euch zwar 8-10 Sekunden, ist aber einmalig im Monat Nachts um x:xx Uhr IMHO vertretbar.
genau, das machts nichts wenn die Auswertung mal etwas dauert. Um diese Zeit is es am System eh eher ruhig.
-
Wer mag, neue Version auf GitHub. Ermittelt den 1. echten Wert (alle Werte immer vom Vortag!), schreibt diesen ggf. in einen DP falls er niedriger (da es der "Tiefstwert" ist) sein sollte:
Im JS können die Einstellungen konfiguriert werden ("User-Einstellungen"). Neue Datenpunkte werden dann automatisch angelegt. Das JS enthält zwar schon den lauffähigen Scheduler (Start jeweils 1:03 Uhr), startet aber zwecks Debugging derzeit noch sofort.
Kleine Änderung an der Anzeige der Anzahl von Datensätzen, da insgesamt 3 Serien in der Influx abgefragt werden:Anzahl Datensätze: T_1234|W_711|R_25
T: Temperaturen, W: Windgeschwindigkeiten, und wer hätte es Gedacht... R: Regenmengen
Regen kommt bei mir hin, da Gestern kein Regen, ich nur Änderungen logge und wg. Grafana (-lücken) zumindest stündlich einmal einen Wert schreiben lasse, ob er sich nun geändert hat oder nicht -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Wer mag, neue Version auf GitHub.
- Start
17:55:41.624 info javascript.1 (3031) Start javascript script.js.common.Wetterstatistik 17:55:41.648 info javascript.1 (3031) script.js.common.Wetterstatistik: 0_userdata.0.Statistik.Wetter existiert nicht... Lege Datenstruktur an... 17:55:41.655 info javascript.1 (3031) script.js.common.Wetterstatistik: Wetterstation-Statistiken gestartet... 17:55:41.676 info javascript.1 (3031) script.js.common.Wetterstatistik: registered 0 subscriptions and 1 schedule 17:55:42.236 info javascript.1 (3031) script.js.common.Wetterstatistik: Daten ab 06. Sep 2020 00:00:00 17:55:42.239 info javascript.1 (3031) script.js.common.Wetterstatistik: Daten bis 06. Sep 2020 23:59:59 17:55:42.240 info javascript.1 (3031) script.js.common.Wetterstatistik: Tiefstwert: 13.72 °C 17:55:42.240 info javascript.1 (3031) script.js.common.Wetterstatistik: Höchstwert: 20 °C 17:55:42.240 info javascript.1 (3031) script.js.common.Wetterstatistik: Durchschnitt: 16.80 °C 17:55:42.241 info javascript.1 (3031) script.js.common.Wetterstatistik: Maximum Windböe: 14.8 km/h 17:55:42.241 info javascript.1 (3031) script.js.common.Wetterstatistik: Regenmenge/Tag: 12.3 l/m² 17:55:42.241 info javascript.1 (3031) script.js.common.Wetterstatistik: Erster Messwert: 2020-09-05T22:01:30.847Z ***17.5 17:55:42.242 info javascript.1 (3031) script.js.common.Wetterstatistik: Letzter Messwert: 2020-09-06T21:58:22.241Z ***13.88 17:55:42.242 info javascript.1 (3031) script.js.common.Wetterstatistik: Anzahl Datensätze: T_844|W_1865|R_2811
Bei Tiefstwert steht noch nichts im DP
-
Ich hätte die Statistikwerte gern in Wetterstation.0.Statistik abgelegt.
Kann der JS Adapter das etwa nicht?// *** User-Einstellungen *************************************************************************************** let WET_DP='Wetterstation.0'; /* wo liegen die Datenpunkte mit den Daten der Wetterstation [default: javascript.0.Wetterstation] */ let INFLUXDB_INSTANZ='0'; // unter welcher Instanz läuft die InfluxDB [default: 0] let PRE_DP='Wetterstation.0.Statistik'; // wo sollen die Statistikwerte abgelegt werden const ZEITPLAN = "3 1 * * *"; // wann soll die Statistik erstellt werden (Minuten Stunde * * *) // *** ENDE User-Einstellungen **********************************************************************************
-
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Bei Tiefstwert steht noch nichts im DP
Kommt davon wenn man gerade beim publishen noch eine Änderung machen muss
Ich muss den DP nach dem Anlegen vorher mit einem "unsinnigen" Wert befüllen, sonst macht er nüscht. Suche mal nach (so um #132):createState(PRE_DP+'.aktueller_Monat.Tiefstwert','', und ersetze/ergänze mit createState(PRE_DP+'.aktueller_Monat.Tiefstwert',100,
Ist mit der nächsten Version gefixt.
@Rushmed Ja, kann er so nicht, nur unterhalb von "javascript.x" oder "0_userdata.x".
Entweder musst du sie dann per Hand anlegen, oder das "createState" mit einem anderen Aufruf ersetzen. Da gibt es von paul bzw. mic ein Skript dafür. Das packt man dann (falls es nicht sogar so schon angelegt ist) in eine JS-function XYZ. Dann braucht man createState nur durch XYZ ersetzen. Kann ich dir später behilflich sein. Im Moment würde ich es noch nicht ändern, da du sonst bei jedem Update des Skriptes immer per Hand alles ändern musst.
Oder mittels des Skriptes von paul/mic die DPs anlegen lassen. Dann brauchst du an dem Statistik-Skript überhaupt nichts ändern. Ich prüfe nur ob die DPs vorhanden sind und lege sie dann ggf. an. Sind sie vorhanden passiert an der Stelle dann einfach nichts weiter. Wäre IMO der beste Weg. -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Suche mal nach (so um #132):
DP passt jetzt, aber es kam eine Warnung
20:22:24.729 info javascript.1 (3031) Start javascript script.js.common.Wetterstatistik 20:22:24.777 info javascript.1 (3031) script.js.common.Wetterstatistik: 0_userdata.0.Statistik.Wetter existiert nicht... Lege Datenstruktur an... 20:22:24.784 info javascript.1 (3031) script.js.common.Wetterstatistik: Wetterstation-Statistiken gestartet... 20:22:24.817 info javascript.1 (3031) script.js.common.Wetterstatistik: registered 0 subscriptions and 1 schedule 20:22:25.109 info javascript.1 (3031) script.js.common.Wetterstatistik: Daten ab 06. Sep 2020 00:00:00 20:22:25.109 info javascript.1 (3031) script.js.common.Wetterstatistik: Daten bis 06. Sep 2020 23:59:59 20:22:25.110 info javascript.1 (3031) script.js.common.Wetterstatistik: Tiefstwert: 13.72 °C 20:22:25.110 info javascript.1 (3031) script.js.common.Wetterstatistik: Höchstwert: 20 °C 20:22:25.110 info javascript.1 (3031) script.js.common.Wetterstatistik: Durchschnitt: 16.80 °C 20:22:25.111 info javascript.1 (3031) script.js.common.Wetterstatistik: Maximum Windböe: 14.8 km/h 20:22:25.111 info javascript.1 (3031) script.js.common.Wetterstatistik: Regenmenge/Tag: 12.3 l/m² 20:22:25.111 info javascript.1 (3031) script.js.common.Wetterstatistik: Erster Messwert: 2020-09-05T22:01:30.847Z ***17.5 20:22:25.112 info javascript.1 (3031) script.js.common.Wetterstatistik: Letzter Messwert: 2020-09-06T21:58:22.241Z ***13.88 20:22:25.112 info javascript.1 (3031) script.js.common.Wetterstatistik: Anzahl Datensätze: T_844|W_1865|R_2811 20:22:25.227 warn javascript.1 (3031) at Object.cb (script.js.common.Wetterstatistik:99:9)
Zeile 99 schaut so aus
if (getState(PRE_DP+'.aktueller_Monat.Tiefstwert').val > Tiefstwert) {setState(PRE_DP+'.aktueller_Monat.Tiefstwert', Tiefstwert, true);}
Erledigt. Hatte
'',
zuviel -
Und weiter gehts...:
Sind natürlich keine August-Werte, sondern die vom aktuellen Monat, aber wir haben ja noch nichts vom Vormonat
Mehr Werte wird es erst mal während der Testphase wohl nicht geben (die sollten aber korrekt/aktuell sein), da ich sonst bei einem (Denk-)Fehler einfach zu viel ändern muss. So sind es wenigstens nur drei Werte...
Der "August" wird nur heute (8.09.) mittels des Skriptes angelegt. Dies geschieht dann zukünftig am Monatsanfang, aber den haben wir aktuell ja nicht und wer will schon so lange warten...Sonst #94 abändern:
if (zeitstempel.getDate() == 8) { // Jobs Monatserster...
Hier wäre die "8" durch den aktuellen Tag des Monats zu ersetzen, dann läuft es auch an diesem Tag.
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Sonst #94 abändern:
if (zeitstempel.getDate() == { // Jobs Monatserster...Zeile 94 schaut bei mir so aus:
console.log('Letzter Messwert: ' + new Date(result.result[0][temps.length-1].ts).toISOString() + ' ***' + result.result[0][temps.length-1].value);
Kann das stimmen, dass diese Zeile geändert werden muss?
Edit: gerade gesehen, dass auf Git schon die aktuelle Beta liegt!
-
@Negalein Habe ich vergessen zu erwähnen
Aktuell grübele ich gerade über die Vorjahreswerte:
Die sehen zwar schön befüllt aus (+ werden bzw. würden sie auch schon), allerdings sind sie nicht korrekt. Der Grund ist auch recht einfach, denn ich sammele erst seit Mai (? glaube ich...) Daten, kann also vom Sep. 2019 noch gar nichts haben.
Was sollte da nach eurer Meinung vorläufig stehen bis man Daten hat? Der Typ ist number, also kein "--", "n.a.", "xx" etc.
Ein unsinniger Wert zum besseren erkennen wie bspw. -99, pauschal 0,...
...oder einfach überhaupt nichts (habe ich noch nicht probiert ob das bei Number geht...)Wenn keine weiteren Fehler auftreten wäre es sogar witzigerweise für die drei Werte fertig. Dann beginnt die Fleißarbeit die anderen Messwerte einzupflegen
*EDIT* Ach ja, warum eigentlich Data-Datenpunkt? Naja, eine kleine "Datenbank" ist es dann doch geworden. Ich speichere die aktuellen Monatswerte in einem JSON-String, dann brauche ich in einem Jahr keine Monatsauswertung mehr auszuführen. Da es auch nur 12 Strings pro Jahr sind, könnte man relativ schnell auch eine Jahresstatistik anfertigen...
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Was sollte da nach eurer Meinung vorläufig stehen bis man Daten hat?
zB 99999
-
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
zB 99999
Habe ich jetzt so übernommen
"Nichts" geht nicht, da wg. des Typs Number dann automatisch "0" eingesetzt wird.
Neue Version auf GitHub V0.0.1 Beta :
Damit alles bei Null startet den kpl. Statistik-Zweig vorher löschen. Beim Start legt das Skript dann die Ordnerstruktur an, befüllt den VorJahres-Monat mit 99999 (außer jemand sammelt per Influx schon seit Sep. 2019 Daten. Solange gibt es das WLAN-Skript aber noch nicht), legt "Data" an (der bleibt so "leer" bis zum nächsten Monatsersten, dann befinden sich dort darunter die gespeicherten Monatsauswertungen) und der Aktuelle Monat wird befüllt. Echte Werte gibt es dann um 1:03 Uhr (default), da ich immer bis Mitternacht warten muss bis alle Daten des Tages vorliegen.
Deswegen auch die komischen Werte mit -100, 0, 100 °C- der Höchstwert des letzten Tages wird wohl immer über -100 °C liegen (+ damit aktualisiert)
- der Durchschnitt liegt entweder tatsächlich bei 0 °C, dann stimmt er zufällig, oder er wird eben mit dem korrekten aktualisiert
- der Tiefstwert des letzten Tages wird wohl immer unter 100 °C liegen (+ damit aktualisiert)
Also Skript nach dem Starten auch laufen lassen. Es sollte dann für den aktuellen Monat die drei Werte korrekt erfassen.
Soweit möglich möchte ich dann daran auch nichts mehr ändern und die weiteren dann zusätzlich hinzufügen. Somit könnten für den September 2020 alle Daten vorliegen, wenn auch noch nicht durchgängig. Ab Oktober 2020 hätte ich dann aber gerne komplett...Den Scheduler würde ich nicht zu nah an Mitternacht verschieben. Falls ihr im Influx viele Datenwerte im RAM vor dem schreiben vorhaltet, kann es sonst sein, dass er noch nicht alle Messwerte aus dem RAM auch in die InfluxDB geschrieben hat. Da die Werte vom Vortag immer von 0:00 Uhr bis 23:59:59 Uhr gelesen werden, ist es egal wann sie am nächsten Tag gelesen werden. Ihr könnt im Scheduler auch bspw. 6:00 Uhr eintragen. Funktioniert genauso, nur habt ihr die Statistik dann eben erst ab 6:00 Uhr aktuell vorliegen
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Neue Version auf GitHub V0.0.1 Beta :
läuft
Dann warte ich jetzt mal auf 1:03 Uhr
-
Neue Version auf GitHub V0.0.1 Beta
- + Windböe
- + max. Regenmenge pro Tag (mangels Regen ungetestet )
Damit sind jetzt alle drei Messwertereihen (Temperatur, Wind und Regen) auch im Einsatz, falls sich wer fragt warum es gerade die Messwerte aktuell geworden sind.
...und aus aktuellem Anlass folgen jetzt > 2x °C - Tagebtw: Ich werde jetzt auch anfangen die Versions-Nummern zu erhöhen, denn eigentlich sollte bis dato jetzt alles funktionieren.
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Neue Version auf GitHub V0.0.1 Beta
läuft wie immer sofort