GDS: Unterschied zwischen den Versionen
Fabian (Diskussion | Beiträge) K (Kapitel Links und Link eingefügt) |
Krikan (Diskussion | Beiträge) K (Hinweis zur Einstellung von GDS) |
||
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Hinweis|Das Modul ist aufgrund der Einstellung des GDS-Dienstes am 17.01.2018 durch den DWD nicht mehr funktionsfähig ist. Es wurde deshalb auch aus contrib gelöscht. Mögliche Alternative auf Basis des Open Data Servers des DWD: {{Link2Forum|Topic=83097}}}} | |||
{{Infobox Modul | {{Infobox Modul | ||
|ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes | |ModPurpose=Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes | ||
|ModType= | |ModType=contrib | ||
|ModForumArea= | |ModForumArea=Unterstützende Dienste/Wettermodule | ||
|ModFTopic=14106 | |ModFTopic=14106 | ||
|ModTechName=55_GDS.pm | |ModTechName=55_GDS.pm | ||
Zeile 27: | Zeile 29: | ||
<code>apt-get install libwww-perl</code> | <code>apt-get install libwww-perl</code> | ||
Abhängig von der Perl-Version muss ggf. auch noch Archive::Zip installiert werden. | |||
== Anwendung == | == Anwendung == | ||
{{Randnotiz|RNTyp=Fehl|RNText=Dieser Modul ist '''NICHT''' in der {{Link2CmdRef}} dokumentiert!}} | |||
=== Define === | === Define === | ||
<code>define [gdsName] GDS [gdsUsername] [gdsPasswort]</code> | <code>define [gdsName] GDS [gdsUsername] [gdsPasswort]</code> | ||
Zeile 35: | Zeile 41: | ||
=== Attribute === | === Attribute === | ||
Die vollständige Liste der Attribute ist in der | Die vollständige Liste der Attribute ist in der {{Link2CmdRef|Anker=GDS}}. | ||
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert: | Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert: | ||
Zeile 46: | Zeile 48: | ||
== Anwendung == | == Anwendung == | ||
=== Liste der verfügbaren Zellen für Warnungen abrufen === | === Liste der verfügbaren Zellen für Warnungen abrufen === | ||
<code>get [gdsName] list capstations</code> | <code>get [gdsName] list capstations</code> | ||
Zeile 55: | Zeile 54: | ||
==== Aktuelle Daten vom Server abrufen ==== | ==== Aktuelle Daten vom Server abrufen ==== | ||
<code> | <code>get [gdsName] rereadcfg</code> | ||
==== Readings aus abgerufenen Daten aktualisieren ==== | ==== Readings aus abgerufenen Daten aktualisieren ==== | ||
Zeile 61: | Zeile 60: | ||
=== Station setzen für automatischen, periodischen Abruf === | === Station setzen für automatischen, periodischen Abruf === | ||
Station setzen, für die beim fhem-Start und dann alle 20 Minuten die Vorhersagedaten eingelesen werden sollen: | |||
Automatisch abgerufen (alle 20 Minuten) werden nur die mit | <code>set [gdsName] forecasts [Station]</code> | ||
Automatisch abgerufen (alle 20 Minuten) werden nur die mit fc_ beginnenden Readings (forecast, d.h. die Vorhersage). Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden. | |||
=== Unwetterwarnungen nach Region aus gelesenen Daten raussuchen === | === Unwetterwarnungen nach Region aus gelesenen Daten raussuchen === | ||
<code>set [gdsName] warnings [Region]</code> | <code>set [gdsName] warnings [Region]</code> | ||
z.B.: <code> set gds warn Nordrhein-Westfalen</code> | z.B.: <code>set gds warn Nordrhein-Westfalen</code> | ||
Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden. | Die Region kann ausgeschrieben oder mit den [http://www.bmelv-statistik.de/de/daten-tabellen-suche/abkuerzungen-der-bundeslaender/ offiziellen Abkürzungen] bezeichnet werden. | ||
Zeile 94: | Zeile 95: | ||
Jedenfalls nach <code>attr [gdsName] gdsLong 1</code> werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben. | Jedenfalls nach <code>attr [gdsName] gdsLong 1</code> werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben. | ||
== Anwendungsbeispiele == | == Anwendungsbeispiele == | ||
Zeile 152: | Zeile 116: | ||
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen "alignTime" Attribute um 5 Minuten. | Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen "alignTime" Attribute um 5 Minuten. | ||
=== Karten | == Bekannte Probleme == | ||
Nach Änderungen im Angebot des DWD kann das GDS-Modul keine Karten mehr herunterladen. Die Karten können direkt vom DWD eingebunden werden. Hinweise dazu gibt es im | |||
{{Link2Forum|Topic=53157|LinkText=Supportthread im Forum}}. | |||
Das GDS-Modul wurde mittlerweile auf "non-blocking" umgeschrieben, führt aber dennoch hin und wieder zu Meldungen einzelner Nutzer, dass FHEM "einfriert" (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer ("get [gdsName] conditionsmap" etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc. | |||
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in {{Link2Forum|Topic=38106|LinkText=diesem schon etwas älteren Thread}} im Forum. | |||
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern: | |||
Was Ihr wissen müsst: | |||
*Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux <code>cd / && find . | grep gds_radarmap.jpg</code> ausführt. | |||
*Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist [ftp://ftp-outgoing2.dwd.de ftp://ftp-outgoing2.dwd.de] und die Karten findet Ihr unterhalb von [ftp://ftp-outgoing2.dwd.de/gds/specials/ ftp://ftp-outgoing2.dwd.de/gds/specials/], z. B. die conditions maps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/ ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/], radarmaps unter [ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ ftp://ftp-outgoing2.dwd.de/gds/specials/radar/] und dann dem passenden Unterverzeichnis für Eure Region, etc. | |||
*Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen). | |||
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt: | |||
<pre> | |||
#!/bin/bash | |||
if [ ! -d "/tmp/gds" ]; then | |||
mkdir /tmp/gds | |||
fi | |||
# ftp-Server als Verzeichnis mounten: | |||
curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass | |||
cd /tmp/gds/gds/specials/radar/southwest | |||
NEUESTE_DATEI=$(ls -t | head -n 1) | |||
echo Downloading ${NEUESTE_DATEI}... | |||
cp "${NEUESTE_DATEI}" "/tmp/gds_radarmap.jpg" | |||
echo ok. | |||
chown fhem:dialout /tmp/gds_radarmap.jpg | |||
cd /tmp/gds/gds/specials/observations/maps/germany | |||
NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1) | |||
echo Downloading ${NEUESTE_DATEI}... | |||
cp "${NEUESTE_DATEI}" "/tmp/gds_conditionsmap.jpg" | |||
echo ok. | |||
chown fhem:dialout /tmp/gds_conditionsmap.jpg | |||
# unmount | |||
fusermount -u /tmp/gds | |||
</pre> | |||
Hinweise: | |||
*user:pass durch Eure Login-Daten für den Server ersetzen. | |||
*/tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen. | |||
*"Suedwest" durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden. | |||
*Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei. | |||
*fhem:dialout sind die Rechte unter Debian. Mit einem <code>li -l</code> im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt. | |||
*Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels <code>apt-get install curlftpfs</code> (Debian) o.ä. installieren lassen sollte. | |||
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger. | |||
== Links == | == Links == | ||
* [[Wetter und Wettervorhersagen]] | * [[Wetter und Wettervorhersagen]] |
Aktuelle Version vom 5. März 2018, 20:47 Uhr
GDS | |
---|---|
Zweck / Funktion | |
Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes | |
Allgemein | |
Typ | Contrib |
Details | |
Dokumentation | Thema |
Support (Forum) | Unterstützende Dienste/Wettermodule |
Modulname | 55_GDS.pm |
Ersteller | betateilchen |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
GDS ist ein Modul, mit dessen Hilfe man sich die Daten des Deutschen Wetterdienstes herunterladen kann und dann Wetterlage, diverse Wetterkarten und/oder Unwettermeldungen anzeigen/auswerten kann.
Voraussetzungen
Anmeldung beim DWD
Als erstes muss man sich beim Deutschen Wetterdienst zur Grundversorgung kostenlos anmelden.
Installation der benötigten Perl-Module
GDS benötigt die Perl-Module Net::FTP, List::MoreUtils, XML::Simple, Text::CSV.
Für Ubuntu und Raspi sollte funktionieren:
apt-get install libnet-lite-ftp-perl liblist-moreutils-perl libxml-simple-perl libtext-csv-perl
Das ftp-Modul verursacht manchmal Probleme bei der Installation. Teilweise ist es wohl auch schon in der Grundinstallation vorhanden, ansonsten kann man versuchen:
apt-get install libnet-ftp-perl
oder
apt-get install libwww-perl
Abhängig von der Perl-Version muss ggf. auch noch Archive::Zip installiert werden.
Anwendung
Define
define [gdsName] GDS [gdsUsername] [gdsPasswort]
[gdsUsername] und [gdsPasswort] gibt es nach Anmeldung vom DWD.
Attribute
Die vollständige Liste der Attribute ist in der commandref/GDS.
Hilfreich kann u.a. sein, wenn man hinter eine Firewall sitzt und der Datenabruf nicht funktioniert:
attr [gdsName] gdsPassiveFtp 1
Anwendung
Liste der verfügbaren Zellen für Warnungen abrufen
get [gdsName] list capstations
Manuelle Aktualisierung der Daten
Aktuelle Daten vom Server abrufen
get [gdsName] rereadcfg
Readings aus abgerufenen Daten aktualisieren
set [gdsName] update
Station setzen für automatischen, periodischen Abruf
Station setzen, für die beim fhem-Start und dann alle 20 Minuten die Vorhersagedaten eingelesen werden sollen:
set [gdsName] forecasts [Station]
Automatisch abgerufen (alle 20 Minuten) werden nur die mit fc_ beginnenden Readings (forecast, d.h. die Vorhersage). Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.
Unwetterwarnungen nach Region aus gelesenen Daten raussuchen
set [gdsName] warnings [Region]
z.B.: set gds warn Nordrhein-Westfalen
Die Region kann ausgeschrieben oder mit den offiziellen Abkürzungen bezeichnet werden.
Unwetterwarnungen granularer nach Kreis aus gelesenenen Daten raussuchen
set [gdsName] alerts [Warncell-ID]
Die passende Warncell-ID kann man sich über get [gdsName] list capstations
heraussuchen.
Ob es passende Warnmeldungen gibt, kann dann über das Reading a_valid
abgefragt werden. Wenn a_valid
1 ist, gibt a_count
die Anzahl der vorhandenen Warnmeldungen an. Die Warnungen stehen dann in den Readings a_X_...
, wobei X ab 0 hochzählt. D.h. wenn a_count
2 ist, gibt es a_0_... und a_1_... Ein praktisches Reading ist z.B. a_X_headline
, das die Zusammenfassung der jeweiligen Warnung als kurze Textzusammenfassung enthält.
Alle eingelesenen Warnmeldungen kann man sich über die Funktion gdsHeadlines()
ausgeben lassen. Z.B. einfach in der Befehlszeile von fhem eingeben:
{gdsHeadlines([gdsName])}
Wer möchte, kann auch das Trennzeichen bei mehreren Meldungen konfigurieren:
{gdsHeadlines([gdsName],'[Trennzeichen]')}
Z.B. also
{gdsHeadlines(gds, '***')}
Standard für das Trennzeichen ist der senkrechte Strich.
Jedenfalls nach attr [gdsName] gdsLong 1
werden in a_X_description die Langmeldungen zu den Warnungen ausgegeben.
Anwendungsbeispiele
Für GDS sollten die Daten regelmäßig aktualisiert werden. Dafür richtet man am besten zwei zeitlich nacheinander laufende ats ein:
Einen zum Holen aktualisierter Daten vom Server:
define readGDS at +*00:10:00 get [gdsName] rereadcfg attr readGDS alignTime 22:30:05
Einen zweiten, der danach läuft, der aus den aktualisierten Serverdaten dann die Readings aktualisiert; z.B. für die Alerts:
define checkGDS at +*00:10:00 get [gdsName] alerts [Region] attr checkGDS alignTime 22:35:05
Wichtig ist, dass beide at zeitlich auseinander liegen, im vorstehenden Beispiel durch die unterschiedlichen "alignTime" Attribute um 5 Minuten.
Bekannte Probleme
Nach Änderungen im Angebot des DWD kann das GDS-Modul keine Karten mehr herunterladen. Die Karten können direkt vom DWD eingebunden werden. Hinweise dazu gibt es im Supportthread im Forum.
Das GDS-Modul wurde mittlerweile auf "non-blocking" umgeschrieben, führt aber dennoch hin und wieder zu Meldungen einzelner Nutzer, dass FHEM "einfriert" (nichts macht), während auf die Rückmeldung von, z. B., einem FTP-Transfer ("get [gdsName] conditionsmap" etc.) gewartet wird. Das kann bei Timing-kritischen Bestandteilen zu Problemen führen, weil Events nicht mitbekommen werden, die Ansteuerung von Geräten nicht funktioniert, etc.
Einige dieser FHEM blockierenden Aktivitäten lassen sich mittels cron recht einfach auslagern (z. B. der ftp Transfer), für andere müsste das GDS-Modul umgeschrieben werden. Details dazu gibt es z. B. in diesem schon etwas älteren Thread im Forum.
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:
Was Ihr wissen müsst:
- Wo legt das GDS-Modul die Karten ab? Z. B. im Temporär-Verzeichnis, /tmp. Wenn Ihr eine radarmap gespeichert habt, findet Ihr den Speicherort recht einfach, indem Ihr unter Linux
cd / && find . | grep gds_radarmap.jpg
ausführt. - Wo liegen die Karten auf dem DWD-ftp-Server? Die Adresse des Servers ist ftp://ftp-outgoing2.dwd.de und die Karten findet Ihr unterhalb von ftp://ftp-outgoing2.dwd.de/gds/specials/, z. B. die conditions maps unter ftp://ftp-outgoing2.dwd.de/gds/specials/observations/maps/germany/, radarmaps unter ftp://ftp-outgoing2.dwd.de/gds/specials/radar/ und dann dem passenden Unterverzeichnis für Eure Region, etc.
- Eure Login-Daten für den DWD ftp-server (habt Ihr vom DWD zugeschickt bekommen und in die Definition des GDS-Moduls eingetragen).
Anbei ein Beispielscript, das jeweils die neueste conditions- und Radarmap für Südwest-Deutschland holt und im /tmp-Verzeichnis ablegt:
#!/bin/bash if [ ! -d "/tmp/gds" ]; then mkdir /tmp/gds fi # ftp-Server als Verzeichnis mounten: curlftpfs ftp-outgoing2.dwd.de /tmp/gds -o user=user:pass cd /tmp/gds/gds/specials/radar/southwest NEUESTE_DATEI=$(ls -t | head -n 1) echo Downloading ${NEUESTE_DATEI}... cp "${NEUESTE_DATEI}" "/tmp/gds_radarmap.jpg" echo ok. chown fhem:dialout /tmp/gds_radarmap.jpg cd /tmp/gds/gds/specials/observations/maps/germany NEUESTE_DATEI=$(ls -t Suedwest* | head -n 1) echo Downloading ${NEUESTE_DATEI}... cp "${NEUESTE_DATEI}" "/tmp/gds_conditionsmap.jpg" echo ok. chown fhem:dialout /tmp/gds_conditionsmap.jpg # unmount fusermount -u /tmp/gds
Hinweise:
- user:pass durch Eure Login-Daten für den Server ersetzen.
- /tmp ggf. anpassen, wenn bei Euch die GDS-Karten in einem anderen Verzeichnis liegen.
- "Suedwest" durch Eure Region ersetzen. Dateinamen können auf dem ftp-Server eingesehen werden.
- Die Angabe von user:pass im Klartext im Script ist unsicher. Sicherer wäre die Angabe einer versteckten und in den Rechten beschränkten Konfigurationsdatei.
- fhem:dialout sind die Rechte unter Debian. Mit einem
li -l
im Verzeichnis, in dem GDS die Karten ablegt, könnt Ihr Euch - vor dem Ausführen des Scripts - den Benutzer und die Rechte ansehen, wie das GDS-Modul bei Euch die Karten ablegt. - Das Script braucht curlftpfs, das sich i.d.R. problemlos mittels
apt-get install curlftpfs
(Debian) o.ä. installieren lassen sollte.
Dann das Script noch regelmäßig über cron ausführen lassen, und schon blockiert Euer FHEM an einer Stelle weniger.