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:
- 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.
- 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. 
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:
- Zurücksetzen der maximalen Solarleistung: Der Wert des
input_number.max_solar_power
wird auf 0
gesetzt.
- 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. 
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. 
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.