Creating a alarm clock

Try…

value_template: '{{ now().strftime("%-H") == states.sensor.alarm_hour.state and now().strftime("%-M") == states.sensor.alarm_minutes.state }}'

Here is my latest sample code…

Changes:

  1. Fix now() issue caused by changes in version 0.29
  2. Format the sensor template base on suggestion from @choch (thanks!)
  3. Remove input_boolean.alarmstatus because we can now turn on/off the automation from the front end introduced in version 0.28 (replace by automation.wake_me_up in group)

Sample code:

input_slider: 
  alarmhour:
    name: Hour
    icon: mdi:timer
    initial: 9
    min: 0
    max: 23
    step: 1
  alarmminutes:
    name: Minutes
    icon: mdi:timer
    initial: 0
    min: 0
    max: 55
    step: 5

input_boolean: 
  alarmweekday:
    name: Weekdays Only
    initial: off
    icon: mdi:calendar

sensor: 
  platform: template
  sensors:
    alarm_time:
      friendly_name: 'Time'
      value_template: '{{ "%0.02d:%0.02d" | format(states("input_slider.alarmhour") | int, states("input_slider.alarmminutes") | int) }}'

group:
  default_view:
    view: yes
    entities:
      - group.alarmclock
  alarmclock:
    name: Wake Me Up
    entities: 
      - automation.wake_me_up
      - sensor.alarm_time
      - input_slider.alarmhour
      - input_slider.alarmminutes
      - input_boolean.alarmweekday

automation:
  - alias: 'Wake Me Up'
    trigger:
      platform: template
      value_template: '{{ now().strftime("%H") == "%0.02d" | format(states("input_slider.alarmhour") | int) and now().strftime("%M") == "%0.02d" | format(states("input_slider.alarmminutes") | int) }}'
    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.notify
      data:
        message: 'Good morning. Time to Wake Up!'
        title: ""
2 Likes

Does not work.
But I noticed - if I move the slider “minutes” to the current time - avtomation work. And if I move slider even for a several minutes forward - automation dont work.

Yeah broken here too :frowning:
On the latest version, and tried the updated code above, but does not work unfourtantly.

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 :cry: 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 :frowning:

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: ""

What error do you get? I’m having a problem with a similar automation: thread

@nahornyy @lv-88
Did either of you figure this out? I have a similar problem too!

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:
  • 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 }}'

2 Likes

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'