Template Sensor - trigger in einer gesplitteten Configuration

ein frohes neues Jahr,
ich habe einige Sensoren im Ordner template in eigenen Dateien, was auch gut funktioniert.
Nun möchte ich morgens um 5 Uhr die maximale Temperatur (Vortag) in einen Sensor „schreiben“. Bei meiner Suche bin ich auf folgendes gestoßen:

  • trigger:
    • platform: time
      at: ‚05:00:00‘
    • platform: state
      entity_id: sensor.wetterstation_temperatur
      sensor:
    • name: ‚Temperatur Max Daily °C‘
      unique_id: ‚wetterstation_temperatur_daily_max‘
      unit_of_measurement: ‚°C‘
      device_class: temperature
      state: >
      {% set t_new = states(‚sensor.wetterstation_temperatur‘) | float(-50) %}
      {{ [t_new, this.state | float(-50)] | max if trigger.platform != ‚time‘ else t_new }}

Leider funktioniert es mit dem trigger nicht. Was mache ich falsch?
Mir ist klar, dass ich mit einem Helfer & Automation oder node red dieses auch erreiche, aber ich möchte gerne diesen Weg gehen.

Hi, poste bitte immer den formatierten Code. So kann man das alles besser nachvollziehen, wo eventuell was schief läuft.

Was mir als erstes auffällt sind die Anführungsstriche im gesamten Code. Versuche es mal so mit dem Trigger und ändere die Anführungsstriche überall. Wenn du mit mehreren Triggern arbeitest, bieten sich id’s an, um auf einen bestimmten Trigger zu reagieren.

triggers:
    trigger: time
  - at: "05:00:00"

Kannst du gern einmal testen. Mache ich nachher auch, wenn ich zu Hause bin. Vielleicht nutze ich dass dann auch gleich fest. Bisher ermittelt noch meine CCU3 die max/min Werte, weil das schon vor Jahren mal eingerichtet wurde.

description: "Tägliches Temperatur Maximum erfassen"
mode: single
alias: Tägliches Temperatur Maximum erfassen
trigger:
  - platform: time
    at: "05:00:00"
    id: time
  - platform: state
    entity_id: sensor.wetterstation_temperatur
    id: state
action:
  - choose:
      - conditions:
          - condition: trigger
            id: time
        sequence:
          - service: input_number.set_value
            target:
              entity_id: input_number.temperatur_max_daily
            data:
              value: "{{ states('sensor.wetterstation_temperatur') | float(-50) }}"
      - conditions:
          - condition: trigger
            id: state
        sequence:
          - service: input_number.set_value
            target:
              entity_id: input_number.temperatur_max_daily
            data:
              value: >
                {% set aktuelle_temperatur = states('sensor.wetterstation_temperatur') | float(-50) %}
                {% set bisheriges_maximum = states('input_number.temperatur_max_daily') | float(-50) %}
                {{ [aktuelle_temperatur, bisheriges_maximum] | max }}
    default: []
   

Ich denke, das Problem in deinem Code liegt in zwei Punkten:

  1. Fehlerhafte Trigger-Syntax:
  • Du mischst platform: time und platform: state innerhalb desselben Trigger-Blocks, was so nicht funktioniert. Jeder Trigger sollte eine eigene Plattform haben, und du kannst nicht mehrere Trigger der gleichen Art im gleichen Block kombinieren.
  1. Template-Sensor und Automatisierung in einem Block:
  • Ein Template-Sensor definiert den Zustand eines Sensors auf Basis von Berechnungen und Vorlagen. Eine Automatisierung hingegen reagiert auf bestimmte Ereignisse, wie z. B. eine Zeit oder eine Zustandsänderung. Diese beiden müssen getrennt voneinander definiert werden, also nicht im selben Block.

Ich habe etwas Ähnliches umgesetzt, vielleicht hilft es ja ein wenig weiter. :blush:

Template-Sensoren und Automatisierungen für die maximale Solarleistung und deren Zeitstempel

Beispiel, wir ich in Home Assistant eine Automatisierung und einen Template-Sensor erstellt, um die maximale Solarleistung des Tages zu speichern und die Zeit des letzten Spitzenwerts anzuzeigen.

1. Template-Sensor für die tägliche maximale Solarleistung und deren Zeitstempel

Zuerst erstelle ich einen Template-Sensor, der die maximale Solarleistung speichert und zusätzlich die Uhrzeit des letzten maximalen Solarwerts in einem Attribut speichert.

Sensor-Definition in configuration.yaml

template:
  - sensor:
      - name: "Tägliche maximale Solarleistung"
        unique_id: "daily_max_solar_power"
        unit_of_measurement: "W"
        device_class: power
        state_class: measurement
        icon: mdi:solar-power
        state: >
          {{ states('input_number.max_solar_power') | float(0) }}
        attributes:
          time: >
            {{ states('input_text.max_solar_power_time') }}

  • state:: Der Sensor gibt den Wert der maximalen Solarleistung an. Dieser Wert wird aus dem input_number.max_solar_power abgerufen und auf 0 gesetzt, falls der Wert unknown ist.
  • attributes:: Das Attribut time speichert die Uhrzeit des letzten maximalen Solarwerts. Diese Uhrzeit wird in der Automatisierung gespeichert, die wir später erstellen.

2. Automatisierung, um die maximale Solarleistung und die Zeit des letzten Spitzenwerts zu setzen

Ich erstelle eine Automatisierung, die die maximale Solarleistung zurücksetzt und die aktuelle Uhrzeit speichert, wenn der Wert des Spitzenwerts überschritten wird oder täglich um Mitternacht (je nach deiner Anforderungen).

Automatisierung in automations.yaml

alias: "Max Solarleistung zurücksetzen und Zeit speichern"
trigger:
  - platform: time
    at: "00:00:00"  # Die Automatisierung wird täglich um Mitternacht ausgelöst

action:
  - service: input_number.set_value
    data:
      entity_id: input_number.max_solar_power
      value: 0  # Setzt die maximale Solarleistung auf 0 zurück

  - service: input_text.set_value
    data:
      entity_id: input_text.max_solar_power_time
      value: "{{ now().strftime('%H:%M:%S') }}"  # Speichert die aktuelle Uhrzeit im Attribut "time"

  • Trigger: Diese Automatisierung wird täglich um Mitternacht ausgelöst.
  • Aktionen:
    1. Zurücksetzen der maximalen Solarleistung: Der Wert des input_number.max_solar_power wird auf 0 gesetzt.
    2. Speichern der aktuellen Uhrzeit: Die aktuelle Uhrzeit wird in input_text.max_solar_power_time gespeichert. Dabei wird das Format HH:MM:SS verwendet.

I
Gruß Bernd

vielen Dank für eure Antworten.
Den Code hatte ich in der homeassistant community gefunden.https://community.home-assistant.io/t/get-min-and-max-from-a-thermometer-sensor/650759/5
Laut dem Beitrag wir der Code in der configuration.yaml eingesetzt, ich nutze gesplittete Configuration siehe Bild

Diesen habe ich wie folgt angepasst:

- trigger:
  - platform: time
    at: '05:00:00'
  - platform: state
    entity_id: sensor.wetterstation_temperatur
  sensor:
    - name: Temperatur Max Daily °C
      unique_id: wetterstation_temperatur_daily_max
      unit_of_measurement: °C
      device_class: temperature
      state: >
          {% set t_new = states('sensor.wetterstation_temperatur') | float(-50) %}
          {{ [t_new, this.state | float(-50)] | max if trigger.platform != 'time' else t_new }}

Mal schauen wie ich weiter mache.

Grüße Ralf

Ich habe das jetzt nochmal ausprobiert und getestet. So habe ich es umgesetzt. Zuerst einen Sensor angelegt in der config.yaml angelegt.

input_number:
  temperatur_max_daily:
    name: Temperatur Max Daily
    unit_of_measurement: "°C"
    min: -20
    max: 50
    step: 0.1
    initial: 20.0   

Dazu die Automatisierung, die über den Tag hinweg immer wieder die max-Temp ermittelt. Um 05.00 Uhr morgens wird der Wert resetet mit dem aktuellen Temperaturwert zu dieser Uhrzeit. Läuft soweit wie gewünscht. :slight_smile:

alias: Tägliches Temperatur Maximum erfassen
description: Tägliches Temperatur Maximum erfassen
triggers:
  - at: "05:00:00"
    id: time
    trigger: time
  - entity_id: sensor.aussentemperatur_temperatur
    id: state
    trigger: state
actions:
  - choose:
      - conditions:
          - condition: trigger
            id: time
        sequence:
          - target:
              entity_id: input_number.temperatur_max_daily
            data:
              value: "{{ states('sensor.aussentemperatur_temperatur') | float(-50) }}"
            action: input_number.set_value
      - conditions:
          - condition: trigger
            id: state
        sequence:
          - target:
              entity_id: input_number.temperatur_max_daily
            data:
              value: >
                {% set aktuelle_temperatur =
                states('sensor.aussentemperatur_temperatur') | float(-50) %} {%
                set bisheriges_maximum =
                states('input_number.temperatur_max_daily') | float(-50) %} {{
                [aktuelle_temperatur, bisheriges_maximum] | max }}
            action: input_number.set_value
mode: single

Hi Jan,
momentan habe ich es so umgesetzt.

trigger:
  - trigger: time
    at: "05:00:00"
    id: 'time'
  - trigger: state
    entity_id: "sensor.wetterstation_temperatur"
    to:
    id: 'status'

sensor:
  - name: Temperatur Max Daily °C
    unique_id: wetterstation_temperatur_daily_max
    unit_of_measurement: °C
    device_class: temperature
    state: >
        {% set tmax_new = states('sensor.wetterstation_temperatur') | float(-50) %}
        {{ [tmax_new, this.state | float(-50)] | max if trigger.id != 'time' else tmax_new }}

  - name: 'Temperatur Min Daily °C'
    unique_id: 'wetterstation_temperatur_daily_min'
    unit_of_measurement: '°C'
    device_class: temperature
    state: >
      {% set tmin_new = states('sensor.wetterstation_temperatur') | float(50) %}
      {{ [tmin_new, this.state | float(50)] | min if trigger.id != 'time' else tmin_new  }}

Es läuft anscheinend. :+1:
Wobei ich mir nicht sicher bin, ob ich den trigger state benötige.
Bin jetzt noch dabei zwei Sensoren zu erstellen, die den Wert von Gestern - vor 05:00 Uhr haben.

Gruß Ralf

1 „Gefällt mir“

Ja sollte so auch funktionieren. Die id für „status“ brauchst du dann nicht mehr, wird ja unten in den formeln nicht mehr verwendet.