🌦️☀️ Automatisiere deine Markise mit Home Assistant und örtlichen Wetterdaten! ☁️🌬️

Viele Smart-Home-Systeme greifen auf allgemeine Wetterdaten zurück. Diese sind allerdings häufig ungenau oder zu weit vom eigenen Standort entfernt. Ich zeige dir, wie du die Daten einer örtlichen Wetterstation von einer Webseite ausliest und für deine Automatisierungen nutzen kannst – ganz einfach mit Home Assistant!

🔧 Voraussetzungen

Um das Ganze umzusetzen, benötigst du:

  • Eine installierte und eingerichtete Instanz von Home Assistant
  • Zugriff auf eine Webseite mit Wetterdaten einer lokalen Wetterstation
  • Grundkenntnisse in Automatisierungen und Template-Sensoren in Home Assistant

🧩 Wetterdaten abrufen – So funktioniert’s

Wir nutzen die Integration von Wetterdaten über RESTful Sensoren, um Informationen wie:

  • Regenstatus
  • Windgeschwindigkeit
  • Wetterlage (z.B. sonnig, bewölkt)
  • Temperatur

auszulesen. Diese Daten werden anschließend in eigene Sensoren überführt, die Home Assistant versteht und in Automatisierungen verwendet.

Zunächst müssen wir uns auf die Seite von Weather Underground begeben. Dort lasst euch den Quelltext anzeigen und kopiert diesen in einen Editor Tool ( z.B. von Windows).

Um den API Eintrag zu finden, sucht nach der Zeichenkette

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
https://api.weather.com/v2/pws/observations/current
https://api.weather.com/v2/pws/observations/current
https://api.weather.com/v2/pws/observations/current

Kopiert euch die gesamte Zeichenkette inklusive apiKey und stationId und passt den Inhalt wie folgt an.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m
https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m
https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m

die „**“ sind nur zur eindeutigen Identifizierung zu verstehen und nicht dem Key und der StationID hinzuzufügen!

Als nächstes geht mit dem Editor eurer Wahl ( z.B. File Editor oder Studio Code Server ) in eurer Home Assistant Instanz und fügt in der configuration.yaml einen neuen Rest Sensor ein.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
rest:
- resource: https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m
scan_interval: 600
sensor:
- name: Wetterstation Lahr
unique_id: 82413cbe-2261-4d41-a7f4-c271cba75645 #hier musst du eine eigene eindeutige ID erstellen !
value_template: >
{{ value_json.observations[0].metric.temp }}
json_attributes:
- observations
rest: - resource: https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m scan_interval: 600 sensor: - name: Wetterstation Lahr unique_id: 82413cbe-2261-4d41-a7f4-c271cba75645 #hier musst du eine eigene eindeutige ID erstellen ! value_template: > {{ value_json.observations[0].metric.temp }} json_attributes: - observations
rest:
  - resource: https://api.weather.com/v2/pws/observations/current?apiKey=**deinAPI-KEY**&stationId=**deineStationID**&numericPrecision=decimal&format=json&units=m
    scan_interval: 600 
    sensor:
      - name: Wetterstation Lahr
        unique_id: 82413cbe-2261-4d41-a7f4-c271cba75645 #hier musst du eine eigene eindeutige ID erstellen !
        value_template: >
          {{ value_json.observations[0].metric.temp }}
        json_attributes:
          - observations

Hinweis: Bitte geht nicht unter 600 Sekunden beim Scan Interval. In der Regel sehen es die Betreiber einer Website nicht gerne , wenn zu viele Abfragen von einer IP – Adresse kommen. Mit den 600 Sekunden solltet ihr auf der sicheren Seite sein.

⚙️ Automatisierung der Markise

Die Logik ist einfach:

  • Wenn es regnet oder starker Wind herrscht, fährt die Markise automatisch ein.
  • Bei Sonne und angenehmen Bedingungen fährt sie aus.

Die Automatisierung lässt sich natürlich noch weiter verfeinern – zum Beispiel durch Tageszeiten oder Anwesenheit.

Template Helfer Sensoren erstellen

Der nächste wichtige Schritt ist aus den Daten, die nun im Sensor Wetterstation Lahr (obervations) stehen alle relevanten Daten für eine Automatisierung auszulesen.

Dazu legt euch 4 Helfer an vom Typ Template Sensor

Hinweis: Bei mir habe ich die Wetterstation „’sensor.wetterstation_lahr“ genannt. Hier müsst ihr in allen Code Zeilen den von euch vergebenen Namen verwenden!

Wetterstation Lahr Windgeschwindigkeit

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['windSpeed'] }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['windSpeed'] }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['windSpeed'] }}

Einheit : km/h

Wetterstation Lahr Wetterlage

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{% set obs = state_attr('sensor.wetterstation_Lahr', 'observations')[0] %}
{% set radiation = obs['solarRadiation'] %}
{% set uv = obs['uv'] %}
{% set precip = obs['metric']['precipRate'] %}
{% if precip > 0 %}
regen
{% elif radiation < 100 or uv <= 1 %}
bewölkt
{% elif radiation < 500 or uv < 3 %}
leicht bewölkt
{% else %}
sonnig
{% endif %}
{% set obs = state_attr('sensor.wetterstation_Lahr', 'observations')[0] %} {% set radiation = obs['solarRadiation'] %} {% set uv = obs['uv'] %} {% set precip = obs['metric']['precipRate'] %} {% if precip > 0 %} regen {% elif radiation < 100 or uv <= 1 %} bewölkt {% elif radiation < 500 or uv < 3 %} leicht bewölkt {% else %} sonnig {% endif %}
{% set obs = state_attr('sensor.wetterstation_Lahr', 'observations')[0] %}
{% set radiation = obs['solarRadiation'] %}
{% set uv = obs['uv'] %}
{% set precip = obs['metric']['precipRate'] %}
{% if precip > 0 %}
   regen
{% elif radiation < 100 or uv <= 1 %}
   bewölkt
{% elif radiation < 500 or uv < 3 %}
   leicht bewölkt
{% else %}
   sonnig
{% endif %}

Einheit: keine

Wetterstation Lahr Temperatur

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['temp'] }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['temp'] }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['temp'] }}

Einheit: °C

Wetterstation Lahr Regen

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['precipRate'] > 0 }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['precipRate'] > 0 }}
{{ state_attr('sensor.wetterstation_Lahr', 'observations')[0]['metric']['precipRate'] > 0 }}

Einheit: keine

Automatisierung Markise steuern

Sobald

Und wenn

Dann

Gesamter Yaml Code

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Markise steuern
description: Steuert die Markise basierend auf den Wetterbedingungen
triggers:
- entity_id: sensor.wetterstation_lahr_temperatur
above: 18
id: Temperatur hoch
trigger: numeric_state
- entity_id: sensor.wetterstation_lahr_temperatur
below: 18.1
id: Temperatur niedrig
trigger: numeric_state
- entity_id: sensor.wetterstation_lahr_wetterlage
to: regen
id: Regen
trigger: state
- entity_id: sensor.wetterstation_lahr_wetterlage
to: sonnig
id: Sonnig
trigger: state
- entity_id: sensor.wetterstation_lahr_wetterlage
to: leicht bewölkt
id: Leicht bewölkt
trigger: state
- entity_id: sensor.wetterstation_lahr_wetterlage
to: bewölkt
id: Bewölkt
trigger: state
- entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
above: 22
id: Windgeschwindigkeit hoch
trigger: numeric_state
- entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
below: 22.1
id: Windgeschwindigkeit niedrig
trigger: numeric_state
conditions:
- condition: time
after: "10:00:00"
before: "19:00:00"
actions:
- choose:
- conditions:
- condition: or
conditions:
- condition: state
entity_id: sensor.wetterstation_lahr_wetterlage
state: regen
- condition: numeric_state
entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
above: 22
- condition: numeric_state
entity_id: sensor.wetterstation_lahr_temperatur
below: 18.1
sequence:
- entity_id: switch.markise_markise2
action: switch.turn_on
alias: Markise einfahren
alias: Schlechte Wetterlage -> Markise einfahren
- conditions:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.wetterstation_lahr_temperatur
above: 18
- condition: numeric_state
entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
below: 22.1
- condition: or
conditions:
- condition: state
entity_id: sensor.wetterstation_lahr_wetterlage
state: sonnig
- condition: state
entity_id: sensor.wetterstation_lahr_wetterlage
state: leicht bewölkt
- condition: state
entity_id: sensor.wetterstation_lahr_wetterlage
state: bewölkt
alias: Gute Wetterlage -> Markise ausfahren
sequence:
- entity_id: switch.markise
action: switch.turn_on
alias: Markise ausfahren
mode: single
alias: Markise steuern description: Steuert die Markise basierend auf den Wetterbedingungen triggers: - entity_id: sensor.wetterstation_lahr_temperatur above: 18 id: Temperatur hoch trigger: numeric_state - entity_id: sensor.wetterstation_lahr_temperatur below: 18.1 id: Temperatur niedrig trigger: numeric_state - entity_id: sensor.wetterstation_lahr_wetterlage to: regen id: Regen trigger: state - entity_id: sensor.wetterstation_lahr_wetterlage to: sonnig id: Sonnig trigger: state - entity_id: sensor.wetterstation_lahr_wetterlage to: leicht bewölkt id: Leicht bewölkt trigger: state - entity_id: sensor.wetterstation_lahr_wetterlage to: bewölkt id: Bewölkt trigger: state - entity_id: sensor.wetterstation_lahr_windgeschwindigkeit above: 22 id: Windgeschwindigkeit hoch trigger: numeric_state - entity_id: sensor.wetterstation_lahr_windgeschwindigkeit below: 22.1 id: Windgeschwindigkeit niedrig trigger: numeric_state conditions: - condition: time after: "10:00:00" before: "19:00:00" actions: - choose: - conditions: - condition: or conditions: - condition: state entity_id: sensor.wetterstation_lahr_wetterlage state: regen - condition: numeric_state entity_id: sensor.wetterstation_lahr_windgeschwindigkeit above: 22 - condition: numeric_state entity_id: sensor.wetterstation_lahr_temperatur below: 18.1 sequence: - entity_id: switch.markise_markise2 action: switch.turn_on alias: Markise einfahren alias: Schlechte Wetterlage -> Markise einfahren - conditions: - condition: and conditions: - condition: numeric_state entity_id: sensor.wetterstation_lahr_temperatur above: 18 - condition: numeric_state entity_id: sensor.wetterstation_lahr_windgeschwindigkeit below: 22.1 - condition: or conditions: - condition: state entity_id: sensor.wetterstation_lahr_wetterlage state: sonnig - condition: state entity_id: sensor.wetterstation_lahr_wetterlage state: leicht bewölkt - condition: state entity_id: sensor.wetterstation_lahr_wetterlage state: bewölkt alias: Gute Wetterlage -> Markise ausfahren sequence: - entity_id: switch.markise action: switch.turn_on alias: Markise ausfahren mode: single
alias: Markise steuern
description: Steuert die Markise basierend auf den Wetterbedingungen
triggers:
  - entity_id: sensor.wetterstation_lahr_temperatur
    above: 18
    id: Temperatur hoch
    trigger: numeric_state
  - entity_id: sensor.wetterstation_lahr_temperatur
    below: 18.1
    id: Temperatur niedrig
    trigger: numeric_state
  - entity_id: sensor.wetterstation_lahr_wetterlage
    to: regen
    id: Regen
    trigger: state
  - entity_id: sensor.wetterstation_lahr_wetterlage
    to: sonnig
    id: Sonnig
    trigger: state
  - entity_id: sensor.wetterstation_lahr_wetterlage
    to: leicht bewölkt
    id: Leicht bewölkt
    trigger: state
  - entity_id: sensor.wetterstation_lahr_wetterlage
    to: bewölkt
    id: Bewölkt
    trigger: state
  - entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
    above: 22
    id: Windgeschwindigkeit hoch
    trigger: numeric_state
  - entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
    below: 22.1
    id: Windgeschwindigkeit niedrig
    trigger: numeric_state
conditions:
  - condition: time
    after: "10:00:00"
    before: "19:00:00"
actions:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - condition: state
                entity_id: sensor.wetterstation_lahr_wetterlage
                state: regen
              - condition: numeric_state
                entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
                above: 22
              - condition: numeric_state
                entity_id: sensor.wetterstation_lahr_temperatur
                below: 18.1
        sequence:
          - entity_id: switch.markise_markise2
            action: switch.turn_on
            alias: Markise einfahren
        alias: Schlechte Wetterlage -> Markise einfahren
      - conditions:
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.wetterstation_lahr_temperatur
                above: 18
              - condition: numeric_state
                entity_id: sensor.wetterstation_lahr_windgeschwindigkeit
                below: 22.1
              - condition: or
                conditions:
                  - condition: state
                    entity_id: sensor.wetterstation_lahr_wetterlage
                    state: sonnig
                  - condition: state
                    entity_id: sensor.wetterstation_lahr_wetterlage
                    state: leicht bewölkt
                  - condition: state
                    entity_id: sensor.wetterstation_lahr_wetterlage
                    state: bewölkt
            alias: Gute Wetterlage -> Markise ausfahren
        sequence:
          - entity_id: switch.markise
            action: switch.turn_on
            alias: Markise ausfahren
mode: single

Um die Markise um 19:00 Uhr generell wieder einzufahren habe ich eine separate Automatisierung erstellt. Es wäre auch möglich in jedem „Optionsblock“ die Bedingung zwischen 10:00 Uhr – 19:00 Uhr vorzuschalten, ich fand die Variante mit einer separaten Automatisierung in diesem Fall allerdings sinnvoller.

Automatisierung Markise um 19:00 Uhr einfahren

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alias: Markise einfahren
description: ""
triggers:
- trigger: time
at: "19:00:00"
conditions: []
actions:
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.markise_markise2
mode: single
alias: Markise einfahren description: "" triggers: - trigger: time at: "19:00:00" conditions: [] actions: - action: switch.turn_on metadata: {} data: {} target: entity_id: switch.markise_markise2 mode: single
alias: Markise einfahren
description: ""
triggers:
  - trigger: time
    at: "19:00:00"
conditions: []
actions:
  - action: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.markise_markise2
mode: single

Hinweis: Wie schon im Video erwähnt, ist der Code nicht ausgiebig getestet. Gerne dürft ihr mir in den Youtube Kommentaren erweiterte Varianten oder angepassten Lösungen vorstellen, ich würde diese dann auf meiner Blog Seite veröffentlichen.