Modul für DWD Open Data

Begonnen von jensb, 21 Januar 2018, 14:38:48

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
ok, ich hab's doch mal näher betrachtet. Das link-Widget baut (hart-codiert) ein "white-space:nowrap" ein. Dadurch werden Texte nicht mehr umgebrochen und damit ist die Mindestgröße des Inhalts etwas größer.
Abhilfe schafft
      style="white-space:normal"
...also:


<li data-row="2" data-col="3" data-sizex="2" data-sizey="2">
<div data-type="link"
      data-parent="index"
      data-url="#Garten_DWD.html"
      data-load="#Garten_DWD"
      data-color="white"
      >
  <div data-type="dwdweblink"
       data-device="DWD_Weblink_Generator_1"
       class="top-space-2"
       style="white-space:normal"
       >
  </div>
</div>
</li>


Gruß,
   Thorsten
FUIP

curt

Und da soll ich nun drauf kommen. Ich danke Dir sehr herzlich!
RPI 4 - Jeelink HomeMatic Z-Wave

sinus61

Ich hab gerade überlegt mit den Alerts das UWZ Modul zu ersetzen. Mir fehlt für mein FTUI aber ein jeweils spezielles Warnicon. Es gibt zwar in den Listen beim DWD für event und eventDesc Beschreibungen, die passen aber nicht direkt zu denn Icons die auf den DWD Seiten zu sehen sind.

Vorgestellt hab ich mir das in FTUI dann ungefähr so:

<div class="display">
<div data-type="image" data-url="https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/warndreieck/gelb.png" data-size="90%" class="autohide bg-white"></div>
<div data-type="image" data-url="https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/warndreieck/warn_icons_frost.png" class="ontop bigger autohide" style="left: 10px; top: 2px"></div>
</div>


Bei Frost würde das aus eventDesc gerade noch passen, sonst aber meist nicht. Falls es da keine Beschreibung gibt würde ich das sonst mal durchprobieren.

sinus61

Noch eine andere Frage, ich habe folgende Attribute gesetzt:


attr DWD_Wetter event-on-change-reading a_count
attr DWD_Wetter event-on-update-reading state,fc_state,a_state


Im Moment habe ich einen alert, trotzdem wird alle 15 Minuten ein event für a_count ausgelöst, obwohl a_count auf 1 bleibt. Sollte das nicht nur passieren wenn sich a_count ändert?

curt

#499
Beitrag geändert:
Zu schnell gelesen und Quatsch geantwortet.

(Ich will etwas ähnliches auch machen.)
RPI 4 - Jeelink HomeMatic Z-Wave

somansch

Ich habe eine neue Version des "Weather_Widgets" zur Darstellung der Icons in FTUI zum Testen bereitgestellt. Diese Version unterstützt DarkSky, OpenWeather, ProPlanta und DWD https://forum.fhem.de/index.php/topic,96954.0.html

Viele Grüße
Andreas

curt

@sinus61
Ich habe ein sehr ähnliches Problem. Aber auf vermutlich anderer Ebene. Vielleicht hilft Dir mein Denkansatz. (Dann bitte öffentlich Beispiel zeigen.)

Meine FTUI-Übersichtsseite ist ein Taktik-Bildschirm. Da möchte ich in einer Kachel (nur) ein Warndreieck. Das Warndreieck soll angezeigt werden, wenn DWD-Wetterwarnungen vorliegen. Die Kachel soll leer bleiben, wenn nix los ist.

Mein Denkansatz geht über das Widget Image, da gibt es die schöne Option "data-hide" (und data-hide-on, data-hide-off). Laut Beschreibung: "Reading, nach dessen Wert entschieden wird, ob das Bild angezeigt wird, oder nicht."

Mein stümperhafter Versuch funktioniert natürlich nicht:


  <div data-type="image"
       data-url="../images/eigene/gefahrenstelle.png"
       data-hide="a_0_eventDesc"
       data-width="60px"
       class="nocache">
  </div>


Vielleicht kommst Du damit weiter.
RPI 4 - Jeelink HomeMatic Z-Wave

sinus61

@curt:
So ähnlich wollte ich es auch haben, aber mit einem zur Warnung passenden Icon, wie auf der DWD Webseite. Das UWZ Modul z.b. liefert da gleich das passende Reading für das Image Widget.

Ich denke aber mit einem notify oder einer kleinen Routine lässt sich das Reading erzeugen, das Ausblenden wenn keine Warnung da ist sollte dann in Ftui über autohide einfach gehen.

curt

Zitat von: sinus61 am 05 Februar 2019, 18:51:59
Ich denke aber mit einem notify oder einer kleinen Routine lässt sich das Reading erzeugen, das Ausblenden wenn keine Warnung da ist sollte dann in Ftui über autohide einfach gehen.

Das kann ich leider nicht, da bin ich immer auf Hilfe angewiesen.

Möglicherweise funktioniert es so:


  <div>Warnung</div>
  <div data-type="image"
       data-url="../images/eigene/gefahrenstelle.png"
       data-hide="a_count"
       data-hide-off="0"
       data-width="60px"
       class="nocache top-space">
  </div>


Das kann ich im Moment schlecht testen, da ständig Frostwarnungen vorliegen. Ich weiß zudem nicht genau, ob a_count auch dann vorliegt, wenn keine Warnungen vorliegen.
RPI 4 - Jeelink HomeMatic Z-Wave

sinus61

Ja, a_count gibt es immer, ist dann 0 wenn keine Warnungen da sind.


data-hide-on="0"


Verstecken an, wenn 0

sinus61

So, mal als Idee zu den alerts:

notify

DWD_Wetter.a_count:.[0-9] {
use experimental 'smartmatch';
my $url = "https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/viewer/img/warndreieck/";
my $event0 = ReadingsVal( "DWD_Wetter", "a_0_event", 0);
my $severity0 = ReadingsVal( "DWD_Wetter", "a_0_severity", 0);
if($EVTPART1 == 1) {
if($event0 ~~ [11,12,13,51,52,53,54,55,56,57,58]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_sturm.png");
}
elsif($event0 ~~ [22,81,82,83,84,85,86,87]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_frost.png");
}
elsif($event0 == 59) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_nebel.png");
}
elsif($event0 ~~ [61,62,63,64,65,66]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_regen.png");
}
elsif($event0 ~~ [70,71,72,73,74,75,76,77,78]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_schnee.png");
}
elsif($event0 ~~ [31,33,34,36,38,40,41,42,44,45,46,48,49,95,96]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_gewitter.png");
}
elsif($event0 ~~ [88,89]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_tauwetter.png");
}
elsif($event0 ~~ [24,83,84,85,86,87]) {
fhem ("setreading $NAME a_0_eventIconURL $url"."warn_icons_glatteis.png");
}
if($severity0 eq "Minor") {
fhem ("setreading $NAME a_0_severityIconURL $url"."gelb.png");
}
elsif($severity0 eq "Moderate") {
fhem ("setreading $NAME a_0_severityIconURL $url"."orange.png");
}
elsif($severity0 eq "Severe") {
fhem ("setreading $NAME a_0_severityIconURL $url"."rot.png");
}
elsif($severity0 eq "Extreme") {
fhem ("setreading $NAME a_0_severityIconURL $url"."dunkelrot.png");
}
}
}


erzeugt die Readings a_0_eventIconURL und a_0_severityIconURL

und in FTUI


<div class="display">
<div data-type="image" data-device="DWD_Wetter" data-get="a_0_eventIconURL" data-size="90%" class="autohide bg-white"></div>
<div data-type="image" data-device="DWD_Wetter" data-get="a_0_severityIconURL" class="ontop bigger autohide" style="left: 10px; top: 2px"></div>
</div>


zeigt ein zur Warnmeldung passendes Icon an.

Das könnte man natürlich jetzt noch auf alle alerts ausweiten, nicht nur auf den ersten. Außerdem läuft es wegen dem Smartmatch Vergleich erst ab Perl 5.10. Sinnvollerweise müsste man es bei weiterem Ausbau wohl in die 99_myUtils.pm verlagern.

curt

@sinus61
Ich bin heilfroh, dass ich endlich mein allgemeines Warndreieck abhängig davon, ob eine Warnung vorliegt, schalten kann. Und nun kommst Du mit tollen weitergehenden Ideen ...

Zitat von: sinus61 am 07 Februar 2019, 18:24:07
So, mal als Idee zu den alerts:
notify
[Code-Kasten]
erzeugt die Readings a_0_eventIconURL und a_0_severityIconURL

Nimm mich mal bitte an die Hand: Was mache ich denn mit dem Code des ersten Kastens? Einfach so ganz unten in die fhem.cfg reinkloppen? Oder wie genau?

Zitat von: sinus61 am 07 Februar 2019, 18:24:07
Das könnte man natürlich jetzt noch auf alle alerts ausweiten, nicht nur auf den ersten.

Rückfrage: Wie definierst Du "erste Warnung"? Bzw. wie ist das beim DWD definiert?
RPI 4 - Jeelink HomeMatic Z-Wave

sinus61

define DWD_Wetter_n notify DWD_Wetter.a_count:.[0-9] {}
und dann auf DEF gehen und in die Box denn Code einfügen. Der Devicename und bei Bedarf der Name des Notify muss natürlich angepasst werden.
Da bei jedem Update der Warnungen eh alle Readings gelöscht werden muss man sich auch keine Gedanken machen die Icon Readings zu löschen.

Die erste Warnung ist in diesem Fall technisch einfach a_0_.... Ich weiß nicht ob das Modul eine vorgegebene Reihenfolge vom DWD übernimmt oder anhand der onset Zeit eine Folge vorgibt. Ich werde wohl noch über a_count so einen Warn-Bubble mit der Anzahl dran machen und dann über popup alle Warnungen anzeigen.

Optisch bin ich nicht ganz zufrieden wegen dem Hintergrund, da der jetzt entweder transparent ist oder innerhalb und außerhalb des Rahmens eine Farbe über class="bg-white" annimmt. Da muss ich wohl noch eine lokale Bilddatei für den Hintergrund einfügen.

curt

Danke für die Erklärung bzgl. des Code-Einbaus.

Zu meiner anderen Frage: Ich bin da nicht ganz so firm - kenne aber jemanden ;)
Der @Thorsten Pferdekaemper nimmt den Weblink auf DWD (DWD sowie Weblink von @somasch) - und stellt den via FUIP/FTUI dar. [¹] Ich habe begonnen, dazu einen Wiki-Artikel zu schreiben, noch ganz unfertig, aber mit Screenshot [²].

Zwei Warnungen pro Tag (bis Mittag / danach) - ich nehme an, im Code für Weblink(DWD) nachvollziehbar.

Nun ergibt sich ein methodisches Problem - zumindest denke ich mir das bei Deinem Ansatz: 1500 Uhr interessiert mich die Warnung für den Vormittag nicht mehr. Oder nehmen wir 2000 Uhr: Da kann noch der Abend interessieren - aber eben schon auch die Warnlage für den nächsten Vormittag.

Daher meine Frage.
[¹] https://forum.fhem.de/index.php/topic,95910.msg888521.html#msg888521
[²] https://wiki.fhem.de/wiki/FTUI_Widget_Dwdweblink
RPI 4 - Jeelink HomeMatic Z-Wave

sinus61

Wenn ich die Warnungen mit der Wettervorhersage verknüpfe kann man natürlich versuchen das an die Zeiträume anzupassen. Der DWD_Weblink scheint das ja irgendwie zu machen. In Deinem Wiki Beispiel könnte ja auch eine Warnung von 8-15 Uhr anliegen, wäre dann auf beiden Wolken das Warn-Icon obwohl die ja einen Bereich von 5-Tagesende abdecken? Ist wohl immer irgendwie ein Kompromiss.

Mir geht es im Moment darum erstmal nur unabhängig von der Wetterkarte ein größeres Warnicon zu bekommen, das dann halt die aktuell noch anstehende Warnung anzeigt, bei mehreren dann eben mit einem roten Bubble mit Zahl der mich drauf hinweist da sind noch mehr Warnungen. Man könnte natürlich auch die letzte reingekomme Warnung nehmen. Aber da muss ich erstmal beobachten wie das in der Realität überhaupt aussieht, meist hab ich eh nur eine Warnung.