AWTRIX DWD Weather Warnings ⛈️
Home Assistant Blueprint

AWTRIX DWD Weather Warnings ⛈️

Be notified when weather warnings have been issued by Deutsche Wetterdienst (DWD) for your region.
A flow by jc-23

Import blueprint Download blueprint

Flow Details

It comes with:

  • Support for multiple warnings
  • Different text colors according to severity level
  • Customizable icons

Requirements

To have this blueprint working correctly, you have to install icons. Please read the full blueprint description once you installed it.

blueprint: name: "AWTRIX DWD weather warnings ⛈️" description: "\nShow weather warnings issued by DWD on your AWTRIX devive.\n## ⚠️ REQUIREMENTS ⚠️\n You MUST have warning icons uploaded to your AWTRIX device to make this blueprint work properly.\n \nYou can call the custom script which will prompt you for your AWTRIX device and then upload the required icons:\n \n (If you have windows I don't know if this will work)\n\n bash -c \"$(curl -fsSL https://raw.githubusercontent.com/jc-23/home-assistant/master/icons/upload_icon.sh)\"\n\n [A legend for the different warning types](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/warning_codes_pdf.pdf?__blob=publicationFile&v=5) mentioned in the icon selections below is available at DWD.\n\n Updates for this blueprint may be found at https://raw.githubusercontent.com/jc-23/home-assistant/master/blueprints/automation/awtrix_weather_warning_dwd.yaml\n\n Credits go to [Jeef](https://github.com/jeeftor) and his [AWTRIX Weather ⛈️ + Forecast + \U0001F315️](https://raw.githubusercontent.com/jeeftor/HomeAssistant/master/blueprints/automation/awtrix_weatherflow.yaml) blueprint on which this blueprint is based." domain: automation input: awtrix: name: AWTRIX Device description: Select your AWTRIX device(s) selector: device: integration: mqtt manufacturer: Blueforcer model: AWTRIX 3 multiple: true weather_warning_var: name: DWD weather warning sensor description: "Select the sensor that provides [Deutscher Wetterdienst (DWD) Weather Warnings](https://www.home-assistant.io/integrations/dwd_weather_warnings/) integration\n" selector: entity: filter: - domain: - sensor multiple: false warning_level: name: Show warnings for severity level (and above); not implemented yet description: '0 (default) = all 1 = warning 2 = significant 3 = severe 4 = extreme' selector: number: max: 4 min: 0 mode: box step: 1.0 default: 0 message_duration: name: Warning duration ⏱️ description: How long should the warning message remain on the screen (in seconds). *If you select `0` it will use the Global App Time* selector: number: min: 0.0 max: 300.0 unit_of_measurement: sec step: 1.0 mode: slider default: 15 icon_fog: name: Icon for fog description: 'This is the icon ID which maps to the warning type: `59` ![](https://developer.lametric.com/content/apps/icon_thumbs/17055_icon_thumb.gif?v=1)' selector: text: {} default: ww-fog icon_frost: name: Icon for frost description: 'This is the icon ID which maps to the warning type: `22,82` ![](https://developer.lametric.com/content/apps/icon_thumbs/55543_icon_thumb.gif?v=1)' selector: text: {} default: ww-frost icon_thunderstorm: name: Icon for thunderstorms description: 'This is the icon ID which maps to the warning type: `31,33,34,36,38,40,41,42,44,45,46,48,49,95,96` ![](https://developer.lametric.com/content/apps/icon_thumbs/49299_icon_thumb.gif?v=4)' selector: text: {} default: ww-lightning icon_pouring: name: Icon for pouring rain description: 'This is the default icon which maps to the warning type: `61,62,63,64,65,66` ![](https://developer.lametric.com/content/apps/icon_thumbs/49300_icon_thumb.gif?v=1)' selector: text: {} default: ww-pouring icon_snow: name: Icon for snow fall description: 'This is the icon ID which maps to the warning type: `70,71,72,73,74,75,76` ![](https://developer.lametric.com/content/apps/icon_thumbs/2289_icon_thumb.gif?v=1)' selector: text: {} default: ww-snow icon_radition: name: Icon for UV radiation/heat description: 'This is the icon ID which maps to the warning type: `246,247,248` ![](https://developer.lametric.com/content/apps/icon_thumbs/55544_icon_thumb.gif?v=1)' selector: text: {} default: ww-radiation icon_wind: name: Icon for wind description: 'This is the icon ID which maps to the warning type: `51,52,53,54,55,56` ![](https://developer.lametric.com/content/apps/icon_thumbs/3363_icon_thumb.gif?v=1)' selector: text: {} default: ww-wind icon_thaw: name: Icon for thaw description: 'This is the icon ID which maps to the warning type: `88,89` ![](https://developer.lametric.com/content/apps/icon_thumbs/22866_icon_thumb.gif?v=1)' selector: text: {} default: ww-thaw icon_blackice: name: Icon for black ice description: 'This is the icon ID which maps to the warning type: `84,85,86,87` ![](https://developer.lametric.com/content/apps/icon_thumbs/24231_icon_thumb.gif?v=1)' selector: text: {} default: ww-blackice icon_warning: name: Icon for other warnings description: 'This is the icon ID which maps to any other warning type ![](https://developer.lametric.com/content/apps/icon_thumbs/16754_icon_thumb.gif?v=1)' selector: text: {} default: ww-generic mode: restart variables: device_ids: !input awtrix app_topic: jc-23 devices_topics: "{%- macro get_device_topic(device_id) %} {{ states((device_entities(device_id) | select('search','device_topic') | list)[0]) }} {%- endmacro %}\n{%- set ns = namespace(devices=[]) %} {%- for device_id in device_ids %}\n {%- set device=get_device_topic(device_id)|replace('','') %}\n {% set ns.devices = ns.devices + [ device ~ '/custom/' ~ app_topic] %}\n{%- endfor %} {{ ns.devices | reject('match','unavailable') | list}}" weather_warning_var: !input weather_warning_var warning_level_to_show: !input warning_level message_duration: !input message_duration icon_frost: !input icon_frost icon_thunderstorm: !input icon_thunderstorm icon_pouring: !input icon_pouring icon_snow: !input icon_snow icon_blackice: !input icon_blackice icon_wind: !input icon_wind icon_fog: !input icon_fog icon_thaw: !input icon_thaw icon_radition: !input icon_radition icon_warning: !input icon_warning weather_warning: '{{ states(weather_warning_var) }}' warnings_count: '{{ state_attr(weather_warning_var,''warning_count'')|int }}' warnings: "{%- set warnings = namespace(index=[]) %} {%- for i in range(warnings_count) %} {%- set name = state_attr(weather_warning_var, 'warning_' ~ loop.index ~ '_name') %} {%- set type = state_attr(weather_warning_var, 'warning_' ~ loop.index ~ '_type') %} {%- set level = state_attr(weather_warning_var, 'warning_' ~ loop.index ~ '_level') %} {%- set start = state_attr(weather_warning_var, 'warning_' ~ loop.index ~ '_start') |as_timestamp |timestamp_custom('%a %H:%M', local=true) %} {%- set end = state_attr(weather_warning_var, 'warning_' ~ loop.index ~ '_end') |as_timestamp |timestamp_custom('%a %H:%M', local=true)%} {%- set start_localized = start |replace('Mon','Mo') |replace('Tue','Di') |replace('Wed','Mi') |replace('Thu','Do') |replace('Fri','Fr') |replace('Sat','Sa') |replace('Sun','So') %} {%- set end_localized = end |replace('Mon','Mo') |replace('Tue','Di') |replace('Wed','Mi') |replace('Thu','Do') |replace('Fri','Fr') |replace('Sat','Sa') |replace('Sun','So') %} {%- set warning = {'name': name, 'type': type, 'level': level, 'start': start_localized, 'end': end_localized } %} {%- set warnings.index = warnings.index + [warning] %} {%- endfor %} {{ warnings['index'] }}" warning_color_dict: '{{ dict({1: "#ffeb3b", 2: "#fb8c00", 3: "#e53935", 4: "#880e4f"}) }}' payload: "{%- macro warning_icon(warning_type) %} {%- if warning_type in [22,82] %}{{ icon_frost }} {%- elif warning_type in [31,33,34,36,38,40,41,42,44,45,46,48,49,95,96] %}{{ icon_thunderstorm }} {%- elif warning_type in [51,52,53,54,55,56] %}{{ icon_wind }} {%- elif warning_type == 59 %}{{ icon_fog }} {%- elif warning_type in [61,62,63,64,65,66] %}{{ icon_pouring }} {%- elif warning_type in [70,71,72,73,74,75,76] %}{{ icon_snow }} {%- elif warning_type in [84,85,86,87] %}{{ icon_blackice }} {%- elif warning_type in [88,89] %}{{ icon_thaw }} {%- elif warning_type in [246,247,248] %}{{ icon_radition }} {%- else %}{{ icon_warning }} {%- endif %} {%- endmacro %} {{ iif(warnings_count > 1, '[', '') }} {%- for i in range(warnings_count) -%} {\"icon\":\"{{ warning_icon(warnings[loop.index0]['type']) }}\", \"text\":\"Warnstufe {{ warnings[loop.index0]['level'] }} vor {{ warnings[loop.index0]['name'] }}, {{ warnings[loop.index0]['start'] }} - {{ warnings[loop.index0]['end'] }}\", \"duration\": {{ message_duration }}, \"color\": \"{{ warning_color_dict[warnings[loop.index0]['level']] }}\", \"pushIcon\": 2} {{ iif(warnings_count > 1 and loop.index < warnings_count, ',', '') }} {%- endfor -%} {{ iif(warnings_count > 1, ']', '') }}" trigger: - platform: state entity_id: !input weather_warning_var id: Changes enabled: true condition: [] action: - repeat: for_each: '{{ devices_topics }}' sequence: - service: mqtt.publish data: qos: 0 retain: false topic: '{{ repeat.item }}' payload: '' - service: mqtt.publish data: qos: 0 retain: false topic: '{{ repeat.item }}' payload: '{{payload}}'
-- Flow first published on May 9, 2024, last updated on May 9, 2024 at 21:22.