Skip to content

Instantly share code, notes, and snippets.

@aschamberger
Last active November 4, 2023 20:35
Show Gist options
  • Save aschamberger/088aacec628fd7e51a59106b11cab755 to your computer and use it in GitHub Desktop.
Save aschamberger/088aacec628fd7e51a59106b11cab755 to your computer and use it in GitHub Desktop.
type: entity-filter
entities:
- sensor.dwd_weather_warnings_709162019_current_warning_level
- sensor.dwd_weather_warnings_709162019_advance_warning_level
state_filter:
- operator: ">"
value: 0
card:
type: markdown
title: DWD Warnungen
content: >-
{% if config.entities | length < 1 %} **<font color=#44739e>Keine Warnungen</font>** {% endif %}
{# --- Loop through the entities with state 'on' --- #}
{% for item in config.entities %}
{# --- SETTINGS --- #}
{% set show_recommend_action = true %}
{% set show_timeframe = true %}
{% set show_timestamp_sent = false %}
{% set minor_severity = "info" %}
{% set moderate_severity = "info" %}
{% set default_severity = "success" %}
{# --- Item attributes --- #}
{% set warning_count = state_attr(item.entity, "warning_count") %}
{% set has_sent = (not not state_attr(item.entity, "last_update")|default(false, true)) %}
{% if has_sent %}
{% set time_sent = as_timestamp(state_attr(item.entity, "last_update")) %}
{% else %}
{% set time_sent = as_timestamp("1970-01-01T00:00:00+00:00") %}
{% endif %}
{% set num_weekday_sent = time_sent | timestamp_custom("%w", True) | int %}
{% set weekday_sent = "" ~ ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][num_weekday_sent-1] %}
{# --- Loop through the warnings --- #}
{% for i in range(warning_count) %}
{# --- Initialise attribute values --- #}
{% set headline = state_attr(item.entity, "warning_" ~ loop.index ~ "_headline")|default('Meldung', true) %}
{% set description = state_attr(item.entity, "warning_" ~ loop.index ~ "_description")|default('', true)|trim %}
{% set recommended_actions = state_attr(item.entity, "warning_" ~ loop.index ~ "_instruction")|default('', true)|trim %}
{% set warn_timeframe = "" %}
{% set level = state_attr(item.entity, "warning_" ~ loop.index ~ "_level")|default(default_severity, true) %}
{# --- Set severity --- #}
{% if level == "4" %} {% set severity = "error" %}
{% elif level == "3" %}{% set severity = "warning" %}
{% elif level == "2" %}{% set severity = moderate_severity %}
{% elif level == "1" %}{% set severity = minor_severity %}
{% else %}{% set severity = default_severity %} {% endif %}
{# --- Check attribute content --- #}
{% set has_start = (not not state_attr(item.entity, "warning_" ~ loop.index ~ "_start")|default(false, true)) %}
{% set has_end = (not not state_attr(item.entity, "warning_" ~ loop.index ~ "_end")|default(false, true)) %}
{% set has_recommended_actions = (not not state_attr(item.entity, "warning_" ~ loop.index ~ "_instruction")|default(false, true)) %}
{# --- Fill timestamp variables --- #}
{% if has_start %}
{% set time_start = as_timestamp(state_attr(item.entity, "warning_" ~ loop.index ~ "_start")) %}
{% else %}
{% set time_start = as_timestamp("1970-01-01T00:00:00+00:00") %}
{% endif %}
{% set num_weekday_start = time_start | timestamp_custom("%w", True) | int %}
{% set weekday_start = "" ~ ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][num_weekday_start-1] %}
{% if has_end %}
{% set time_end = as_timestamp(state_attr(item.entity, "warning_" ~ loop.index ~ "_end")) %}
{% else %}
{% set time_end = as_timestamp("1970-01-01T00:00:00+00:00") %}
{% endif %}
{% set num_weekday_end = time_end | timestamp_custom("%w", True) | int %}
{% set weekday_end = "" ~ ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][num_weekday_end-1] %}
{# --- Format recommended_actions for warning --- #}
{% if has_recommended_actions %}
{% set recommended_actions = "<br/>**Empfehlung:** " ~ recommended_actions ~ "<br/>" %}
{% endif %}
{# --- Format custom timeframe for warning --- #}
{% if show_timeframe %}
{% set warn_timeframe = "<br/>**" ~ weekday_sent ~ ", " ~ time_sent | timestamp_custom("%H:%M Uhr") %}
{% if has_start %}
{% set warn_timeframe = "<br/>**" ~ weekday_start ~ ", " ~ time_start | timestamp_custom("%H:%M Uhr") %}
{% endif %}
{% if has_end %}
{% set warn_timeframe = warn_timeframe ~ " - " ~ weekday_end ~ ", " ~ time_end | timestamp_custom("%H:%M Uhr") ~ "**<br/>" %}
{% else %}
{% set warn_timeframe = "" %}
{% set show_timestamp_sent = true %}
{% endif %}
{% endif %}
{# --- Construct ha-alert elements --- #}
<ha-alert alert-type="{{ severity }}" title="{{ headline }}">
{{ description }} <br/>
{{ recommended_actions }}
{{ warn_timeframe }}
{% if show_timestamp_sent %}
<br/>`{{ time_sent | timestamp_custom("Meldung vom: %d.%m.%Y, %H:%M Uhr") }}`
{% endif %}</ha-alert>
{% endfor %}
{% endfor %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment