Creating a alarm clock

I need help on identifying why my automation is not running even when the template in the trigger returns true (tested in the Developer Tools).

Sensors:

- platform: template
  sensors:
    alarm_clock_hour:
      value_template: '{{ states.input_slider.alarm_clock_hour.state|int }}'
    alarm_clock_minute:
      value_template: '{{ states.input_slider.alarm_clock_minute.state|int }}'
    alarm_clock_time:
      value_template: >-
        {{ states.sensor.alarm_clock_hour.state }}:
        {%- if states.sensor.alarm_clock_minute.state|length == 1 -%}
          0
        {%- endif -%}
          {{ states.sensor.alarm_clock_minute.state }}
    alarm_clock_time_long:
      value_template: >-
        {% if states.sensor.alarm_clock_hour.state|length == 1 -%}
          0
        {%- endif -%}
          {{ states.sensor.alarm_clock_hour.state }}:
        {%- if states.sensor.alarm_clock_minute.state|length == 1 -%}
          0
        {%- endif -%}
          {{ states.sensor.alarm_clock_minute.state }}
    alarm_clock_start:
      value_template: '{{ ((as_timestamp(now())|int + 300)|timestamp_custom("%H:%M")) }}'

Automation:

- alias: 'almclk_wake_up script triggered by alarm clock'
  trigger:
    platform: template
    value_template: '{{ states.sensor.alarm_clock_start.state == states.sensor.alarm_clock_time_long.state }}'
  condition:
    condition: state
    entity_id: input_boolean.alarm_clock_status
    state: 'on'
  action:
    service: script.wake_up

I found post#73 to be very informative at the time: a very nice rewording of the actual documentation on automation template and time triggers. tldr:

  • leverage the time_date platform in value_template just like yours:
    '{{ states("sensor.time") == states("sensor.alarmclock_lights_time") }}'
  • the other option is to trigger evaluation every ‘/n’ time unit with a time platform trigger since at: won’t take a template.

Relative time calculations can horribly complexify the template expression. I, for myself, try to stick to kiss approach, favoring decoupling in general and ultimately thinking packaging when it comes to my configuration.

@patkap thank you for your answer. I tried your suggestions, but unfortunately they did not work either.

This is so sad, I can’t understand why this is the only automation that’s not working.

Hi @mbonani,

for me it works with that :

    trigger:
      - platform: time
        minutes: '/1'
        seconds: 0
    condition:
      - condition: state
        entity_id: input_boolean.automa
        state: 'on'
      - condition: state
        entity_id: calendar.jours_feries_en_france
        state: 'off'
      - condition: template
        value_template: '{{ ((now().strftime("%s") | int + 300) | timestamp_custom("%H:%M") == states.sensor.alarm_time.state) }}'
    action:
      - service: light.turn_on
        entity_id: light.chambre
        data:
          transition: 600
          brightness: 255

you could test with the trigger /1 minutes …

Just tested with the copied and pasted code you provided plus some missing bits …

input_slider:
  alarm_clock_hour:
    initial: 6
    min: 0
    max: 23
    step: 1
  alarm_clock_minute:
    initial: 45
    min: 0
    max: 59
    step: 1

input_boolean:
  alarm_clock_status:
    initial: on

sensor:
  - platform: time_date
    display_options:
      - 'time'
  - platform: template
    sensors:
      alarm_clock_hour:
        value_template: '{{ states.input_slider.alarm_clock_hour.state|int }}'
      alarm_clock_minute:
        value_template: '{{ states.input_slider.alarm_clock_minute.state|int }}'
      alarm_clock_time:
        value_template: >-
          {{ states.sensor.alarm_clock_hour.state }}:
          {%- if states.sensor.alarm_clock_minute.state|length == 1 -%}
            0
          {%- endif -%}
            {{ states.sensor.alarm_clock_minute.state }}
      alarm_clock_time_long:
        value_template: >-
          {% if states.sensor.alarm_clock_hour.state|length == 1 -%}
            0
          {%- endif -%}
            {{ states.sensor.alarm_clock_hour.state }}:
          {%- if states.sensor.alarm_clock_minute.state|length == 1 -%}
            0
          {%- endif -%}
            {{ states.sensor.alarm_clock_minute.state }}
      alarm_clock_start:
        value_template: '{{ ((as_timestamp(now())|int + 300)|timestamp_custom("%H:%M")) }}'

automation:
  - alias: 'almclk_wake_up script triggered by alarm clock'
    trigger:
      platform: template
      value_template: '{{ states.sensor.time.state == states.sensor.alarm_clock_time_long.state }}'
    condition:
      condition: state
      entity_id: input_boolean.alarm_clock_status
      state: 'on'
    action:
      service: persistent_notification.create
      data_template:
        title: 'Alarm!'
        message: '{{ trigger.to_state.state }}

Options !

@Vantskruv

I had the same problem with the time and changed the script from (now().strftime("%s") | int | timestamp_custom("%H:%M")) to as_timestamp (now()) | timestamp_custom("%H:%M") and now everything works fine.

I forgot to post I had the same problem. For some reason now().strftime("%s") returns weird values here, as_timestamp(now()) solved it.

((now().strftime("%s")|int)|timestamp_custom("%H:%M")) == 13:23

((as_timestamp(now())|int)|timestamp_custom("%H:%M")) == 17:23

@Vantskruv and @j.assuncao, are you guys using Hassio?

@mbonani Yes, i am using hass.io

Just started a test environment (Python virtualenv in a fresh installed Debian) and it worked fine:

((now().strftime("%s")|int)|timestamp_custom("%H:%M")) == 18:31

((as_timestamp(now())|int)|timestamp_custom("%H:%M")) == 18:31

It must be some problem with Hassio.

@mbonani can it be the configurations of time zone being different between Home Assistant and Resin OS??

I’ve tried to gain access to Hassio core via ssh on port 22222 but it gives me an error using Putty “Disconnected: No supported authentication methods available (server sent: publickey)”. I’ve used this: https://home-assistant.io/developers/hassio/debugging/

Can you please confirm if the timezone configuration is different?

@j.assuncao did you use pageant to load your private key before trying to access?

Different timezones

$ ssh -p 22222 [email protected]
root@hassio:~# date
Sun Aug 20 00:08:48 UTC 2017

$ ssh [email protected]
core-ssh:~# date
Sat Aug 19 20:09:55 EDT 2017
1 Like

@mbonani Yes, i used Pageant to load the key…

Just create a file named authorized_keys in the root of the resin-boot partition containing your public key in the following way:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg14Wi4…

You can copy this information from the SSH add-on configuration

1 Like

Started another test environment, using Raspbian this time:

((now().strftime("%s")|int)|timestamp_custom("%H:%M")) == 17:41

((as_timestamp(now())|int)|timestamp_custom("%H:%M")) == 21:41

Actually it must be something related to the ARM packages

That is very strange @mbonani

@hokagegano I just tried that:

- alias: 'alarm clock'
  trigger:
    - platform: time
      minutes: '/1'
      seconds: 0
  condition:
    - condition: state
      entity_id: input_boolean.alarm_clock_status
      state: 'on'
    - condition: state
      entity_id: input_boolean.vacation_mode
      state: 'off'
    - condition: template
      value_template: '{{ states("sensor.alarm_clock_start") == states("sensor.alarm_clock_time_long") }}'
  action:
    service: script.wake_up

It didn’t work :frowning:

- alias: 'alarm clock'
  trigger:
    - platform: time
      minutes: '/1'
      seconds: 0
  condition:
    - condition: state
      entity_id: input_boolean.alarm_clock_status
      state: 'on'
    - condition: state
      entity_id: input_boolean.vacation_mode
      state: 'off'
  action:
    service: script.wake_up

If I remove the template the automation triggers normally. But this template is the most important part in my case.

Back to the drawing board!

@patkap did it work?

I noticed you used states.sensor.time.state in the template. I used states.sensor.alarm_clock_start.state because I want the automation to be triggered 5 minutes before the time I set using the sliders.

Anyway thanks for your help.

PS: I’ll try other approaches when I get back.

Dear All,

this might be a completely off topic question but since this is a very complex method and it seems like it is an extremely interesting functionality.
Maybe it would make sense to create a component for Home Assistant that would handle everything in one go.

What do you think?
Would it be possible?

Thanks!
B

2 Likes