Statistic sensor reset/clear at midnight for daily min & max temperature

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.

6 Likes