Creating a alarm clock

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'

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.

Is it possible to repost the full code just like list time MasterKenobi? It is super helpful and I use that every iteration! Thanks!

I have put it up in Github for easier to manage.

4 Likes