GDS: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
K (Anpassungen an neue Version des GDS-Moduls)
Zeile 27: Zeile 27:


<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 ==
Zeile 36: Zeile 38:
=== Attribute ===
=== Attribute ===
Die vollständige Liste der Attribute ist in der [http://fhem.de/commandref.html#GDS commandref].
Die vollständige Liste der Attribute ist in der [http://fhem.de/commandref.html#GDS commandref].
Station setzen, für die beim fhem-Start die Daten eingelesen werden sollen:
<code>attr [gdsName] gdsSetCond [Station]</code>


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 44:


== Anwendung ==
== Anwendung ==
=== Liste der verfügbaren Wetterstationen abrufen ===
<code>get [gdsName] list stations</code>
=== 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 61: Zeile 56:


=== Station setzen für automatischen, periodischen Abruf ===
=== Station setzen für automatischen, periodischen Abruf ===
<code>set [gdsName] conditions [Station]</code>
Station setzen, für die beim fhem-Start und dann alle 20 Minuten die Vorhersagedaten eingelesen werden sollen:
 
<code>set [gdsName] forecasts [Station]</code>


Automatisch abgerufen (alle 20 Minuten) werden nur die mit c_ beginnenden Readings. Die a_ Readings (Warnungen, etc.) müssen manuell aktualisiert werden.
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 91:


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.
=== Aktuelles Wetter abrufen ===
<code>get [gdsName] conditions [Station]</code>


=== Karten abrufen ===
=== Karten abrufen ===
Zeile 106: Zeile 100:


Radar: <code>get [gdsName] radarmap [Station]</code>
Radar: <code>get [gdsName] radarmap [Station]</code>
== Readings ==
<pre>
Höhe  : m über NN
Luftd.: reduzierter Luftdruck auf Meereshöhe in hPa
TT    : Lufttemperatur in Grad Celsius
Tn12  : Minimum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius
Tx12  : Maximum der Lufttemperatur, 18 UTC Vortag bis 06 UTC heute, Grad Celsius
Tg24  : Temperaturminimum 5cm über Erdboden 00 UTC bis 24 UTC, Grad Celsius
Tn24  : Minimum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius
Tm24  : Mittel der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius
Tx24  : Maximum der Lufttemperatur, 00 UTC bis 24 UTC, Grad Celsius
Tmin  : Minimum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius
Tmax  : Maximum der Lufttemperatur, 06 UTC Vortag bis 06 UTC heute, Grad Celsius
RR1  : Niederschlagsmenge, einstündig, mm = l/qm
RR12  : Niederschlagsmenge, 12stündig, 18 UTC Vortag bis 06 UTC heute, mm = l/qm
RR24  : Niederschlagsmenge, 24stündig, 06 UTC Vortag bis 06 UTC heute, mm = l/qm
SSS  : Gesamtschneehöhe in cm
SSS24 : Sonnenscheindauer in Stunden
SGLB24: Tagessumme Globalstrahlung in J/qcm
DD    : Windrichtung
FF    : Windgeschwindigkeit letztes 10-Minutenmittel in km/h
FX    : höchste Windspitze im Bezugszeitraum in km/h
</pre>


== Anwendungsbeispiele ==
== Anwendungsbeispiele ==
Zeile 163: Zeile 132:


== Bekannte Probleme ==
== Bekannte Probleme ==
Das eingecheckte GDS-Modul ist nicht auf "non-blocking" umgeschrieben. Das führt dazu, dass FHEM immer mal wieder "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.
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 [http://forum.fhem.de/index.php/topic,38106.0.html diesem Thread] im Forum.
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 [http://forum.fhem.de/index.php/topic,38106.0.html 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:
Nachfolgend noch eine Möglichkeit, das regelmäßige Laden der Karten vom Server in einen - dann FHEM nicht mehr blockierenden - cron-Job auszulagern:

Version vom 2. Mai 2016, 15:34 Uhr

GDS
Zweck / Funktion
Herunterladen und Auswerten von Daten des Deutschen Wetterdienstes
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Unterstuetzende Dienste
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.

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.

Karten abrufen

Wetterlage: get [gdsName] conditionsmap [Station]

Vorhersage: get [gdsName] forecastsmap [Station]

Warnungen: get [gdsName] warningsmap [Station]

Radar: get [gdsName] radarmap [Station]

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.

Karten regelmäßig vom Server neu laden

define Karten at +*00:30:00 get [gdsName] radarmap Nordost; get [gdsName] conditionsmap Nordost; get [gdsName] warningsmap Berlin

Hinweis: Die vorstehende Schreibweise ist die Schreibweise im Editiermodus der Weboberfläche von fhem. Wer die Zeile per copy & paste direkt in die Kommandozeile eintragen will, muss die Semikolons verdoppeln, sonst geht alles nach dem ersten Semikolon verloren.

Also:

define Karten at +*00:30:00 get [gdsName] radarmap Nordost;; get [gdsName] conditionsmap Nordost;; get [gdsName] warningsmap Berlin

Bekannte Probleme

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:

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.

Links