NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@jensfr Der geringste Wert den meine Station wahrnimmt sind 0,3 mm Niederschlag, wenn es nur leicht nieselt kann es schon dauern bis da etwas kommt.
-
Hattest Du eigentlich schon Dein Testgelöt von Lucy/Ecowitt erhalten?
Wollte mal was bei Ecowitt ordern, aber die sind ja anscheinend noch immer im Lockdown/hinten dran mit sehr langen Lieferzeiten... Da kommt auch bald ein Sensor mit einem Wasserdichten FĂŒhler. Wollte dann auch damit meinen Aldi Pool vielleicht etwas smarter machen. Vielleicht ordere ich dann auch den angehenden neuen LuftgĂŒtesensor mit CO2 Werten, etc.Gruss,
Matthias
Lese ich immer gerne wenn es funktioniert und natĂŒrlich auch wenn es genutzt wird :)
@lemuba sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Hattest Du eigentlich schon Dein Testgelöt von Lucy/Ecowitt erhalten?
Nö, Stand heute ist noch nichts eingetrudelt. Ăber "meinen" Zoll dauert es aktuell 3-4 Monate...
...auch wenn man es nicht unbedingt gerne lesen mag, aber ich habe derzeit sowieso noch 1.000 andere Baustellen. Ist im Grunde also auch nicht weiter tragisch ;) -
Hallo @SBorg
Ich möchte gern so eine Statistik erstellen.
Mit Sourceanalytic geht zB Temperatur nicht.Hast du eine Idee, wie man die Werte Àhnlich Sourceanalytic speichern könnte?

@Negalein Da ich ein Statistik-Fan bin: gefÀllt mir

Pauschal kann/könnte ich die Werte auch zur VerfĂŒgung, aber dazu wĂ€re eigentlich eine DB geeigneter (wg. der anfallenden Datemenge; ich mĂŒsste zumindest fĂŒr den aktuellen Monat immer alle Werte aktuell halten. Danach den abgelaufenen Monat in 13 neue Datenpunkte verschieben). Ad hoc mĂŒssten sich die Werte aber einfacher aus bspw. InfluxDB ziehen lassen.
Ich hatte da mal angefangen (nicht wundern, Wohnzimmer geht nicht mehr so ganz ;) ) :

Das erweitert und am Monatsende die Werte in DPs geschrieben wÀren IMO der gangbarste Weg. -
@Negalein Da ich ein Statistik-Fan bin: gefÀllt mir

Pauschal kann/könnte ich die Werte auch zur VerfĂŒgung, aber dazu wĂ€re eigentlich eine DB geeigneter (wg. der anfallenden Datemenge; ich mĂŒsste zumindest fĂŒr den aktuellen Monat immer alle Werte aktuell halten. Danach den abgelaufenen Monat in 13 neue Datenpunkte verschieben). Ad hoc mĂŒssten sich die Werte aber einfacher aus bspw. InfluxDB ziehen lassen.
Ich hatte da mal angefangen (nicht wundern, Wohnzimmer geht nicht mehr so ganz ;) ) :

Das erweitert und am Monatsende die Werte in DPs geschrieben wÀren IMO der gangbarste Weg.@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ad hoc mĂŒssten sich die Werte aber einfacher aus bspw. InfluxDB ziehen lassen.
Influx lÀuft bei mir bereits. Da könnt ich alle benötigten DP vom Script mal mitschreiben lassen.
Dann stehts bei mir aber schon an. Da bist fĂŒr den weiteren Weg du meine Hilfe ;)
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ad hoc mĂŒssten sich die Werte aber einfacher aus bspw. InfluxDB ziehen lassen.
Influx lÀuft bei mir bereits. Da könnt ich alle benötigten DP vom Script mal mitschreiben lassen.
Dann stehts bei mir aber schon an. Da bist fĂŒr den weiteren Weg du meine Hilfe ;)
@Negalein Ich muss mal schauen was performanter in der Abfrage ist. Habe mal ein kleines JS "zusammen gehÀmmert" was die Daten per History (hab aber erst gegen Mittag mit dem sammeln begonnen) zieht:

Macht aktuell nur Min/Max/Durchschnitt und °C ĂŒber 20°C?Mir war schon klar, dass ich es machen "darf"

Daran liegt es auch nicht, nur ist es direkt ĂŒber das Script viel zu Ressourcen fressend, dass geht per DB/History und JS performanter (und auch einfacher).
Dann muss ich mir noch was mit dem Datenmanagement und den Datenpunkten ĂŒberlegen.- Die Tagestemperaturen sollten so bleiben? Ein 31°C-Tag zĂ€hlt zu >30 und zu >25 und zu >20 (ja, es war ja auch einer ĂŒber 20/25°).
- soll(te) das 1x tĂ€glich (bspw. Mitternacht) aktualisiert werden? Die Datenmenge wĂ€ren pro Datenpunkt 86400 / 16 = 5.600 DPs die sonst abgefragt werden mĂŒssen. Das sollte man nicht im Minutentakt ausfĂŒhren ^^
-
@Negalein Ich muss mal schauen was performanter in der Abfrage ist. Habe mal ein kleines JS "zusammen gehÀmmert" was die Daten per History (hab aber erst gegen Mittag mit dem sammeln begonnen) zieht:

Macht aktuell nur Min/Max/Durchschnitt und °C ĂŒber 20°C?Mir war schon klar, dass ich es machen "darf"

Daran liegt es auch nicht, nur ist es direkt ĂŒber das Script viel zu Ressourcen fressend, dass geht per DB/History und JS performanter (und auch einfacher).
Dann muss ich mir noch was mit dem Datenmanagement und den Datenpunkten ĂŒberlegen.- Die Tagestemperaturen sollten so bleiben? Ein 31°C-Tag zĂ€hlt zu >30 und zu >25 und zu >20 (ja, es war ja auch einer ĂŒber 20/25°).
- soll(te) das 1x tĂ€glich (bspw. Mitternacht) aktualisiert werden? Die Datenmenge wĂ€ren pro Datenpunkt 86400 / 16 = 5.600 DPs die sonst abgefragt werden mĂŒssen. Das sollte man nicht im Minutentakt ausfĂŒhren ^^
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Mir war schon klar, dass ich es machen "darf"
kennst mich doch. ;) Du bist da der King

Daran liegt es auch nicht, nur ist es direkt ĂŒber das Script viel zu Ressourcen fressend, dass geht per DB/History und JS performanter (und auch einfacher).
kein Problem.
Die Tagestemperaturen sollten so bleiben? Ein 31°C-Tag zĂ€hlt zu >30 und zu >25 und zu >20 (ja, es war ja auch einer ĂŒber 20/25°).
genau. Am liebsten so wie am Screenshot. Auch mit den kalten Tagen
soll(te) das 1x tĂ€glich (bspw. Mitternacht) aktualisiert werden? Die Datenmenge wĂ€ren pro Datenpunkt 86400 / 16 = 5.600 DPs die sonst abgefragt werden mĂŒssen. Das sollte man nicht im Minutentakt ausfĂŒhren ^^
Ja, 1x am Tag sollte reichen. Geht eh nur um Tageswerte
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Mir war schon klar, dass ich es machen "darf"
kennst mich doch. ;) Du bist da der King

Daran liegt es auch nicht, nur ist es direkt ĂŒber das Script viel zu Ressourcen fressend, dass geht per DB/History und JS performanter (und auch einfacher).
kein Problem.
Die Tagestemperaturen sollten so bleiben? Ein 31°C-Tag zĂ€hlt zu >30 und zu >25 und zu >20 (ja, es war ja auch einer ĂŒber 20/25°).
genau. Am liebsten so wie am Screenshot. Auch mit den kalten Tagen
soll(te) das 1x tĂ€glich (bspw. Mitternacht) aktualisiert werden? Die Datenmenge wĂ€ren pro Datenpunkt 86400 / 16 = 5.600 DPs die sonst abgefragt werden mĂŒssen. Das sollte man nicht im Minutentakt ausfĂŒhren ^^
Ja, 1x am Tag sollte reichen. Geht eh nur um Tageswerte
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Auch mit den kalten Tagen
Das ist auch easy going und recht einfach umzusetzen, ich habe zum testen aber erst mal nur die 4 Werte genutzt.
Aber egal ob es dann per Influx oder History wird, die Anzahl der "warmen/kalten" Tage ist etwas tricky. Ich möchte eigentlich eine Einzelabfrage umgehen, d.h. zB. fĂŒr August 19 wĂ€ren das 31 Tage x 13 Messwerte x Anzahl der Messwerte...
Deswegen wird es wohl auf einen JSON-Datenpunkt hinauslaufen, der dann tĂ€glich um die entsprechenden Gradtage erhöht wird. Dann brauche ich die Vorjahresmonatsabfrage immer nur einmalig fĂŒr den Monat ausfĂŒhren.
...mal drĂŒber schlafen ;) -
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Auch mit den kalten Tagen
Das ist auch easy going und recht einfach umzusetzen, ich habe zum testen aber erst mal nur die 4 Werte genutzt.
Aber egal ob es dann per Influx oder History wird, die Anzahl der "warmen/kalten" Tage ist etwas tricky. Ich möchte eigentlich eine Einzelabfrage umgehen, d.h. zB. fĂŒr August 19 wĂ€ren das 31 Tage x 13 Messwerte x Anzahl der Messwerte...
Deswegen wird es wohl auf einen JSON-Datenpunkt hinauslaufen, der dann tĂ€glich um die entsprechenden Gradtage erhöht wird. Dann brauche ich die Vorjahresmonatsabfrage immer nur einmalig fĂŒr den Monat ausfĂŒhren.
...mal drĂŒber schlafen ;) -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
mal drĂŒber schlafen
Ich werde dich virtuell dabei unterstĂŒtzen đ
@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ich werde dich virtuell dabei unterstĂŒtzen đ
War auch teilweise erfolgreich, wenn auch mehr Fragen offen sind als ich derzeit Antworten habe. Die Werte ermitteln ist "easy peasy", aber die Statistik hat doch so ihre Fallstricke.
Zumindest lÀuft es aktuell auf InfluxDB hinaus, da es viele (auch wg. Grafana) eh am laufen haben. History produziert nur zusÀtzlich eine Menge an Daten, ist deutlich langsamer und ineffizient in der Abfrage zu handeln.
Ich hatte zwar zuvor schon eine tĂ€gliche Auswertung angedacht, dass muss aber nun so sein, denn eine monatliche Auswertung wĂŒrde zu lange dauern. Bei einem Turnus von 16 Sekunden der Wetterstation haben wir ~ 5.600 Messwerte pro Tag pro Unit. Wir brĂ€uchten also die Aussentemperaturwerte, Regenmenge und Windgeschwindigkeit. Eine Abfrage der Tageswerte dauert per Influx aber schon 2-3 Sekunden (die Ermittlung der div. Werte ist dabei so gut wie nicht messbar). Da ist die monatliche Abfrage nicht mehr zu handeln: 3 Sek x 3 Abfragen x 30 Tage = ~fast 5(!) Minuten...
...also tÀglich speichern, einlesen, addieren...
...und so nebenbei mal Gedanken gemacht, wie denn die DPs ĂŒberhaupt aussehen mĂŒssen damit man die dynamisch in der VIS anzeigen kann...btw: Fragen etc. zum eigentlichen Thread natĂŒrlich weiter gerne hier, aber IMHO sind die letzten Posts nicht OT, sondern gehören doch irgendwie zum Thema und es "dĂŒrfen" sich auch gerne mehr beteiligen ;) :)
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
mal drĂŒber schlafen
Ich werde dich virtuell dabei unterstĂŒtzen đ
@Negalein Dann mal ein erster Test. Neues JS anlegen (am besten in einer neuen Instanz, dann knallt es dir nicht im Fehlerfall den eigentlichen JS-Adapter weg. Sollte zwar nicht, aber man weiĂ ja nie... ;) ) :
/* Wetterstation-Statistiken (c)2020 by SBorg V0.0.1 - 05.09.2020 erste Alpha + Min/Max/Durchschnitt/Temp ĂŒber 20°? holt die Messwerte aus einer InfluxDB und erstellt eine Statistik ToDo: vieles ;) known issues: keine */ let werte = []; let zeitstempel = new Date(); let start = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),0,0,0); start = start.getTime(); let end = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),23,59,59); end = end.getTime(); sendTo('influxdb.0', 'query', 'select * FROM "javascript.0.Wetterstation.Aussentemperatur" WHERE time >= ' + (start *1000000) + ' AND time <= ' + (end *1000000), function (result) { if (result.error) { console.error('Fehler: '+result.error); } else { //console.log('Rows: ' + JSON.stringify(result.result[0])); for (let i = 0; i < result.result[0].length; i++) { werte[i] = result.result[0][i].value; } } /* const json = JSON.stringify(result.result[0][0]); const obj = JSON.parse(json); console.log(obj.ts); console.log(obj.value); */ Math.sum = (...werte) => Array.prototype.reduce.call(werte,(a,b) => a+b); let Durchschnitt = (Math.sum(...werte)/werte.length).toFixed(2); if (Math.max(...werte) > 20) {console.log('Temperatur lag heute ĂŒber 20°C');} console.log('Tiefstwert: ' + Math.min(...werte) + '°C'); console.log('Höchstwert: ' + Math.max(...werte) + '°C'); console.log('Durchschnitt: ' + Durchschnitt + '°C'); console.log('Erster Messwert: ' + new Date(result.result[0][0].ts).toISOString() + ' ***' + result.result[0][0].value); console.log('Letzter Messwert: ' + new Date(result.result[0][werte.length-1].ts).toISOString() + ' ***' + result.result[0][werte.length-1].value); console.log('Anzahl DatensĂ€tze: ' + werte.length); }); function timeConverter(UNIX_timestamp){ let a = new Date(UNIX_timestamp); let months = ['Jan','Feb','MĂ€r','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']; let year = a.getFullYear(); let month = months[a.getMonth()]; let date = a.getDate(); let hour = a.getHours(); let min = a.getMinutes(); let sec = a.getSeconds(); let time = pad(date) + '. ' + month + ' ' + year + ' ' + pad(hour) + ':' + pad(min) + ':' + pad(sec) ; return time; } function pad(n) { return n<10 ? '0'+n : n; } console.log('Daten ab ' + timeConverter(start)); console.log('Daten bis ' + timeConverter(end));Anpassen musst du nur #16 ob dein Influx unter Instanz "0" lĂ€uft und den DP-Zweig fĂŒr die Aussentemperatur.
Sollte dann so nach dem starten aussehen:

Interessieren wĂŒrde mich dann- allgemeine Laufzeit
- dein System (PI, bzw. CPU + RAM)
- sind die Werte plausibel
- speziell gegen ~23:5x Uhr
- Laufzeit
- Anzahl der DatensÀtze
Wenn der Ansatz so funktioniert werde ich zum "master-Branch" auf GitHub einen "Beta" anlegen, um dort dann das aktuelle JS vor zu halten.
-
@Glasfaser sagte in [Linux Shell-Skript] WLAN-Wetterstation:
++++ inklusiv Support von @skokarl , der demnĂ€chst fĂŒr Neulinge hier kommt
.... ;)Ich komm seit nem halben Jahr zu nix mehr, eine Baustelle nach der anderen, Corona Mist,
und noch nen Mops Welpen fĂŒr die Frau....also, Support erst ab 2022

auĂerdem bin ich bei Euren geilen Views und Datenbanken schon lange raus ... -
@Negalein Dann mal ein erster Test. Neues JS anlegen (am besten in einer neuen Instanz, dann knallt es dir nicht im Fehlerfall den eigentlichen JS-Adapter weg. Sollte zwar nicht, aber man weiĂ ja nie... ;) ) :
/* Wetterstation-Statistiken (c)2020 by SBorg V0.0.1 - 05.09.2020 erste Alpha + Min/Max/Durchschnitt/Temp ĂŒber 20°? holt die Messwerte aus einer InfluxDB und erstellt eine Statistik ToDo: vieles ;) known issues: keine */ let werte = []; let zeitstempel = new Date(); let start = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),0,0,0); start = start.getTime(); let end = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),23,59,59); end = end.getTime(); sendTo('influxdb.0', 'query', 'select * FROM "javascript.0.Wetterstation.Aussentemperatur" WHERE time >= ' + (start *1000000) + ' AND time <= ' + (end *1000000), function (result) { if (result.error) { console.error('Fehler: '+result.error); } else { //console.log('Rows: ' + JSON.stringify(result.result[0])); for (let i = 0; i < result.result[0].length; i++) { werte[i] = result.result[0][i].value; } } /* const json = JSON.stringify(result.result[0][0]); const obj = JSON.parse(json); console.log(obj.ts); console.log(obj.value); */ Math.sum = (...werte) => Array.prototype.reduce.call(werte,(a,b) => a+b); let Durchschnitt = (Math.sum(...werte)/werte.length).toFixed(2); if (Math.max(...werte) > 20) {console.log('Temperatur lag heute ĂŒber 20°C');} console.log('Tiefstwert: ' + Math.min(...werte) + '°C'); console.log('Höchstwert: ' + Math.max(...werte) + '°C'); console.log('Durchschnitt: ' + Durchschnitt + '°C'); console.log('Erster Messwert: ' + new Date(result.result[0][0].ts).toISOString() + ' ***' + result.result[0][0].value); console.log('Letzter Messwert: ' + new Date(result.result[0][werte.length-1].ts).toISOString() + ' ***' + result.result[0][werte.length-1].value); console.log('Anzahl DatensĂ€tze: ' + werte.length); }); function timeConverter(UNIX_timestamp){ let a = new Date(UNIX_timestamp); let months = ['Jan','Feb','MĂ€r','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']; let year = a.getFullYear(); let month = months[a.getMonth()]; let date = a.getDate(); let hour = a.getHours(); let min = a.getMinutes(); let sec = a.getSeconds(); let time = pad(date) + '. ' + month + ' ' + year + ' ' + pad(hour) + ':' + pad(min) + ':' + pad(sec) ; return time; } function pad(n) { return n<10 ? '0'+n : n; } console.log('Daten ab ' + timeConverter(start)); console.log('Daten bis ' + timeConverter(end));Anpassen musst du nur #16 ob dein Influx unter Instanz "0" lĂ€uft und den DP-Zweig fĂŒr die Aussentemperatur.
Sollte dann so nach dem starten aussehen:

Interessieren wĂŒrde mich dann- allgemeine Laufzeit
- dein System (PI, bzw. CPU + RAM)
- sind die Werte plausibel
- speziell gegen ~23:5x Uhr
- Laufzeit
- Anzahl der DatensÀtze
Wenn der Ansatz so funktioniert werde ich zum "master-Branch" auf GitHub einen "Beta" anlegen, um dort dann das aktuelle JS vor zu halten.
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Dann mal ein erster Test.
Du bist der Hammer :)
Also, das Log sieht gut aus.
Interessieren wĂŒrde mich dann
allgemeine Laufzeit
wie meinst du das?
dein System (PI, bzw. CPU + RAM)
Synology 718+, 10 GB RAM, im Docker
sind die Werte plausibel
Ja, auf den ersten Blick sind sie es
speziell gegen ~23:5x Uhr
Laufzeitwie meinst du das?
Anzahl der DatensÀtze
stehen die auch wieder im Log? Um 23:59? Oder sind die dann anders zu finden?
-
@Negalein Ich muss mal schauen was performanter in der Abfrage ist. Habe mal ein kleines JS "zusammen gehÀmmert" was die Daten per History (hab aber erst gegen Mittag mit dem sammeln begonnen) zieht:

Macht aktuell nur Min/Max/Durchschnitt und °C ĂŒber 20°C?Mir war schon klar, dass ich es machen "darf"

Daran liegt es auch nicht, nur ist es direkt ĂŒber das Script viel zu Ressourcen fressend, dass geht per DB/History und JS performanter (und auch einfacher).
Dann muss ich mir noch was mit dem Datenmanagement und den Datenpunkten ĂŒberlegen.- Die Tagestemperaturen sollten so bleiben? Ein 31°C-Tag zĂ€hlt zu >30 und zu >25 und zu >20 (ja, es war ja auch einer ĂŒber 20/25°).
- soll(te) das 1x tĂ€glich (bspw. Mitternacht) aktualisiert werden? Die Datenmenge wĂ€ren pro Datenpunkt 86400 / 16 = 5.600 DPs die sonst abgefragt werden mĂŒssen. Das sollte man nicht im Minutentakt ausfĂŒhren ^^
@SBorg Ich sehe wie sich die Umsetzung der von mir lang erwarteten Extremwerte anbahnt und stehe gern fĂŒr Tests bereit. Ich hab mir das fĂŒr bestimmte Werte per Blockly schon selber hemdsĂ€rmelig zusammengebastelt indem ich jeweils den aktuellen Wert mit dem Extremwert vergleiche und ggf. in den Extremwert Datenpunkt schreibe.

Das direkte AuĂlesen aus der DB gefĂ€llt mir aber viel besser. -
@Glasfaser sagte in [Linux Shell-Skript] WLAN-Wetterstation:
++++ inklusiv Support von @skokarl , der demnĂ€chst fĂŒr Neulinge hier kommt
.... ;)Ich komm seit nem halben Jahr zu nix mehr, eine Baustelle nach der anderen, Corona Mist,
und noch nen Mops Welpen fĂŒr die Frau....also, Support erst ab 2022

auĂerdem bin ich bei Euren geilen Views und Datenbanken schon lange raus ...@skokarl sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ich komm seit nem halben Jahr zu nix mehr, eine Baustelle nach der anderen
Willkommen im Club

@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
wie meinst du das?
Wie lange das Skript fĂŒr die Bearbeitung braucht. Bei dir auf der Synology waren es bei ~900 DatensĂ€tze 700ms. Das ist absolut akzeptabel.
Auf meinem performanten Quad Core, bei der ungefÀhr selben Anzahl an DatensÀtzen, aber schon mit drei Abfragen (Temp, Wind und Regen): 35ms

rot: Start | grĂŒn Ende@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
speziell gegen ~23:5x Uhr
Laufzeitwie meinst du das?
Anzahl der DatensÀtze
stehen die auch wieder im Log? Um 23:59? Oder sind die dann anders zu finden?
Die DatensĂ€tze stehen bei jedem Aufruf zum Ende der Skriptverarbeitung immer da. Die variieren halt je nach deinem Intervall der Station, ob du in Influx alles loggst, oder nur Ănderungen, oder...
Ein Test kurz vor Mitternacht verarbeitet dann in etwa die maximal auftretenden DatensĂ€tze. Aber es muss nicht unbedingt 23:59 Uhr sein, denn die paar DatensĂ€tze wenn du es um 23:55 Uhr ausfĂŒhrst machen den Bock nicht wirklich fett.
Zumindest sieht es nach einer zufriedenstellenden Performance aus. Ich habe aus versehen einen Fehler bei den Timecodes gemacht und alle DatensĂ€tze abgefragt. 173.000 DatensĂ€tze in 5 Sekunden. Influx ist echt flott
@Rushmed Ich hatte das schon lange auf der Agenda, nur nie direkt beim Shell-Skript. Das taugt an der Stelle einfach nicht. Da ist JS einfach die bessere/performantere Wahl.
-
@skokarl sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ich komm seit nem halben Jahr zu nix mehr, eine Baustelle nach der anderen
Willkommen im Club

@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
wie meinst du das?
Wie lange das Skript fĂŒr die Bearbeitung braucht. Bei dir auf der Synology waren es bei ~900 DatensĂ€tze 700ms. Das ist absolut akzeptabel.
Auf meinem performanten Quad Core, bei der ungefÀhr selben Anzahl an DatensÀtzen, aber schon mit drei Abfragen (Temp, Wind und Regen): 35ms

rot: Start | grĂŒn Ende@Negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
speziell gegen ~23:5x Uhr
Laufzeitwie meinst du das?
Anzahl der DatensÀtze
stehen die auch wieder im Log? Um 23:59? Oder sind die dann anders zu finden?
Die DatensĂ€tze stehen bei jedem Aufruf zum Ende der Skriptverarbeitung immer da. Die variieren halt je nach deinem Intervall der Station, ob du in Influx alles loggst, oder nur Ănderungen, oder...
Ein Test kurz vor Mitternacht verarbeitet dann in etwa die maximal auftretenden DatensĂ€tze. Aber es muss nicht unbedingt 23:59 Uhr sein, denn die paar DatensĂ€tze wenn du es um 23:55 Uhr ausfĂŒhrst machen den Bock nicht wirklich fett.
Zumindest sieht es nach einer zufriedenstellenden Performance aus. Ich habe aus versehen einen Fehler bei den Timecodes gemacht und alle DatensĂ€tze abgefragt. 173.000 DatensĂ€tze in 5 Sekunden. Influx ist echt flott
@Rushmed Ich hatte das schon lange auf der Agenda, nur nie direkt beim Shell-Skript. Das taugt an der Stelle einfach nicht. Da ist JS einfach die bessere/performantere Wahl.
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@Rushmed Ich hatte das schon lange auf der Agenda, nur nie direkt beim Shell-Skript. Das taugt an der Stelle einfach nicht. Da ist JS einfach die bessere/performantere Wahl.
Du bist der Spezialist, ich freu mich nur auf die Lösung und kann helfen die lauffÀhig zu bekommen.
-
@Negalein Dann mal ein erster Test. Neues JS anlegen (am besten in einer neuen Instanz, dann knallt es dir nicht im Fehlerfall den eigentlichen JS-Adapter weg. Sollte zwar nicht, aber man weiĂ ja nie... ;) ) :
/* Wetterstation-Statistiken (c)2020 by SBorg V0.0.1 - 05.09.2020 erste Alpha + Min/Max/Durchschnitt/Temp ĂŒber 20°? holt die Messwerte aus einer InfluxDB und erstellt eine Statistik ToDo: vieles ;) known issues: keine */ let werte = []; let zeitstempel = new Date(); let start = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),0,0,0); start = start.getTime(); let end = new Date(zeitstempel.getFullYear(),zeitstempel.getMonth(),zeitstempel.getDate(),23,59,59); end = end.getTime(); sendTo('influxdb.0', 'query', 'select * FROM "javascript.0.Wetterstation.Aussentemperatur" WHERE time >= ' + (start *1000000) + ' AND time <= ' + (end *1000000), function (result) { if (result.error) { console.error('Fehler: '+result.error); } else { //console.log('Rows: ' + JSON.stringify(result.result[0])); for (let i = 0; i < result.result[0].length; i++) { werte[i] = result.result[0][i].value; } } /* const json = JSON.stringify(result.result[0][0]); const obj = JSON.parse(json); console.log(obj.ts); console.log(obj.value); */ Math.sum = (...werte) => Array.prototype.reduce.call(werte,(a,b) => a+b); let Durchschnitt = (Math.sum(...werte)/werte.length).toFixed(2); if (Math.max(...werte) > 20) {console.log('Temperatur lag heute ĂŒber 20°C');} console.log('Tiefstwert: ' + Math.min(...werte) + '°C'); console.log('Höchstwert: ' + Math.max(...werte) + '°C'); console.log('Durchschnitt: ' + Durchschnitt + '°C'); console.log('Erster Messwert: ' + new Date(result.result[0][0].ts).toISOString() + ' ***' + result.result[0][0].value); console.log('Letzter Messwert: ' + new Date(result.result[0][werte.length-1].ts).toISOString() + ' ***' + result.result[0][werte.length-1].value); console.log('Anzahl DatensĂ€tze: ' + werte.length); }); function timeConverter(UNIX_timestamp){ let a = new Date(UNIX_timestamp); let months = ['Jan','Feb','MĂ€r','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez']; let year = a.getFullYear(); let month = months[a.getMonth()]; let date = a.getDate(); let hour = a.getHours(); let min = a.getMinutes(); let sec = a.getSeconds(); let time = pad(date) + '. ' + month + ' ' + year + ' ' + pad(hour) + ':' + pad(min) + ':' + pad(sec) ; return time; } function pad(n) { return n<10 ? '0'+n : n; } console.log('Daten ab ' + timeConverter(start)); console.log('Daten bis ' + timeConverter(end));Anpassen musst du nur #16 ob dein Influx unter Instanz "0" lĂ€uft und den DP-Zweig fĂŒr die Aussentemperatur.
Sollte dann so nach dem starten aussehen:

Interessieren wĂŒrde mich dann- allgemeine Laufzeit
- dein System (PI, bzw. CPU + RAM)
- sind die Werte plausibel
- speziell gegen ~23:5x Uhr
- Laufzeit
- Anzahl der DatensÀtze
Wenn der Ansatz so funktioniert werde ich zum "master-Branch" auf GitHub einen "Beta" anlegen, um dort dann das aktuelle JS vor zu halten.
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
speziell gegen ~23:5x Uhr
Wenn ich das richtig sehe, sind es 102 ms fĂŒr 1319 DatensĂ€tze.
Und kurz nach Mitternacht mit nur 2 DatensÀtzen auch 100 ms.
Spielt dann eigentlich keine Rolle, ob 2 oder 1300 DatensÀtze.
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
speziell gegen ~23:5x Uhr
Wenn ich das richtig sehe, sind es 102 ms fĂŒr 1319 DatensĂ€tze.
Und kurz nach Mitternacht mit nur 2 DatensÀtzen auch 100 ms.
Spielt dann eigentlich keine Rolle, ob 2 oder 1300 DatensÀtze.
@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...
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden
