The goal is to see if a garage door switch has been on for more than N minutes and then if it has, send an email every M minutes after (for example, if the garage door has been opened for more than an 60 minutes, send an email every 15 minutes until someone closes it).
I noticed there is a way in automation to send something after N minutes (using trigger with after) but that appears to happen only once. What seemed like it might work was to have an automation run every 15 minutes that checked if the garage door state has been opened for more than 60 minutes (based on last_changed) and send an email if it has.
I tried to do this via templates, but it appears that while the automation is triggered every 15 minutes, the sensor template is not re-evaluated to come up with a new true/false value. The system always shows “false” (because when the sensor initially triggers, the last_changed value == now() so always < 3600). If I wait a while and manually try the same “{% if” statement in the template debugger, I can get “true” after the desired time.
Any idea why the template is not re-evaluated during the automation? Suggestions on how to achieve the general goal of “send email every 15 minutes after event seen 60 minutes ago”?
– charles
sensor:
- platform: template
sensors:
garage_door_still_open:
friendly_name: 'Garage door still open'
value_template: >-
{%- if is_state("binary_sensor.garage_door", "on") and ((as_timestamp(now()) - as_timestamp(states.binary_sensor.garage_door.last_changed)) > 3600) -%}
true
{%- else -%}
false
{%- endif -%}
automation:
- alias: "Email garage door open"
trigger:
platform: time
minutes: '/15'
seconds: 23
condition:
- condition: state
entity_id: sensor.garage_door_still_open
state: "true"
action:
service: notify.smtpNotifier
data:
message: "home-assistant says garage door still open"
title: "home-assistant: garage door"