NEWS
[Linux Shell-Skript] WLAN-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. -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@mymeyer sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Habt Ihr eine Idee ? Was ich noch prüfen kann ?
Pauschal bekommst du keine Verbindung vom Display/Gateway zum Rechner auf dem das Skript läuft.
Welche Station nutzt du denn (weil du als Protokoll "DNS" nutzt)?
Falls "DNS" (zB. bei einer Station von Bresser) Absicht ist, funktioniert die DNS-Umleitung der Wunderground-URL zum Skript-Rechner nicht korrekt.Hi ich das Script nochmal komplett auf eine andere VM installiert. Zusätzlich habe ich bei Wunderground eine neues Device angelegt. Aber es will trotzdem nicht
WS_ID habe ich in der App neu eingetragen und in der Konfig.
-
@mymeyer sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Listening on 0.0.0.0 1080
Ist das Absicht das du den Port von Socks-Proxy benutzt?
Wenn nicht, benutz mal einen anderen, da dieser meist schon vom Betriebsystem genutzt wird und belegt ist. -
@boronsbruder sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@mymeyer sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Listening on 0.0.0.0 1080
Ist das Absicht das du den Port von Socks-Proxy benutzt?
Wenn nicht, benutz mal einen anderen, da dieser meist schon vom Betriebsystem genutzt wird und belegt ist.Den Port hatte ich im Standard gelassen. Habe jetzt einen anderen ausprobiert. Selbes verhalten.
-
Selbst wenn ich ein Ping von dem Unifi Gateway (Console) machen kommt nichts zurück
root@unifi-lxc:/var/log/unifi# ping weatherstation.wunderground.com PING a60f001b0bdcd4f64a49719eb2307270-ee5cf64f94dbf2ed.elb.us-east-1.amazonaws.com (52.22.134.222) 56(84) bytes of data.
Da muss doch irgendwas blocken...
hmm.....
-
@mymeyer sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Da muss doch irgendwas blocken...
Nicht zwangsläufig, man kann einen Webserver auch so konfigurieren, dass er nicht auf einen ping antwortet.
...und der "Wunderground.com" ist so konfiguriert.Ich setze mal voraus, dass die IP und Port in der App die richtigen (und gleichen) sind wie in der "conf"?
Auf dieser IP (egal ob "echter" Rechner, VM, Docker...) läuft, oder vielmehr soll dann das Skript laufen?
Wenn du "Wunderground" als Protokoll nutzt ist es elementar wichtig, dass du in der App bei den Customized-Einstellungen bei "path"/weatherstation/updateweatherstation.php?
stehen hast und ganz wichtig, kein Leerzeichen davor oder danach! -
@sborg ES LÄUFT
Hi erstmal, kleiner Fehler, große Wirkung ! Es war der Port in der App unter Customized Einstellung.Danke für euere Geduld
-
sagt dir dieser Fehler etwas?
Hab ich soeben im Log entdeckt.javascript.1 2024-06-06 01:03:00.021 error at processImmediate (node:internal/timers:478:21) javascript.1 2024-06-06 01:03:00.021 error at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/src/lib/states/statesInRedisClient.ts:379:37) javascript.1 2024-06-06 01:03:00.021 error at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11082:45) javascript.1 2024-06-06 01:03:00.021 error at Object.cb (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2993:38) javascript.1 2024-06-06 01:03:00.021 error at Object.<anonymous> (script.js.Wetter.Wetterstatistik:195:43) javascript.1 2024-06-06 01:03:00.021 error at Array.reduce (<anonymous>) javascript.1 2024-06-06 01:03:00.021 error Error in callback: TypeError: Reduce of empty array with no initial value javascript.1 2024-06-06 01:03:00.019 error script.js.Wetter.Wetterstatistik: Fehler beim Lesen der InfluxDB: Invalid call
-
@mymeyer
Na supi und immer gerne
@Negalein
Leider nein.Fehler beim Lesen der InfluxDB: Invalid call
ist das Problem. Der Teil vor dem ":" stammt vom Skript selbst, Invalid call ist dann was nicht funktioniert hat. "Ungültiger Aufruf" ist sehr aussagekräftig [/Ironie AUS].
Hast du mal gestern/vorgestern nachgeschaut, tritt er da auch auf? Pauschal leider wieder ein Problem mit InfluxDB bei dir. Die restlichen Fehler sind dann nur das Resultat aus dem fehlgeschlagenen Versuch Daten aus der Influx zu lesen. -
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Hast du mal gestern/vorgestern nachgeschaut, tritt er da auch auf?
Tatsächlich!
Der Fehler kommt täglich zur selben Zeit.
Es läuft da aber auch kein Backup, usw., was zu Aussetzern führen könnte. -
@negalein Vllt Zwangstrennung der Internet Leitung mit dem Resultat daraus das sich diesbezüglich etwas aufstaut im internen Netzwerk?