Liebe Comunnity
Auch wenn die Temperaturen zurzeit frostig sind: der Sommer kommt wieder. Inklusiver dem Thema Sonnenschutz. Ich erstellte bei mir zuhause eine Automation, die den Sonnenstand als Auslöser nimmt und die Wettervorhersage berücksichtigt.
Ich versuche dir mein System zu erklären, beschreibe dir die notwendigen Schritte und stelle dir die Codes zur Verfügung.
Das Endergebnis ist diese Automation. Die Automation stösst dann die eigentliche Automation für die Storenansteuerung an. Dies hat den Vorteil, dass ich den Sonnenschutz auch händisch auslösen kann:
alias: Storen Sonnenschutz aktivieren
description: >-
Lässt Ostseitig die Storen runter, wenn die Wetter-Bedingungen erfüllt werden
(Sonnig oder teilweise bewölkt und Tageshöchstwert von 24°C). Der Helfer löst
die Automation "Storen Sonnenschutz Task" aus
trigger:
- platform: numeric_state
entity_id: sun.sun
above: 105
attribute: azimuth
id: Azimut
- platform: state
entity_id:
- input_boolean.away
from: "off"
to: "on"
id: Away
- platform: template
value_template: >-
{{ states('weather.accu_weather', 'state') in ['sunny', 'partlycloudy']
}}
alias: "Prüft die aktuelle Wetterbedingung "
id: Aktuelle Wetterbedingung
- platform: numeric_state
entity_id: sensor.temperatur_wohnung
for:
hours: 0
minutes: 15
seconds: 0
above: 26
id: Temperatur Wohnung
alias: Prüft die Wohnungstemperatur
- platform: numeric_state
entity_id: sensor.bewegungsmelder_kuche_illuminance_lux
for:
hours: 0
minutes: 5
seconds: 0
above: 3000
id: LUX Küche
condition:
- condition: or
conditions:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.forecast_temperatur_high
above: 25
- condition: or
conditions:
- condition: trigger
id: Azimut
- condition: trigger
id: Away
- condition: trigger
id: Aktuelle Wetterbedingung
- condition: trigger
id: LUX Küche
alias: Prüft Auslöser ID mit Mindestaussenhöchsttemperatur
- condition: and
conditions:
- condition: trigger
id: Temperatur Wohnung
alias: Prüft Auslöser ID ohne Mindestaussenhöchsttemperatur
alias: Auslöser mit oder ohne Mindestaussenhöchsttemperatur
- condition: state
entity_id: input_boolean.storen_sonnenschutz
state: "off"
- condition: numeric_state
entity_id: sun.sun
attribute: azimuth
above: 105
below: 180
- condition: or
conditions:
- condition: state
entity_id: binary_sensor.prufung_heute_sonnig_oder_teilweise_bewolkt
state: "on"
enabled: true
- condition: template
value_template: >-
{{ states('weather.accu_weather', 'state') in ['sunny',
'partlycloudy'] }}
alias: Bedingung wenn Wetter aktuell sonnig oder bewölkt
- condition: state
entity_id: >-
binary_sensor.openweathermap_prufung_heute_sonnig_oder_teilweise_bewolkt_nachmittag
state: "on"
alias: ODER prüft Wetterbedinungen
action:
- service: input_boolean.turn_on
data: {}
target:
entity_id: input_boolean.storen_sonnenschutz
mode: single
Kurz zur Erklärung:
Ich habe zwei Auslöser definiert, einmal den Sonnenstand, also ab wann die ersten Sonnenstrahlen durch die Fenster scheinen, und einmal, wenn die Innentemperatur in der Wohnung einen bestimmten Schwellenwert überschreitet. Bei mir ist das, wenn der Wert länger als 15min bei 26°C liegt. Es gibt verschiedene Online-Tools, mit denen man den Azimut für die eigene Wohnung/Haus berechnen kann. In meinem Fall ist der Wert über 105° und unter 180° (Eigentumswohnung Ostseite).
Als Bedingung definiere ich meinen Azimutbereich. Diesen brauche ich nur für den Temperatur-Trigger. Dann brauche ich einen Sensor, der die Tageshöchsttemperatur misst. Wenn der Wert über 24°C liegt, ist die Bedingung erfüllt. Und der letzte Sensor prüft die Wettervorhersage für den Tag. Wird sonnig oder teilweise bewölkt gemeldet, ist die Bedingung erfüllt.
Die Aktion aktiviert dann den Helfer, der die eigentliche Sonnenschutzautomation auslöst. Du kannst hier aber auch direkt deine Automation hinzufügen. Der Vorteil meiner Lösung ist, dass ich im Dahsboard sehe, ob der Sonnenschutz aktiviert wurde und dies auch manuell übersteuern kann.
So viel zur Automation. Nun zu den Sensoren.
Tageshöchstwertsensor:
Zunächst wird eine Wetterintegration benötigt, die eine Vorhersage für den aktuellen Tag liefert. Die vorinstallierte Integration von Met.no kann das nicht. Ich benutze Accu Weather. Um das nutzen zu können, brauchst du einen API-Key. Den bekommst du kostenlos. Die Anleitung findest du hier.
Du musst die grünmarkierten Werte auslesen. Also die Vorhersage des aktuellen Tages (Höchsttemperatur) und die Wetterlage. Hier ist der Code dazu:
template:
- sensor:
#Exktraktion heutige Höchsttemperatur
- name: "Weather Temperature High Today"
unique_id: fotecast_temphigh_today
unit_of_measurement: '°C'
state: >
{{ state_attr('weather.accu_weather', 'forecast') [0] ['temperature'] }}
- binary_sensor:
#Exktraktion heutige Wetterlage
- name: "Weather Prüfung Heute Sonnig oder teilweise Bewölkt"
unique_id: fotecast_condition_today_sunny_partlycloudy
state: >
{{ state_attr('weather.accu_weather', 'forecast')[0]['condition'] in ['sunny', 'partlycloudy'] }}
Wenn die Entität nicht weather.accu_weather
ist, muss der richtige Name eingegeben werden.
Das Ergebnis sind zwei Sensoren, ein normaler Sensor und ein binärer Sensor.
Der Code muss in die configuration.yaml eingetragen werden. Gehe zu Entwicklerwerkzeuge → YAML → Überprüfen und neu starten und klicke auf Konfiguration prüfen. Wenn keine Fehlermeldung erscheint, klicke auf Neustart.
Den Code meiner eigentlichen Automation füge ich nicht ein, da dieser sehr umfangreich ist. Die Automation prüft in der Aktion, ob z.B. mein Kleiner schläft, damit die Jalousien nicht angesteuert werden oder ob die Balkontüren offen sind. Nicht, dass wir draußen sitzen und die Jalousien runtergehen.
Edit:
Ich erstellte für OpenWeatherMap einen Binärsensor mit den Vorhersagen für die Zeiten 11:00, 14:00 und 17:00. Dieser löst aus, wenn einer der Werte erfüllt wird. Die Automation wurde etwas erweitert.
#OpenWeatherMap prüft Wetterbedinung für die Zeit 11.00, 14.00 und 17.00
- name: "OpenWeatherMap Prüfung Heute Sonnig oder teilweise Bewölkt Nachmittag"
unique_id: openweathermap_forecast_condition_afternoon_today_sunny_partlycloudy
state: >
{{ ((as_timestamp(now().strftime('%Y-%m-%d 11:00')) == as_timestamp((state_attr('weather.openweathermap', 'forecast') [0] ['datetime'])) and (state_attr('weather.openweathermap', 'forecast') [0] ['condition']) in ['sunny', 'partlycloudy'])) or
((as_timestamp(now().strftime('%Y-%m-%d 14:00')) == as_timestamp((state_attr('weather.openweathermap', 'forecast') [0] ['datetime'])) and (state_attr('weather.openweathermap', 'forecast') [1] ['condition']) in ['sunny', 'partlycloudy'])) or
((as_timestamp(now().strftime('%Y-%m-%d 17:00')) == as_timestamp((state_attr('weather.openweathermap', 'forecast') [0] ['datetime'])) and (state_attr('weather.openweathermap', 'forecast') [2] ['condition']) in ['sunny', 'partlycloudy'])) }}