Treiber unter Weewx liefert "invalid " Werte

Für allgemeine Software
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Treiber unter Weewx liefert "invalid " Werte

#1

Beitrag von wedder_man »

Hallo liebes Forum und weewx Kenner.

Nachdem ich nun vor einigen Tage erfolgreich eine "uralte" Matrix Station mit weewx "verheiraten" konnte, habe ich folgende Frage/Problem.

Der Windmesser der Station fällt schon seit längerem immer mal wieder (acuh längere Zeit) aus bzw. liefert keine Daten mehr. Das war auch unter meteohub so. Das ist nicht schön, aber auch nich so tragisch.
Unter meteohub waren dann halt einfach keine Daten in der Aufzeichnung.

Unter weewx wird aber nun von dem Treiber ws23xx.py im logfile folgendes geliefert

Code: Alles auswählen

weewx[426591] INFO weewx.drivers.ws23xx: invalid wind reading: speed=51.0 dir=247.5 overflow=5 invalid=0
Interessanterweise interpretiert weewx bzw. eben der Treiber im Falle einer "Nichtlieferung" von Daten diese als 51.0 aus der Richtung 247.5. Umgerechnet erscheinen dann auch in der Anzeige immer exakt 184km/h bzw. in der Datenbank
immer exakt 114.08403444890453 mph.
2023-08-03_16-40-16-40-07-Screenshot.png
2023-08-03_16-40-16-40-07-Screenshot.png (13.15 KiB) 491 mal betrachtet


Natürlich kann ich gut die Werte mit z.B. phpAdmin entfernen, da es ja auch immer der gleiche Wert ist.
Das kann man ja auch ggf. automatisieren und regelmäßg ausführen lassen.
Schöner wäre jedoch das die Werte erst gar nicht in die DB geschrieben werden.

Frage 1: Warum wird der Wert in die DB übernommen, wenn er doch "invalid" ist?

Ich habe mir dazu den Treiber angeschaut und auch den entsprechenden Absatz gefunden, der dafür wohl zuständig ist:

Code: Alles auswählen

   ws, wd, wso, wsv = data['wind']
    if wso == 0 and wsv == 0:
        packet['windSpeed'] = ws
        if packet['windSpeed'] is not None:
            packet['windSpeed'] *= 3.6 # weewx wants km/h
        packet['windDir'] = wd
    else:
        log.info('invalid wind reading: speed=%s dir=%s overflow=%s invalid=%s'
                 % (ws, wd, wso, wsv))
        packet['windSpeed'] = None
        packet['windDir'] = None

    packet['windGust'] = None
    packet['windGustDir'] = None
Ich hab schon etwas getestet mit Einträgen in diesem Bereich, was aber entweder ignoriert wurde oder dazu führte das weewx nicht startete wegen Syntax Fehlern (Änderungen in der log.info Zeile).

Frage 2: Vielleicht kann mir jemand einen Tipp geben wie hier die Schleife (und das scheint ja eine zu sein) befüllt wird.
Evtl. muss ich die Abfrage erweitern?

z.B. "Wenn speed=114.08403444890453 dann setze speed=0"
Oder so ähnlich? Oder geht das auch einfacher?

Danke und Grüße
wedder_man
Benutzeravatar
Gyvate
Offline
Beiträge: 2523
Registriert: 10 Aug 2021, 23:41
Wohnort: Saarbrücken
Hat sich bedankt: 12 mal
Danksagung erhalten: 381 mal
Kontaktdaten:

Re: Treiber unter Weewx liefert "invalid " Werte

#2

Beitrag von Gyvate »

Du könntest einen entsprechenden Eintrag in der weewx.conf
[StdCalibrate]
[[Corrections]]
machen - in richtiger Python Notation

z.B. so etwas wie
windSpeed = treiber_variable if treiber_variable < 114 else None

dann würde für alle Werte, die kleiner als 114 sind, der entsprechende Wert in die Datenbank geschrieben, bei >= 114 würde None (Leerwert) geschrieben bzw. belassen,
wobei treiber_variable der Name sein muss, den Dein ws23xx Treiber für Windgeschwindigkeit hat; z.B. wind

Neustart von weewx nach Änderung in weewx.conf !
Ecowitt WS2320E,HP2553,HP3501,GW2001,GW1100, GW1000,WH2650,WN1910,WN1980, Meteobridge RPi4B-2GB/(16)32GB SLC 3165, Weewx 4.5.1/4.10.2, CumulusMX 3.28.4 b3282, Barani MeteoShield Pro, MetSpecRad02, Personal Weather Tablet(PWT) - http://meshka.eu
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Re: Treiber unter Weewx liefert "invalid " Werte

#3

Beitrag von wedder_man »

Gyvate hat geschrieben: 03 Aug 2023, 19:07 Du könntest einen entsprechenden Eintrag in der weewx.conf

z.B. so etwas wie
windSpeed = treiber_variable if treiber_variable < 114 else None
wobei treiber_variable der Name sein muss, den Dein ws23xx Treiber für Windgeschwindigkeit hat; z.B. wind

Neustart von weewx nach Änderung in weewx.conf !
Danke für den Hinweis. :)
Ich werde testen und berichten :D
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Re: Treiber unter Weewx liefert "invalid " Werte

#4

Beitrag von wedder_man »

Hallo, Guten Morgen.

es scheint zu funktionieren.

Code: Alles auswählen

windSpeed = windSpeed if windSpeed < 114 else None
Musst zwar einiges Testen, aber das hier schreibt nun "N/A N/A" (wenn auch doppelt) ins Display.
Mal schauen obs dann auch passt wenn Werte geliefert werden.
wk893b
Offline
Beiträge: 134
Registriert: 23 Jan 2022, 09:13
Danksagung erhalten: 10 mal

Re: Treiber unter Weewx liefert "invalid " Werte

#5

Beitrag von wk893b »

Bin nicht der Spezialist für Python, aber ich fürchte, das funktioniert so nicht.
Vermutlich wird jetzt generell "n/a n/a" geschrieben, auch wenn es Werte geben sollte.

Die If-Bedingung scheint falsch und hinter else müsste sicher ein":" gesetzt werden, damit die Funktion wirksam wird.
Vergleiche analog hierzu mal den oben geposteten Quelltext aus #1.
Viele Grüße

wk893b


https://bh.wetter-alarm.de/
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Re: Treiber unter Weewx liefert "invalid " Werte

#6

Beitrag von wedder_man »

wk893b hat geschrieben: 04 Aug 2023, 10:11 Bin nicht der Spezialist für Python, aber ich fürchte, das funktioniert so nicht.
Vermutlich wird jetzt generell "n/a n/a" geschrieben, auch wenn es Werte geben sollte.

Die If-Bedingung scheint falsch und hinter else müsste sicher ein":" gesetzt werden, damit die Funktion wirksam wird.
Vergleiche analog hierzu mal den oben geposteten Quelltext aus #1.
hmm..ja den : habe ich auch schon mal gesetzt.
Dann startet weewx aber nicht und meckert genau diesen ":" an...
Oder kann man das in der Conf irgendwie "quoten"?

Ich warte mal ab bis ich sicher weiss das der Windmesser sendet (hat er bislang nicht).
wk893b
Offline
Beiträge: 134
Registriert: 23 Jan 2022, 09:13
Danksagung erhalten: 10 mal

Re: Treiber unter Weewx liefert "invalid " Werte

#7

Beitrag von wk893b »

Ja, klar, kannst abwarten.

Trotzdem fürchte ich, dass die If-Bedingung falsch ist.

Das liest sich etwas unlogisch, so:
Wenn die Windgeschwindigkeit < 114 (was dann?)
andernfalls, nichts.

Da fehlt vor andernfalls eine Anweisung. Was soll da passieren?

Vielleicht mosert weex wegen dieser Unlogik?
Viele Grüße

wk893b


https://bh.wetter-alarm.de/
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Re: Treiber unter Weewx liefert "invalid " Werte

#8

Beitrag von wedder_man »

und schwupps ist er mal wieder online
gezeigt wird jetzt das hier (es scheint halt grad kein Wind zu sein .. bin 600km weg von der Station :lol: ).
2023-08-04_10-56-10-56-11-Screenshot.png
2023-08-04_10-56-10-56-11-Screenshot.png (11 KiB) 434 mal betrachtet
Ein Blick in die DB verrät, das er eine 0 geschrieben hat, statt NULL.
Der zweite N/A ist die Richtung, zu der keine Daten empfangen wurden.
Sollte also passen...
spannend.

Danke :D
Zuletzt geändert von wedder_man am 04 Aug 2023, 11:26, insgesamt 2-mal geändert.
wedder_man
Offline
Beiträge: 13
Registriert: 06 Jul 2023, 09:45
Wohnort: Chiemgau

Re: Treiber unter Weewx liefert "invalid " Werte

#9

Beitrag von wedder_man »

wk893b hat geschrieben: 04 Aug 2023, 10:59 Ja, klar, kannst abwarten.

Trotzdem fürchte ich, dass die If-Bedingung falsch ist.

Das liest sich etwas unlogisch, so:
Wenn die Windgeschwindigkeit < 114 (was dann?)
andernfalls, nichts.

Da fehlt vor andernfalls eine Anweisung. Was soll da passieren?

Vielleicht mosert weex wegen dieser Unlogik?
Ja, mir war das auch unlogisch, habs dann halt mal konkret so eingetragen.
Aber man muss es anders lesen: "Nimm den Wert nur wenn er < 114 ist, andernfalls trage NULL ein.

Evtl. stimmt es ja auch nur teilweise, denn die 0 steht derzeit nur für den windspeed drin, nicht aber für die Richtung und
die Böen (wobei ja vielleicht auch nix übertragen wurde).
Mal schauen, vielleicht halt nochmal neu rantasten...erst mal lasse ich es so laufen.
Wichtig ist erst mal das die DB nicht zugemüllt wird mit unsinnigen Werten :D
Benutzeravatar
Gyvate
Offline
Beiträge: 2523
Registriert: 10 Aug 2021, 23:41
Wohnort: Saarbrücken
Hat sich bedankt: 12 mal
Danksagung erhalten: 381 mal
Kontaktdaten:

Re: Treiber unter Weewx liefert "invalid " Werte

#10

Beitrag von Gyvate »

wk893b hat geschrieben: 04 Aug 2023, 10:11 Bin nicht der Spezialist für Python, aber ich fürchte, das funktioniert so nicht.
Vermutlich wird jetzt generell "n/a n/a" geschrieben, auch wenn es Werte geben sollte.

Die If-Bedingung scheint falsch und hinter else müsste sicher ein":" gesetzt werden, damit die Funktion wirksam wird.
Vergleiche analog hierzu mal den oben geposteten Quelltext aus #1.
ich habe einen analogen Eintrag in meiner weewx.conf, der aus anderen Gründen notwendig ist, und der funktioniert
einwandfrei - ohne Punkt => die Synthax stimmt.

Code: Alles auswählen

radiation = luminosity/126.7 if luminosity is not None else None
falls es mit "< 114" nicht funktioniert, was passiert mit ">= 114" ?

@wk893b: die Anweisung lautet in Sprache übersetzt:
mache die Zuweisung a = b wenn b < 114 anderenfalls a = None (NULL)
da fehlt m.E. nichts, auch kein ":" - siehe funktionierendes Beispiel oben

natürlich muss für jedes weitere Datenbankfeld wie windGust oder windDir, falls nötig, ein eigener Eintrag her.
Und wenn gerade kein Wind weht, ist wind = 0 und die Zuweisung korrekt, wobei 0 und NULL zwei verschiedene Dinge sind.

eine Zuweisung zu windSpeed versorgt natürlich nur das windSpeed Datenbankfeld bzw. die Loop-Tabelle, aus der das DB-Feld gefüllt wird..
Zuletzt geändert von Gyvate am 04 Aug 2023, 11:40, insgesamt 2-mal geändert.
Ecowitt WS2320E,HP2553,HP3501,GW2001,GW1100, GW1000,WH2650,WN1910,WN1980, Meteobridge RPi4B-2GB/(16)32GB SLC 3165, Weewx 4.5.1/4.10.2, CumulusMX 3.28.4 b3282, Barani MeteoShield Pro, MetSpecRad02, Personal Weather Tablet(PWT) - http://meshka.eu
Antworten