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

Zitat von: justme1968 schrieb am So, 04 August 2013 22:09die 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.

Du kannst ja mal Rudi fragen, ob er sie in den 99_Utils verewigt :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

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

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

betateilchen

Ein neuer Zwischenstand zum Testen.

neu hinzugekommen:

set <name> warnlage <bundesland>

=> wird im Frontend mit Dropdown-Liste der Bundesländer angezeigt

geändert:

set <name> conditions <stationName>

=> wird im Frontend jetzt mit Dropdown-Liste der aktuell verfügbaren Stationen angezeigt

weggefallen:

get <name> list info

=> redundant, da die Daten auch in "list data" angezeigt werden
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

jetzt auch mit Wetterwarnungen :)

set gds alerts Baden-Württemberg

liefert:

(http://up.picr.de/15406253rq.jpg)

a_effective ist "gültig ab"
a_expires ist "gültig bis"
a_valid ist 1|0 und ergibt sich aus der aktuellen Zeit, es wird festgestellt, ob diese noch innerhalb der Gültigkeit der Wetterwarnung liegt
a_eventKey ist der verschlüsselte Meldungstyp, daraus kann man weitere Infos ableiten

Ich bin noch nicht ganz zufrieden, aber das ist erstmal besser als nichts. Mit "a_event" und "a_valid" sollten sich schon die ersten notifies bauen lassen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Nico

Hallo betateilchen,

bin grade auf diesen Post gestoßen und ich finde die Idee super auf die Daten des DWD zurückzugreifen.
Leider bekomme ich das Modul nicht zum laufen, mir fehlt wohl MoreUtils.pm bzw. es liegt nicht am richtigen Ort.
Das Net::FTP Modul habe ich installiert, das müsste auch geklappt haben.
Der fhem Log sagt:

Can't locate List/MoreUtils.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/55_GDS.pm line 10, <$fh> line 146.
BEGIN failed--compilation aborted at ./FHEM/55_GDS.pm line 10, <$fh> line 146.

fhem läuft auf einem raspberry pi unter debian wheezy.

Weisst du wo ich dieses MoreUtils.pm her bekomme?

Vielen Dank

Nico


EDIT: Uups da war ich etwas voreilig. Über CPAN installiert und siehe da: funktioniert

betateilchen

EDIT: Uups da war ich etwas voreilig. Über CPAN installiert und siehe da: funktioniert

na super :)

Das Modul heißt List::MoreUtils  (falls nochmal jemand darüber stolpert)

Im Moment gibt es Bundesweit 261 aktuell gültige Wetterwarnungen (die meisten wegen Hitze)... ich überlege grade, wie ich die sinnvoll einbaue.

edit: und jedes dritte XML File hat Fehler, die zum Abbruch der Auswertung führen *grummel*

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

betateilchen

Die nächste Version...

neu hinzugekommen:

Abfrage von Wetterwarnungen mit der allgemeinen Syntax:

set <name> alerts <area>

Vor der ersten Nutzung muss ein

set <name> rereadcfg

durchgeführt werden, um die Daten bereitzustellen.

Im Webfrontend steht danach eine Dropdownliste mit ALLEN Regionen bereit, für die in Deutschland derzeit gültige Wetterwarnungen bestehen.

Nach Auswahl der gewünschten Station in der Dropdownliste, wird die Meldung interpretiert und in die Readings übertragen.

set gds alerts Ortenaukreis

liefert bei mir aktuell folgende Ausgabe:

(http://up.picr.de/15410717mk.png)

Das Reading a_countAlerts enthält die Anzahl derzeit bestehender Wetterwarnungen.

Dem aufmerksamen Tester wird auffallen, dass in der Dropdownliste immer weniger Regionen stehen als im Meldungszähler. Das hängt damit zusammen, dass es einfach zu viele Fehler in der XML Datei gibt, die bei der Auswertung übersprungen werden. Interessanterweise sind es fast immer die gleichen Regionen, die aus dem Raster fallen. Ich denke noch über eine Lösung nach.

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

betateilchen

Die beschriebene Differenz beruhte nicht auf Fehlern in der XML Datei, sondern auf einem falschen Parsing in meinem Modul. Ich hatte schlicht den Fall nicht berücksichtigt, dass es innerhalb einer ausgegebenen Warnmeldung mehrere Regionen geben kann, für die diese eine Meldung gültig ist.

Und wenn man weiß, wo es klemmt, kann man das Problem auch beheben :)


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

betateilchen

So. Das XML-Parsing wurde jetzt komplett neu gebaut, es werden nun alle Regionsdaten geparst und beim Abruf einer bestimmten Region wird der gesamte Datensatz decodiert. Welche Readings dann allerdings gespeichert werden, läßt sich über Attribute steuern. Wer mal sehen möchte, WAS da alles decodiert wird, kann das Attribut gdsAll testweise auf 1 setzen - aber dann nicht erschrecken. Im normalen Gebrauch wird man dieses Attribut eher nicht brauchen.

Standardmäßig reichen die Readings in der Default-Einstellung

(http://up.picr.de/15420707ae.jpg)

völlig aus, um daraus ein notify zu bauen, um bei Unwetterwarnung z.B. die Markise einzufahren. Die hierfür wichtigsten Readings aus obigen Beispiel sind:


a_eventCode_GROUP = THUNDERSTORM HAIL WIND RAIN
a_expires         = 2013-08-07T00:00:00+02:00
a_onset           = 2013-08-06T22:01:00+02:00
a_valid           = 1


a_eventCode_GROUP enthält die Unwettertypen, für die diese Warnung klassifiziert ist, in diesem Fall Gewitter, Hagel, Wind und Regen. In diesem Reading können eine oder mehrere Angaben stehen, die durch Leerzeichen getrennt sind.

a_onset ist der Zeitpunkt, ab dem die Warnung gilt

a_expires ist der Zeitpunkt, an dem die Warnung abläuft

a_valid kennzeichnet, ob diese Warnung bereits abgelaufen ist (=0) oder noch gültig ist(=1) Dieses Reading stammt nicht aus der Meldung selbst, sondern wird vom Modul selbst errechnet und eingefügt.

Ein ganz wichtiges Reading ist auch a_geoCode_WARNCELLID, aber darauf komme ich in einer späteren Version zurück.

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

WICHTIG:

1. Das Modul verwendet die aktuelle fhem.pl die Rudi heute eingecheckt hat!
2. Das Modul braucht das Perl Modul XML::Simple

Viel Spaß beim Testen :o)

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

betateilchen

Als nächstes würde ich ja ganz gerne ein paar bunte Bildchen (Wetterkarten) anzeigen lassen, aber die Sache mit weblink & co ist mir noch ein totales Buch mit sieben Siegeln. Kann mir mal jemand einen einfachen Tipp geben, wie ich eine Bilddatei aus dem lokalen Dateisystem im fhem-Frontend anzeigen lassen kann?

{*grübel*}Wieso kreist hier mitten in der Nacht eigentlich ein Suchhubschrauber über dem Stadtteil?{/*grübel*}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Nico

define weblink_Name weblink htmlCode <img src="/fhem/images/default/Bild.png">


klappt bei mir

lg Nico

bild liegt in www/images/default/Bild.png ;)

betateilchen

danke, das funktioniert erstmal auch hier, ist aber noch nicht ganz das, was ich mir vorstelle. Mein Ziel ist eigentlich ein "get gds map" und dann soll ein entsprechendes Wetterbild angezeigt werden. Aber damit kann ich weiterforschen.

Jetzt noch einen guten Whiskey und eine ordentliche Feierabendzigarre auf dem Balkon, und dann => 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!

justme1968

es gibt im prinzip zwei möglichkeiten für die icons:
  - so wie im weather modul über einen weblink der mit einer 2html funktion oder einem get das  html code liefert befühlt wird
  - mit der 'neuen' summaryFn/detailFn um direkt das icon des device aus dem modul zu setzen

als dritte variante geht im prinzip auch devStateIcon in der {} variante aus dem modul heraus zu setzen, das ist aber eigentlich nicht mehr nötig und durch summaryFn ersetzt.

zu summaryFn/detailFn findest du mehr im wiki und im remote modul.

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

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

Steffen

Guten Morgen!

Mit dem neuen Version von GDS.pm bekomme ich diese Fehlermeldung:
2013.08.07 06:28:33 1: reload: Error:Modul 55_GDS deactivated:
 Undefined subroutine &main::latin1ToUtf8 called at /opt/fhem/FHEM/55_GDS.pm line 673, <WXDATA> line 1.

2013.08.07 06:28:33 0: Undefined subroutine &main::latin1ToUtf8 called at /opt/fhem/FHEM/55_GDS.pm line 673, <WXDATA> line 1.


mit der Version vorher hatte ich keine Probleme.

Fhem up-to-date

Mfg Steffen

betateilchen

Zitat von: Steffen schrieb am Mi, 07 August 2013 06:32Fhem up-to-date

Mfg Steffen


Nein, Dein fhem ist NICHT up to date. Ich hatte oben nämlich extra dazugeschrieben:

ZitatWICHTIG:
1. Das Modul verwendet die aktuelle fhem.pl die Rudi heute eingecheckt hat!

Diese Datei musst Du also entweder aus SVN ausgecheckt haben oder Du musst das HEUTIGE Update in fhem durchführen. Die Update-Dateien werden m.W. morgens um 07:45 Uhr generiert. Also heute morgen um 06:32 als Du hier gepostet hast, kannst Du diese Datei per Update noch nicht erhalten haben ;)

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