Tägliche Regenmenge aus DWD-Radolan Daten einlesen

Begonnen von alkazaa, 12 August 2023, 21:12:09

Vorheriges Thema - Nächstes Thema

alkazaa

Der DWD stellt Werte der pro Tag gefallenen Regenmengen zur Verfügung, die auf Regenradar-Messungen beruhen und deren Werte an die gemessenen Mengen der Wetterstation angeeicht wurden. Die räumliche Auflösung beträgt dabei 1 km, was die Daten für diejenigen interessant macht, die keine eigene Regenmengenmessung zur Verfügung haben.

Ich habe für eigene Zwecke ein Perl-Programm geschrieben, das diese Daten vom DWD-ftp-Server liest und als reading zur Verfügung stellt. Es handelt sich nicht um ein FHEM-Modul, sondern eine utility-Routine, siehe Anhang. Das ganze ist noch etwas rudimentär (insbesondere das Abfangen möglicher Fehler könnte sicher noch besser werden), aber funktionsfähig. Zur Nutzung bitte die Kommentare am Anfang der Datei lesen.

Da dies mein erstes Perl-Programm ist, bitte ich a) um Nachsicht und b) ggf. um Tipps, wie man es besser machen könnte.

-Franz


Nachtrag 09. November 2023
Basierend auf diesem Codeschnipsel hat JoWiemann inzwischen ein ausgewachsenes Modul 98_CDCOpenData.pm erstellt. 
Es liefert folgende Daten:
  • die Regenmenge der letzten N Tage (N konfigurierbar, default 5); update täglich
  • die Regenmenge seit Mitternacht; update stündlich
  • die prognostizierten Regenintensitäten der nächsten 120 Minuten; update alle 5 Minuten
    (siehe dazu auch diesen Beitrag)
Die Werte werden für den akuellen 'Home'-Ort (soweit in global per latitude/longitude definiert) und für weitere konfigurierbare Orte in Deutschland und einigen angrenzenden Bereichen von Nachbarländern geliefert.



rudolfkoenig

ZitatDa dies mein erstes Perl-Programm ist, bitte ich a) um Nachsicht und b) ggf. um Tipps, wie man es besser machen könnte.

Wegen a): dafuer ist es schon ganz ordentlich.

Wegen b):
- Net::FTP kann FHEM blockieren. Ich empfehle HttpUtils_NonblockingGet: https://wiki.fhem.de/wiki/HttpUtils#HttpUtils_NonblockingGet . Die Daten stehen auch per HTTP zur Verfuegung.
- beim Einlesen des Moduls wird ein Fehler gezeigt:
2023.08.13 11:09:37 1: PERL WARNING: Useless use of concatenation (.) or string in void context at ./FHEM/99_myDWDUtils.pm line 170.
2023.08.13 11:09:37 1: PERL WARNING: Useless use of a constant ("AutoClose") in void context at ./FHEM/99_myDWDUtils.pm line 170.
- beim Aufruf der Funktion bekomme ich
Can't locate object method "now" via package "DateTime" (perhaps you forgot to load "DateTime"?)DateTime wird per Voreinstellung nicht geladen, das muss jedes Modul selber machen. Falls ein anderes Modul das vorher gemacht hat, dann hat man Glueck, davon sollte man aber nicht ausgehen. DateTime ist ein sehr umfangreiches Paket, und kann nicht immer einfach installiert werden: fuer einfachere Aufgaben verwende ich localtime/mktime oder die FHEM eigene Routinen time_str2num bzw. FmtDateTime.

alkazaa

Danke für die Hinweise, Rudolf!
Zitat von: rudolfkoenig am 13 August 2023, 11:22:16DateTime wird per Voreinstellung nicht geladen, das muss jedes Modul selber machen. Falls ein anderes Modul das vorher gemacht hat, dann hat man Glueck, davon sollte man aber nicht ausgehen.
Ich habe die Abhängigkeit von 'DateTime' beseitigt und den Dateianhang im ersten Beitrag aktualisiert.

Für die Umstellung auf HttpUtils_NonblockingGet werd ich aber noch etwas brauchen...

JoWiemann

Hallo alkazaa,

eine sehr schöne Idee. Und, da werden ja noch einige Informationen mehr bereit gestellt, die ich gerne verfügbar machen wwürde. Ich war mal so frech und habe einen ersten nonBlocking Modulentwurf gebastelt. Feel free.

Das Ganze ist ein allererster Entwurf. Doku fehlt z.B.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

alkazaa

Zitat von: JoWiemann am 13 August 2023, 23:03:05...Ich war mal so frech und habe einen ersten nonBlocking Modulentwurf gebastelt....
Ich liebe Frechheit (wenn sie so daherkommt)!

Du hast Dein Modul 98_DWDopenData.pm genannt. Es gibt da aber noch das 55_DWD_OpenData.pm von jensb (kennst Du natürlich, im thread dazu hast Du ja mitdiskutiert). Könnte das nicht zur Verwirrung führen?

Mein Eindruck beim groben Überfliegen des threads zu 55_DWD_OpenData.pm war, dass es problematisch ist in der Nutzung. Außerdem nutze ich selbst das 59_Weather.pm mit OpenWeatherMapAPI für Vorhersagen (nur 'Wind', wegen Raffstore hochfahren). Ich wollte dann noch '(zuletzt gefallener) Regen' für eventuelle künftige Bewässerungsaktivitäten. Daher die Lösung mit dem 99_myDWDUtils.pm, die meinem Weather-device ein neues Reading 'Regen_gestern' "unterschiebt". Schien mir einfacher, als das evtl. problematische 55_DWD_OpenData.pm zu nutzen.

Weiter schriebst Du:
Zitat von: JoWiemann am 13 August 2023, 23:03:05...Und, da werden ja noch einige Informationen mehr bereit gestellt, die ich gerne verfügbar machen wwürde....

An welche hast Du da gedacht? Hilfe würd ich gern anbieten, aber Perl-mäßig kann ich Dir nicht das (Regen)Wasser reichen. Als Tester schon eher.

Beste Grüße
Franz

JoWiemann

Hallo Franz,

55_DWD_OpenData.pm hatte ich nicht mehr auf dem Schirm. Der Name von mir war eher spontan und kann einfach geändert werden.

Dein Perl Code war doch schon recht anspruchsvoll. Die Moduleinbettung war für mich eher eine Übung in nonBlocking.

Im Verzeichnisbaum des DWD findet sich z.B. Umweltstrahlung.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

mi.ke

ich häng mich hier mal ran, damit ich nix verpasse.

Nachdem mein dritter Regenmengenmesser von TFA Dostmann nun auch gestorben ist und der W174 total ungenau ist, scheint mir das was hier entsteht ein gute Alternative zu sein.
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

MadMax-FHEM

#7
Hallo und danke! :)

Ich habe es glatt auf meinem Testsystem mal ausprobiert, in meinem Fall mal die "Modul-Version"...

Musst zunächst "sudo apt-get install libnet-sslglue-perl" ausführen und rebooten...
...aber läuft.

Gut, ja war/ist ja angekündigt: keine Beschreibung bzw. sind noch Reste des Ursprungsmoduls (Fritzbox? ;)  ) zu sehen...

Gut mit dem Einstellen eines Moduls kommen nat. auch Bedürfnisse (potentieller) Nutzer 8)

Ich würde gerne für einen Bekannten Regenmengen aufnehmen, allerdings wohnt der (nat.) wo anders...
Es werden aber ja (wohl) die Koordinaten aus global genommen (was prinzipiell ja schon mal schön ist), es gibt aber keine Möglichkeit (Attribut) das zu ändern?
Wollte schon einen Patch versuchen und habe beim "Reinschauen" gemerkt, dass man im Define auch andere Koordinaten angeben kann :)
Gemacht, getan... ;)

Läuft jetzt mal auf dem Testsystem mit :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

JoWiemann

Hallo,

das FritzBox Modul, dass ich seit einiger Zeit verantworten darf, ist eine wirklich gut gemachte Vorlage für nonBlocking. Deswegen auch hier recycled.

Demnächst habe ich wieder etwas Zeit um die Doku zu pflegen und Ideen umzusetzen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

MadMax-FHEM

Wenn ich helfen kann einfach melden :)

Danke, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

alkazaa

#10
Ich bin erst heute dazu gekommen, das Modul auszuprobieren. Lief nach der gleichen 'Extrarunde' (sudo apt-get install libnet-sslglue-perl) wie bei MadMax-FHEM dann auch bei mir. Andere Geo-Koordinaten beim define zu setzen hatte ich nicht mitbekommen, ist aber natürlich ganz wichtig. Noch besser würd ich's finden (jetzt geht die Wunschlistenorgie los), andere Orte als (User)Attribute anzulegen, oder beim 'set update' andere Koordinaten als optionale Parameter zu übergeben. Auch andere Tage für die Bestimmung der Regenmenge wären interessant, um z.B. mal nachzuschauen, was an einem bestimmten Tag und Ort denn so runterkam.

In meinem use-case rufe ich meine Utils-Funktion per at nur einmal täglich auf, und ich schiebe die ermittelte Regenmenge einem anderen device (eine ohnehin schon vorhandenes Weather-Modul) unter. Fand ich so für mich am sinnvollsten. Geht natürlich auch, indem man das mit JoWiemanns Modulreadings per at oder notify oder wie auch immer erledigt.

Ach ja, noch zur Namensgebung des Moduls: vielleicht wäre eine Name wie 98_CDCOpenData.pm die bessere Wahl?


Jedenfalls toll, dass sich ein Perl-Profi der Sache annimmt. Auch wenn dadurch meine Motivation gedämpft wird, rudolfkoenigs Hinweis auf HttpUtils_NonblockingGet nachzugehen und dabei etwas mehr Perl zu lernen...

Beste Grüße
Franz


Nachtrag: Hilfe biete ich auch gern an, jedenfalls wenn es darum geht, aus irgenwelchen kryptischen Binärdateien eine Information rauszudestillieren

JoWiemann

Zitat von: alkazaa am 20 August 2023, 18:27:50Nachtrag: Hilfe biete ich auch gern an, jedenfalls wenn es darum geht, aus irgenwelchen kryptischen Binärdateien eine Information rauszudestillieren


Hallo Franz,

dass ist super, da es ja noch weitere interessante Daten, wie z.B. natürliche Strahlung, gibt. Mit dem Namen ist ein guter Vorschlag. Und Eure Wünsche finde ich gut. Jetzt fehlt noch Zeit.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Hallo,

anbei eine neue Version. Anregungen ( wie 98_CDCOpenData.pm ) und kritische Hinweise gerne.

Die Doku ist jetzt einigermaßen komplett.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

alkazaa

Hallo Jörg,
bei mir stürzt FHEM leider ab, wenn ich "define myCDC CDCOpenData" ausführe:
Fehler: Verbindung fehlgeschlagen
Firefox kann keine Verbindung zu dem Server unter 192.168.188.22:8083 aufbauen.

Eins fiel mir noch auf (unabhängig vom define-Versuch): Nach 'reload 98_CDCOpenData.pm' steht diese Warnung im FHEM-log:
PERL WARNING: using SSL support of Net::FTP 3.11 instead of SSLGlue at /usr/share/perl5/Net/SSLGlue/FTP.pm line 16.
Gruß
Franz

JoWiemann

Zitat von: alkazaa am 21 August 2023, 17:20:23Hallo Jörg,
bei mir stürzt FHEM leider ab, wenn ich "define myCDC CDCOpenData" ausführe:
Fehler: Verbindung fehlgeschlagen
Firefox kann keine Verbindung zu dem Server unter 192.168.188.22:8083 aufbauen.


Hallo Franz,

was steht denn im Fhem Log. Das sieht nach einem Absturz aus. Hast Du das alte Modul DWD... gelöscht und Fhem mit dem neuen neu gestartet?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM