55_GDS.pm - es muss nicht immer Yahoo, openweathermap usw. sein

Begonnen von betateilchen, 03 August 2013, 17:34:17

Vorheriges Thema - Nächstes Thema

betateilchen

Der Deutsche Wetterdienst stellt im Rahmen seiner Grundversorgung einen unerschöpflichen Vorrat an Daten zur Verfügung, die von jedermann genutzt werden dürfen.

Zitat von: Deutscher WetterdienstDie Leistungen zur Grundversorgung sind eine kleine Teilmenge aus der Gesamtheit der Grundleistungen des DWD. Sie sind Kernaufgaben im Sinne einer gesicherten Bereitstellung von Wettervorhersage- und Beratungsdiensten sowie der Wahrnehmung der Wetterüberwachung und des Warndienstes für die Allgemeinheit. Für diese Informationen liegt ein besonderes öffentliches Interesse vor, das sich in einer Ermäßigung der Vergütung, die auch zu einer Entgeltbefreiung bzw. unentgeltlichen Abgabe führen kann, manifestiert. Hierunter fallen aktuelle Wetterinformationen für jedermann, die unverzichtbare Grundinformationen des nationalen Wetterdienstes für die Öffentlichkeit darstellen.

Quelle: Deutscher Wetterdienst

"Warum nicht diesen Datenvorrat in fhem nutzbar machen?" dachte ich mir. Und schwupps... here we go:

get gds bamberg liefert zum Beispiel:

(http://up.picr.de/15381805bn.png)

Das erste proof-of-concept funktioniert und ich kann bereits eine Reihe von Wetterstation direkt vom DWD-Server abfragen Ich stehe natürlich noch komplett am Anfang und muss mich zuerst durch den Berg an Doku wühlen, in dem die bereitgestellten Daten beschrieben sind.

Letztendlich könnte man damit sogar Erdbeben- und Tsunamiwarnungen in fhem darstellen *lach* Viel interessanter finde ich aber allgemeine Wetterwarnungen und ähnliches.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Falls schonmal jemand erste Tests machen möchte - bitteschön :)

1. Schritt: kostenlose Registrierung für den GDS-Dienst beim DWD

2. Schritt: prüfen ob das Perl Modul Net::FTP installiert ist, falls nicht: nachinstallieren
 
3. Schritt: fhem-device definieren mit define gdsName GDS gdsUsername gdsPasswort

Danach kann man schon arbeiten. Z.B. get gdsName list stations Man erhält eine Liste der abrufbaren freiverfügbaren Wetterstationen

Beispiel: get gdsName conditions Cuxhaven generiert folgende Readings:

(http://up.picr.de/15392314aj.png)

Das gleiche funktioniert auch mit set gdsName conditions Cuxhaven was dazu führt, dass die Readings (in diesem Fall mit Präfix c_ anstatt g_) alle 60 Minuten aktualisiert werden. Eine häufigere Aktualisierung macht keinen Sinn, weil die Datenbasis beim DWD auch nur alle 60 Minuten aktualisiert wird.

Für weitere Infos können "get <name> help" und "set <name> help" verwendet werden, um alle verfügbaren Befehle zu sehen.

ToDo:

- Fehler abfangen, falls FTP Verbindung nicht funktioniert
- Doku im Modul implementieren

Geplant:

- Funktion für Vorhersagedaten einbauen


Ich freue mich über jede Rückmeldung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

beim ersten probieren ist mir  fhem beim 'list stations' abgeschmiert:

readline() on closed filehandle WXDATA at ./FHEM/55_GDS.pm line 184.
Use of uninitialized value $line in chomp at ./FHEM/55_GDS.pm line 184.
Modification of non-creatable array value attempted, subscript -1 at ./FHEM/55_GDS.pm line 190.

/tmp/wx gab es nicht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Solange Du noch keine Daten vom DWD abgerufen hast, kann das nicht funktionieren. Die vom DWD gelesenen Daten werden in /tmp/wx gespeichert. Der List Befehl löst selbst kein Lesen vom DWD Server aus.

Schwierig dürfte das bei fhem-Installationen auf Windows-Rechnern werden, aber wer hat das schon.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

dann fehlt etwas in deiner anleitung oben.

ich habe einfach punkte 1-3 nacheinander gemacht...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Zitatdann fehlt etwas in deiner anleitung oben.

Kann schonmal passieren bei Software im absoluten Beta-Stadium. Deshalb hatte ich ja um Rückmeldung gebeten.

Fehlen tut da oben übrigens nix. Schritte 1-3 waren ja korrekt, aber danach habe ich einfach die Reihenfolge vertauscht. Ich hätte erst das Beispiel Cuxhaven bringen müssen und dann die Liste *g*
Ich werde ein initiales Lesen einbauen, dann paßt auch die obige Anleitung wieder.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Find ich super. Gerade solche Wetterwarnungen wie Sturm/Hagel könnte man damit super alarmieren und eventuelle Vorkehrungen treffen wie Markise rein, Jalousien runter usw.

Werd ich demnächst mal ausprobieren.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Naja, bis dahin ist es noch ein recht weiter Weg. Die Datenfülle ist einfach gigantisch und ich muss erst ein System finden, wie man das regional auswerten kann. Es nützt ja in München niemandem was wenn für Hamburg eine Sturmwarnung besteht.

Ich muss auch noch rausfinden, ob es die Daten nicht in XML oder JSON gibt, das Auswerten der Textdateien ist doch recht mühsam.

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

edit: das initiale Lesen direkt nach dem define ist jetzt eingebaut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

sehr viel besser. vor allem wenn man nicht weiss wo die nächst gelegene station ist.

ein ganz anderes problem fällt mir aber in dem zusammenhang noch auf: alles was umlaute hat kann man sich per telnet nicht richtig anzeigen und auch nicht eingeben.
das problem gibt es für die av clients und titel auch. vielleicht wären zwei generelle funktionen um das encoding von strings zu ändern ganz praktisch. wobei das Encode z.b. auf den fritz boxen scheinbar nicht funktioniert und fhem komplet aussteigen lässt weil perl teile fehlen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

hast Du mal ein Beispiel, WAS Du nicht sehen kannst?

In meinem Modul werden alle Strings ohnehin schon nach UTF8 konvertiert, weil der DWD die Daten in latin1 liefert.

Die untenstehende Anzeige bekomme ich auch bei einem Telnet-Zugriff:


fhem> set gds warn Nordrhein-Westfalen

VHDL30 DWEH 041800
WARNLAGEBERICHT für
Nordrhein-Westfalen

ausgegeben vom Deutschen Wetterdienst
am Sonntag, 04.08.13, 20:28 Uhr

In der Nacht gering bewölkt, weiterhin trocken. Am Montag heiter bis
wolkig, trocken, dabei sehr warm bis heiß. Zum Abend im Bergland
einzelne Schauer oder Gewitter möglich.

Entwicklung der WETTER- und WARNLAGE für die nächsten 24 Stunden
bis Montag, 05.08.13, 20:30 Uhr:

Schwacher Zwischenhocheinfluss sorgt für angenehm sommerliches Wetter
in Nordrhein-Westfalen.

Bis Montagabend werden keine warnrelevanten Wetterereignisse
erwartet.

Nächste Aktualisierung: spätestens Montag, 05.08.13, 04:30 Uhr

Deutscher Wetterdienst, RWB Essen, A.Würtz
fhem>


Lediglich die Eingabe von Umlauten funktioniert nicht richtig. Zum Glück gibts nur zwei Bundesländer mit einem Umlaut - da könnte ich auch jeweils ue eintragen.

Im Moment gibt es auch schon eine erste Abfrage von Warnmeldungen

set gds warn Nordrhein-Westfalen

liefert:

(http://up.picr.de/15397129ku.png)

Ich habe noch keinen blassen Schimmer, wie ich daraus etwas automatisch verwertbares machen soll. Ich kann derzeit lediglich ein Reading setzen, ob es eine Warnung für das gewählte Bundesland gibt oder nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

das harte convertieren nach utf8 ist aber falsch wenn das consolen/telnet encoding nicht utf8 ist.

was ich damit dann nicht richtig sehen (und setzen) kann sind dann etwa 15-20 der städte namen weil meine shell nicht auf utf8 sondern auf latin1 eingestellt ist.

für die web seiten gilt im prinzip das gleiche da fhem die html seiten ohne hinweis auf ein encoding ausliefert. utf8 funktioniert hier auch nur zufällig.

im quelltext utf8 zu verwenden ist ist auch nicht wirklich ok wenn es keinen marker gibt der utf8 anzeigt.

es ist klasse das du an das encoding gedacht hast aber es müssen halt alle teilchen der kette zusammen passen damit es am ende auch funktioniert.


die beiden latin1_2_utf8 und utf8_to_latin1 sind aber gut. die werde ich mir ausborgen. die sollten auch für die fritzbox user funktionieren.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Wenn Du Dir eine ~/.telnetrc anlegst und dort


localhost
  set binary true


(localhost muss durch den Hostname ersetzt werden, auf dem fhem läuft)

reinschreibst, kannst Du auch Umleite in der Telnet-Konsole eingeben.

Da fhem offenbar nix anderes kann als UTF8 habe ich nicht weiter darüber nachgedacht, mir war wichtig, dass die Daten korrekt angezegt werden. Was der DWD da ausliefert, ist gelinde gesagt, eine Katastrophe, ich hatte gar keine andere Wahl.

Die Konvertierungsroutinen sind übrigens nicht von mir, sondern von hier: http://perldoc.perl.org/perluniintro.html (ganz unten auf der Seite: UNICODE IN OLDER PERLS)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Inzwischen werden die Warnlageberichte auch aus den richtigen Verzeichnissen gelesen *g*

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: justme1968 schrieb am So, 04 August 2013 20:10sehr viel besser. vor allem wenn man nicht weiss wo die nächst gelegene station ist.

kein Problem... hier ein Ausblick was bei mir schon geht:

(http://up.picr.de/15398939ai.png)

Um so wichtige wäre mir, im Frontend auch den "get"-Button auswählen zu können - so wie hier angefragt

Feierabend. Gute Nacht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

> das harte convertieren nach utf8 ist aber falsch wenn das consolen/telnet encoding nicht utf8 ist.

Ich werde nicht mit konvertieren der Zeichensaetze anfangen, damit habe ich mit perl viele und hauptsaechlich negative Erfahrungen gesammelt.


> für die web seiten gilt im prinzip das gleiche da fhem die html seiten ohne hinweis auf ein
> encoding ausliefert. utf8 funktioniert hier auch nur zufällig.

Das ist nicht richtig, im HTTP-Header der FHEMWEB Daten steht

Content-Type: XXXXX; charset=$FW_encoding

FW_encoding steht seit gefuehlt einem Jahr auf utf-8.
Wenn das irgendwo noch fehlen sollte, bitte melden.