Using radar data provided by the German Weather Service DWD

280 views
Skip to first unread message

Karen K

unread,
Jan 12, 2024, 1:30:17 PM1/12/24
to weewx-user
As this covers Germany only, I write it in german.

Am Anfang hat mich einfach gestört, daß das Wettersymbol auf der Startseite der Belchertown-Skin oft falsch war, weil es aus der Vorhersage stammt und die halt nicht immer zutrifft. Die Lösung bestand dann für mich in einem sehr tiefen Griff in den Geldbeutel und der Anschaffung eines Distrometers. Nun habe ich mich mit den Radardaten beschäftigt, die er Deutsche Wetterdienst anbietet, und gesehen, daß man da zumindest einen Teil der Information auch ganz aktuell bekommt.

In einem binären Format wird unter der Bezeichnung HG für ein 1km-Raster über Deutschland der Niederschlagsstatus bereitgestellt. Diese Daten werden beeindruckend häufig, nämlich aller 5 Minuten, aktualisiert. Wenn man weiß, in welchem Rasterpunkt der eigene Standort liegt, kann man den Niederschlagsstatus dafür aus der Datei ablesen.

Ich habe mich daran versucht und die WeeWX-Erweiterung weewx-DWD um ein Modul für Radardaten erweitert. Es liefert:
  • Variablen (observation types), die den Niederschlagsstatus für definierte Orte in Deutschland enthalten und in Skins verwendet werden können, z.B. mittels $current.radarHGValue. (Also, das heißt, man kann die gewünschten Orte in der Konfiguration festlegen. Die sind nicht von mir vorgegeben.)
  • den wawa-Wert des Niederschlagsstatus, den man mittels $presentweather in ein Niederschlagssymbol zur Anzeige auf der Web-Seite verwandeln kann
  • Karten von Deutschland oder einem Ausschnitt davon mit dem Niederschlagsstatus als PNG-Datei zum Einbinden in Web-Seiten
Beispiel für eine Karte:
radar-HG.png


Es ist natürlich alles noch ganz neu und enthält ganz sicher noch Fehler. 

Wenn jemand Interesse an der Nutzung hat, beschreibe ich die Konfiguration.

michael.k...@gmx.at

unread,
Jan 12, 2024, 2:04:50 PM1/12/24
to weewx-user
Hört sich nach einem Geniestreich an. Da sich mein Standort in Österreich noch in dem Ausschnitt der Karte befindet, melde ich mein Interesse an. Würde das auch gerne als Option für den Bootstrap Skin übernehmen.

Karen K

unread,
Jan 12, 2024, 3:05:21 PM1/12/24
to weewx-user
michael.k...@gmx.at schrieb am Freitag, 12. Januar 2024 um 20:04:50 UTC+1:
Hört sich nach einem Geniestreich an. Da sich mein Standort in Österreich noch in dem Ausschnitt der Karte befindet, melde ich mein Interesse an. Würde das auch gerne als Option für den Bootstrap Skin übernehmen.

Das ist skin-unabhängig. Man muß nur weewx-DWD installiert haben. Die Beispiele in der Dokumentation beziehen sich teilweise auf die Belchertown-Skin, aber man kann "Belchertown" auch durch einen anderen Namen ersetzen.

Als Warnung muß ich noch den Thread "Report thread freezes after weewx.conf change" voranstellen. Wenn es solche Probleme gibt, muß man die Option "include" nutzen. Wenn nicht, kann man die Konfiguration direkt in weewx.conf eintragen.

Sämtliche Konfigurationsinformationen für weewx-DWD finden sich im Abschnitt "[WeatherServices]". Das gilt auch für die Radardaten. Die Konfiguration sieht ungefähr so aus:

[WeatherServices]

    path = /etc/weewx/skins/SKINNAME/dwd

    ...

    [[radar]]

        [[[Station]]]

            provider = DWD

            model = HG

            easting = replace_me

            northing = replace_me

            prefix = ""

            latitude = replace_me

            longitude = replace_me

        [[[Karte]]]

            provider = DWD

            model = HG

            prefix = ""

            map = 100, 100, 900, 1000

            borders = countrycoords.txt


"path" ist der Ort, wohin die Graphikdatei geschrieben werden soll. Das kann auch /var/lib/weewx oder irgendwo anders sein. latitude und longitude sind, denke ich, klar. Spannend wird es mit easting und northing. Dazu muß ich ausholen. Das folgt weiter unten. map gibt die Koordinaten des Ausschnitts in Pixeln an, für den die Karte erzeugt werden soll. Die ersten beiden Zahlen sind die linke untere Ecke, die anderen beiden Breite und Höhe. Die Breite kann maximal 1100 sein, die Höhe 1200. prefix ist ein Namenspräfix, falls man mehrere Stationen oder mehrere Karten hat.

Deutschland ist hier in ein 1km-Raster eingeteilt. easting (deutsch: Rechtswert) und northing (deutsch: Hochwert) sind die Koordinaten innerhalb dieses Rasters in Metern. Allerdings ist hier der Koordinatenursprung weit außerhalb. Nun ist die Frage, wie man diese Werte bekommt. Da die Erde rund ist, kann man ein ebenes Raster nicht einfach so über das Land legen. Man braucht eine kartographische Projektion. Dazu gibt der Deutsche Wetterdienst an, man soll das Programm "proj" benutzen. Zum Glück gibt es das auch für Linux, und man kann es ganz normal mit "apt-get" installieren. Der Aufruf ist wie folgt:

echo longitude latitude | proj +proj=stere +lat_0=90 +lat_ts=60 +lon_0=10 +a=6378137 +b=6356752.3142451802 +no_defs +x_0=543196.83521776402 +y_0=3622588.8619310018

Bitte aufpassen, die Reihenfolge ist umgekehrt wie üblich.

Als Ergebnis spuckt das Programm die beiden Werte aus, die man als easting und northing eintragen muß.

Die Datei countrycoords.txt kann Linien enthalten, die als Grenzen o.ä. in die Graphik eingezeichnet werden sollen. Pro Zeile muß ein Koordinatenpaar stehen, wieder mit dem Programm "proj" erzeugt, dem man dazu direkt eine Liste von geographischen Koordinaten übergeben kann. Anfang und Ende einer Linie wird durch eine Zeile mit zwei Sternchen und einem Leerzeichen dazwischen gekennzeichnet.

Soweit erst einmal die grobe Übersicht.

Karen K

unread,
Jan 13, 2024, 1:28:10 AM1/13/24
to weewx-user
Darstellung der Farblegende:

#from user.weatherservicesradar import DwdRadar

...

                 #for $idx,$val in $DwdRadar.TEXT['de'].items()

                 <p>

                 <i class="statusIcon" style="background-color:$DwdRadar.COLORS[$idx]"></i>

                 $val

                 </p>

                 #end for


Und in einer CSS-Datei:

.statusIcon {

  width:14px;

  height:14px;

  display:inline-block;

  border:1px solid #808080;

}


Farblegende.png

Karen K

unread,
Jan 13, 2024, 2:52:34 AM1/13/24
to weewx-user
Und hier haben wir dann Anfänge einer Anleitung.

hesf...@gmail.com

unread,
Jan 14, 2024, 5:09:59 AM1/14/24
to weewx-user
Hallo,
eine kurze Frage zum Radarbild

eine Fehlermeldung in der log.datei
2024-01-14T10:56:58.986219+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.base: thread 'OPENMETEO-ThisStation' starting
2024-01-14T10:56:58.986759+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD: site_dict {'Station': {'provider': 'DWD', 'model': 'HG', 'easting': '7255594.98', 'northing': '-3424660.38', 'prefix': '', 'latitude': '53.6059404', 'longitude': '11.3413982'}, 'Karte': {'provider': 'DWD', 'model': 'HG', 'prefix': '', 'map': ['100', '100', '900', '1000'], 'background': 'light'}}
2024-01-14T10:56:58.987310+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD: location_dict {'debug': '0', 'WEEWX_ROOT': '/etc/weewx', 'log_success': 'True', 'log_failure': 'True', 'version': '5.0.0', 'config_path': '/etc/weewx/weewx.conf', 'WEEWX_ROOT_ORIG': '/etc/weewx', 'path': '/etc/weewx/skins/DWD/dwdws', 'provider': 'DWD', 'model': 'HG', 'easting': '7255594.98', 'northing': '-3424660.38', 'prefix': '', 'latitude': '53.6059404', 'longitude': '11.3413982'}
2024-01-14T10:56:58.987954+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD: location_dict {'debug': '0', 'WEEWX_ROOT': '/etc/weewx', 'log_success': 'True', 'log_failure': 'True', 'version': '5.0.0', 'config_path': '/etc/weewx/weewx.conf', 'WEEWX_ROOT_ORIG': '/etc/weewx', 'path': '/etc/weewx/skins/DWD/dwdws', 'provider': 'DWD', 'model': 'HG', 'prefix': '', 'map': ['100', '100', '900', '1000'], 'background': 'light'}
2024-01-14T10:56:58.989080+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD: radar DWD_!_HG
2024-01-14T10:56:58.989800+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD: radar {'provider': 'DWD', 'model': 'HG', 'path': '/etc/weewx/skins/DWD/dwdws', 'log_success': 'True', 'log_failure': 'True', 'Station': ConfigObj({'debug': '0', 'WEEWX_ROOT': '/etc/weewx', 'log_success': 'True', 'log_failure': 'True', 'version': '5.0.0', 'config_path': '/etc/weewx/weewx.conf', 'WEEWX_ROOT_ORIG': '/etc/weewx', 'path': '/etc/weewx/skins/DWD/dwdws', 'provider': 'DWD', 'model': 'HG', 'easting': '7255594.98', 'northing': '-3424660.38', 'prefix': '', 'latitude': '53.6059404', 'longitude': '11.3413982'}), 'Karte': ConfigObj({'debug': '0', 'WEEWX_ROOT': '/etc/weewx', 'log_success': 'True', 'log_failure': 'True', 'version': '5.0.0', 'config_path': '/etc/weewx/weewx.conf', 'WEEWX_ROOT_ORIG': '/etc/weewx', 'path': '/etc/weewx/skins/DWD/dwdws', 'provider': 'DWD', 'model': 'HG', 'prefix': '', 'map': ['100', '100', '900', '1000'], 'background': 'light'})}
2024-01-14T10:56:58.990402+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.radar: {'provider': 'DWD', 'model': 'HG', 'path': '/etc/weewx/skins/DWD/dwdws', 'log_success': 'True', 'log_failure': 'True', 'prefix': '', 'locations': ConfigObj({'Station': {'xy': (7255594.98, -3424660.38), 'prefix': '', 'latitude': 53.6059404, 'longitude': 11.3413982}}), 'maps': ConfigObj({'Karte': ConfigObj({'debug': '0', 'WEEWX_ROOT': '/etc/weewx', 'log_success': 'True', 'log_failure': 'True', 'version': '5.0.0', 'config_path': '/etc/weewx/weewx.conf', 'WEEWX_ROOT_ORIG': '/etc/weewx', 'path': '/etc/weewx/skins/DWD/dwdws', 'provider': 'DWD', 'model': 'HG', 'prefix': '', 'map': [100, 100, 900, 1000], 'background': 'light'})})}
2024-01-14T10:56:58.990999+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.base: thread 'DWD-Radar-DWD_HG' starting
2024-01-14T10:56:58.992436+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.db: thread 'DWDsave' starting
2024-01-14T10:56:58.992751+01:00 wetter weewxd-weewx[1591495]: INFO weewx.engine: StdConvert target unit is 0x10
dann
2024-01-14T10:56:59.116659+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.base: successfully downloaded https://api.open-meteo.com/v1/dwd-icon
2024-01-14T10:56:59.186680+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.base: successfully downloaded https://opendata.dwd.de/weather/radar/composite/hg/HG_LATEST_000.bz2
2024-01-14T10:56:59.629953+01:00 wetter weewxd-weewx[1591495]: ERROR user.DWD.base: thread 'DWD-Radar-DWD_HG': main loop OSError - cannot open resource
2024-01-14T10:56:59.638020+01:00 wetter weewxd-weewx[1591495]: INFO user.DWD.base: thread 'DWD-Radar-DWD_HG' stopped
2024-01-14T10:56:59.638678+01:00 wetter weewxd-weewx[1591495]: INFO weewx.engine: Clock error is -1.64 seconds (positive is fast)
2024-01-14T10:56:59.638766+01:00 wetter weewxd-weewx[1591495]: INFO weewx.engine: Using binding 'wx_binding' to database 'weewx'
2024-01-14T10:56:59.639274+01:00 wetter weewxd-weewx[1591495]: INFO weewx.manager: Starting backfill of daily summaries

und dann nichts mehr von -- > weatherservicesradar.py

gibt es schon ein Muster für contrycoords.txt

Danke
Hartmut

hesf...@gmail.com

unread,
Jan 14, 2024, 6:49:44 AM1/14/24
to weewx-user
Nachtrag:
in weatherservicesradar.py in Zeile 260 von
        #self.font_file = '/etc/weewx/skins/Belchertown1_3/lib/fonts/roboto/KFOlCnqEu92Fr1MmSU5fBBc9.ttf'
        self.font_file = '/usr/share/fonts/truetype/freefont/FreeMono.ttf'
gewechselt
und die Datei "radar-HG.png"  wird erzeugt, jedoch ohne die Landegrenzen.

Danke
Hartmut

Karen K

unread,
Jan 14, 2024, 9:48:48 AM1/14/24
to weewx-user
hesf...@gmail.com schrieb am Sonntag, 14. Januar 2024 um 12:49:44 UTC+1:
und die Datei "radar-HG.png"  wird erzeugt, jedoch ohne die Landegrenzen.

Bitte die Datei countrycoords.txt vorerst hier herunterladen: https://www.woellsdorf-wetter.de/dwd/countrycoords.txt

P.S.: Auch "WN" und "RV" sollten inzwischen ein Ergebnis liefern.

Karen K

unread,
Jan 15, 2024, 1:24:51 PM1/15/24
to weewx-user
Ich hatte dann gleich noch einen Wunschzettel bekommen, der sich sogar in gewisser Weise erfüllen ließ. Die Formate WN (Radarreflektivität dBZ) und RV (Regenintensität) enthalten eine Vorhersage für die nächsten zwei Stunden. Diese Vorhersage läßt sich jetzt als animierte GIF-Datei speichern. Dazu ist bei der Karte die Option "forecast" anzugeben. Mögliche Werte sind "none", "PNG" und "GIF". 

radar-RV.gif

Karen K

unread,
Jan 16, 2024, 3:04:01 PM1/16/24
to weewx-user
Noch kommt hier relativ schnell etwas hinzu. Kartenausschnitte zeigten die Ortsnamen ziemlich pixelig. Das hat sich jetzt verbessert. Es werden auch mehr Orte angezeigt, wenn der Ausschnitt kleiner ist. Damit man die Grenzen nicht so mühsam in Pixeln heraussuchen muß, kann man jetzt beim Schlüssel "map" anstelle der vier Zahlen auch ein Bundesland im ISO3166-2-Code angeben, z.B. "DE-MV" für Mecklenburg-Vorpommern. Bis jetzt funktioniert das allerdings nur für die ostdeutschen Bundesländer sowie die österreichischen Bundesländer Vorarlberg (AT-8) und Tirol (AT-7). Außerdem geht es für das Gebirge Harz ("Harz"), Deutschland im Ganzen ("DE") und - für Tests der Skalierung - die ostdeutschen Bundesländer zusammen ("DE-Ost").

michael.k...@gmx.at

unread,
Jan 28, 2024, 12:10:45 PM1/28/24
to weewx-user
Ich muss da jetzt endlich mal angehen. Die Radardaten in Kombination mit der Temperatur müssten sich ja auch gut eignen, um die Heizung für den Regenbecher anzusteuern, ohne sinnlos Energie zu verschwenden.

Karen K

unread,
Jan 28, 2024, 1:18:15 PM1/28/24
to weewx-user
English version below.

Es gibt zu diesem Thema noch etwas Neues: eine Kurzfrist-Niederschlagsvorhersage. Da kann man  für die nächsten 2 Stunden im 5-Minuten-Abstand erfahren, ob man einen Platzregen zu gewärtigen hat. Die Radardaten des Deutschen Wetterdienstes enthalten eine solche Vorhersage (siehe die animierte GIF-Datei weiter oben). Hier kann man sie nun für einen beliebigen Ort herausziehen und als Tabelle oder sonst irgendwie darstellen, was die Kreativität beim Schreiben von Skin-Templates hergibt. Eine bloße Tabelle ist recht einfach:

<table>

#set $forecast = $day.radarRVRainRateForecast.series

#for $i in $forecast

<tr>

<td>$i[0]</td><td>$i[1]</td><td>$i[2]</td>

</tr>

#end for

</table>


Der Zeitraum (hier $day) ist dabei egal. Es wird immer die ganze Vorhersage zurückgeliefert. Man kann auch ein Template schreiben, das eine JSON-Datei daraus erzeugt, die dann von HighCharts in eine Graphik verwandelt wird. Voraussetzung, daß die Vorhersage abgerufen werden kann, ist, daß für den betreffenden Ort eine Abfrage des aktuellen Wertes konfiguriert ist. d.h. um radarRVRainRateForecast zu haben, muß es radarRVRainRate geben. Im Moment eignet sich das Wetter leider nur wenig zum Testen dieser Funktionalität, aber warten wir auf das nächste Tiefdruckgebiet.

Abgedeckt werden Deutschland, Luxemburg, die österreichischen Bundesländer Tirol (teilweise) und Vorarlberg sowie Nordwesttschechien. Die Genauigkeit wird durch das Raster von 1 km begrenzt.

----------------

Included in their radar data products the German Weather Service DWD provides a short time forecast of precipitation intensity with 5 minutes interval. This extension extracts those forecasts for locations specified by the user in the weewx.conf configuration file. So you can see if you may face a rain of cats and dogs at your station within the next 2 hours or something. The service covers Germany, Lëtzebuerg, Austrian states Tirol (parts of) and Vorarlberg as well as the north west of Czechia including Praha. The accuracy is limited by the 1 km grid.

It is simple to display the forecast as a table:

<table>

#set $forecast = $day.radarRVRainRateForecast.series

#for $i in $forecast

<tr>

<td>$i[0]</td><td>$i[1]</td><td>$i[2]</td>

</tr>

#end for

</table>


The timespan (here: $day) is irrelevant. You always get the whole forecast.

Unfortunately there is no chance to test this functionality now. You will have to wait for the next cyclone.

Karen K

unread,
Jan 29, 2024, 3:17:00 AM1/29/24
to weewx-user
michael.k...@gmx.at schrieb am Freitag, 12. Januar 2024 um 20:04:50 UTC+1:
Würde das auch gerne als Option für den Bootstrap Skin übernehmen.

@Michael: Wenn das dann umgesetzt ist, könnte ich einen Link setzen, daß die Leute sehen, daß sie da eine Skin installieren können, die das nutzt.
 
Reply all
Reply to author
Forward
0 new messages