Creating a alarm clock

Edit:

Worked perfectly!

For anyone that is using the Windows version of Python 3.5 this code will work for the trigger…

    value_template: '{{ now.time().strftime("%R") == states.sensor.alarm_time.state }}'        

The original code give an error as %-H and %-M are not valid :stuck_out_tongue:

how can i make
trigger:
platform: time
after: “put here the template from input slider”?
i want the user to choose the time to activate my light

I looked at this and decided that this was close to what I wanted, but not at the automation level I wanted. I ended using an Android alarm that can do Tasker/ifttt events so I can change my alarms on the fly on my phone and not have to change anything in HASS.

I later added my device location so it doesn’t trigger when I’m not there, but this seemed much more intuitive and fluid than this solution.

Here is what I am using to compensate for “Input slider: Support for float value” addition in 0.25

        {%- if states('input_slider.time_hour') | length == 3 -%}
        0{%- endif %}{{ states('input_slider.time_hour') | int }}:
        {%- if states('input_slider.time_minute') | length == 3 -%}
        0{%- endif %}{{ states('input_slider.time_minute') | int }}

Hi all.
I managed to show the correct value in the tab is the following code:

value_template: '{% if states.input_slider.alarmhour.state| length < 4 %}0{{ states.input_slider.alarmhour.state | int }}{% endif %}{% if states.input_slider.alarmhour.state| length > 3 %}{{ states.input_slider.alarmhour.state | int }}{% endif %}:{% if states.input_slider.alarmminutes.state | length < 4 %}0{{ states.input_slider.alarmminutes.state | int }}{% endif %}{% if states.input_slider.alarmminutes.state | length > 3 %}{{ states.input_slider.alarmminutes.state | int }}{% endif %}'

I tried the code you used but the time I get is 8:0:30.0 any ideas?

I guess I’m having a hard time figuring out what to update on sensor and automation section. Thank you guys!

To fix this, I have created 2 new sensors; sensor.alarm_hour and sensor.alarm_minutes. These will take the value from the sliders and Round it to 0.

Then update the sensor.alarm_time and the automation to use the 2 new sensors.

Here is the complete 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: 
  alarmstatus:
    name: Wake Me Up
    initial: off
    icon: mdi:alarm-check
  alarmweekday:
    name: Weekdays Only
    initial: off
    icon: mdi:calendar

sensor: 
  platform: template
  sensors:
    alarm_hour:
      friendly_name: 'Hour'
      value_template: '{{ states("input_slider.alarmhour") | round(0) }}'
    alarm_minutes:
      friendly_name: 'Minutes'
      value_template: '{{ states("input_slider.alarmminutes") | round(0) }}'
    alarm_time:
      friendly_name: 'Time'
      value_template: '{{ states("sensor.alarm_hour") }}:{% if states("sensor.alarm_minutes")|length == 1 %}0{% endif %}{{ states("sensor.alarm_minutes") }}'

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

automation
  - alias: 'Wake Me Up'
    trigger:
      platform: template
      value_template: '{{ now.time().strftime("%-H") == states.sensor.alarm_hour.state and now.time().strftime("%-M") == states.sensor.alarm_minutes.state }}'
    condition:
      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.notify
      data:
        message: 'Good morning. Time to Wake Up!'
        title: ""
3 Likes

I’ve fixed the “.0” problem by using round():

value_template: ‘{{ states.input_slider.alarmhour.state | round(0) }}:{% if states.input_slider.alarmminutes.state|length == 1 %}0{% endif %}{{ states.input_slider.alarmminutes.state | round(0) }}’

1 Like

I think this is a great example that deserves more publicity.
So it would be great if someone would add it here:

1 Like

Hi, I just found this discussion. I have a problem with time triggered automation

Now I’ve edit new configuration, just for testing input_slider and time trigger :

homeassistant:
  # Name of the location where Home Assistant is running
  name: E.R.S.A
  latitude: -6.1744
  longitude: 106.8294
  elevation: 2
  # C for Celcius, F for Fahrenheit
  unit_system: imperial
  
  time_zone: Asia/Jakarta

# Show links to resources in log and frontend
# introduction:

# View all events in a logbook
logbook:

# Track the sun
#sun:

# Enables support for tracking state changes over time.
history:

# Checks for available updates
updater:

# Allows you to issue voice commands from the frontend
conversation:

# Enables the frontend
frontend:

# Discover some devices automatically
# discovery:

http:
  api_password: admin

mqtt:
  broker: 127.0.0.1
  port: 1883
  client_id: home-assistant-1
  keepalive: 60

sensor: 
  platform: template
  sensors:
    alarm_time:
      friendly_name: 'Time'
      value_template: '{% if states.input_slider.alarmhour.state| length < 4 %}0{{ states.input_slider.alarmhour.state | int }}{% endif %}{% if states.input_slider.alarmhour.state| length > 3 %}{{ states.input_slider.alarmhour.state | int }}{% endif %}:{% if states.input_slider.alarmminutes.state | length < 4 %}0{{ states.input_slider.alarmminutes.state | int }}{% endif %}{% if states.input_slider.alarmminutes.state | length > 3 %}{{ states.input_slider.alarmminutes.state | int }}{% endif %}:00'
      
input_slider: 
  alarmhour:
    name: Hour
    icon: mdi:timer
    initial: 9
    min: 0
    max: 23
    step: 1
  alarmminutes:
    name: Minutes
    icon: mdi:timer
    initial: 1
    min: 0
    max: 59
    step: 1

group:
  Test:
    - sensor.alarm_time
    - input_slider.alarmhour
    - input_slider.alarmminutes  

automation:
    alias: 'Wake Me Up'
    trigger:
      platform: time
      after: '{{ states.sensor.alarm_time.state }}'
    action:
        service: persistent_notification.create
        data:
            message: "{{ states.sensor.alarm_time.state }}"
            title: "message"

Bad news, till now that code didnt work well for me.
But if I changed parameter trigger value to “minutes: ‘/1’”, notification appeared perfectly.

Please help me.

1 Like

Found a better way to format the slider values:

value_template: ‘{{ “%0.02d:%0.02d” | format(states(“input_slider.peter_hour”) | int, states(“input_slider.peter_minutes”) | int) }}’

1 Like

After upgrade to 29.4 my alarm clock don’t work.
I am use this string as triger:
value_template: ‘{{ now().time().strftime("%-H") == states.sensor.alarm_hour.state and now().time().strftime("%-M") == states.sensor.alarm_minutes.state }}’

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: