I would like to create a sensor that contains the time at which the forecasted temperature will be highest today.
I have created a time-triggered template as follows:
template:
- trigger:
- platform: time
at: "0:01"
- trigger: homeassistant
event: start
- platform: event
event_type: event_template_reloaded
action:
action: weather.get_forecasts
target:
entity_id: weather.weer_weer
data:
type: hourly
response_variable: voorspelling
sensor:
- name: "Highest Forecasted Temperature Time"
unique_id: "highest_forecasted_temperature_time"
device_class: timestamp
state: >-
{% set forecast = voorspelling["weather.weer_weer"].forecast %}
{% set highest_temp = forecast | max(attribute='temperature') %}
{% set highest_temp_data = forecast | selectattr('temperature', 'equalto', highest_temp.temperature) | first %}
{{ strptime(highest_temp_data.datetime, '%Y-%m-%dT%H:%M:%S%z') }}
Unfortunately, this sensor sometimes contains a timestamp for tomorrow (because the sensor looks 24 hours in the future).
I tried to filter the forecasts using selectattr
, but I cannot figure out how to compare the string contained in .datetime
to an actual datetime object, so I can compare it with today’s date.
Then I tried to use a for
loop to filter the forecast’s datetimes as follows:
{% set voorspelling = {"weather.weer_weer":{"forecast":[{"condition":"cloudy","precipitation_probability":12.4,"datetime":"2024-11-13T09:00:00+00:00","wind_bearing":285.8,"cloud_coverage":100,"uv_index":0.4,"temperature":9.4,"wind_gust_speed":13,"wind_speed":7.6,"precipitation":0,"humidity":91},{"condition":"cloudy","precipitation_probability":7.7,"datetime":"2024-11-13T10:00:00+00:00","wind_bearing":288.2,"cloud_coverage":100,"uv_index":0.7,"temperature":9.8,"wind_gust_speed":15.5,"wind_speed":9,"precipitation":0,"humidity":90},{"condition":"cloudy","precipitation_probability":6.7,"datetime":"2024-11-13T11:00:00+00:00","wind_bearing":300.3,"cloud_coverage":100,"uv_index":0.9,"temperature":10.3,"wind_gust_speed":16.9,"wind_speed":9.4,"precipitation":0,"humidity":90},{"condition":"cloudy","precipitation_probability":4.1,"datetime":"2024-11-13T12:00:00+00:00","wind_bearing":314.6,"cloud_coverage":100,"uv_index":0.8,"temperature":11.3,"wind_gust_speed":20.9,"wind_speed":11.9,"precipitation":0,"humidity":88},{"condition":"cloudy","precipitation_probability":0.1,"datetime":"2024-11-13T13:00:00+00:00","wind_bearing":322.2,"cloud_coverage":100,"uv_index":0.6,"temperature":11.6,"wind_gust_speed":25.6,"wind_speed":14.4,"precipitation":0,"humidity":85},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-13T14:00:00+00:00","wind_bearing":316.5,"cloud_coverage":100,"uv_index":0.3,"temperature":11.6,"wind_gust_speed":25.2,"wind_speed":13,"precipitation":0,"humidity":86},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-13T15:00:00+00:00","wind_bearing":316.6,"cloud_coverage":100,"uv_index":0.1,"temperature":11.5,"wind_gust_speed":22.7,"wind_speed":13,"precipitation":0,"humidity":86},{"condition":"cloudy","precipitation_probability":4.8,"datetime":"2024-11-13T16:00:00+00:00","wind_bearing":313.7,"cloud_coverage":100,"uv_index":0,"temperature":11.2,"wind_gust_speed":22.7,"wind_speed":12.6,"precipitation":0,"humidity":87},{"condition":"cloudy","precipitation_probability":9.7,"datetime":"2024-11-13T17:00:00+00:00","wind_bearing":305.8,"cloud_coverage":99.8,"uv_index":0,"temperature":11,"wind_gust_speed":22,"wind_speed":12.2,"precipitation":0,"humidity":87},{"condition":"cloudy","precipitation_probability":22.7,"datetime":"2024-11-13T18:00:00+00:00","wind_bearing":294.3,"cloud_coverage":95.1,"uv_index":0,"temperature":10.7,"wind_gust_speed":20.9,"wind_speed":10.8,"precipitation":0,"humidity":89},{"condition":"cloudy","precipitation_probability":23.4,"datetime":"2024-11-13T19:00:00+00:00","wind_bearing":290.2,"cloud_coverage":99.9,"uv_index":0,"temperature":10.4,"wind_gust_speed":20.2,"wind_speed":11.9,"precipitation":0,"humidity":91},{"condition":"cloudy","precipitation_probability":22.1,"datetime":"2024-11-13T20:00:00+00:00","wind_bearing":283,"cloud_coverage":100,"uv_index":0,"temperature":10.5,"wind_gust_speed":20.5,"wind_speed":11.5,"precipitation":0,"humidity":94},{"condition":"cloudy","precipitation_probability":22.5,"datetime":"2024-11-13T21:00:00+00:00","wind_bearing":281.9,"cloud_coverage":100,"uv_index":0,"temperature":10.8,"wind_gust_speed":20.2,"wind_speed":11.9,"precipitation":0,"humidity":96},{"condition":"cloudy","precipitation_probability":12.2,"datetime":"2024-11-13T22:00:00+00:00","wind_bearing":302,"cloud_coverage":99.8,"uv_index":0,"temperature":11.2,"wind_gust_speed":20.5,"wind_speed":10.8,"precipitation":0,"humidity":98},{"condition":"cloudy","precipitation_probability":0.8,"datetime":"2024-11-13T23:00:00+00:00","wind_bearing":322.4,"cloud_coverage":99.5,"uv_index":0,"temperature":11.7,"wind_gust_speed":22.7,"wind_speed":13.3,"precipitation":0,"humidity":96},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-14T00:00:00+00:00","wind_bearing":336,"cloud_coverage":99.7,"uv_index":0,"temperature":11.4,"wind_gust_speed":24.5,"wind_speed":12.6,"precipitation":0,"humidity":94},{"condition":"cloudy","precipitation_probability":7.1,"datetime":"2024-11-14T01:00:00+00:00","wind_bearing":324.6,"cloud_coverage":100,"uv_index":0,"temperature":11.2,"wind_gust_speed":22.3,"wind_speed":11.5,"precipitation":0,"humidity":90},{"condition":"cloudy","precipitation_probability":10.9,"datetime":"2024-11-14T02:00:00+00:00","wind_bearing":322,"cloud_coverage":100,"uv_index":0,"temperature":11,"wind_gust_speed":23.8,"wind_speed":13.3,"precipitation":0,"humidity":90},{"condition":"cloudy","precipitation_probability":8.4,"datetime":"2024-11-14T03:00:00+00:00","wind_bearing":321,"cloud_coverage":94.2,"uv_index":0,"temperature":10.8,"wind_gust_speed":24.1,"wind_speed":13.3,"precipitation":0,"humidity":89},{"condition":"cloudy","precipitation_probability":2.9,"datetime":"2024-11-14T04:00:00+00:00","wind_bearing":325.7,"cloud_coverage":89.7,"uv_index":0,"temperature":10.3,"wind_gust_speed":22.7,"wind_speed":12.2,"precipitation":0,"humidity":86},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-14T05:00:00+00:00","wind_bearing":316.3,"cloud_coverage":98.4,"uv_index":0,"temperature":10.1,"wind_gust_speed":20.9,"wind_speed":10.8,"precipitation":0,"humidity":87},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-14T06:00:00+00:00","wind_bearing":307.5,"cloud_coverage":99.4,"uv_index":0,"temperature":10,"wind_gust_speed":19.8,"wind_speed":9,"precipitation":0,"humidity":84},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-14T07:00:00+00:00","wind_bearing":302.4,"cloud_coverage":99.8,"uv_index":0,"temperature":9.9,"wind_gust_speed":15.5,"wind_speed":6.5,"precipitation":0,"humidity":88},{"condition":"cloudy","precipitation_probability":0,"datetime":"2024-11-14T08:00:00+00:00","wind_bearing":322.3,"cloud_coverage":99.9,"uv_index":0.2,"temperature":10,"wind_gust_speed":19.4,"wind_speed":11.2,"precipitation":0,"humidity":86}]}} %}
{% set forecast = voorspelling["weather.weer_weer"].forecast %}
{% set forecasts = [] %}
{% for fitem in forecast %}
{% if as_datetime(fitem.datetime) < today_at("23:59") %}
{% set forecasts = forecasts + [fitem] %}
{% endif %}
{% endfor %}
{{ forecasts }}
However, this always returns an empty list.
I don’t longer know what to do, could you please point me towards my mistake?