NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
-
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Was muss ich da machen?
"Error in callback: TypeError: Reduce of empty array with no initial value"
Du bekommst keine Verbindung zur InfluxDB. Im Skript noch alles (Bucket, Instanz) korrekt eingetragen?
Ok, jetzt kam gerade @Rene55 dazwischen
Testet ihr ev. den neuen Alpha 6.0? Mit dem aktuellen läuft alles. -
Aktuell gibt es bei Windy ein kleineres Problem. Die haben an der API rum geschraubt und zusätzlich das Mindest-Sendeintervall geändert. Fix ist in Arbeit, allerdings funktioniert die Übertragung (zumindest jede zweite) trotzdem, nur der DP für eine korrekte Übertragung an Windy verbleibt immer auf false.
-
@sborg Nee, ist ja Produktivsystem mit 5.0.19, javascript v8.3.1
-
@rene55
Ok, dann ist es dies zumindest nicht. Ich nutze zwar 5.0.19 und 8.4.2, da wäre mir aber weiter nichts bekannt warum er plötzlich die InfluxDB nicht mehr lesen kann...? -
@sborg Müsste nicht, wenn die Influx nicht gelesen werden kann, der "Fehler beim Lesen der InfluxDB" im Log erscheinen?
-
@rene55
IMO nicht wenn überhaupt keine Verbindung zustande kommt, sondern nur wenn bei der Abfrage selbst ein Problem auftritt. Das Problem hatte genau in der Art ein anderer User vor einiger Zeit, da kam auch keine andere Fehlermeldung (damals war die Bezeichnung des Buckets falsch).Ist nur komisch warum bei euch beiden (ev. melden sich ja auch noch weitere) und bspw. bei mir läuft es.
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Testet ihr ev. den neuen Alpha 6.0?
Nö, bin noch auf 5.0.19
Javascript: 8.4.2Du bekommst keine Verbindung zur InfluxDB. Im Skript noch alles (Bucket, Instanz) korrekt eingetragen?
Ja, da hat sich nichts geändert.
// *** User-Einstellungen ********************************************************************************************************************************** const WET_DP='0_userdata.0.Wetterstation'; // wo liegen die Datenpunkte mit den Daten der Wetterstation [default: 0_userdata.0.Wetterstation] const INFLUXDB_INSTANZ='1'; // unter welcher Instanz läuft die InfluxDB [default: 0] const INFLUXDB_BUCKET='iobroker'; // Name des zu benutzenden Buckets
-
@sborg Tatsächlich sind die Results von 'Temp, Wind und Rain'
leer
. -
@rene55 sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Tatsächlich sind die Results von 'Temp, Wind und Rain
die in
0_userdata.0.Wetterstation
? -
@negalein Ich zieh mich mal eben zurück. Ich hab den Fehler wahrscheinlich schon länger drin. Asche über mein Haupt.
@SBorg erinnert sich sicher noch daran, dass ich damals versucht habe, die Measurement-Namen zu kürzen. Da hab ich wohl nicht alles konsequent durchgezogen.
Daten kommen aktuell wieder aus der Influx. -
@sborg Trotz der eingelesenen Daten habe ich (im Debugmodus) eine Ausgabe
"Erster Messwert: 2024-05-30T22:00:28.347Z ***undefined",
die ich mir nicht erklären kann.Was genau macht eigentlich "const reducer = (accumulator, curr) => accumulator + curr;" ?
-
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ja, da hat sich nichts geändert.
Dann müsste es auch gehen
Wenn also da alles korrekt ist, stehen denn überhaupt Daten in der InfluxDB für den Zeitraum? -
@rene55 sagte in [Linux Shell-Skript] WLAN-Wetterstation:
"Erster Messwert: 2024-05-30T22:00:28.347Z ***undefined",
die ich mir nicht erklären kann.Immerhin hat er einen Zeitstempel aus dem Array lesen können, nur keinerlei Wert. Loggst du die DPs in Influx beim "Typ" als "Automatik" oder explizit als Zahl (letzteres würde ich bevorzugen)?
Was genau macht eigentlich "const reducer = (accumulator, curr) => accumulator + curr;" ?
Das gehört zusammen
const reducer = (accumulator, curr) => accumulator + curr; let Temp_Durchschnitt = Number((temps.reduce(reducer)/temps.length).toFixed(2));
und nutze ich zur Berechnung eines Durchschnittes.
reduce
bildet die Summe eines Arrays. Normalerweise würdest du bei einem Array mittels "for each" oder Schleife über das Array iterieren und dann jeweilsSumme += Einzelwert
ausführen, um dann den Durchschnitt mittels "Summe / Anzahl der Elemente im Array" bilden. Das ist hier bei drei Arrays mit rund 100k Datensätzen auf einem Raspi eine Aktion von mehreren Minuten, mittels "reduce" wenige Sekunden -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
stehen denn überhaupt Daten in der InfluxDB für den Zeitraum?
Ja, im Explorer, sowie in Grafana
Edit: ich denke, Fehler gefunden.
Ich hatte
const INFLUXDB_BUCKET='iobroker'; // Name des zu benutzenden Buckets
Richtig ist aberconst INFLUXDB_BUCKET='iobroker-1w
.
schaut jetzt so aus.
2024 ist natürlich jetzt versaut ((könnt mich selber schlagen)
Warum steht aber bei
Regentage 2021
dortundefined
?Und die anderen 0-Werte dürften auch nicht stimmen.
-
@sborg Danke für die Erklärung. Ich konnte damit (noch) nichts anfangen. Ich tue mich mit diesen Array-Funktionen doch etwas schwer.
Die Werte werden meistens als Number in die Influx geschrieben.
Jetzt haben wir dich umsonst aus dem Wochenende an den Rechner geholt. Oder gibt es noch Verbesserungen (=Windy) ? -
...und der muss jetzt einfach sein...
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Du bekommst keine Verbindung zur InfluxDB. Im Skript noch alles (Bucket, Instanz) korrekt eingetragen?
Aber egal, Hauptsache lüppt widda.
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Warum steht aber bei Regentage 2021 dort undefined?
In 2021 gab es die Tage noch nicht, die sind erst 2022 neu dazu gekommen. Man könnte die zwar im JSON nachtragen, ist aber IMO nicht zielführend, denn so sieht man dass es dafür noch keine Daten gab. Bei einer "0" geht man dann einfach davon aus, dass es halt im Mai 2021 bspw. keine Regentage gab.
Und die anderen 0-Werte dürften auch nicht stimmen.
Was steht denn bspw. im JSON für Mai 2023 drin?
[ { "Tiefstwert": 2.72, "Hoechstwert": 30.72, "Temp_Durchschnitt": 16.1, "Max_Windboee": 21.88, "Max_Regenmenge": 13.995, "Regenmenge_Monat": 51.58, "warme_Tage": 21, "Sommertage": 8, "heisse_Tage": 1, "Frost_Tage": 0, "kalte_Tage": 0, "Eistage": 0, "sehr_kalte_Tage": 0, "Wuestentage": 0, "Tropennaechte": 0, "Regentage": 9 } ]
Wenn da
"Regentage": 0
steht kann er auch nichts anderes anzeigen. Dann hat damals irgendwas bei der Verarbeitung nicht funktioniert. "Regenmnege" etc. ist aber auch "0", da lief wohl was für den gesamten Mai schief.
Pauschal kommt man an die Werte aber jederzeit dran, ist nur aufwändig. Sie stehen aber wenn sie nicht gelöscht wurden in der InfluxDB. -
@rene55
JS ist im Ganzen nicht "meins". So langsam bemerke ich auch, wenn ich mal länger mit etwas nicht arbeite, dass ich dann schon wieder einiges vergessen habe"Windy" will noch nicht wie ich wohl will. Ich muss die korrekte "cool down zeit" noch finden, oder mal lesen ob es irgendwo steht, aber API-Dokus sind meist sehr, sehr spärlich...
-
@sborg Ok, mach dir wegen Windy keinen Kopf - ist eh nur Beiwerk.
Wegen JS: Ich hab schon mehrere Bücher studiert, gesehen habe ich das noch nirgendwo. Aber gut dass es dich gibt. -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Pauschal kommt man an die Werte aber jederzeit dran, ist nur aufwändig. Sie stehen aber wenn sie nicht gelöscht wurden in der InfluxDB.
Danke, das muss ich mir noch überlegen.
Muss mal bei Awekas schaun, seit wann wir dort Daten haben.