Wetter-Daten & Vorhersagen ab Home Assistant 2024.3 verstehen

2 „Gefällt mir“

Ich bin dabei und möchte das gerne zu meinem Hass hinzufügen.
Leider scheitere ich an der templates.yaml irgendwie total… wenn ich den Code von dir in meine templates.yaml reinhaue bekomme ich folgenden Fehler.

Invalid config for ‘template’ at templates.yaml, line 9: ‘template’ is an invalid option for ‘template’, check: template

Hi, sinnvoll wäre es, wenn Du deinen Code hier postest.

1 „Gefällt mir“
template:
# Der neue Weg (forcasts mit s)
# Tägliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.nuernberg
        data:
            type: daily
        response_variable: tagesvorhersage
    sensor:
    # Hier ein Template-Sensor, der verschieden Daten der Täglichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage des nächsten Tages
        unique_id: forecast_next_1_day
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ tagesvorhersage['weather.nuernberg'].forecast[1].condition }}"
          cloud_coverage: "{{ tagesvorhersage['weather.nuernberg'].forecast[1].cloud_coverage }}"
          temperature: "{{ tagesvorhersage['weather.nuernberg'].forecast[1].temperature }}"
          datetime: "{{ tagesvorhersage['weather.nuernberg'].forecast[1].datetime }}"
      # Die gute, alte Wetterentität (Nur die Vorhersage)
      - name: Wettervorhersage OldSchool-Entität
        unique_id: weather_entity_forecast_oldschool
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          forecast: "{{ tagesvorhersage['weather.nuernberg'].forecast }}"
# Stündliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.nuernberg
        data:
            type: hourly
        response_variable: stundenvorhersage
    sensor:
    # Hier ein Template-Sensor, der verschieden Daten der stündlichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage der nächsten Stunde
        unique_id: forecast_next_1_hour
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ stundenvorhersage['weather.nuernberg'].forecast[1].condition }}"
          cloud_coverage: "{{ stundenvorhersage['weather.nuernberg'].forecast[1].cloud_coverage }}"
          temperature: "{{ stundenvorhersage['weather.nuernberg'].forecast[1].temperature }}"
    # Alternativ ein Template-Sensor, der die Temperatur der stündlichen Vorhersage Status hat (Vorteile bei Verlauf, Automationen, etc.)
      - name: Temperatur-Vorhersage der nächsten Stunde
        unique_id: temperature_forecast_next_hour
        state: "{{ stundenvorhersage['weather.nuernberg'].forecast[1].temperature }}"
        unit_of_measurement: °C
      - name: Bedingungs-Vorhersage der nächsten Stunde
        unique_id: condition_forecast_next_hour
        state: "{{ stundenvorhersage['weather.nuernberg'].forecast[1].condition }}"```

Also wenn du schon eine ausgelagerte yaml hast (templates.yaml) ist diese wahrscheinlich schon in der configuration.yaml referenziert

so in die Richtung

#Includes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include_dir_merge_list _my/sensors/
template: !include_dir_merge_list _my/templates/
binary_sensor: !include_dir_merge_list _my/binary_sensors/
media_player: !include_dir_merge_list _my/media_players/
weather: !include_dir_merge_list _my/weather/

dann braucht oben in Zeile 1 nicht

template:

stehen, die Zeile 1 löschen und alles ein Tab nach links rücken

jetzt hab ich die ftemplate: Zeile rausgelöscht, und alles einmal nach links gerückt
Nun schauts noch schlimmer aus.

bei mir schaut das so aus, mach mal vor dem Sensor oben drüber auch ein -

und -platform: ist zu tief, müsste auch eins zurück. Die blöden Tabs sind bei yaml immer ein Albtraum :crazy_face:

1 „Gefällt mir“

DANKE DIR! Es klappt… endlich :slight_smile:

Ich sehe leider meinen neuen Sensor (sensor.forecast_next_1_day) gar nicht in der Zustände Übersicht.
Konfiguration habe ich geprüft und Templates neu geladen (auch mal komplett HA neugestartet) aber der neue Sensor erscheint nicht.

Das weather Objekt habe ich auch nochmal mit dem Dienstaufruf geprüft. hat vom Namen gepasst und Werte werden vom Dienst ausgegeben.
Kann man sich für die templates irgendwelche Logs anschauen?

template:
# Der neue Weg (forcasts mit s)
# Tägliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        minutes: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.openweathermapdaily
        data:
            type: daily
        response_variable: tagesvorhersage
    sensor:
    # Hier ein Template-Sensor, der verschieden Daten der Täglichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage des nächsten Tages
        unique_id: forecast_next_1_day
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ tagesvorhersage['weather.openweathermapdaily'].forecast[1].condition }}"
          cloud_coverage: "{{ tagesvorhersage['weather.openweathermapdaily'].forecast[1].cloud_coverage }}"
          temperature: "{{ tagesvorhersage['weather.openweathermapdaily'].forecast[1].temperature }}"
          datetime: "{{ tagesvorhersage['weather.openweathermapdaily'].forecast[1].datetime }}"

Gibt es ein Log für Templates?

Kann man die Default Karte auch irgendwie anpassen und ein attribute hinzufügen?

ich bekomme nur “hourly” is undefined…

# wettervorhersage 
template:
  - trigger:
  - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
       data:
         type: hourly
       target:
         entity_id: weather.tomorrow_io_jbhome_daily
         response_variable: hourly
     
    sensor:
     - name: Temperature forecast next hour
       unique_id: temperature_forecast_next_hour
       state: "{{ hourly['weather.tomorrow_io_jbhome_daily'].forecast[0].temperature }}"
       unit_of_measurement: °C

Wie so oft sind mal wieder die Einrückungen falsch.
Verwende mal einen ordentlichen Code Editor, der auch die YAML Syntax prüfen tut.
Z.B. den Studio Code Server (HA Add-on)
Oder einfach mal die vielen hier vorhandnen Codes richtig kopieren.
Auch die Dokumentation hilft hier ungemein.

template:
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.tomorrow_io_jbhome_daily
        response_variable: hourly
    sensor:
      - name: Temperature forecast next hour
        unique_id: b4d3bb4d-760f-40f4-b510-d298d4d22626
        state: "{{ hourly['weather.tomorrow_io_jbhome_daily'].forecast[0].temperature }}"
        unit_of_measurement: "°C"

Gruß
Osorkon

1 „Gefällt mir“

Danke für den Tipp mit dem Studio Code Server. Werde ich sofort probieren. Code hatte ich von der Weather Seite übrigens kopiert …


Also ich habe deinen Version genommen (mit o.a unique ID), das in STUDIO CODE SERVER eingefügt (keine Fehler) und das dann in den Template editor.
Gleicher Fehler…?

Das Template

{{ hourly['weather.tomorrow_io_jbhome_daily'].forecast[0].temperature }}

kann im Template Editor nur einen Fehler aufwerfen.
Da die Variable hourly ja nicht definiert ist. :wink:

Dies füllst Du Du ja mit dem Aktion Teil des Template Sensor erst mit leben. Was im Template Editor ja nicht der Fall ist.

Gruß
Osorkon

Ah, habe mal den Error nachgelesen. Kein YAML im Template, richtig?
— in der config okay und nun finde ich den Sensor jetzt…

Hallo zusammen,
bei mir werden die Template-Sensoren ebenfalls nicht angelegt.
Das yaml scheint ok zu sein. Im Log steht auch nichts davon, dass irgendetwas nicht passt.
Könnt ihr euch das bitte mal anschauen?

Ich habe diesen Abschnitt testweise direkt in der configuration.yaml:

template:
# Der neue Weg (forcasts mit s)
# Tägliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.forecast_haus
        data:
            type: daily
        response_variable: tagesvorhersage
    sensor:
    # Hier ein Template-Sensor, der verschieden Daten der Täglichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage des nächsten Tages
        unique_id: forecast_next_1_day
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ tagesvorhersage['weather.forecast_haus'].forecast[1].condition }}"
          cloud_coverage: "{{ tagesvorhersage['weather.forecast_haus'].forecast[1].cloud_coverage }}"
          temperature: "{{ tagesvorhersage['weather.forecast_haus'].forecast[1].temperature }}"
          templow:  "{{ tagesvorhersage['weather.forecast_haus'].forecast[1].templow }}"
          datetime: "{{ tagesvorhersage['weather.forecast_haus'].forecast[1].datetime }}"
      # Die gute, alte Wetterentität (Nur die Vorhersage)
      - name: Wettervorhersage OldSchool-Entität
        unique_id: weather_entity_forecast_oldschool
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          forecast: "{{ tagesvorhersage['weather.forecast_haus'].forecast }}"
    # Hier ein Template-Sensor, der verschieden Daten der Täglichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage für heute
        unique_id: forecast_next_0_day
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ tagesvorhersage['weather.forecast_haus'].forecast[0].condition }}"
          cloud_coverage: "{{ tagesvorhersage['weather.forecast_haus'].forecast[0].cloud_coverage }}"
          temperature: "{{ tagesvorhersage['weather.forecast_haus'].forecast[0].temperature }}"
          templow:  "{{ tagesvorhersage['weather.forecast_haus'].forecast[0].templow }}"
          datetime: "{{ tagesvorhersage['weather.forecast_haus'].forecast[0].datetime }}"
# Stündliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.forecast_haus
        data:
            type: hourly
        response_variable: stundenvorhersage
    sensor:
    # Hier ein Template-Sensor, der verschieden Daten der stündlichen Vorhersage als Attribute gespeichert hat
      - name: Wetter-Vorhersage der nächsten Stunde
        unique_id: forecast_next_1_hour
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          condition: "{{ stundenvorhersage['weather.forecast_haus'].forecast[1].condition }}"
          cloud_coverage: "{{ stundenvorhersage['weather.forecast_haus'].forecast[1].cloud_coverage }}"
          temperature: "{{ stundenvorhersage['weather.forecast_haus'].forecast[1].temperature }}"
    # Alternativ ein Template-Sensor, der die Temperatur der stündlichen Vorhersage Status hat (Vorteile bei Verlauf, Automationen, etc.)
      - name: Temperatur-Vorhersage der nächsten Stunde
        unique_id: temperature_forecast_next_hour
        state: "{{ stundenvorhersage['weather.forecast_haus'].forecast[1].temperature }}"
        unit_of_measurement: °C
      - name: Bedingungs-Vorhersage der nächsten Stunde
        unique_id: condition_forecast_next_hour
        state: "{{ stundenvorhersage['weather.forecast_haus'].forecast[1].condition }}"

Guten Morgen,

ich habe mich auch am Wetter versucht und bin gescheitert.
Mittlerweile bin ich so weit, es gibt immer weitere Entitäten, die es nicht geben dürfte.

Also, ich habe folgendes verwendet:

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
# für die Formatierung von Karten eingefügt, das Tool dafür über HACS instaliiert
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

# Summierung der Leistung der 3 Phasen von Shelly EM3 Haus
sensor:
  - platform: template
    sensors:
      shelly_3em_total_power:
        friendly_name: "Gesamtleistung Haus"
        unit_of_measurement: "W"
        value_template: >
          {{ states('sensor.shelly_em3_channel_a_power') | float(0) + states('sensor.shelly_em3_channel_b_power') | float(0) + states('sensor.shelly_em3_channel_c_power') | float(0) }}
# Shelly Terrasse, Leistung wird negiert
      negative_power:
        friendly_name: "Solar Terrasse negiert"
        unit_of_measurement: 'W'
        value_template: "{{ states('sensor.solar_terrasse_switch_0_power') | float * -1 }}"
# Summierung aller Shellys die Solar sind, inklusive dem hiervor negierten
      total_with_negative:
        friendly_name: "Gesamtleistung mit Negativwert"
        unit_of_measurement: "W"
        value_template: >
          {{ (states('sensor.solar_dach_power') | float(0)) + (states('sensor.solar_fassade_power') | float(0) + states('sensor.negative_power') | float(0)) }}

 # hier werden die täglichen Wettervorhersagen in die Entität geschrieben
      - name: Wettervorhersage täglich
        unique_id: weather_entity_forecast_Wettervorhersage_täglich
        state: "{{ now().isoformat() }}"
        icon: mdi:hours-24
        attributes:
          forecast: "{{ tagesvorhersage['weather.forecast_home'].forecast }}"

template:
# Tägliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1 #/1 steht für stündlich
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.forecast_home
        data:
            type: daily
        response_variable: tagesvorhersage

Grundsätzlich hatte ich auch dann die Entität sensor.wettervorhersage_taglich, wo auch Daten vorhanden waren. Dann habe ich den im yaml-Editor unbenannt und danach wieder zurück benannt und jetzt habe ich noch sensor.wettervorhersage_taglich_2. Alleine das verstehe ich nicht, warum sind zwei vorhanden, wenn ich nur einen aktuell in yaml habe?

Als ich gestern noch glaubte, dass es funktionieren würde, wollte ich eine Testautomation anlegen. Idee war, wenn die Vorhersage der Temperatur für den nächsten Tag höher als ein bestimmter Wert ist, sollte eine Lampe eingeschaltet werden, das hatte ich so vor und im automations.yaml eingetragen:

- id: '1745044446365'
  alias: Test Wetter 16°
  description: ''
  triggers:
  - trigger: state
    entity_id:
    - sensor.wettervorhersage_taglich
    attribute: forecast
  conditions:
  - condition: template
    value_template: "{% set forecast = state_attr('sensor.wettervorhersage_taglich',
      'forecast') %}\n{% if forecast %}\n  {% set tomorrow = (now() + timedelta(days=1)).date()
      %}\n  {% set tomorrow_forecast = forecast | selectattr('datetime', 'equalto',
      tomorrow.isoformat()) | list %}\n  {% if tomorrow_forecast %}\n    {{ tomorrow_forecast[0].temperature
      > 16 }}\n  {% else %}\n    false\n  {% endif %}\n{% else %}\n  false\n{% endif
      %}\n"
  actions:
  - type: turn_on
    device_id: da74d93783411b8305e0bb09da602b45
    entity_id: e32cf05a2704b9fe3d2e2f1a11a37689
    domain: light
  mode: single

Die Automation hat nicht funktioniert und ich habe das Problem mit zwei Entitäten, die aktuell beide keine Wetterdaten mehr enthalten.

Wo kann ich ansetzen?
Ich habe auch alles an Code eingefügt, auch Sachen, die nichts damit zu tun haben und funktionieren. Damit man ein Gesamtbild hat.