I have updated the above sample code because there was an indentation mistake in the automation.
Hey!
I updated it but it behaves odd, if I press the automation and trigger it from hass manually then it triggers, but when setting a time and all that to let it activate like that then it doesn’t work I tried copying everything you did but ever since I updated hass to latest version it’s a no go, don’t know what else to do
Thanks for being so quick and awesome to respond btw!
I have similar problem
weird. i changed my code back to earlier version and it also failed. Maybe it is a bug in version 0.29.6. anyone has any success?
After further testing, I found out this automation works in version 0.28.2. After I upgraded back to 0.29.6 and change the now.time().strftime to now().strftime, it stop working…
- alias: 'Wake Me Up'
trigger:
platform: template
value_template: '{{ now().strftime("%-H") == states.sensor.alarm_hour.state and now().strftime("%-M") == states.sensor.alarm_minutes.state }}'
condition:
condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmweekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: state
entity_id: input_boolean.alarmweekday
state: 'off'
action:
service: notify.telegram
data_template:
message: 'Good morning. Time to Wake Up!'
title: ""
template triggers only check for their triggers when one of the entity’s specified in value_template it’s state changes if their state does not change the template trigger value is not checked and no trigger will trigger.
a workaround might be to create a time sensor with hours & minutes and add this sensors in value_template somehow without it having an effect like so perhpas (not tested)
sensor:
- platform: template
sensors:
time:
value_template: '{{ now().strftime("%H:%M")}}'
and change the value template to include the sensor.time like so for example
value_template: '{{ (now().strftime("%-H") == states.sensor.alarm_hour.state and now().strftime("%-M") == states.sensor.alarm_minutes.state) and states.sensor.time == states.sensor.time }}'
the time sensors state will change every minute so the trigger is being checked at least every minute.
A better way is to use the a time trigger that checks every minute with a template condition
something like (not tested)
automation:
- alias: 'Wake Me Up'
trigger:
platform: time
minutes: '/1'
seconds: 0
condition:
condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmweekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: state
entity_id: input_boolean.alarmweekday
state: 'off'
- condition: template
value_template: '{{ now().strftime("%-H") == states.sensor.alarm_hour.state and now().strftime("%-M") == states.sensor.alarm_minutes.state }}'
action:
service: notify.telegram
data_template:
message: 'Good morning. Time to Wake Up!'
title: ""
thanks a lot
Hey there, any idea what I have to change to get it working again:
input_select:
wecker:
name: Wecker
options:
- '05:15'
- '05:45'
- '06:00'
- '06:30'
automation:
- alias: 'Sunrise'
trigger:
platform: template
value_template: '{{ now().strftime("%-H:%-M") == states.input_select.wecker.state }}'
action:
- [...]
Any hints?
I did the following to get it to work (mines in win 10 tho’ so don’t use the %R basically just move the template into a condition and the trigger runs every min)
- alias: Turn off Alarm
trigger:- platform: time
minutes: ‘/1’
seconds: 0
condition:
- platform: time
- condition: template
value_template: ‘{{ now().time().strftime("%R") == states.sensor.alarm_time_fin.state }}’
action: - service: switch.turn_off
data:
entity_id:
- switch.bedroom_desk_lamp
- switch.bedroom_light_red_bottom
- switch.bedroom_ceiling_light
- switch.pc_monitor_and_sound - service: switch.turn_off
data:
entity_id:
- switch.foobaralarm
you only have one entity_id in your template and it’s static so it will never trigger because the state of an input select only changes if you select something in the input select.
Use a time trigger that checks every minute and use a template condition
WORKS √
This is my config:
input_select:
wecker:
name: Wecker
options:
- '05:15'
- '05:45'
- '06:00'
- '06:30'
automation:
- alias: 'Sunrise'
trigger:
platform: time
minutes: '/1'
seconds: 0
condition:
platform: template
value_template: '{{ now().strftime("%H:%M") == states.input_select.wecker.state }}'
action:
- [...]
Keith & Joyrider, many thanks for your hints!
I manage to fix this by add Time & Date sensor and then change the automation trigger to…
value_template: '{{ states.sensor.time.state == states.sensor.alarm_time.state }}'
Working great now! Thank you so much for keeping this up!
Hi,
There is another aproach using the three template sensors:
Sensors:
sensor:
- platform: template
sensors:
alarm_hour:
friendly_name: 'Hour'
value_template: '{{ states.input_slider.alarmhour.state|round(0)|string }}'
alarm_minutes:
friendly_name: 'Minutes'
value_template: '{{ states.input_slider.alarmminutes.state|round(0)|string }}'
alarm_time:
friendly_name: 'Alarm'
value_template: '{% if states.input_slider.alarmhour.state|round(0)|string|length == 1 %}0{% endif %}{{ states.input_slider.alarmhour.state|round(0)|string }}:{% if states.input_slider.alarmminutes.state|round(0)|string|length == 1 %}0{% endif %}{{ states.input_slider.alarmminutes.state|round(0)|string }}'
time:
value_template: '{{ now().strftime("%H:%M")}}'
Inputs:
input_slider:
alarmhour:
name: Hour
icon: mdi:timer
initial: 7
min: 0
max: 23
step: 1
alarmminutes:
name: Minutes
icon: mdi:timer
initial: 0
min: 0
max: 55
step: 5
input_boolean:
alarmstatus:
name: Active
initial: off
icon: mdi:alarm-check
alarmweekday:
name: workdays
initial: off
icon: mdi:calendar
Automation:
- alias: 'Alarm'
trigger:
platform: time
minutes: '/1'
seconds: 0
condition:
condition: and
conditions:
- condition: template
value_template: '{{ states.sensor.time.state == states.sensor.alarm_time.state }}'
- condition: or
conditions:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmstatus
state: 'on'
- condition: state
entity_id: input_boolean.alarmweekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: and
conditions:
- condition: state
entity_id: input_boolean.alarmstatus
state: 'on'
- condition: state
entity_id: input_boolean.alarmweekday
state: 'off'
action:
- service: notify.miguel
data:
message: 'morning'
title: 'ALARM'
that is one way to do it. but triggering the automation every minutes (even though stop by the condition) is something I’m not comfortable with. I feel it is putting unnecessary stress on my little Pi.
Masterkenobi,
I get your point. May you share your config?
i’m not sure what would be the worst, the trick you used using the time sensor actually checks the value_template to see if it’s being triggered every minute as well because the state of the time sensor changes every minute triggering a state_change which in turn triggers a check on the trigger template’s value_template because the state of your time sensor changed and it’s used in value_template
So not sure if using the time sensor with trigger template or a trigger that fires every minute makes a lot of diffrence … If you check the code you can see that template sensors only check the value_template if one of the states of the entities used in the value_template change.
My method doesn’t trigger the automation every minutes. Yes, it checks for the state change every minute but it didn’t actually trigger the automation and have to be stop by an additional condition.
There is no right or wrong. I guess it just a matter of preference.