Fehler in der Template.yaml

Hallo

Ich habe folgenden Fehler in der Log:

Logger: homeassistant.config
Quelle: config.py:590
Erstmals aufgetreten: 07:11:02 (3 Vorkommnisse)
Zuletzt protokolliert: 07:11:08

Invalid config for ‘template’: ‘action’ is an invalid option for ‘template’, check: action

Meine template.yaml sieht so aus:

trigger:
  - platform: time_pattern
    hours: /1
  - platform: homeassistant
    event: start
    action:
      - service: weather.get_forecasts
        target:
          entity_id: weather.openweathermap
        data:
          type: hourly
        response_variable: tagesvorhersage

Den Code hab ich aus dem Forecasts Video von Simon. Warum hab ich da einen Error?

Update:
Hab gerade gesehen das alle Sensoren bei mir auf unavailable stehen.
Woran könnte das liegen? Bitte um Hilfe

:crayon:by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

Der Eintrag ‘Action’ und alles danach ist zu weit nach rechts gerückt.
Schau dir das noch mal auf der Seite an.

Es funktioniert alles bis auf die Trigger Abteilung.
Weißt du woran das liegen könnte? Sensoren stehen alle auf unavailable

######################.  Trigger. #############################
- trigger:
    - platform: event
      event_type: set_entity_value
      event_data:
      entity_id: sensor.pending_notification_sensor

    - platform: state
      entity_id: sensor.apsystems_balkon_today_production
      not_to:
        - "unknown"
        - "unavailable"
        - "error"

    - platform: state
      entity_id: sensor.apsystems_balkon_lifetime_production
      not_to:
        - "unknown"
        - "unavailable"
        - "error"

    - platform: time_pattern
      hours: /1
    - platform: homeassistant
      event: start
  action:
    - service: weather.get_forecasts
      data:
        type: daily
      target:
        entity_id: weather.openweathermap
      response_variable: tagesvorhersage

Fehler im Log:

Invalid config for 'template': 'entity_id' is an invalid option for 'template', check: entity_id Invalid config for 'template': expected dict for dictionary value 'event_data', got None

* Template variable error: 'trigger' is undefined when rendering '{{ trigger.event.data.state }}'
* Template variable error: 'trigger' is undefined when rendering '{{ trigger.event.data.attr.list }}'

Logger: homeassistant.helpers.event
Quelle: helpers/template.py:606
Erstmals aufgetreten: 08:31:13 (37 Vorkommnisse)
Zuletzt protokolliert: 08:31:13

    Error while processing template: Template<template=({{ tagesvorhersage['weather.openweathermap'].forecast[1].datetime }}) renders=2>
    Error while processing template: Template<template=({{ tagesvorhersage['weather.openweathermap'].forecast[0].condition }}) renders=2>
    Error while processing template: Template<template=({{ tagesvorhersage['weather.openweathermap'].forecast[0].cloud_coverage }}) renders=2>
    Error while processing template: Template<template=({{ tagesvorhersage['weather.openweathermap'].forecast[0].temperature }}) renders=2>
    Error while processing template: Template<template=({{ tagesvorhersage['weather.openweathermap'].forecast[0].datetime }}) renders=2>

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 604, in async_render
    render_result = _render_with_context(self.template, compiled, **kwargs)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 2639, in _render_with_context
    return template.render(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "<template>", line 1, in top-level template code
  File "/usr/local/lib/python3.12/site-packages/jinja2/sandbox.py", line 304, in getitem
    return obj[argument]
           ~~~^^^^^^^^^^
jinja2.exceptions.UndefinedError: None has no element 0

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 716, in async_render_to_info
    render_info._result = self.async_render(  # noqa: SLF001
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 606, in async_render
    raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: UndefinedError: None has no element 0

:crayon:by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)

Weil einiges falsch eingerückt ist. Da du eine ‘template.yaml’ hast, muß vor ‘Trigger’ schon mal ein ‘-’.

# 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_home_avieny
      data:
          type: daily
      response_variable: tagesvorhersage
  sensor:
1 „Gefällt mir“

Muss das Thema doch nochmal aufgreifen, wollte keinen neuen Tread aufmachen. Ich habe auch eine externe template.yaml Datei. Wenn ich in der Datei den Code von Simon einfüge, dann bekomme ich immer folgende Meldung:
Logger: homeassistant.config
Quelle: config.py:590
Erstmals aufgetreten: 12:25:34 (1 Vorkommnisse)
Zuletzt protokolliert: 12:25:34

Invalid config for ‘template’ at template/template.yaml, line 1: ‘template’ is an invalid option for ‘template’, check: template
Ich hab schon alles mögliche probiert und nachgelesen, aber ich komme zu keinem Ergebnis. Egal ob ich die originale Datei von Simon nehme oder die nochmal ohne template: dann alles neu einrücke es bleibt immer bei dem Fehler.

Hört sich für mich o an, als wäre es das gleiche Problem wie oben, dass etwas nicht korrekt eingerückt ist oder fehlt.
Zeig mal den Inhalt deiner template.yaml mit </> eingefügt. Dann kann man vielleicht helfen.

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_xxxxxx
        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_xxxxxx'].forecast[1].condition }}"
          cloud_coverage: "{{ tagesvorhersage['weather.forecast_xxxxxx'].forecast[1].cloud_coverage }}"
          temperature: "{{ tagesvorhersage['weather.forecast_xxxxxx'].forecast[1].temperature }}"
          datetime: "{{ tagesvorhersage['weather.forecast_xxxxxx'].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_xxxxxx'].forecast }}"
# Stündliche Wettervorhersagen
  - trigger:
      - platform: time_pattern
        hours: /1
    action:
      - service: weather.get_forecasts
        target:
          entity_id:
            - weather.forecast_xxxxxx
        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_xxxxxx'].forecast[1].condition }}"
          cloud_coverage: "{{ stundenvorhersage['weather.forecast_xxxxxx'].forecast[1].cloud_coverage }}"
          temperature: "{{ stundenvorhersage['weather.forecast_xxxxxx'].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_xxxxxx'].forecast[1].temperature }}"
        unit_of_measurement: °C
      - name: Bedingungs-Vorhersage der nächsten Stunde
        unique_id: condition_forecast_next_hour
        state: "{{ stundenvorhersage['weather.forecast_xxxxxx'].forecast[1].condition }}"

ist der gleiche Code wie von Simon42 nur das ich die Datenstellen mit x ersetzt hab. Das ist das was ich dabei nicht verstehe, weil es ja wohl bei anderen funktioniert.

Wenn der Code aus der configuration.yaml stammt, oder Du mit packages arbeitest, dann pass alles.

Wenn Du aber die Konfiguration aufgeteilt hast, in dem Fall die Template Integration in die Template.yaml ausgelagert hast und es sich um ein Auszug aus der Template.yaml handelt, ist die erste Zeile

template:

Fehl am Platz.
Diese Zeile musst Du löschen und alles andere 2 Leerstellen nach links rücken.

Gruß
Osorkon

Danke für die Hinweise, hab ich so mal gemacht:

# Der neue Weg (forcasts mit s)
# Tägliche Wettervorhersagen
- trigger:
    - platform: time_pattern
      hours: /1
  action:
    - service: weather.get_forecasts
      target:
        entity_id:
          - weather.xxxxxx
      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.xxxxxx'].forecast[1].condition }}"
        cloud_coverage: "{{ tagesvorhersage['weather.xxxxxx'].forecast[1].cloud_coverage }}"
        temperature: "{{ tagesvorhersage['weather.xxxxxx'].forecast[1].temperature }}"
        datetime: "{{ tagesvorhersage['weather.xxxxxx'].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.xxxxxx'].forecast }}"
# Stündliche Wettervorhersagen
- trigger:
    - platform: time_pattern
      hours: /1
  action:
    - service: weather.get_forecasts
      target:
        entity_id:
          - weather.xxxxxx
      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.xxxxxx'].forecast[1].condition }}"
        cloud_coverage: "{{ stundenvorhersage['weather.xxxxxx'].forecast[1].cloud_coverage }}"
        temperature: "{{ stundenvorhersage['weather.xxxxxx'].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.xxxxxx'].forecast[1].temperature }}"
      unit_of_measurement: °C
    - name: Bedingungs-Vorhersage der nächsten Stunde
      unique_id: condition_forecast_next_hour
      state: "{{ stundenvorhersage['weather.xxxxxx'].forecast[1].condition }}"
        
        
        

Das ganze ist in der template.yaml drin aber der Fehler der jetzt kommt ist der hier:
Logger: homeassistant.config
Quelle: config.py:590
Erstmals aufgetreten: 14:22:03 (1 Vorkommnisse)
Zuletzt protokolliert: 14:22:03

Invalid config for ‘template’ at template/wetter.yaml, line 3: expected a dictionary ‘’, got [{‘trigger’: [{‘platform’: ‘time_pattern’, ‘hours’: ‘/1’}], ‘action’: [{‘service’: ‘weather.get_forecasts’, ‘target’: {‘entity_id’: [‘weather.xxxxx’]}, ‘data’: {‘type’: ‘daily’}, ‘response_variable’: ‘tagesvorhersage’}], ‘sensor’: [{‘name’: ‘Wetter-Vorhersage des nächsten Tages’, ‘unique_id’: ‘forecast_next_1_day’, ‘state’: ‘{{ now().isoformat() }}’, ‘icon’: ‘mdi:hours-24’, ‘attributes’: {‘condition’: "{{ tagesvorhersage[‘weather.xxxxx’].forecast[1]…
Das interessante ist das im Fileeditor kein Fehler mehr angezeigt wird und nur wenn ich in den Entwicklerwerkzeugen das prüfe, dann kommt der Fehler.

Die Fehlermeldung sagt aber was anders?! wetter.yaml

Wie hast Du den jetzt deine Konfiguration organisiert?!

Gruß
Osorkon

Meine Config, ist die von meinem Testsystem damit ich mir ständig irgendetwas zerschiesse, ist folgende:


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

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

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


# Eintrag in der configuration.yaml

homeassistant:
  allowlist_external_dirs:
    - /config/sensor
    - /config/template

sensor: !include_dir_list sensor
template: !include_dir_list template

so wie ich das nachgelesen hab sollte man die einzelnen template dateienwohl extra erstellen können, oder hab ich da was falsch verstanden?

Du hast so oft Probleme damit. Warum lagerst du nicht alles in den packages Ordner aus. Dafür in die configuration.yaml unter homeassistant folgendes ergänzen:

homeassistant:
  allowlist_external_dirs:
    - /config/sensor
    - /config/template
  packages: !include_dir_named packages

Dann einen packages Ordner erstellen und dort die yaml Dateien rein. Dort darf dann auch wieder template stehen:

Dann hast du zukünftig keine solchen Probleme mehr. Musst halt jetzt einmal deine yaml Dateien anpassen.

Danke für den Tip werd ich ausprobieren.

Packages ist einfach eine feine Sache.
Würde nie wieder die yaml nach Integrationen aufteilen, wie ich zu den Anfangszeiten getan habe.

Vorteil wie ich finde. Man kann den Code 1:1 aus der configuration.yaml übernehmen. Wie auch 1:1 die code Bsp. aus der offiziellen Dokumentation übernehmen.

Nicht dürfen, sondern müssen! :wink:
Aber halt nur einmal!

Gruß
Osorkon

@Osorkon gerade hast du es noch korrigiert … wollt schon schreiben, dass es nur 1x pro Datei darf.

Hab ich grad in meinem Testsystem ausprobiert und da funktioniert das gut. Bin halt immer noch am experimentieren, weil immer irgendwo was steht was man ausprobieren möchte oder will und dann kommen die Probleme. Danke für die Tips, werd wieder noch ein wenig versuchen mit allem klar zu kommen.

moin zusammen, auch ich treibe mich grad mit der template.yaml rum und erhalte einen Fehler, aus dem ich nicht schlau werde!
Fehler wäre folgender:

Logger: homeassistant.config
Quelle: config.py:592
Erstmals aufgetreten: 09:09:20 (3 Vorkommnisse)
Zuletzt protokolliert: 09:12:32

Invalid config for 'template' at template.yaml, line 32: 'platform' is an invalid option for 'template', check: sensor->1->platform Invalid config for 'template' at template.yaml, line 32: required key 'state' not provided Invalid config for 'template' at template.yaml, line 34: 'entity_ids' is an invalid option for 'template', check: sensor->1->entity_ids Invalid config for 'template' at template.yaml, line 37: 'type' is an invalid option for 'template', check: sensor->1->type Invalid config for 'template' at template.yaml, line 38: 'round_digits' is an invalid option for 'template', check: sensor->1->round_digits
Invalid config for 'template' at template.yaml, line 1: 'template' is an invalid option for 'template', check: template
Invalid config for 'template' at template.yaml, line 31: 'platform' is an invalid option for 'template', check: sensor->1->platform Invalid config for 'template' at template.yaml, line 31: required key 'state' not provided Invalid config for 'template' at template.yaml, line 33: 'entity_ids' is an invalid option for 'template', check: sensor->1->entity_ids Invalid config for 'template' at template.yaml, line 36: 'type' is an invalid option for 'template', check: sensor->1->type Invalid config for 'template' at template.yaml, line 37: 'round_digits' is an invalid option for 'template', check: sensor->1->round_digits

Den erhalte ich, wenn ich den letzten Sensor in die template.yaml eintrage (letzen 7 Zeilen).

- trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
      - platform: event
        event_type: event_template_reloaded
      
  action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.lehrte_sievershausen
        response_variable: hourly
  sensor:
      - name: Weather Hourly lehrte
        state: "{{ states('weather.lehrte_sievershausen') }}"
        attributes:
          temperature: "{{ state_attr('weather.lehrte_sievershausen', 'temperature') }}"
          temperature_unit: "{{ state_attr('weather.lehrte_sievershausen', 'temperature_unit') }}"
          humidity: "{{ state_attr('weather.lehrte_sievershausen', 'humidity') }}"
          pressure: "{{ state_attr('weather.lehrte_sievershausen', 'pressure') }}"
          pressure_unit: "{{ state_attr('weather.lehrte_sievershausen', 'pressure_unit') }}"
          wind_bearing: "{{ state_attr('weather.lehrte_sievershausen', 'wind_bearing') }}"
          wind_speed: "{{ state_attr('weather.lehrte_sievershausen', 'wind_speed') }}"
          wind_speed_unit: "{{ state_attr('weather.lehrte_sievershausen', 'wind_speed_unit') }}"
          #condition1: "{{ state_attr['weather.lehrte_sievershausen'].forecast[7].condition}}"
          forecast (7 Std): "{{ hourly['weather.lehrte_sievershausen'].forecast[0].condition}}"
          forecast: "{{ hourly['weather.lehrte_sievershausen'].forecast}}"    
      - platform: min_max
        name: combine_temp
        entity_ids:
          - sensor.e3_vitodens_300_0821_aussentemperatur
          - sensor.t_h_sensor_aussen_temperatur   
        type: mean
        round_digits: 1

Der Fehler tritt wie gesagt nur auf, wenn ich den Helper eintrage, ansonsten funktioniert das alles.
Ich hoffe ihr habt einen Hinweis für mich :slight_smile:

Imho gehört das nicht in die template.yaml, sondern in die sensor.yaml (bzw. in die configuration.yaml unter “sensor”).

stimmt… werd ich gleich mal testen!
Aber warum gibt es denn dann bei dem anderen Sensor keine Probleme?

Edit: den 2. Sensor in die sensor.yaml kopiert und es läuft. Sobald ich jetzt den oberen Sensor auch in die sensor.yaml kopiere erhalte ich wieder einen Fehler, das “platform” nicht unterstützt wird!

Ist immer schlecht zu erklären, ich versuch’s trotzdem mal:

Ein Template Sensor ermöglicht das Erstellen von Entitäten, die ihre Werte aus anderen Daten ableiten, In deinem Bsp. den Zustand des weather.lehrte_sievershausen

Das Sensor Template generiert sozusagen einen neuen Sensor, in deinem Bsp. den min_max Sensor.