I have invested quite some time in this and thought I want to share the results:
To create two sensors that saves the max/min with timestamp as an attribute and resets periodically:
template:
- trigger:
- platform: state
not_to:
- unknown
- unavailable
entity_id: sensor.my_temp_sensor
- platform: template
value_template: "{{ now().hour == 0 }}" #resets each day
action:
- variables:
source: "{{ states('sensor.my_temp_sensor') | float }}"
now: "{{ now() }}"
sensor:
- name: Todays Maximum Temp
unique_id: today_temp_max_d
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
icon: mdi:thermometer-chevron-up
state: |
{% set current = (this.state or trigger.to_state.state) | float(source) %}
{{ source if trigger.platform == 'template' else [source, current] | max }}
attributes:
datetime: |
{% set current = (this.state or trigger.to_state.state) | float(source) %}
{{ now if (trigger.platform == 'template' or source > current) else this.attributes.datetime|default(now) }}
- name: Todays Minimum Temp
unique_id: today_temp_min_d
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
icon: mdi:thermometer-chevron-down
state: |
{% set current = (this.state or trigger.to_state.state) | float(source) %}
{{ source if trigger.platform == 'template' else [source, current] | min }}
attributes:
datetime: |
{% set current = (this.state or trigger.to_state.state) | float(source) %}
{{ now if (trigger.platform == 'template' or source < current) else this.attributes.datetime|default(now) }}
Change this for other intervals:
value_template: "{{ now().hour == 0 }}" #resets every day
value_template: "{{ now().weekday() == 0 }}" #resets every week
value_template: "{{ now().day == 1 }}" #resets every month
value_template: "{{ now().month == 1 }}" #resets each year
Thanks to @Didgeridrew for the idea.