[APP][Pro] DWD Wetterwarnungen

Bitte unterscheiden:

  • CSV-Datei mit der komplette Warncell-Liste. Da sind alle Warnkreise enthalten. Diese Liste ist in der App enthalten für die Auswahl beim Hinzufügen der Kreise.
  • Webservice (JSON-Daten): Hier sind nur aktuelle Warnungen enthalten. Ist der gesucht Kreis nicht enthalten, dann existiert aktuell keine Warnung für diesen.
1 Like

Ok, verstanden… :+1:t4:

Ich habe im Moment 5 Landkreise/Städte angemeldet. Es scheint bisher alles zu funktionieren. Die Warn -und Entwarnmeldungen kommen. Ihr könnt sogar eine Art Vorwarnung generieren:

Ich habe meinen Heimatort als Stadt angemeldet. Gleichzeitig gibt es ein Gerät für den Landkreis, in dem meine Stadt liegt.
Wenn der Alarm für den Landkreis los geht ist das Stufe 1. Mit dieser 1. Warnmail, lasse ich mir gleich den aktuellen Satelliten-Film von BW mitsenden, um die Gefahrenlage einschätzen zu können.
(www.wetterdienst.de/maps/radar/Radarfilm_Suedwest.gif?1621325582)

Geht meine Stadt auf Alarm, folgt eine zweite Mail mit zusätzlich dem Link auf einen Blitzdetektor.

https://map.blitzortung.org/#9.13/49.0383/8.7133

Das Ganze wird dann auch alle 15 Minuten auf meinem Wetter Tablet angezeigt.

Vielleicht eine Idee für euch, sowas ähnliches zu basteln. Ich verfeinere das Ganze noch, sobald etwas mehr Zeit ist.

2 Likes

Ziemlich komplex und gut durchdacht :+1:

Wird getestet :+1:

Kurze Info für HomeAssistant-User.
Ich habe in den HA-Logs gesehen, dass je Entität nur 255 Zeichen zulässig sind. Längere Meldungen werden also nich nach HA übernommen.
Ich überlege nun, ob ich eine zweite Warn-Eigenschaft mit max. 255 Zeichen definiere oder ob ich beim MQTT-Hub-Entwickler frage, längere Texte zu kürzen…

1 Like

Ich habe in HA noch keine zufriedenstellende Lösung gefunden, den Langtext in einem Lovelace Dashboard anzeigen zu lassen. Ich versuche mich gerade mit Markdown, scheitere aber kläglich.

{% set level_colors = {0:'#c5e566', 1:'#ffeb3b', 2:'#fb8c00', 3:'#e53935', 4:'#880e4f', 20:'#fe68fe', 50:'#fe68fe'} %} {% set current_count = state_attr("sensor.wetter_warnung_current_warning_level", "warning_count") %} {% set advance_count = state_attr("sensor.wetter_warnung _advance_warning_level", "warning_count") %} {% if ((current_count == 0 or current_count == None) and (advance_count == 0 or advance_count == None)) %} **<font color={{ level_colors[0] }}>Keine Warnungen</font>** {% else %} {% for i in range(current_count) %} {% set headline = state_attr("sensor.wetter_warnung_current_warning_level", "warning_" ~ loop.index ~ "_headline") %} {% set description = state_attr("sensor.wetter_warnung_current_warning_level", "warning_" ~ loop.index ~ "_description") %} {% set level = state_attr("sensor.wetter_warnung_current_warning_level", "warning_" ~ loop.index ~ "_level") %} {% set time_start = state_attr("sensor.wetter_warnung_current_warning_level", "warning_" ~ loop.index ~ "_start") %} {% set time_end = state_attr("sensor.wetter_warnung_current_warning_level", "warning_" ~ loop.index ~ "_end") %} **<font color={{ level_colors[level] }}>{{ headline }}</font>** {{ time_start.strftime("%a %H:%M") ~ " - " ~ time_end.strftime("%a %H:%M") }} *{{ description|trim }}* {% if not loop.last %}***{% endif %} {% endfor %} {% if ((current_count != 0) and (advance_count != 0)) %}***{% endif %} {% for i in range(advance_count) %} {% set headline = state_attr("sensor.wetter_warnung_advance_warning_level", "warning_" ~ loop.index ~ "_headline") %} {% set description = state_attr("sensor.wetter_warnung_advance_warning_level", "warning_" ~ loop.index ~ "_description") %} {% set level = state_attr("sensor.wetter_warnung_advance_warning_level", "warning_" ~ loop.index ~ "_level") %} {% set time_start = state_attr("sensor.wetter_warnung_advance_warning_level", "warning_" ~ loop.index ~ "_start") %} {% set time_end = state_attr("sensor.wetter_warnung advance_warning_level", "warning_" ~ loop.index ~ "_end") %} **<font color={{ level_colors[level] }}>{{ headline }}</font>** {{ time_start.strftime("%a %H:%M") ~ " - " ~ time_end.strftime("%a %H:%M") }} *{{ description|trim }}* {% if not loop.last %}***{% endif %} {% endfor %} {% endif %}

:grinning:

1 Like

Danke, ich werde es versuchen.

Edit:
So, läuft.
Ich bin gespannt auf die erste Warnung, ob dann der vollständige Text angezeigt wird.

Danke nochmal, ich werde berichten.

Edit:
Danke für deine Mühe, aber in Markdown wird leider nichts angezeigt. Die Anzeige bleibt auf “Keine Warnungen” stehen, selbst wenn eine Wetterwarnung vorliegt.

Das kann an der Länge der HA-Entitäten liegen (255). Längere Texte werden nicht übernommen. Das müsste man als Fehlermeldung im HA-Log sehen.

Ich hab das jetzt anders gelöst.
Wobei ich immer wieder betonen muss, dass ich in Sachen HA Programmierung keine Leuchte bin.
Die HA Dashboards zeigen bei Warnungen die Kurzmeldung und Warnstufe im Kiosk Modus an und wechseln dann auf den Satelliten-Film bzw. auf den Blitzdetektor.
Auf meinen zwei LaMetric Uhren ertönt ein Warnton und die Meldung läuft im Langtext durch. Die LaMetrics und HA wiederholen die Warnung alle 15 Minuten, solange die Meldung aktuell ist.
Entwarnung wird auf die gleiche Weise gegeben.

Da ich die Warnstufen, Kurz- und Langtext erst in Variablen schreibe lasse, kann ich das auch ohne Warnung gut testen.
Es funktioniert bestens ! Nochmal danke für diese geniale App !

Es gibt eine neue Testversion (0.0.8) mit folgenden Erweiterungen:#

Alarm-Attribut:

Es gibt ein neues Alarm-Attribut. Wenn eine Warnung existiert, dann erscheint das Alarm-Ausrufezeichen. Im Gerät kann auch der Alarm als Standard-Attribut für die Anzeige in der Gerätekachel gewählt werden.

Beispiel:
grafik

Für den Alarm gibt es auch entsprechende Flow-Trigger.


Geräte-Attribute für Warnungs-Details

Für bis zu drei Warnungen werden die Details in einzelnen Attributen gespeichert.
Diese Attribute sieht man in der Developer-Seite (Homey Developer Tools)

Die Attribut gibt es jeweils mit “01”, “02” und “03” im Name.

Verwendung in HomeAssistant:
Wenn die Geräte mit dem Homey MQTT Hub an HA übertragen werden, dann stehen diese als Entitäte zur Verfügung.

Hier eine Visualisierungsbeispiel:
grafik

Für das Balkendiagramm verwende ich ein HACS Custom-Control (mini graph card - GitHub - kalkih/mini-graph-card: Minimalistic graph card for Home Assistant Lovelace UI).
Die Lovelace-Einstellung dazu sieht wie folgt aus:

type: 'custom:bar-card'
entities:
  - entity: sensor.kreis_und_stadt_regensburg_anzahl_der_warnungen
    direction: right
    name: Wetterwarnungen Alzey-Worms
    icon: 'mdi:weather-lightning-rainy'
    min: '0'
    max: '5'
    severity:
      - from: '0'
        to: '0'
        color: teal
      - from: '1'
        to: '1'
        color: goldenrod
      - from: '2'
        to: '2'
        color: orange
      - from: '3'
        to: '3'
        color: darkorange
      - from: '4'
        to: '4'
        color: OrangeRed
      - from: '5'
        to: '5'
        color: Red

Ich habe hier im Beispiel die Anzahl der Warnungen verwendet. Besser wäre aber die Warnstufe - wobei ich bei der Stufe nicht ganz sicher bin, was genau sie bedeutet. Bei Sturm gab es bisher Stufe 2 und 3. Bei Hitze dagegen Stufe 50.
Alternatv zum Diagramm kann man das Alarm-Attribut als Binary-Sensor verwenden, um bei vorhandenem Alarm/Warnungen das Icon hervorzuheben.
Die Icons könnt ihr z.B. hier auswählen: https://materialdesignicons.com/

Das Textfeld ist ein Standard Markdown-Element. Hier werden die einzelnen Attribute der ersten Warnung angezeigt:

type: markdown
content: |
  {% if ( is_state('sensor.alzey_worms_warnung_1_stufe', '0') 
        or is_state('sensor.alzey_worms_warnung_1_stufe', '' ))  %}
   Keine Warnungen vorhanden.
  {% else %}
   {{
  states('sensor.alzey_worms_warnung_1_typ') + ', Stufe ' +
  states('sensor.alzey_worms_warnung_1_stufe') +
  '\n' +
  states('sensor.alzey_worms_warnung_1_zeitraum') + 
  '\n' +
  states('sensor.alzey_worms_warnung_1_beschreibung') +'\n' 
  }}  
  {% endif %}

Die Beispiele sind etwas zusammengebastelt aus verschiedenen Kreisen. Nicht wundern über due Zusammenstellung.

3 Likes

Keine Ahnung was Du verkehrt machst?!
Bei mir werden Warnungen beliebiger Länge angezeigt. Aktuell allerdings relativ kurz.

Hast Du beim editieren, vielleicht einen Fehler gemacht?

Wird getestet.

Wenn ich das nur wüsste…

Du hast aber nicht den code einfach unverändert übernommen, oder?
Die Sensor Entitäten muss Du schon gegen Deine ersetzen. Vielleicht hat sich dabei ein Tippfehler eingeschlichen?

Natürlich nicht. Ich kau das bei Gelegenheit nochmal durch.

Ich hab’s nicht gezählt, aber das sind glaube ich mehr als 256 Zeichen?!

Ja, sieht nach mehr aus. Ich weiß nicht, wie diese Integration die Daten verwaltet - und ob die gespeichert werden.
Bei den in HA gespeicherten Geräteattributen gibt es die Beschränkung. Das sind die in der Historie gespeicherten Entities, die vom MQTT Hub von den Homey Geräte-Capabilities in die HA-Entities übertragen werden.

Bei reinen MQTT-Sensoreb könnte man noch mit einem Template eingreifen. Bei den MQTT-Hub-Importen nicht. Das bricht direkt mit einer Log-Fehlermeldung ab.

Ich habe dafür einfach die Meldungsdaten gekürzg in separate Geräteattribute eingefügt. So kann man das ohne separate HA-Sensore direkt verwenden (für die Benutzer wie mich, wo Homey das primäre System ist und HA eher nur das Dashboard).

Kurzes Update zu den HomeAssistant-Esport über MQTT Hub:
Der Hub überträge anscheinend alle Attribute des Gerätes “Warnkreis” in einem Aufruf. Da der Gesamttext der Warnungen in Homey immer noch >255 Zeichen ist, wird anscheinen der Gesamte Datensatz in HA angelehnt. Ich hatte erwartet, dass zwar der lange Text nicht übernommen wird, der Rest der Daten aber trotzdem. Dem ist wohl nicht so.
Ohne Änderungen am MQTT Hub bliebe für HA-Exporte also nur die Kürzung des Attributs “Warnungen” (technisch: measure_warnings).
Damit würde ich aber aber eure eigenen Flow-Verarbeitungen beeinflussen. Ich will ja nicht die Homey-Automationen einschränken wegen HA.
Ich bin noch auf der Suche nach einer Lösung…

1 Like

Bei mir kam eben alles in HA an.