NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@protheus Hallo,
ich habe die Kopplung mit dem WLAN direkt am Display in den Einstellungen vorgenommen. Dort das WLAN auswählen und das Passwort eingeben. Dann sollte die Station unter Device List in der App direkt auftauchen.
-
@sborg
Ah, OK. Verstehe.
Dann noch eine Frage: Warum wird das über das Shellscript als Server gemacht? Ich habe mich jetzt mal gespielt und das Script "/weatherstation/updateweatherstation.php" gemacht und die Daten werden da wunderbar ausgegeben.
Hat das Kompatibilitätsgründe mit anderen Stationen?Danke
-
@petersilie said in [Linux Shell-Skript] WLAN-Wetterstation:
ich habe die Kopplung mit dem WLAN direkt am Display in den Einstellungen vorgenommen. Dort das WLAN auswählen und das Passwort eingeben. Dann sollte die Station unter Device List in der App direkt auftauchen.
Wow, Danke!
Im WLAN war es bereits drin.Allerdings sind die Geräte bei mir isoliert (also WLAN-Gerät kann nicht mit WLAN-Gerät kommunizieren - Nur mit LAN-Gerät oder Internet geht). Das hatte ich vergessen/übersehen.
Nach dem abschalten der Isolierung, tauchte die WS tatsächlich ohne weiteres auf.
Leider hat das mein Skript-Problem nicht behoben.
EDIT: OK diese Meldung (listening on [any] 9999 ... no connection : Connection timed out) ist wohl der Skript-Modus (ohne Werteanzeige)
Ich habe hier das --debug vergessen.
Allerdings bekomme ich mit --debug die Meldung "Kommunikationsfehler!"- Rest-API ist aber erreichbar
- Port 9999 ist frei
Beide Geräte stehen auch im selben LAN, also kann da auch die Firewall nichts blocken.
Grüße
Protheus -
@protheus So, mal wieder Online...
Also... sieht leider nach wie vor nach einem Netzwerkproblem aus. Das Skript steigt einfach aus weil es keine Daten bekommt (daher auch "Kommunikationsfehler").Zum testen ändere in der *.conf zuerst mal den "Poll-Interval" auf 30 Sekunden. Das gibt dem Skript Zeit (~ 1 Minute) mal ein Datenpaket zu empfangen (die meisten Stationen senden so im 30-40 Sekunden Raster). Bei einem 16er Intervall muss dann innerhalb von 38 Sekunden ein valides Datenpaket kommen, dass kann, gerade beim testen, grenzwertig sein.
Wenn es dann läuft und die Station tatsächlich im 16 Sekundenraster sendet, spricht dann auch nichts dagegen es wieder auf 16 einzustellen.Dann teste mal mit
./wetterstation.sh --data
Da muss ein Datenpaket ankommen, sonst brauchst du rund um das Skript erst gar nicht weiter suchen. Fehler sehe ich so keinen. Kannst du von dem Rechner aus auf dem das Skript laufen soll das Display anpingen? -
Hi SBorg,
danke für die Rückmeldung.
Das mit den 30 Sekunden hatte ich auch schon Probiert, hat aber nicht geklappt.
Ich bin aktuell auch leicht verwirrt:
Wenn ich oft genug den Befehl mit --debug eingebe, bekomme ich Daten:
Allerdings mit einer Menge Warnungen/Fehler vorweg:
Wenn ich den Befehl gleich danach nochmal ausführe, bekomme ich "Kommunikationsfehler"
Pingen kann ich das Display, aber mit "./wetterstation.sh --data" bekomme ich auch Fehler.
(Der wartet aber auch keine 66 Sekunden, sondern bricht fast Instant wieder ab).(Ich hatte auch schon Probiert auf "Ecowitt" umzustellen, hat aber auch nicht geholfen.)
Grüße
ProtheusEDIT: Hatte ich vergessen zu schreiben: mein iobroker läuft auf Debian 10
-
@protheus Sodele, frisch gestärkt ans Werk ^^
@protheus sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Allerdings mit einer Menge Warnungen/Fehler vorweg:
Das rührt daher, dass du wohl im ioB das Javascript noch nicht angelegt bzw. ausgeführt hast. Er versucht nämlich da ein paar Datenpunkte zu lesen, was natürlich fehlschlägt wenn sie nicht vorhanden sind.
@protheus sagte in [Linux Shell-Skript] WLAN-Wetterstation:
(Der wartet aber auch keine 66 Sekunden, sondern bricht fast Instant wieder ab).
Das würde dann auch zu dem Phänomen passen, dass er zwar prinzipiell Daten empfängt, aber eher sehr unzuverlässig.
Hast du einen WU/Ecowitt - Account bzw. schickst du aktuell Daten an einen der beiden? Wenn das kontinuierlich durchläuft, wäre zumindest die Kommunikation Wettermast --[868MHz]-->Display--[WLAN]-->Netzwerk/Router/WWW in Ordnung.
Debian ist völlig iO, muss einfach nur ein Linux sein + nc/jq darauf laufen.
Ist dein System ein "echter Rechner" oder ein PI? Ich hatte gerade die Tage einen ähnlichen Issue auf GitHub, bei dem der RAM zur neige ging. Dann konzentriert sich Linux auf die wichtigen Dinge und da gehört anscheinend Netzwerkkommunikation nicht ganz so dringend dazu. -
@ratte01 sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@sborg
Ah, OK. Verstehe.
Dann noch eine Frage: Warum wird das über das Shellscript als Server gemacht? Ich habe mich jetzt mal gespielt und das Script "/weatherstation/updateweatherstation.php" gemacht und die Daten werden da wunderbar ausgegeben.
Hat das Kompatibilitätsgründe mit anderen Stationen?Danke
Sagen wir mal so, "irgendwie" muss(te) ich es ja umsetzen und da fiel die Wahl eben auf ein Shell-Skript (weil es einfach die wenigsten Ressourcen verbraucht) und den "netcat". Ich hätte auch "socat" nehmen können oder es in JS, Perl, Python etc. schreiben können. Das hatte keinen echten speziellen Hintergrund, nur als Shell-Skript ging es am "schnellsten" (ist mittlerweile auch relativ) und der "nc" nimmt einfach alles entgegen was man ihm schickt. Hoffentlich einigermaßen Zukunftssicher. Sieht aber gut aus, denn zu Beginn war noch keine Rede vom "Ecowitt"-Protokoll oder jede Menge Zusatzsensoren
-
@sborg said in [Linux Shell-Skript] WLAN-Wetterstation:
Das rührt daher, dass du wohl im ioB das Javascript noch nicht angelegt bzw. ausgeführt hast. Er versucht nämlich da ein paar Datenpunkte zu lesen, was natürlich fehlschlägt wenn sie nicht vorhanden sind.
Doch hatte ich eigentlich:
Ich ab da auch nur die Anzahl der Bodenfeuchtesensoren (DP100) auf 2 erhöht.Ja ich hatte zum Testen, ob überhaupt Daten rausgehen, einen WU-Account angelegt. Da kommen auch sauber Daten an (scheinbar so alle 30 Sekunden)
Ich bin deine Installationsanleitung Schritt für Schritt durchgegangen (Berufskrankheit)
bc und jq sind auf jeden Fall drauf.Das System läuft in einer VM (kann man also mit einem phys. Rechner gleichsetzen) und 2GB frei (von 4GB) sollten eigentlich eigentlich ausreichen.
Ich habe das Javascript jetzt nochmal ausgeführt um sicher zu gehen, dass ich es beim letzten Mal nicht zu schnell beendet habe.
Die Meldungen bleiben aber (wenn ich das Skript 10x ausführe)/opt/iobroker-Scripts/wetterstation/wetterstation.sub: Zeile 551: printf: `%d Std, %d Min': Ist kein gültiger Bezeichner. /opt/iobroker-Scripts/wetterstation/wetterstation.sub: Zeile 551: printf: `%d Std, %d Min': Ist kein gültiger Bezeichner. /opt/iobroker-Scripts/wetterstation/wetterstation.sub: Zeile 551: printf: `%d Std, %d Min': Ist kein gültiger Bezeichner. /opt/iobroker-Scripts/wetterstation/wetterstation.sub: Zeile 551: printf: `%d Std, %d Min': Ist kein gültiger Bezeichner.
Ich befürchte so langsam, das an meinem iobroker-Server was kauptt ist, und er die Skripte nicht lange genug laufen lässt (eine Firewall ist nicht drauf)
Grüße
ProtheusEDIT:
Weil du es gerade erwähntest (netcat) habe ich da auch nochmal geschaut.
Die Bezeichnung(UNKNOWN) [10.10.80.4] 8087 (?) open
kommt doch von netcat oder?
OK nun wirds ganz unverständlich:
Das kript läuft (immernoch mit vielen timeouts aber zumindest keine wetterstation.sub-Fehler mehr)
Im iobroker kommen auch Daten an aber "Wetter_Trend" (noch --- Minuten laut Display = sonnig) und "Wetter_aktuell" (regnerisch - naja sonne scheint draußen) werden nicht aktualisiert (alle anderen Daten schon. (Druck_Tendenz ist leer also denke ich das kam noch nie)
Kommunikationsfehler steht auch auf true.
Die Bodenfeuchte wird auch nich ausgelesen.Laut netstat ist der Port 18087 aber auch geöffnet (ich habe zwischenzeitlich auf diesen Port gewechselt)
Grüße
Protheus -
@protheus Sieht soweit alles (leider) gut aus. Das Skript an sich braucht auch nur paar kB RAM, aber an irgend etwas muss es ja liegen.
Die Fehlermeldung mit dem Bezeichner ist auch eher "unsinnig" an der Stelle, sieht aber danach aus, dass ihm hier einfach ein Wert fehlt (Sonnenscheindauer). Das Skript läuft dann trotzdem weiter, nur ist/wäre halt die Sonnenscheindauer nicht vorhanden/inkorrekt.
Da es mit WU funktioniert, kann man also den Netzwerk-Teil eigentlich als Fehlerursache ausklammern. Bleibt eigentlich nur das System selbst bzw. etwas darauf. Hast du noch einen PI in der Ecke liegen oder genug Ressourcen für eine "nackische" VM mit dem kleinsten Linux (ohne GUI) über?...und da kam der EDIT...
Jepp, und (?) open ist nicht gut. Da müsste "succeded" stehen. Er bekommt hier keine Verbindung zur API des ioB.
Ev. installiere mal eine neue Version vom nc (siehe WiKi)
Der "Trend" dauert bis zu den ersten vollen 15 Minuten, dann steht eine Restzeit da. Den Wettertrend kann man erst berechnen (Druck_Tendenz) wenn man den Verlauf von 3h analysiert (also mindestens mal für 3h Werte am Stück hat).
...und die "Wettervorhersage": naja, die basiert wie bei allen Stationen auf den aktuellen Luftdruckverhältnissen. Kann stimmen, muss aber nicht. Mein Display zeigt auch aktuell "wolkig" bei strahlend blauem Himmel... -
Verdammt...RTFM is nich meine Stärke (auch Berufskrankheit )
Ins Troubleshooting hatte ich nur kurz reingeschaut, aber keine Verbindung mit meinem Problem hergestellt.Nach einer Neuinstallation von netcat gehts jetzt nun (im Großteil)
@sborg said in [Linux Shell-Skript] WLAN-Wetterstation:
Kann stimmen, muss aber nicht. Mein Display zeigt auch aktuell "wolkig" bei strahlend blauem Himmel...
Naja bei mir steht das ja bei "Wetter_aktuell"
Obwohl schon den ganzen Tag die Sonne drauf brenntLeider werden die 2 Bodenfeuchte-Sensoren auch nicht ausgelesen (obwohl sie im Display korrekt, mit vollem Empfang und Wert (48% und 38%) angezeigt werden.
Sind die hier: "froggit DP100 Mehrkanal Bodenfeuchte" (sollten ja mit der dnt gut funktionieren)Sorry für die Umstände (User färben auf mich ab...)
Grüße
Protheus -
@protheus sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Naja bei mir steht das ja bei "Wetter_aktuell"
Schon, aber sollte zeigen, dass auch das Display durchaus das aktuelle Wetter nicht wiedergibt. Es gibt halt vom Wetterdienst eine Liste bei der bei einem Luftdruck von "a bis b" schönes Wetter ist, "c bis d bewölkt" usw. Mehr ist das nicht. Luftdruck x ist zwar ein Indiz für Wetterlage y, muss aber nicht stimmen.
Ich hatte von WU, DWD & Co. auch schon Regenwahrscheinlichkeit von 100% und kein einziger Tropfen fiel...bzgl. Sensoren: hast du auf Ecowitt-Protokoll umgestellt? Sonst bräuchte ich mal deinen "--data" - String (StationID etc. x-en) bzw. werden Daten von denen bei "--debug" angezeigt?
-
@sborg said in [Linux Shell-Skript] WLAN-Wetterstation:
bzgl. Sensoren: hast du auf Ecowitt-Protokoll umgestellt? Sonst bräuchte ich mal deinen "--data" - String (StationID etc. x-en) bzw. werden Daten von denen bei "--debug" angezeigt?
Hier mal der Datastring:
Connection from 10.10.80.180 17287 received! GET /weatherstation/updateweatherstation.php?ID=Garden&PASSWORD=123456&indoortempf=81.1&tempf=53.4&dewptf=31.5&windchillf=53.4&indoorhumidity=30&humidity=43&windspeedmph=0.0&windgustmph=0.0&winddir=78&absbaromin=29.380&baromin=29.380&rainin=0.000&dailyrainin=0.000&weeklyrainin=0.000&monthlyrainin=0.118&yearlyrainin=0.118&solarradiation=0.00&UV=0&soilmoisture=48&dateutc=2021-03-28%2017:50:33&softwaretype=EasyWeatherV1.5.7&action=updateraw&realtime=1&rtfreq=5 HTTP/1.0
Nein, auf Ecowitt war ich nur kurz zum testen, bin dann aber wieder auf WU Einstellung, da mich auch der Batteriestatus der Sensoren interessiert (was ja mit Ecowitt nicht geht wie du geschrieben hast).
Warum soll ich die ID x-en? Die kann doch in den Custom-Einstellungen anders sein als bei WU, oder? Und Garden ist jetzt nix geheimes
Grüße
Protheus -
@protheus Ich denke halt auch immer an die Paranoiker die ihre internen IPs x-en. Wenn ich in deren Netzwerk bin dauert es ungefähr zwei Sekunden alle IPs auszulesen...
Kleiner Schlingel, RTFM mal genau: Batteriestatus geht nur bei Ecowitt, genau wie Zusatzsensoren (die fehlen nämlich in deinem String + werden im WU-Format vom Display nicht übertragen)
...oder sollte ich mich im Manual verschrieben haben...?
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@protheus Ich denke halt auch immer an die Paranoiker die ihre internen IPs x-en. Wenn ich in deren Netzwerk bin dauert es ungefähr zwei Sekunden alle IPs auszulesen...
Ich bin zwar auch etwas paranoid, aber ich hab ne gute Firewall, und mit meinen zig internen Netzen kann eh keiner was anfangen
Kleiner Schlingel, RTFM mal genau: Batteriestatus geht nur bei Ecowitt, genau wie Zusatzsensoren (die fehlen nämlich in deinem String + werden im WU-Format vom Display nicht übertragen)
...oder sollte ich mich im Manual verschrieben haben...?Ja, so langsam wirds peinlich für mich. Nein, du hast dich nicht verschrieben. Mit Ecowitt klappts tatsächlich.
Jetzt funktioniert es wie es soll und ich kann mein Bewässerungsprojekt fortführen (die Wetterstation und das Sktipt, sind meine zentrale Informationsstelle ob wässern oder nicht).Kann man die Werte der Batterie evtl. noch umwandeln? Mit 1.6 kann man wenig anfangen finde ich.
Grüße
Protheus -
Hallo,
wenn ich auf die aktuelle Version updaten will, also derzeit die, V2.5.0 vom 08.02.2021, wie muss ich dann genau vorgehen?
Derzeit habe ich die Version, V2.3.0 vom 26.01.2021 installiert.
Dann noch eine weitere Frage, im Moment wird der Regen am Tag und in der Woche angezeigt. Gibt es eine Möglichkeit die Regenmenge vom Vortag anzeigen zu lassen?
Danke schon mal.
-
@protheus sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ja, so langsam wirds peinlich für mich...
Kann man die Werte der Batterie evtl. noch umwandeln? Mit 1.6 kann man wenig anfangen finde ich.
Nö, solange es funzt
Prinzipiell ja, allerdings habe ich weder Sensoren noch Doku dazu. Deswegen kann ich mit deinen/den "1.6" im Grunde leider genauso wenig anfangen wie du. Wenn 0=leer ist und 5=voll, könnten 1.6 theoretisch 32% entsprechen, aber absolut geraten...
-
@chrissi1 Nicht anders wie im 1. Post beschrieben:
- *.sub + *.sh durch aktuelle Version ersetzen
- *.js im ioB anlegen und 1x ausführen (damit die neuen DPs angelegt werden)
./ws_updater.sh
sooft starten bis er "meckert", dass nix mehr zu tun ist (müsste bei dir 3x sein)- neu starten des Skripts:
sudo systemctl restart wetterstation
Da die Station keinen Wert vom Vortag liefert, kann es das Skript alleine auch nicht. Je nach dem wo/wie du es darstellen möchtest (Grafana, VIS...) kannst du die Regenmenge mit Influx oder History loggen.
Wenn du das Statistik-Javascript-Addon nutzt ist es auch als DP im ioB vorhanden:
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@protheus sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Ja, so langsam wirds peinlich für mich...
Kann man die Werte der Batterie evtl. noch umwandeln? Mit 1.6 kann man wenig anfangen finde ich.
Nö, solange es funzt
Prinzipiell ja, allerdings habe ich weder Sensoren noch Doku dazu. Deswegen kann ich mit deinen/den "1.6" im Grunde leider genauso wenig anfangen wie du. Wenn 0=leer ist und 5=voll, könnten 1.6 theoretisch 32% entsprechen, aber absolut geraten...
naja, die Akkus sind neu/voll.
Ich denke die 1.6 sind 1.6VBatterien zeigen ja je nach Ladestand glaube ich unterschiedliche V-Werte an (ich komm da immer durcheinander ). Ist aber bei den großen 1865er Akkus meiner E-Zigarette auch so. Im Ladegerät werden 3.4V angezeigt und es wird weniger wenn der Akkustand sinkt.
Allerdings habe ich keine Ahnung wie weit es sinken darf, bevor die Sensoren nimmer gehen.
Ist aber nur eine grobe Laienhafte Einschätzung/Beobachtung. Kann auch falsch sein.
Aber weil ich eh grad schreibe: scheinbar überträgt das Skript nicht korrekt an meine InfluxDB (sollte doch auch ohne den iobroker Adapter gehen oder?)
Username und Passwort sind definitiv korrekt, aber es werden keine Datensätze angelegt.
Wenn ich aber die Werte über iobroker in die InfluxDB schreiben lasse, geht es.Hast du da auch eine Idee?
Grüße
ProtheusEDIT:
Mir ist gerade noch ein Problem aufgefallen:
Wenn ich die Simple-api auf HTTPS umstelle mit Authtifizierung, funktioniert die Datenübertragung nicht mehr (--debug zeigt aber Daten an - diese werden wohl eben nicht ins iobroker geschrieben)
Aber nun kommen wieder meine Freunde (die Syntaxfehler) und ein SSL3 Handshake errorDrauf ist ein selbsigniertes Zertifikat (von einer PKI) und das Root-Zertifikat ist systemweit als vertrauenswürdig eingestuft.
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Da die Station keinen Wert vom Vortag liefert, kann es das Skript alleine auch nicht. Je nach dem wo/wie du es darstellen möchtest (Grafana, VIS...) kannst du die Regenmenge mit Influx oder History loggen.
Wenn du das Statistik-Javascript-Addon nutzt ist es auch als DP im ioB vorhanden:
Ich habe das Statistik-Javascript im ioBroker vor drei Tagen angelegt.
Danach habe ich unter VorTag, bei:
- Regenmenge
- Temperatur_Durchschnitt
- Temperatur_Hoechstwert
- Temperatur_Tiefstwert
- Windboe_max
ganz rechts auf den Schraubenschlüssel (Einstellungen) geklickt und History aktiviert.
Leider klappt da aber anscheinend irgendwas nicht, die Werte bleiben unverändert, s. Screenshot.
Muss ich für die History noch etwas anderes einstellen oder sonst noch eine Einstellung vornehmen?
-
@chrissi1 sagte in [Linux Shell-Skript] WLAN-Wetterstation:
noch etwas anderes einstellen oder sonst noch eine Einstellung vornehmen?
verwendest du Influx?
Zitat aus dem Wiki
Voraussetzung: laufendes WLAN-Wetterstation Shellscript, laufender Javascript- und InfluxDB-Adapter im ioBroker, aktiviertes logging per InfluxDB der drei benötigten Datenpunkte "Aussentemperatur", "Wind_max" und "Regen_Tag" (falls diese noch nicht für Grafana oä. schon geloggt werden)