Hallo zusammen,
ich hätte nicht damit gerechnet, dass allen WI so einen Anklang findet! Also habe ich mich entschlossen, nach dem großen Zuspruch, die API zu erweitern!
Damit kann ich etwas abstellen, dass mich selber seit langem nervt: Die Unwetterwarnungen von der DWD-App bedingt durch die schwierige Konfiguration auf dem HA-Dashboard.
WI bekommt nun eine eigen Unwetterwarnung (Gewitter, Starkregen, Nebel, Sturm, starker Frost,…) und Kepler kann sie verarbeiten und in einen Sensor umwandeln.
So ist es möglich sich z.B. Warnungen für den eigenen lokalen (!!!) Standort auf das Handy zu schicken (24 Std im Voraus oder bei unvorhergesehen Ereignissen sofort) oder Automationen zu triggern um z.B. die Markise einzufahren.
und der Sensor (nur Warnungen!)
Beispiel Code für Handy-Warnungen:
alias: EAI Wetterwarnung aufs Handy
triggers:
- trigger: state
entity_id: sensor.solar_forecast_energy_ai_wichtigste_wetterwarnung
attribute: event_id
conditions:
- condition: template
value_template: >
{{ trigger.to_state.attributes.event_id is not none }}
actions:
- action: notify.mobile_app_DEIN_HANDY
data:
title: "{{ trigger.to_state.attributes.title }}"
message: >-
{{ trigger.to_state.attributes.recommended_action }}
Gültig ab
{{ as_timestamp(trigger.to_state.attributes.start)
| timestamp_custom('%d.%m. %H:%M', true) }} Uhr.
mode: queued
Code für Apex:
type: conditional
conditions:
- condition: state
entity: sensor.solar_forecast_energy_ai_wichtigste_wetterwarnung
state_not: "none"
card:
type: vertical-stack
cards:
- type: markdown
content: >-
{% set w =
states.sensor.solar_forecast_energy_ai_wichtigste_wetterwarnung %}
## ⚠️ {{ w.attributes.title | default('Wetterwarnung') }}
**Schweregrad:**
{{ 'Dringend' if w.attributes.severity == 'critical'
else 'Warnung' }}
**Gültig:**
{{ as_timestamp(w.attributes.start)
| timestamp_custom('%d.%m.%Y · %H:%M', true) }}
bis
{{ as_timestamp(w.attributes.end)
| timestamp_custom('%d.%m.%Y · %H:%M', true) }} Uhr
{{ w.attributes.recommended_action }}
- type: custom:apexcharts-card
graph_span: 48h
update_interval: 1min
span:
start: hour
header:
show: true
title: Zeitfenster der Wetterwarnung
show_states: false
now:
show: true
label: Jetzt
apex_config:
chart:
height: 190px
toolbar:
show: false
legend:
show: false
tooltip:
x:
format: "dd.MM. HH:mm 'Uhr'"
grid:
borderColor: rgba(128, 128, 128, 0.2)
yaxis:
- min: 0
max: 2
decimals: 0
show: false
series:
- entity: sensor.solar_forecast_energy_ai_wichtigste_wetterwarnung
attribute: warning_count
name: Warnung
type: area
color: "#ff9800"
opacity: 0.55
curve: stepline
stroke_width: 1
extend_to: false
data_generator: |
const a = entity.attributes;
if (
a.severity !== "warning" ||
!a.start ||
!a.end
) {
return [];
}
const warningStart =
new Date(a.start).getTime();
const warningEnd =
new Date(a.end).getTime();
if (
!Number.isFinite(warningStart) ||
!Number.isFinite(warningEnd) ||
warningEnd <= warningStart
) {
return [];
}
return [
[warningStart - 1, 0],
[warningStart, 1],
[warningEnd, 1],
[warningEnd + 1, 0]
];
- entity: sensor.solar_forecast_energy_ai_wichtigste_wetterwarnung
attribute: warning_count
name: Dringend
type: area
color: "#e53935"
opacity: 0.6
curve: stepline
stroke_width: 1
extend_to: false
data_generator: |
const a = entity.attributes;
if (
a.severity !== "critical" ||
!a.start ||
!a.end
) {
return [];
}
const warningStart =
new Date(a.start).getTime();
const warningEnd =
new Date(a.end).getTime();
if (
!Number.isFinite(warningStart) ||
!Number.isFinite(warningEnd) ||
warningEnd <= warningStart
) {
return [];
}
return [
[warningStart - 1, 0],
[warningStart, 2],
[warningEnd, 2],
[warningEnd + 1, 0]
];


