• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Gefühlte Temperatur und "Schwüleindex" aus DWD-Daten ermitteln

Begonnen von murgwetter, 30.06.2018, 23:40:34

⏪ vorheriges - nächstes ⏩

murgwetter

Ich habe mich auch mal ein wenig mit opendata beschäftigt (auch früher schon mit dem GDS).
Und da gerade im Sommer die gefühlte Temperatur und vor Allem die Schwüle interessant sind, dachte ich, ich schreibe hier mal eine kleine Anleitung, wie man diese Werte ermitteln kann.

Hintergrund: Der DWD berechnet basierend auf dem ICON-Modell die gefühlte Temperatur und den Schwüleindex sowie den UV-Index für jeden Gitterpunkt im Bereich Europa für einen Zeitraum von +72 Stunden. Diese Berechnungen werden 1x täglich durchgeführt und zwischen 3:00 und 5:00 Uhr UTC online gestellt. Im Gegensatz zur Darstellung der gefühlten Temperatur in der Warnwetter APP werden die Daten stündlich aufgelöst, allerdings dafür nur 1x täglich berechnet.
(Quelle: https://opendata.dwd.de/climate_environment/health/forecasts/README.txt)

Die Daten liegen im GRIB2-Format vor, müssen also für eine Weiterverarbeitung erst decodiert werden.
Diese Arbeit erledigen die Gribtools der ec-codes vom EZMWF (https://software.ecmwf.int/wiki/display/ECC/ecCodes+installation). Um die Tools zu bauen, wird neben dem gcc-Compiler auch ein Fortran-Compiler (gfortran) und das CMAKE-Build-Tool benötigt. Für Ubuntu/Debian sind folgende Schritte notwendig:


sudo apt update
sudo apt install gfortran
sudo apt install cmake


Dann die aktuellen Quellcodes herunterladen (der Link auf das jeweils aktuelle Release findet sich hier: https://software.ecmwf.int/wiki/display/ECC/ecCodes+installation). Im Augenblick ist die Version 2.8.0 aktuell. Also:


wget https://software.ecmwf.int/wiki/download/attachments/45757960/eccodes-2.8.0-Source.tar.gz


Anschließend nach der Installationsanleitung auf o.g. Seite vorgehen:


tar xzf eccodes-2.8.0-Source.tar.gz
mkdir build ; cd build
cmake ../eccodes-2.8.0-Source
make
# Das kann jetzt etwas dauern...
ctest
# Das kann auch etwas dauern und benötigt einen Internetzugang, da Testdaten geladen werden
# Wenn keine Fehler angezeigt werden:
make install
# Anschließend aufräumen:
cd ..
rm -rf eccodes-2.8.0-Source
rm eccodes-2.8.0-Source.tar.gz


Damit sind die Voraussetzungen geschaffen, um GRIB2-Dateien zu decodieren.

Nun die aktuelle Version der GRIB2-Dateien laden. Leider gibt es hier keine "Latest"-Dateien, so dass wir alles laden müssen (was sich geändert hat) und dann von Hand die aktuelle Datei suchen müssen:
(Die Daten werden hier in einen Ordner tmp unterhalb des aktuellen Ordners geladen.)


wget -q -r -l1 -np -nd -N  -P tmp -A "*icreu_sul*" https://opendata.dwd.de/climate_environment/health/forecasts/
# Jetzt die aktuelle Datei finden:
SULFILE=`ls tmp/*icreu_sul* | tail -1`
# Nun wiederholen wir das für die anderen Dateien:
wget -q -r -l1 -np -nd -N  -P tmp -A "*icreu_gft*" https://opendata.dwd.de/climate_environment/health/forecasts/
GFTFILE=`ls tmp/*icreu_gft* | tail -1`
# get uvi
wget -q -r -l1 -np -nd -N  -P tmp -A "*icreu_uvi*" https://opendata.dwd.de/climate_environment/health/forecasts/
UVIFILE=`ls tmp/*icreu_uvi* | tail -1`
# get uvh
wget -q -r -l1 -np -nd -N  -P tmp -A "*icreu_uvh*" https://opendata.dwd.de/climate_environment/health/forecasts/
UVHFILE=`ls tmp/*icreu_uvh* | tail -1`


Mit dem folgenden Befehl wird die GRIB2-Datei decodiert und die Ausgabe in eine Datei geschrieben:
Die Variablen LAT und LON müssen mit dem gewünschten Längen- und Breitengrad vorbelegt werden.
Für die Erläuterung der einzelnen Parameter empfehle ich einen Aufruf von grib_ls ohne Parameter oder die Seite https://software.ecmwf.int/wiki/display/ECC/GRIB+tools.

grib_ls -l ${LAT},${LON},1 -p step,dataDate,dataTime ${GFTFILE} | tail -n +3 | head -n -10 | awk '{ d="date +\"%d.%m.%Y %H:%M\" -d \""$2 " " $3 " + " $1 "minutes\""; d | getline d1; close(d); print d1,$4-273.15}' > tmp/GFT.txt


Analog wird jetzt mit den anderen Dateien verfahren, wobei bei den beiden UV-Dateien nur jeweils ein Wert pro Tag enthalten ist und somit die Decodierung anderst erfolgt:


grib_ls -l ${LAT},${LON},1 -p step,dataDate,dataTime ${SULFILE} | tail -n +3 | head -n -10 | awk '{ d="date +\"%d.%m.%Y %H:%M\" -d \""$2 " " $3 " + " $1 "minutes\""; d | getline d1; close(d); print d1,$4}' > tmp/SUL.txt

grib_ls -l ${LAT},${LON},1 -p step,dataDate,dataTime ${UVIFILE} | tail -n +3 | head -n -10 | awk '{ d="date +\"%d.%m.%Y\" -d \""$2 " " $3 " + " $1-1 "days\""; d | getline d1; close(d); print d1,$4}' > tmp/UVI.txt

grib_ls -l ${LAT},${LON},1 -p step,dataDate,dataTime ${UVHFILE} | tail -n +3 | head -n -10 | awk '{ d="date +\"%d.%m.%Y\" -d \""$2 " " $3 " + " $1-1 "days\""; d | getline d1; close(d); print d1,$4}' > tmp/UVH.txt


In den jeweiligen .txt-Dateien ist jetzt eine Auflistung der entsprechenden Werte mit dem zugehörigen Datum zu finden. Diese können dann weiterverarbeitet und z.B. grafisch dargestellt werden.

Beim Schwüleindex handelt es sich um einen Index, der wie folgt zu interpretieren ist:
>2: sehr stark
1,5 - 2: stark
1 - 1,5: mäßig
< 1: kein
9999: Nicht berechnet (bei einer gefühlten Temperatur < 15 °C wird der Index nicht berechnet).
Quelle: https://www.dwd.de/DE/leistungen/geftempschwuele/geftempschwuele.html?nn=18496

Ich hoffe, der ein oder andere kann mit diesen Infos was anfangen und in Zukunft auch die gefühlte Temperatur und den Schwüleindex auf seiner/ihrer Webseite darstellen. Ich bin gespannt  :)

Im Anhang habe ich ein kleines Skript, das die einzelnen Vorgänge automatisch erledigt. Außerdem erstellt es neben den Einzeldateien noch "Sammeldateien", bei denen die zusammengehörigen Werte nebeneinander dargestellt werden. Am Anfang des Skripts müssen nur noch die gewünschten Parameter angepasst werden.

Viel Spaß!

Viele Grüße,
Günther.