NEWS
[Linux Shell-Skript] WLAN-Wetterstation
-
Vorweg: etwas ist bei euch nicht so wie es sein sollte
Aber es liegt wohl auch ein Fehler im Gedankengang vor wie der DP "Kommunikationsfehler" genau funktioniert:
- beim Start des Skriptes wird er einmalig auf false gesetzt
- wenn alles korrekt läuft tut sich jetzt gar nichts mehr, er wird auch nicht aktualisiert (*)
- konnten 5 Datenpakete(**) nicht empfangen werden, wird er einmalig auf true gesetzt
- mehr passiert da nicht
(*)hier liegt wohl das Missverständnis. Aber warum sollte ich diesen alle xx Sekunden aktualisieren? Müllt nur das System unnötig zu, um dann was genau zu machen (außer mitzuteilen "habe keinen Fehler" )? Schließlich ruft doch auch keiner jeden Kilometer in seiner Autowerkstatt an, nur um mitzuteilen, dass das Auto noch fährt. Ich melde mich erst wenn was nicht funktioniert... (oder auch nicht, bin im ADAC ) Genau so verhält es sich hier: keine news sind good news. Ich melde mich erst mit true wenn ein Fehler auftritt. So kann ich auch mit wenig Daten in die influx loggen: nur auf Änderung + alle 12h mal einen Wert schreiben (sonst läuft ggf. Grafana ins Leere mit "No Data")
(**) egal wann sie auftreten, es gibt keinen Unterschied ob 5x hintereinander, oder insgesamt 5 Fehler in x Stunden. Da bspw. um 0:02 Uhr per cronjob das Skript beendet wird, wird zu diesem Zeitpunkt auch der Zähler wieder auf 0 gesetzt. So führen gelegentliche Fehler nicht gleich zu einer Anzeige. Erst "schwere" Fehler wie zu geringe Empfangsleistung, leere Batterien etc. führen dann zu einer Fehleranzeige.Sieht dann bspw. so aus (als "alias" geloggt wg. Anzeige in Grafana):
Deswegen wäre
false true simple-api.0 2020-03-14 00:02:01.336
völlig Ok, was aber nicht sein darf ist der 5 Sekunden später auftretende:
true true simple-api.0 2020-03-14 00:02:06.555
So schnell ist das Skript nicht. Es muss mindestens 16 Sekunden warten (genau genommen sogar 2* 16 + 6 Sekunden). Das wäre aber ein Fehler. Es kann also frühstens nach (2*16+6)*5 = 190 Sekunden auftreten.
Fallen mir nur zwei Szenarien ein.- nc (ev. falsche Version, in der V1.0.0 werden zwei neue Parameter benutzt)
- das Skript läuft mehrmals
Leider hat der "nc" keine Versionsinfo. Kann das euer nc:
Sicherheitshalber das Skript mittels
pkill -9 wetterstation.sh
beenden. Bei ".*" ist mir aufgefallen, dass es nicht immer beendet wird. Nochmals mittelsps -aux | grep wetterstation.sh
prüfen, dass es wirklich nicht mehr läuft!
Das würde genau zu @crunchip Fehlerbild passen. Erst keine Werte, da das Skript schon auf dem Port läuft, dann bekommt die 2. Instanz keinerlei Daten.btw: Jahresregenmenge hat wieder funktioniert, scheint also zu funktionieren
-
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
das Skript läuft mehrmals
ist doch normalerweise gar nicht möglich, da ich die Maschine(VM) neu gestartet habe. ich habe auch nur eine Version installiert. dementsprechend würde ich sagen,
2. fällt da flach, muss also etwas anderes sein@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Kann das euer nc:
wie macht man das?
-
@crunchip sagte in [Linux Shell-Skript] WLAN-Wetterstation:
da ich die Maschine(VM) neu gestartet habe
= bei dir iobroker? Wenn du also schreibst "iobroker neu gestartet" ist dies nicht der/unser iobroker sondern deine VM
Schau mal was bei gestopptem Skript mittels./wetterstation.sh --data
kommt. Ist dies ein Datenpaket oder irgendeine Meldung? -
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
nicht der/unser iobroker sondern deine VM
ja die VM neu gestartet, ist folglich iobroker selbst dann ja auch neugestartet
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Schau mal was bei gestopptem Skrip
mom, teste ich
root@IoBroker:/home/iobroker# ./wetterstation.sh --data Warte maximal 66 Sekunden auf Datenpaket der Wetterstation... listening on [any] 55555 ... no connection : Connection timed out root@IoBroker:/home/iobroker#
anschliessend nun wieder gestartet, jetzt hab ich wieder das Problem
root@IoBroker:/home/iobroker# ./wetterstation.sh listening on [any] 55555 ... Warning: forward host lookup failed for ESP_9C8A47.local: Unknown host connect to [10.1.1.10] from ESP_9C8A47.local [10.1.1.206] 24230 listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... Warning: forward host lookup failed for ESP_9C8A47.local: Unknown host connect to [10.1.1.10] from ESP_9C8A47.local [10.1.1.206] 31842 listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... Warning: forward host lookup failed for ESP_9C8A47.local: Unknown host connect to [10.1.1.10] from ESP_9C8A47.local [10.1.1.206] 5617 listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out listening on [any] 55555 ... no connection : Connection timed out
die Datenpunkte im Iobroker werden aber aktualisiert und läuft weiterhin!!?
Edit, scheinbar alles verzögernd , letzte Messung 13.43.29 und wird nicht mehr aktualisiert, bekomm es auch nicht wieder zum laufen, selbe Problem wie gestern.
-
@SBorg also nochmal von vorn
- VM neu gestartet
*Ausgabe grep
root@IoBroker:~# ps -aux | grep wetterstation.sh root 695 0.4 0.0 11548 3344 ? S 13:53 0:00 /bin/bash /home/iobroker/wetterstation.sh root 2297 0.0 0.0 11548 2092 ? S 13:55 0:00 /bin/bash /home/iobroker/wetterstation.sh root 2302 0.0 0.0 12780 1016 pts/0 S+ 13:55 0:00 grep wetterstation.sh
Werte für javascript.0.Wetterstation._Kommunikationsfehler (mein Abfrageintervall ist 30 sec)
false true simple-api.0 2020-03-14 13:52:26.944 true true simple-api.0 2020-03-14 13:52:32.131
nur so am Rande gefragt, im log hab ich gerade gesehen(durch den Neustart)
host.IoBroker 2020-03-14 13:57:18.088 error Caught by controller[0]: at process._tickCallback (internal/process/next_tick.js:68:7) host.IoBroker 2020-03-14 13:57:18.087 error Caught by controller[0]: at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49) host.IoBroker 2020-03-14 13:57:18.087 error Caught by controller[0]: at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23) host.IoBroker 2020-03-14 13:57:18.087 error Caught by controller[0]: at (anonymous function).(anonymous function) (/opt/iobroker/node_modules/iobroker.objects-redis/index.js:17:107068) host.IoBroker 2020-03-14 13:57:18.086 error Caught by controller[0]: TypeError: Cannot read property 'common' of null simple-api.0 2020-03-14 13:57:17.534 info (3520) Terminated (NO_ERROR): Without reason simple-api.0 2020-03-14 13:57:17.533 info (3520) terminating simple-api.0 2020-03-14 13:57:17.510 info (3520) terminating http server on port 8087 simple-api.0 2020-03-14 13:57:17.508 error at process._tickCallback (internal/process/next_tick.js:68:7) simple-api.0 2020-03-14 13:57:17.508 error at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49) simple-api.0 2020-03-14 13:57:17.508 error at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23) simple-api.0 2020-03-14 13:57:17.508 error at (anonymous function).(anonymous function) (/opt/iobroker/node_modules/iobroker.objects-redis/index.js:17:107068) simple-api.0 2020-03-14 13:57:17.508 error (3520) TypeError: Cannot read property 'common' of null simple-api.0 2020-03-14 13:57:17.506 error (3520) uncaught exception: Cannot read property 'common' of null
- VM neu gestartet
-
@crunchip sagte in [Linux Shell-Skript] WLAN-Wetterstation:
root@IoBroker:~# ps -aux | grep wetterstation.sh
root 695 0.4 0.0 11548 3344 ? S 13:53 0:00 /bin/bash /home/iobroker/wetterstation.sh
root 2297 0.0 0.0 11548 2092 ? S 13:55 0:00 /bin/bash /home/iobroker/wetterstation.sh
root 2302 0.0 0.0 12780 1016 pts/0 S+ 13:55 0:00 grep wetterstation.shJepp, Skript läuft doppelt. Daher bekommst du gelegentlich Werte, Direkttests funktionieren deswegen auch nicht (der Port ist durch die 1. Instanz bereits belegt)
Die "13:53 Uhr" dürfte der Autostart vom Reboot sein, aber wo die "13:55 Uhr" herkommt? Oder hattest du da zwischenzeitlich das Skript manuell gestartet? Oder hast du es ev. doppelt in der crontab stehen?
Das erklärt dann natürlich auch warum der "Kommunikationsfehler" so schnell kommt. Da werkelt die eine Instanz noch, wird von der 2. blockiert und meckert dann natürlich zu Rechtund wenn dann sich noch mit
simple-api.0 2020-03-14 13:57:17.510 info (3520) terminating http server on port 8087
der Simple-API verabschiedet geht sowieso auch im ioB nüscht mehr.
-
@SBorg wie kann bitte das script doppelt laufen?
es war lediglich ein Neustart der VM,(kein manuelles starten des scripts)
anschliessend habe ichps -aux | grep wetterstation.sh
aufgerufen,
mit dem Ergebnis von oben.ein crontab ist nur einmal eingetragen
@reboot /home/iobroker/wetterstation.sh & 2 0 * * * pkill -9 wetterstation.* && /home/iobroker/wetterstation.sh &
@SBorg sagte in [Linux Shell-Skript] WLAN-Wetterstation:
aber wo die "13:55 Uhr" herkommt?
die Uhrzeit ändert sich, wenn ich den Befehl erneut ausführe, also immer die aktuelle Uhrzeit beim Befehlsaufruf
-
@crunchip bei welchem User hast du den Cron eingetragen? Jeder user hat seinen eigenen Cron.. nicht vergessen.. da hab ich mir auch schon ein paar Eigentore geschossen, weil ein Cron beim falschen user drin war...
-
@crunchip also zum nachvollziehen, ein "sudo crontab -e " ist eine andere also einfach nur crontab -e
-
@ilovegym ich bin mit root drauf
-
@ilovegym aber danke für den Hinweis, hab mal mit sudo eingegeben
ist ein anderes temp/crontab.xxxxx
also bewusst hatte ich kein sudo eingegeben, ist dann wohl scheinbar zu Anfangszeiten durch copy and past passiert, das nochmal ein zweiter crontab gesetzt wurde. -
-
Donnerwetter bei mir lief wetterstation.sh auch zweimal, obwohl es nur in einer cron drin war/ist.
Aber ich habe ein größeres Problem bei Regen_Monat und Regen_Woche.
Ich kann einstellen in der History/Influxdb was ich will, es werden keine Daten geschrieben, alle anderen Daten sind vorhanden. Weiß einfach nicht mehr weiterHistory:
67.1 false 2020-03-14 16:30:39.121 67.1 false 2020-03-14 16:30:12.899 67.1 false 2020-03-14 16:29:46.670
Influxdb:
null false influxdb.0 2020-03-14 17:10:17.628 null false influxdb.0 2020-03-14 17:10:36.632 null false influxdb.0 2020-03-14 17:10:36.644
-
@Nashra
Wird denn der Datenpunkt aktualisiert !?Zeige mal die Debug Ausgabe in Putty was dann kommt !
./wetterstation.sh --debug
-
@Glasfaser sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@Nashra
Wird denn der Datenpunkt aktualisiert !?Zeige mal die Debug Ausgabe in Putty was dann kommt !
./wetterstation.sh --debug
-
Laut Gesamtansicht sind die Werte da .
Da fehlt aber der Abschnitt mit den Datenpunkten ,da kannst du es auch erkennen das sie gesendet werden bzw. welcher Wert gesendet wird ... -
@Glasfaser sagte in [Linux Shell-Skript] WLAN-Wetterstation:
Laut Gesamtansicht sind die Werte da .
Da fehlt aber der Abschnitt mit den Datenpunkten ,da kannst du es auch erkennen das sie gesendet werden bzw. welcher Wert gesendet wird ...Werte kommen alle rein und stehen auch im io in den DP. Im History.0 sind sie ja auch drin,
nur eben die Werte von Regen_Monat und Regen_Woche stehen nicht in Influxdb.0 drin.
Alle anderen Werte/Daten sind in Influxdb vorhanden. -
@SBorg kann es möglich sein, das mit der neuen version wieder das Problem besteht, was ich ganz am Anfang hatte, wegen Proxmox VM, falls du dich erinnern kannst (im Thread ganz am Anfang).
da musst ich ja das -p einfügen in dieser ZeileDATA=$(timeout ${WARTE} nc -lv -p ${WS_PORT}|sed '3 p')
in v1.0 sieht die Zeile so aus
DATA=$(timeout ${WARTE} nc -lvw 1 -p ${WS_PORT}|sed -n '1 p')
da scheinbar bei mir ja vorhin irgendwas doppelt lief, hab ichs nochmal neu gemacht.
Jedoch bekomm ich mit v1.0 keine Werte rein
bin zurück auf die 0.1.4 und läuft wieder
-
@Nashra
Zeige mal die Einstellungen von Influx ( Datenpunkt ) -
@Glasfaser sagte in [Linux Shell-Skript] WLAN-Wetterstation:
@Nashra
Zeige mal die Einstellungen von Influx ( Datenpunkt )