NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
@pandor Hallo Sven und danke
Das könnte verschiedene Ursachen haben, aber das Problem ist, dass am Rechner mit dem Skript keine Daten ankommen (das Skript ist ein eigener Server der nur auf empfangene Datenpakete lauscht).
Das könnte wg. des PiHole daran liegen, dass die Station selbst schon Daten an WU schicken kann. Würde ich, falls aktiviert, im Web-Interface der Station deaktivieren (wenn es mal läuft kann man es immer noch wieder aktivieren, zuerst aber mal mögliche Fehlerquellen eliminieren )
Dann würde ich auch das Poll-Intervall erhöhen (auch wieder testweise). Fast alle Stationen senden nur im 30-40 Sekunden Takt. Das Skript wartet aber nur zwei Zyklen plus Toleranz ab, bis es dann mit "Kommunikationsfehler" abbricht. 2* Poll + 6 Sekunden = 2 * 16 + 6 = 38 Sekunden bei dir
Das könnte knapp werden. Nimm mal (testweise) 30 Sekunden.Ich bin auch den bequemeren Weg gegangen, gerade hinsichtlich der schnelleren Umstellung, und habe nur den DNS-Eintrag in der Fritz!Box auf meinen PiHole geändert. Das (sollte) funktioniert auch, zumindest fast immer. Ich habe aber zwei oder drei Geräte im Netzwerk die erst richtig funktionieren, wenn ich deren DNS-Eintrag von der Fritz!Box direkt auf den PiHole ändere.
Skript und PiHole laufen auf dem selben LXC? Sollte so sein.
-
@sborg
Danke für deine Antwort.
Ich habe beides getestet. Skript auf dem LXC des Pi-hole und separat.
Aktuell ist es auf dem LXC des Pihole.
Das Grundprinzip habe ich, denke ich, verstanden.
Ich sniffe mit Debookee im Netzwerk, um zu sehen, ob da überhaupt Daten hin und hergeschickt werden. Wenn ich in der Station die Daten von wunderground rausnehme, kann ich mit Debookee keinen Traffic erkennen.
Ich hatte dein Skript so verstanden, dass die Station in jedem Fall Daten an einen externen Anbieter (wunderground) schicken muss und dieser Traffic dann intern über pi-hole umgeleitet wird.Wenn ich mit
nc -l -p 80
auf dem LXC der Pi-hole (also dem Ziel der DNS-Umleitung) lausche, erhalte ich den String. Die Station sendet dann die folgenden Daten, die das Skript doch eigentlich verarbeiten müsste, oder?GET /weatherstation/updateweatherstation.php?ID=xxxxxx&PASSWORD=xxxxxx&action=updateraww&realtime=1&rtfreq=5&dateutc=now&baromin=29.91&tempf=47.1&dewptf=33.8&humidity=60&windspeedmph=8.2&windgustmph=8.9&winddir=135&rainin=0.0&dailyrainin=0.0&indoortempf=74.4&indoorhumidity=47 HTTP/1.1
Host:rtupdate.wunderground.com
Connection: keep-aliveStarte ich kurz danach das Skript (config-Daten habe ich mal auf 30, 40 etc. Sekunden angepasst), kommt nur der Kommunikationsfehler.
-
@SBorg
und mit nc -nlvw 1 -p 80 2>string.txtschreibt er folgendes in die txt:
Listening on [0.0.0.0] (family 2, port 80)
Connection from 192.168.178.98 49176 received!Also eine Verbindung kommt da zustande.
-
@pandor Ich könnte jetzt einfach behaupten: Test bestanden
...in Wahrheit habe ich aus den Augen verloren, dass es eigentlich um PiHole geht. Da hast du das System völlig korrekt verstanden. Natürlich muss dann der WU-Aufruf bleiben, genau die Daten wollen wir ja...Der "Fehler" ist auch recht simpel. Es liegt schlichtweg an deiner Station. Du bist der 1. mit dieser und die anderen verhielten sich bis dato gleich. Deine Station ist nicht so mitteilsam wie die bisherigen.
Es gibt zwei Voraussetzungen für eine erfolgreiche Kommunikation:
- es muss ein Datenpaket empfangen werden (was bei 99.99% der Fehler das Problem ist. Falsche IP, Port usw.)
- das empfangene Datenpaket muss valide sein
...und hier liegen deine 0.01% Fehlerrate. dein Datenpaket wird nicht als valide akzeptiert. Auch hier gelten zwei Voraussetzungen:
- es muss bei Protokoll #9 im Datenstring "/weatherstation/updateweatherstation.php?ID=deine_ID" enthalten sein
- es muss größer als 400 Zeichen sein
Da deine Station nicht die gesprächigste ist, ist dein Datenstring (je nach Anzahl der realen Zeichen vs. ge-xt) so um die 330 Zeichen lang = er wird nicht als valide akzeptiert.
Öffne mal die "wetterstation.sub" und suche nach get_DATA
Da findest du dann paar Zeilen tiefer#check auf Datenintigrität if [ "$STRLEN" -gt "400" ] && [[ "$DATA" =~ "/weatherstation/updateweatherstation.php?ID=${WS_ID}" ]]; then return 0; else return 1; fi ;;
Ändere hier mal die "400" in "250" ab, dann sollte es eigentlich schon funktionieren (falls ja, nehme ich es so für die nächste Version auf).
-
Perfekt. Danke! Hat geklappt!
Brauchst du von mir noch irgendwelche Daten zur Station? -
@pandor Supi
Hat die noch eine andere Bezeichnung als "BRESSER WLAN Farbwettercenter mit 5-in-1 Profi-Sensor"? Dann würde ich sie so aufnehmen.
...und wohl zur Änderung am Skript gleich noch die Bezeichnungen von "Saint Logic"-Part in "DNS-Server" oä. abändern. -
@sborg said in [Linux Shell-Skript] WLAN-Wetterstation:
@pandor Supi
Hat die noch eine andere Bezeichnung als "BRESSER WLAN Farbwettercenter mit 5-in-1 Profi-Sensor"? Dann würde ich sie so aufnehmen.
...und wohl zur Änderung am Skript gleich noch die Bezeichnungen von "Saint Logic"-Part in "DNS-Server" oä. abändern.Es ist exakt diese hier:
https://www.bresser.de/Wetter-Zeit/Wettercenter/BRESSER-WLAN-Farb-Wetter-Center-mit-5-in-1-Profi-Sensor-V.htmlDas Sendeintervall liegt übrigens bei ca. 12 sec.
Ergänzung:
Der eigentliche Hersteller ist wohl CCL aus China. Bresser vermarktet die Station unter dem eigenen Namen:
https://cclel.com/product/c6071a-c3136a/ -
@pandor sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Das Sendeintervall liegt übrigens bei ca. 12 sec.
Da isse ganz schön fix
...bringt aber auch kein besseres Wetter -
ist wohl bei allen Bresser bzw. CCL (eigentlicher Hersteller s.u.) so.
-
ich hau das wetter.com DingsBumsTeil wieder raus
lt. denen hebt gleich unser Haus ab
so schauts aber aus
-
@negalein Nutzt du noch die ursprüngliche Version, oder eine neuere bei der ich denen die Daten in m/sek schicke?
Böen habe ich zwar aktuell auch heftige, aber die Windgeschwindigkeit liegt lt. Influx binnen der letzten 24h bei 18.3 km/h max.
Kommt zwar nicht ganz hin, aber doch recht nahe:
Eine Antwort zur Anfrage nach einer Doku für die API ist auch nie gekommen...
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Nutzt du noch die ursprüngliche Version,
Settings V2.11.0
inkl. Stromausfall -
@negalein Ohne Doku wird es da schwierig, wobei wir eigentlich schon recht nahe dran sind. Warum es aber dann gerade bei dir so viel daneben liegt?
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Warum es aber dann gerade bei dir so viel daneben liegt?
Ja, ist extrem.
Die geänderte Version ist die 2.11.0 oder die 2.11.1?
Wo seh ich, ob die Änderung übernommen wurde?
-
@SBorg
seit den heutigen Stromausfällen aktualisiert ioB nicht mehr.
VM schon neu gestartet.
In WS View werden die Daten aktualisiert.Wo kann ich noch nachschaun?
dietpi@DietPi:~$ sudo systemctl status wetterstation ● wetterstation.service - Service für ioBroker Wetterstation Loaded: loaded (/etc/systemd/system/wetterstation.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2022-02-17 19:20:25 CET; 13s ago Process: 577 ExecStart=/home/iobroker/wetterstation.sh (code=exited, status=217/USER) Main PID: 577 (code=exited, status=217/USER) Feb 17 19:20:25 DietPi systemd[1]: Started Service für ioBroker Wetterstation. Feb 17 19:20:25 DietPi systemd[577]: wetterstation.service: Failed to determine user credentials: No such process Feb 17 19:20:25 DietPi systemd[577]: wetterstation.service: Failed at step USER spawning /home/iobroker/wetterstation.sh: No such process Feb 17 19:20:25 DietPi systemd[1]: wetterstation.service: Main process exited, code=exited, status=217/USER Feb 17 19:20:25 DietPi systemd[1]: wetterstation.service: Failed with result 'exit-code'.
-
@negalein Die 2.11.0, die 2.11.1 ist nur für Protokoll #9 per DNS-Server interessant, also weder WU noch Ecowitt.
Da das im Skript verankert ist, läuft es auch ohne jegliches zu tun bzw. Konfiguration.
@negalein sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Active: failed (Result: exit-code) since Thu 2022-02-17 19:20:25 CET; 13s ago
Process: 577 ExecStart=/home/iobroker/wetterstation.sh (code=exited, status=217/USER)Der Service startet auch nicht. Er meckert an, dass es den User nicht gibt.
Was steht denn bei User + Group beicat /etc/systemd/system/wetterstation.service
per Terminal?IMHO hat es da die SD-Karte zerbröselt.
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Was steht denn bei User + Group bei cat /etc/systemd/system/wetterstation.service per Terminal?
dietpi@DietPi:~$ cat /etc/systemd/system/wetterstation.service [Unit] Description=Service für ioBroker Wetterstation [Service] ExecStart=/home/iobroker/wetterstation.sh User=Dietpi Group=Dietpi [Install] WantedBy=multi-user.target
IMHO hat es da die SD-Karte zerbröselt.
ist ne HDD in der Syno
-
@negalein Dann hast du ev. sogar Glück und es hat nichts schlimmes erlegt
Aber irgendwie stimmt da was nicht (logisch, sonst würde es ja auch laufen...)
Siehst du die Diskrepanz zwischen #2, #8 und #9?
Dein User heißt dietpi (Kontrolle:whoami
per Terminal), eingetragen bei User und Gruppe ist aber Dietpi. Das dürfte eigentlich so nie funktioniert haben, außer du hättest den Usernamen oder die Einträge erst kürzlich geändert.sudo nano /etc/systemd/system/wetterstation.service
, bei #8 + #9 Dietpi klein schreiben, speichern und nochmal starten versuchen. Sicherheitshalbersudo nano systemctl stop wetterstation
, dannsudo nano systemctl start wetterstation
. Dann nach ~30 Sekunden malsystemctl status wetterstation
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Aber irgendwie stimmt da was nicht
alles gemacht.
Aber es will nichtdietpi@DietPi:~$ sudo nano /etc/systemd/system/wetterstation.service dietpi@DietPi:~$ sudo nano systemctl stop wetterstation dietpi@DietPi:~$ sudo systemctl stop wetterstation Warning: The unit file, source configuration file or drop-ins of wetterstation.service changed on disk. Run 'systemctl daemon-reload' to reload units. dietpi@DietPi:~$ sudo systemctl start wetterstation Warning: The unit file, source configuration file or drop-ins of wetterstation.service changed on disk. Run 'systemctl daemon-reload' to reload units. dietpi@DietPi:~$ systemctl daemon-reload Failed to connect to bus: Datei oder Verzeichnis nicht gefunden dietpi@DietPi:~$ sudo systemctl status wetterstation Warning: The unit file, source configuration file or drop-ins of wetterstation.service changed on disk. Run 'systemctl daemon-reload' to reload units. ● wetterstation.service - Service für ioBroker Wetterstation Loaded: loaded (/etc/systemd/system/wetterstation.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2022-02-17 23:59:17 CET; 27s ago Process: 824 ExecStart=/home/iobroker/wetterstation.sh (code=exited, status=217/USER) Main PID: 824 (code=exited, status=217/USER) Feb 17 23:59:17 DietPi systemd[1]: Started Service für ioBroker Wetterstation. Feb 17 23:59:17 DietPi systemd[824]: wetterstation.service: Failed to determine user credentials: No such process Feb 17 23:59:17 DietPi systemd[824]: wetterstation.service: Failed at step USER spawning /home/iobroker/wetterstation.sh: No such process Feb 17 23:59:17 DietPi systemd[1]: wetterstation.service: Main process exited, code=exited, status=217/USER Feb 17 23:59:17 DietPi systemd[1]: wetterstation.service: Failed with result 'exit-code'. dietpi@DietPi:~$ sudo systemctl restart wetterstation Warning: The unit file, source configuration file or drop-ins of wetterstation.service changed on disk. Run 'systemctl daemon-reload' to reload units. dietpi@DietPi:~$
Edit:
es dürfte wieder passendietpi@DietPi:~$ sudo systemctl daemon-reload dietpi@DietPi:~$ sudo systemctl stop wetterstation dietpi@DietPi:~$ sudo systemctl start wetterstation dietpi@DietPi:~$ sudo systemctl status wetterstation ● wetterstation.service - Service für ioBroker Wetterstation Loaded: loaded (/etc/systemd/system/wetterstation.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-02-18 00:01:56 CET; 6s ago Main PID: 856 (wetterstation.s) Tasks: 5 (limit: 264) Memory: 4.1M CGroup: /system.slice/wetterstation.service ├─856 /bin/bash /home/iobroker/wetterstation.sh ├─921 /bin/bash /home/iobroker/wetterstation.sh ├─922 timeout 38 nc -nlvw 1 -p 1080 ├─923 sed -n 1 p └─924 nc -nlvw 1 -p 1080 Feb 18 00:01:56 DietPi systemd[1]: Started Service für ioBroker Wetterstation. Feb 18 00:01:57 DietPi wetterstation.sh[856]: Connection to 10.0.1.202 8087 port [tcp/*] succeeded! Feb 18 00:01:58 DietPi wetterstation.sh[856]: jq: error (at <stdin>:7): Cannot iterate over null (null) Feb 18 00:01:58 DietPi wetterstation.sh[856]: jq: error (at <stdin>:7): Cannot iterate over null (null) dietpi@DietPi:~$
-
@sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Die 2.11.0, die 2.11.1 ist nur für Protokoll #9
soll ich dir mal die Files schicken, damit du drüberschaun kannst?