NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@SBorg Danke ich hab' die Startzeit angepasst.
Im Station Log sehe ich dass tatsächlich oft knapp über fünf Minuten zwischen zwei Datenpaketen liegen. Meistens aber weniger als eine Minute.
Kann ich statt das Intervall nur vorzusiehen auch die Länge erhöhen?
Ich hatte noch keinen Datenpaketabstand von mehr als sechs Minuten im Log.Edit:
#Mitternachtjobs if [ $(date +%H) -ge "23" ] && [ $(date +%M) -ge "55" ] && [ -z $MIDNIGHTRUN ]; then rain #Jahresregenmenge firmware_check #neue Firmware reset_zaehler #Sonnenscheindauer, Solarenergie zurücksetzen (enthällt auch Speicherung Werte VorJahr) minmaxavg365d #Min-/Max-/Avg-Aussentemperatur vor einem Jahr metsommer #meteorologischer Sommer Durchschnittstemperatur und Regenmenge MELDUNG "Mitternachtjobs durchgef%C3%BChrt" fi if [ $(date +%H) -eq "0" ] && [ $(date +%M) -le "3" ]; then unset MIDNIGHTRUN if [ $(date +%Z) == "CEST" ]; then ZULU=22; else ZULU=23; fi fiWenn ich diese Zeile richtig verstehe ist das Prüfintervallende fest bei 00:03.
if [ $(date +%H) -eq "0" ] && [ $(date +%M) -le "3" ]; thenDann wurde es ja mit der früheren Startzeit auch verlängert und sollte dann passen.
Ich beobachte das.
@Rushmed
Gelegentlich über 5 Minuten würde das Problem erklären. Ich hatte es nur wegen der CPU-Last vorgezogen.
Hier wäre es jetzt aber trotzdem ratsam den Zeitraum vorzuziehen (eventuell sogar noch 1-2 Minuten vorher).
Und ja, siehst du richtig. Die Routine endet um 0:03 Uhr. Nur den Zeitraum zu verlängern bringt hier nichts.Beispiel (mit Standardwerten 23:58 Uhr bis 0:03 Uhr):
- Paket kommt um 23:57 Uhr --> nix passiert
- Paket kommt um 0:02 Uhr --> nix passiert (die Mitternachtsroutinen sollen nur um 23:58/59 Uhr einmalig laufen
Verlängerst du nun nur den Zeitraum nach hinten, passiert dann genau dasselbe. Wann die Routine beendet wird ist nicht maßgeblich, denn die senkt nur die CPU-Last. Damit muss nicht bei jedem Datenpaket alles geprüft werden. Zudem wird noch festgestellt ob gerade Sommer-/Winterzeit ist (nötig für InfluxDB). Das muss auch nur einmalig am Tag erfolgen und nicht bei jedem Datenpaket.
Auch das vorzeitige "beenden" des aktuellen Tages ist (IMHO) nicht wirklich sooo wichtig. In 5 Minuten wird sich die Temperatur kaum ändern und der Niederschlag landet dann halt auf dem nächsten Tag. In meinen Augen alles verschmerzbar, da die Tolleranzen der Heim-Wetterstationen eh nicht gerade klein sind.
Ich würde es mal mit 23:54 Uhr und 0:10 Uhr versuchen, dann sollte es auch mit einem 6-Minuten Intervall funktionieren, wobei mir 5 Minuten komisch vorkommen. Bei mir sind es idR. ~35-40 Sekunden und vielleicht eine handvoll Pakete pro Tag die als nicht valide verworfen werden. -
@Rushmed
Gelegentlich über 5 Minuten würde das Problem erklären. Ich hatte es nur wegen der CPU-Last vorgezogen.
Hier wäre es jetzt aber trotzdem ratsam den Zeitraum vorzuziehen (eventuell sogar noch 1-2 Minuten vorher).
Und ja, siehst du richtig. Die Routine endet um 0:03 Uhr. Nur den Zeitraum zu verlängern bringt hier nichts.Beispiel (mit Standardwerten 23:58 Uhr bis 0:03 Uhr):
- Paket kommt um 23:57 Uhr --> nix passiert
- Paket kommt um 0:02 Uhr --> nix passiert (die Mitternachtsroutinen sollen nur um 23:58/59 Uhr einmalig laufen
Verlängerst du nun nur den Zeitraum nach hinten, passiert dann genau dasselbe. Wann die Routine beendet wird ist nicht maßgeblich, denn die senkt nur die CPU-Last. Damit muss nicht bei jedem Datenpaket alles geprüft werden. Zudem wird noch festgestellt ob gerade Sommer-/Winterzeit ist (nötig für InfluxDB). Das muss auch nur einmalig am Tag erfolgen und nicht bei jedem Datenpaket.
Auch das vorzeitige "beenden" des aktuellen Tages ist (IMHO) nicht wirklich sooo wichtig. In 5 Minuten wird sich die Temperatur kaum ändern und der Niederschlag landet dann halt auf dem nächsten Tag. In meinen Augen alles verschmerzbar, da die Tolleranzen der Heim-Wetterstationen eh nicht gerade klein sind.
Ich würde es mal mit 23:54 Uhr und 0:10 Uhr versuchen, dann sollte es auch mit einem 6-Minuten Intervall funktionieren, wobei mir 5 Minuten komisch vorkommen. Bei mir sind es idR. ~35-40 Sekunden und vielleicht eine handvoll Pakete pro Tag die als nicht valide verworfen werden. -
Die Solarenergie ist mir noch durch die Lappen "bei String/Number-Problematik" geflutscht:
https://github.com/SBorg2014/WLAN-Wetterstation/issues/90
Passiert aber nur nach Nullstellung bis der Wert >=1 ist, also so 20-30 Meldungen pro Tag. Fix läuft bereits im Test. -
@SBorg Ok, danke. Ich hab' das Intervall angepasst.
Kann ich irgendwie nachvollziehen ob invalide Datenpakete ankommen und verworfen werden?Kann ich irgendwie nachvollziehen ob invalide Datenpakete ankommen und verworfen werden?
Mittels kleinem Hack ja.
Ändere in der "sh" mal bei ~#251#Kommunikation herstellen und Daten empfangen get_DATA #KOM-Fehler?in
#Kommunikation herstellen und Daten empfangen get_DATA if [ "$?" -eq "1" ]; then MELDUNG "Datenpaket verworfen"; fi #KOM-Fehler?Dann loggst du
0_userdata.0.Wetterstation.Info.MeldungenzB. mittels History. Da kommt normalerweise nur stündlich ein Alive, dass das Skript noch läuft. -
@SBorg Danke für den "Hack". Damit wird mir ja sogar die Ausführung des Mitternacht Jobs angezeigt.
Vll. wäre es eine Überlegung wert die Funktion per Config de-/aktivierbar für alle mit ein zu bauen.In den Meldungen kam nicht bzgl. invalider Pakete an. Lt. Router ist die Wlan Verbindung zur WS exzellent. Jetzt kanns wohl nurnoch an der Verbindung Station <> Sensor liegen.
Auf jeden Fall funktionierte gestern der Mitternachts Job schon 23:55 Uhr dank der Anpassungen.
Danke.
-
@SBorg Danke für den "Hack". Damit wird mir ja sogar die Ausführung des Mitternacht Jobs angezeigt.
Vll. wäre es eine Überlegung wert die Funktion per Config de-/aktivierbar für alle mit ein zu bauen.In den Meldungen kam nicht bzgl. invalider Pakete an. Lt. Router ist die Wlan Verbindung zur WS exzellent. Jetzt kanns wohl nurnoch an der Verbindung Station <> Sensor liegen.
Auf jeden Fall funktionierte gestern der Mitternachts Job schon 23:55 Uhr dank der Anpassungen.
Danke.
Vll. wäre es eine Überlegung wert die Funktion per Config de-/aktivierbar für alle mit ein zu bauen.
Die Funktion ist schon seit rund 4 Jahren vorhanden (glaube ab V2.15...)

So lange wird auch der Start des Skriptes dort angezeigt, Ausführung des Mitternachtjobs, ggf. Fehler usw.
Außerdem wird stündlich gepusht ob das Skript noch "lebt".
Der "Hack" fügt lediglich noch hinzu wann ein Paket verworfen wurde.Jetzt kanns wohl nurnoch an der Verbindung Station <> Sensor liegen.
Das meinte ich mit dem Beispiel der Wärmepumpe. Du hast nix gemacht und plötzlich geht es nicht mehr. Allerdings ist dies das 868kHz-Frequenzband. Da sollte nichts stören und sukzessiver Datenverkehr ist da ebenfalls nicht erlaubt. Wie alt/gut sind denn deine Batterien? Solarzelle blind?
Der Fix läuft seit zwei Tagen und es herrscht Ruhe. Dürfte also vor dem WE noch released werden.
-
Vll. wäre es eine Überlegung wert die Funktion per Config de-/aktivierbar für alle mit ein zu bauen.
Die Funktion ist schon seit rund 4 Jahren vorhanden (glaube ab V2.15...)

So lange wird auch der Start des Skriptes dort angezeigt, Ausführung des Mitternachtjobs, ggf. Fehler usw.
Außerdem wird stündlich gepusht ob das Skript noch "lebt".
Der "Hack" fügt lediglich noch hinzu wann ein Paket verworfen wurde.Jetzt kanns wohl nurnoch an der Verbindung Station <> Sensor liegen.
Das meinte ich mit dem Beispiel der Wärmepumpe. Du hast nix gemacht und plötzlich geht es nicht mehr. Allerdings ist dies das 868kHz-Frequenzband. Da sollte nichts stören und sukzessiver Datenverkehr ist da ebenfalls nicht erlaubt. Wie alt/gut sind denn deine Batterien? Solarzelle blind?
Der Fix läuft seit zwei Tagen und es herrscht Ruhe. Dürfte also vor dem WE noch released werden.
Die Funktion ist schon seit rund 4 Jahren vorhanden (glaube ab V2.15...) 😊
Ist mir nie aufgefallen da bisher kein Logging aktiviert war.
Beim letzten Batteriewechsel vor vll. ein bis zwei Jahern war das Der Tratnsparente Kunststoff über der Solarzelle schon trüb. Die Station zeigt momentan zumindest keine leere Sensorbatterie an.
Ich werde mich demnächst mal zum Sensor begeben und die Batterien tauschen. -
Da innerhalb der letzten vier Tage keine offensichtlichen Fehler mehr aufgetreten sind:
Neues Release des Wetterstation WLAN-Skriptes auf GitHub V3.6.3
- ~ Fix 'has to be type "number" but received type "string"' im ioB bei Solar-DPs wenn als Zahl definiert ist (Simple-API ab 3.x) / Issue #90
Wie immer zu finden im GitHub
Update-Routine von Vorgängerversion:
- aktuellen WS-Updater nutzen
./ws_updater.shim Installationsverzeichnis ausführen- Menüpunkt "4" wählen und die Fragen beantworten
Update sollte durchgeführt werden, gerade wenn man Simple-Api 3.x nutzt.
-
@sborg
Also hab mal noch ein bischen getestet. Ab 3.0.6 mit der Authentifizierung über user und password funktionieren die cURL-Aufrufe (so) nicht mehr.curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"zum Beispiel friert ein.
https://192.168.116.249:8087/setBulk?0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true&prettyPrint&user=meinuser&pass=1234über Browser geht aber problemlos.
Und das coolste ist, da friert anscheinend die gesamte SimpleApi ein.
Nach dem ich die Authenifizierung deaktiviert hab, sind nämlich von meinem 2. "Wettersation"-Service der noch auf 3.6.1 lief die Fehler aufgetaucht. Davor passierte einfach nix...Aber sonst scheint bei mir die 3.6.2 mit Simple 3.0.7 zu laufen.
@sborg
Also hab mal noch ein bischen getestet. Ab 3.0.6 mit der Authentifizierung über user und password funktionieren die cURL-Aufrufe (so) nicht mehr.curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"zum Beispiel friert ein.
https://192.168.116.249:8087/setBulk?0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true&prettyPrint&user=meinuser&pass=1234über Browser geht aber problemlos.
Und das coolste ist, da friert anscheinend die gesamte SimpleApi ein.
Nach dem ich die Authenifizierung deaktiviert hab, sind nämlich von meinem 2. "Wettersation"-Service der noch auf 3.6.1 lief die Fehler aufgetaucht. Davor passierte einfach nix...Aber sonst scheint bei mir die 3.6.2 mit Simple 3.0.7 zu laufen.
Kann ich so bestätigen. Seit dem Upgrade des iobroker SimpleAPI Adapters von 2.x auf 3.0.7 funktioniert die Authentifizierung nicht mehr. Ich habe sie dann im Adapter deaktiviert und es funktionierte dann erst mal alles wieder.
-
@SBorg Ich bekomme diese Meldung im Log:
simple-api.0 2026-04-11 19:00:29.648 info State value to set for "0_userdata.0.Wetterstation.Druck_Tendenz" has to be type "number" but received type "string"Ich habe den Wert schon immer als String in der InfluxDB.
-
@sborg
Also hab mal noch ein bischen getestet. Ab 3.0.6 mit der Authentifizierung über user und password funktionieren die cURL-Aufrufe (so) nicht mehr.curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"zum Beispiel friert ein.
https://192.168.116.249:8087/setBulk?0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true&prettyPrint&user=meinuser&pass=1234über Browser geht aber problemlos.
Und das coolste ist, da friert anscheinend die gesamte SimpleApi ein.
Nach dem ich die Authenifizierung deaktiviert hab, sind nämlich von meinem 2. "Wettersation"-Service der noch auf 3.6.1 lief die Fehler aufgetaucht. Davor passierte einfach nix...Aber sonst scheint bei mir die 3.6.2 mit Simple 3.0.7 zu laufen.
Kann ich so bestätigen. Seit dem Upgrade des iobroker SimpleAPI Adapters von 2.x auf 3.0.7 funktioniert die Authentifizierung nicht mehr. Ich habe sie dann im Adapter deaktiviert und es funktionierte dann erst mal alles wieder.
@viper4iob / @boronsbruder
Leider nenne ich keine Testumgebung mein Eigen, deswegen kann ich nicht einfach mal umstellen und testen (ich selbst nutze keine Auth oder HTTPS).
Zumindest hat sich die Authentifizierung geändert und es ist nicht mehr direkt möglich User/Pass bei cURL in der URL mit zu übergeben. Der Browser setzt das etwas anders um.Anstelle von
curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"müsste eigentlich ein
curl -k -u "meinuser:1234" --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk"funktionieren.
-
@Rushmed (und den Rest
)ist mir immer noch einer durch geflutscht. Ich kann gerade keine neue Version erstellen, deswegen die "Druck-Tendenz" weiter auf gemischt belassen oder einen Patch durchführen:
patch.diff runterladen und ins Installationsverzeichnis kopieren...
(ruhig mal mit einem Text-Editor öffnen und schauen was da gemacht wird. Nicht einfach von einem Fremden eine Datei öffnen und Blindlings irgend etwas machen
)Dann im Installationsverzeichnis ein
patch -p1 < patch.diffausführen.
Danach noch einsystemctl restart wetterstationund auch der String/Number-Kandidat funktioniert korrekt als Zahl.
*EDIT*
ganz vergessen: der Patch funktioniert nur mit Version V3.6.3 !
Vorhergehende Versionen enthalten noch nicht die benötigte Funktion. -
@viper4iob / @boronsbruder
Leider nenne ich keine Testumgebung mein Eigen, deswegen kann ich nicht einfach mal umstellen und testen (ich selbst nutze keine Auth oder HTTPS).
Zumindest hat sich die Authentifizierung geändert und es ist nicht mehr direkt möglich User/Pass bei cURL in der URL mit zu übergeben. Der Browser setzt das etwas anders um.Anstelle von
curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"müsste eigentlich ein
curl -k -u "meinuser:1234" --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk"funktionieren.
@viper4iob / @boronsbruder
Leider nenne ich keine Testumgebung mein Eigen, deswegen kann ich nicht einfach mal umstellen und testen (ich selbst nutze keine Auth oder HTTPS).
Zumindest hat sich die Authentifizierung geändert und es ist nicht mehr direkt möglich User/Pass bei cURL in der URL mit zu übergeben. Der Browser setzt das etwas anders um.Anstelle von
curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"müsste eigentlich ein
curl -k -u "meinuser:1234" --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk"funktionieren.
Wenn ich mal Zeit und Lust habe alles kaputt zumachen, dann werd ich das mal testen ;)
-
@Rushmed (und den Rest
)ist mir immer noch einer durch geflutscht. Ich kann gerade keine neue Version erstellen, deswegen die "Druck-Tendenz" weiter auf gemischt belassen oder einen Patch durchführen:
patch.diff runterladen und ins Installationsverzeichnis kopieren...
(ruhig mal mit einem Text-Editor öffnen und schauen was da gemacht wird. Nicht einfach von einem Fremden eine Datei öffnen und Blindlings irgend etwas machen
)Dann im Installationsverzeichnis ein
patch -p1 < patch.diffausführen.
Danach noch einsystemctl restart wetterstationund auch der String/Number-Kandidat funktioniert korrekt als Zahl.
*EDIT*
ganz vergessen: der Patch funktioniert nur mit Version V3.6.3 !
Vorhergehende Versionen enthalten noch nicht die benötigte Funktion. -
@viper4iob / @boronsbruder
Leider nenne ich keine Testumgebung mein Eigen, deswegen kann ich nicht einfach mal umstellen und testen (ich selbst nutze keine Auth oder HTTPS).
Zumindest hat sich die Authentifizierung geändert und es ist nicht mehr direkt möglich User/Pass bei cURL in der URL mit zu übergeben. Der Browser setzt das etwas anders um.Anstelle von
curl -k --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk?user=meinuser&pass=1234"müsste eigentlich ein
curl -k -u "meinuser:1234" --data "0_userdata.0.Wetterstation.Windrichtung_Text_10min=S&ack=true" "HTTPS://192.168.116.249:8087/setBulk"funktionieren.
Wenn ich mal Zeit und Lust habe alles kaputt zumachen, dann werd ich das mal testen ;)
Wenn ich mal Zeit und Lust habe alles kaputt zumachen, dann werd ich das mal testen ;)
Sehr guter Ein-/Ansatz 
-
In der Datei sehe ich nur Verweise auf WETTER_Trend und nicht auf Druck-Tendenz, soll das so sein?
Jepp, die "diff" wird automatisch vom Befehl erstellt. Der nimmt noch etwas von vor und nach der eigentlichen Änderung vom Quelltext mit. So kann er beim patchen die Stelle zweifelsfrei identifizieren.
Die eigentliche Änderung ist hier:- PNOW=$(echo "scale=2;$PNOW/10" | bc -l) + PNOW=$(echo "scale=2;$PNOW/10" | bc -l | normalize)"PNOW" ist dann die Druck-Tendenz. (-) entferne und (+) füge hinzu. Die einzige Änderung ist tatsächlich nur die Funktion "normalize" per "pipe" anzuhängen.
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