Code kopieren & zu File Editor
1# DWD Wetter-Warnungen Integration
2# Bezieht offizielle Wetterwarnungen vom Deutschen Wetterdienst
3
4# REST-Sensor für DWD Warnungen
5sensor:
6 - platform: rest
7 name: "DWD Wetterwarnungen"
8 scan_interval: 600 # Alle 10 Minuten prüfen
9 resource_template: >
10 https://opendata.dwd.de/climate_environment/health/alerts/cap/COMMUNEUNION_DWD_STAT/Z_CAP_C_EDZW_LATEST_PVW_STATUS_PREMIUMDWD_COMMUNEUNION_DE.zip
11 value_template: "{{ now().isoformat() }}"
12 json_attributes:
13 - identifier
14 - sender
15 - sent
16 - status
17 - msgType
18 - category
19 - severity
20 - urgency
21 - event
22 - headline
23 - description
24 - instruction
25 - onset
26 - expires
27 headers:
28 User-Agent: "Home-Assistant"
29 timeout: 30
30
31 # Einfacherer DWD-Sensor über JSON API
32 - platform: rest
33 name: "DWD Warnungen Region"
34 scan_interval: 900 # Alle 15 Minuten
35 resource: "https://opendata.dwd.de/climate_environment/health/alerts/cap/COMMUNEUNION_DWD_STAT/json/warnings.json"
36 value_template: >
37 {% set warnings = value_json.warnings %}
38 {% set region_code = "805315000" %} # Beispiel: München - anpassen!
39 {% if region_code in warnings %}
40 {{ warnings[region_code] | length }}
41 {% else %}
42 0
43 {% endif %}
44 json_attributes_path: "$.warnings.805315000[0]" # Erste Warnung für Region
45 json_attributes:
46 - event
47 - headline
48 - description
49 - severity
50 - urgency
51 - onset
52 - expires
53 - areaDesc
54 unit_of_measurement: "Warnungen"
55
56# Template-Sensoren für benutzerfreundliche Darstellung
57 - platform: template
58 sensors:
59 dwd_warning_level:
60 friendly_name: "Warnstufe"
61 value_template: >
62 {% set severity = state_attr('sensor.dwd_warnungen_region', 'severity') %}
63 {% if severity == 'Minor' %}1
64 {% elif severity == 'Moderate' %}2
65 {% elif severity == 'Severe' %}3
66 {% elif severity == 'Extreme' %}4
67 {% else %}0{% endif %}
68 icon_template: >
69 {% set level = states('sensor.dwd_warning_level') | int %}
70 {% if level == 0 %}mdi:check-circle
71 {% elif level == 1 %}mdi:information
72 {% elif level == 2 %}mdi:alert
73 {% elif level == 3 %}mdi:alert-octagon
74 {% elif level == 4 %}mdi:alert-decagram
75 {% else %}mdi:help-circle{% endif %}
76
77 dwd_warning_event:
78 friendly_name: "Wettereignis"
79 value_template: >
80 {{ state_attr('sensor.dwd_warnungen_region', 'event') or 'Keine Warnung' }}
81 icon_template: >
82 {% set event = state_attr('sensor.dwd_warnungen_region', 'event') | lower %}
83 {% if 'regen' in event or 'niederschlag' in event %}mdi:weather-rainy
84 {% elif 'sturm' in event or 'wind' in event %}mdi:weather-windy
85 {% elif 'gewitter' in event %}mdi:weather-lightning
86 {% elif 'schnee' in event %}mdi:weather-snowy
87 {% elif 'eis' in event or 'glätte' in event %}mdi:snowflake
88 {% elif 'hitze' in event %}mdi:weather-sunny-alert
89 {% elif 'frost' in event %}mdi:thermometer-minus
90 {% elif 'nebel' in event %}mdi:weather-fog
91 {% else %}mdi:weather-cloudy{% endif %}
92
93 dwd_warning_headline:
94 friendly_name: "Warnung Überschrift"
95 value_template: >
96 {{ state_attr('sensor.dwd_warnungen_region', 'headline') or 'Keine Warnung aktiv' }}
97
98 dwd_warning_description:
99 friendly_name: "Warnung Beschreibung"
100 value_template: >
101 {{ state_attr('sensor.dwd_warnungen_region', 'description') or 'Keine Details verfügbar' }}
102
103 dwd_warning_expires:
104 friendly_name: "Warnung gültig bis"
105 value_template: >
106 {% set expires = state_attr('sensor.dwd_warnungen_region', 'expires') %}
107 {% if expires %}
108 {{ as_timestamp(expires) | timestamp_custom('%d.%m.%Y %H:%M') }}
109 {% else %}
110 -
111 {% endif %}
112 device_class: timestamp
113
114# Binäre Sensoren für Automatisierungen
115binary_sensor:
116 - platform: template
117 sensors:
118 dwd_warning_active:
119 friendly_name: "Wetterwarnung aktiv"
120 value_template: >
121 {{ states('sensor.dwd_warnungen_region') | int > 0 }}
122 device_class: safety
123
124 dwd_severe_warning:
125 friendly_name: "Schwere Wetterwarnung"
126 value_template: >
127 {{ states('sensor.dwd_warning_level') | int >= 3 }}
128 device_class: safety
129
130 dwd_storm_warning:
131 friendly_name: "Sturmwarnung"
132 value_template: >
133 {% set event = state_attr('sensor.dwd_warnungen_region', 'event') | lower %}
134 {{ 'sturm' in event or 'wind' in event or 'orkan' in event }}
135 device_class: safety
136
137 dwd_rain_warning:
138 friendly_name: "Regenwarnung"
139 value_template: >
140 {% set event = state_attr('sensor.dwd_warnungen_region', 'event') | lower %}
141 {{ 'regen' in event or 'niederschlag' in event or 'starkregen' in event }}
142 device_class: moisture
143
144 dwd_thunder_warning:
145 friendly_name: "Gewitterwarnung"
146 value_template: >
147 {% set event = state_attr('sensor.dwd_warnungen_region', 'event') | lower %}
148 {{ 'gewitter' in event or 'blitz' in event }}
149 device_class: safety
150
151# Automatisierungen für Wetterwarnungen
152automation:
153 - alias: "DWD Wetterwarnung Benachrichtigung"
154 trigger:
155 - platform: state
156 entity_id: binary_sensor.dwd_warning_active
157 to: "on"
158 action:
159 - service: notify.mobile_app
160 data:
161 title: "⚠️ Wetterwarnung"
162 message: >
163 {{ states('sensor.dwd_warning_headline') }}
164
165 Gültig bis: {{ states('sensor.dwd_warning_expires') }}
166 data:
167 tag: "weather_warning"
168 group: "weather"
169 actions:
170 - action: "weather_details"
171 title: "Details anzeigen"
172
173 - alias: "DWD Schwere Wetterwarnung"
174 trigger:
175 - platform: state
176 entity_id: binary_sensor.dwd_severe_warning
177 to: "on"
178 action:
179 - service: notify.mobile_app
180 data:
181 title: "🚨 SCHWERE WETTERWARNUNG"
182 message: >
183 {{ states('sensor.dwd_warning_headline') }}
184
185 {{ states('sensor.dwd_warning_description')[:200] }}...
186 data:
187 tag: "severe_weather"
188 group: "weather"
189 color: "red"
190 sound: "alarm.wav"
191
192 - alias: "DWD Sturmwarnung Sicherheit"
193 trigger:
194 - platform: state
195 entity_id: binary_sensor.dwd_storm_warning
196 to: "on"
197 action:
198 # Sicherheitsmaßnahmen bei Sturm
199 - service: cover.close_cover
200 target:
201 entity_id: all # Alle Rollläden schließen
202 - service: switch.turn_off
203 target:
204 entity_id:
205 - switch.garden_lights # Gartenbeleuchtung aus
206 - switch.patio_heater # Terrassenheizer aus
207 - service: notify.mobile_app
208 data:
209 title: "🌪️ Sturmwarnung - Sicherheitsmaßnahmen"
210 message: "Rollläden geschlossen, Außengeräte ausgeschaltet"
211
212 - alias: "DWD Warnung abgelaufen"
213 trigger:
214 - platform: state
215 entity_id: binary_sensor.dwd_warning_active
216 to: "off"
217 for: "00:05:00"
218 action:
219 - service: notify.mobile_app
220 data:
221 title: "✅ Wetterwarnung aufgehoben"
222 message: "Die Wetterwarnung ist nicht mehr aktiv"
223 data:
224 tag: "weather_warning" # Überschreibt vorherige Warnung
225
226# Text-to-Speech Ansagen (optional)
227script:
228 announce_weather_warning:
229 alias: "Wetterwarnung ansagen"
230 sequence:
231 - condition: state
232 entity_id: binary_sensor.dwd_warning_active
233 state: "on"
234 - service: tts.google_translate_say
235 target:
236 entity_id: media_player.home_speakers
237 data:
238 message: >
239 Achtung, eine Wetterwarnung ist aktiv: {{ states('sensor.dwd_warning_headline') }}.
240 Die Warnung gilt bis {{ states('sensor.dwd_warning_expires') }}.
241 language: "de"
242
243# Input Boolean für Benachrichtigungs-Einstellungen
244input_boolean:
245 dwd_notifications_enabled:
246 name: "DWD Benachrichtigungen aktiviert"
247 initial: true
248 icon: "mdi:bell"
249
250 dwd_tts_enabled:
251 name: "DWD Sprachansagen aktiviert"
252 initial: false
253 icon: "mdi:volume-high"
254
255# Input Select für Benachrichtigungs-Level
256input_select:
257 dwd_notification_level:
258 name: "Benachrichtigungs-Stufe"
259 options:
260 - "Alle Warnungen"
261 - "Ab Stufe 2 (Moderate)"
262 - "Ab Stufe 3 (Severe)"
263 - "Nur Stufe 4 (Extreme)"
264 initial: "Ab Stufe 2 (Moderate)"
265 icon: "mdi:alert-octagon"