Wake-up light alarm with sunrise effect

Thanks for this! Bit of a GOTCHA!

Make sure you add the date sensor and the date_time_iso sensor.

Thanks for the card info, that’s helpful!

Here’s my boolean helper, created in the “Devices & Services” → “Helpers” section of settings

And here’s my automations:

I could have done this in one automation with “When Bedside Lamps is toggled… toggle Bedside Lamps opposite state” but I wanted to eliminate any error e.g. accidentally manually changing the state of the helper.

I’ve noticed the same at least a couple of times when I switch of my lights with a Hue controller switch. Perhaps it’s something to do with the order of commands received by HA?
e.g. it takes a moment for HA to receive the command of the physical switch press, but the automation already started processing the next step up in brightness and mired in that time, then it executes the switch off, but then it executes the next step up that had already started processing.

The couple of times I’ve experienced this, I’ve found that pressing the switch a second time successfully switched the lamps off.

Hmm, you may be right. It does seem to work after a while but I’ve found sometimes I have to do a dance of turning it off quite a few times until they stay off, which isn’t really what you want first thing in the morning.

Hi @samumar, after reading your post about the dashboard card to control the alarm time, I stumbled across the same issue after creating the input_datetime helper - it wasn’t showing up in the list in the “Alarm timestamp sensor” section.

I realised this is because the automation is looking for a sensor, not an input_datetime entity.

I fixed this by creating a sensor which reads the input_datetime helper. I created the sensor through adding the below code to my configuration.yaml (first I tried to create a template sensor helper, but I couldn’t get the syntax right).

template:
    # Create a sensor for the Wake Up Alarm automation to read the input datetime from the dashboard
    sensor:
        name: "Wake Up Alarm"
        unique_id: template_se_alarm_01
        state: "{{ (states('input_datetime.wake_up_alarm') | as_datetime | as_local).isoformat() }}"
        device_class: timestamp

Now the created sensor appears in the automation :slight_smile:

Hope this helps you!

Super, it’s working just fine. Many thanks!!

Great to hear!
I’d be interested to hear if the alarm is now matching your input_datetime entity and not the manual alarm setting in the Automation.

Reason being when I check the state of the sensor.wake_up_alarm in Dev Tools Template, I get “unknown”.

I think there’s an issue with the Device Class “timestamp” expecting a different format than the datetime string provided by the input_datetime entity, I’m working through that now…

Ok, I’ve now fixed my sensor so it’s outputting correctly with the timestamp device class. I needed to change the template state as follows:

{{ (states('input_datetime.wake_up_alarm') | as_datetime | as_local).isoformat() }}

My sensor now outputs as expected:

I also worked out how to add it as a helper entity through the UI in the meantime :wink:

Solution found thanks to this post!

Hi, could it be set up like this:

  • I say a command to Siri like Hey, Siri wakeup light at 8 am
  • Siri sets up the automation + standard alarm (I would like to avoid situation that I trigger it for example when I’m on Holidays and my parents are in our home)

Is there a way to do it or maybe there are other better solutions?

Hi,

I’ve been trying to set an alarm timestamp sensor, in order to be able to change from the dashboard the time I want the automation to run.

I created a time helper input_datetime.wake_up_alarm, and added a sensor in templates.yaml :

sensor:
  - name: "Wake Up Alarm"
    unique_id: template_se_alarm_01
    state: "{{ (states('input_datetime.wake_up_alarm') | as_datetime | as_local).isoformat() }}"
    device_class: timestamp

When I set the alarm timestamp sensor to sensor.wake_up_alarm, it doesn’t work as expected.

Am I missing something there ? Could anyone help me ? Thanks

Same here, I am also confused. The help says it needs a “Sensor with timestamp of next alarm with device_class: timestamp”. I tried a template sensor that returns datetime as well as isoformat.

{% set alarm_time = state_attr('sensor.pixel_5_next_alarm', 'Time in Milliseconds') / 1000 %}
{% set alarm_time_dt = as_datetime(alarm_time)| as_local %} 
{{alarm_time_dt is datetime}}
{{alarm_time_dt}} # also alarm_time_dt.isoformat()

Both options raising the error

Error: In ‘template’ condition: ValueError: Template error: as_timestamp got invalid input ‘unknown’ when rendering template ‘{{0 < as_timestamp(states(sensor) if sensor != ‘none’ else states(‘sensor.date’) ~ ’ ’ ~ manual_time) - as_timestamp(states(‘sensor.date_time_iso’)) <= float(seconds) and states(check_entity) in [‘unknown’, ‘on’, ‘home’]}}’ but no default was specified

The helper in all cases show a valid value, unsure why it’s unknown to the blueprint.

Any help is welcome!

1 Like

Just realizing the problem is states('sensor.date_time_iso'). I don’t have such a sensor. What should it yield?

@TomTom101 Your hint with the ISO timestamp gave me the right place to look. You have to add the following integration: Time & Date - Home Assistant

Thanks @patti9000! That was the missing piece, no more errors!

Hey guys, Hey @Sbyx,

I have enhanced the Wake-up Light Alarm Blueprint with a few features that I find useful:

A new option called "ignore_future_alarms" has been added. When enabled, alarms set for future days will be ignored, and the manual alarm time will be used instead.
The logic has been adjusted to better handle various alarm situations, including invalid or future alarms.

These changes allow for more flexible use of the blueprint, especially for those who want to use both daily and specific alarms.

Here is the updated code:

blueprint:
  name: Wake-up light alarm with sunrise effect
  description: "A wake-up light alarm with a brightness and color temperature sunrise effect. Note: Requires date_time_iso sensor in configuration, not manually executable!"
  domain: automation
  input:
    light_entity:
      name: Wake-up light entity
      description: The light to control. Turning it off during the sunrise will keep it off. Color temperature range is auto-detected.
      selector:
        entity:
          domain: light
    timestamp_sensor:
      name: Alarm timestamp sensor
      description: "Sensor with timestamp of next alarm with device_class: timestamp (set to 'none' for manual alarm time)"
      default: none
      selector:
        entity:
          device_class: timestamp
    manual_time:
      name: Manual alarm time
      description: Time to trigger alarm every day if timestamp sensor is not set or ignored. Settings at or shortly after midnight will not work as expected!
      default: "7:00:00"
      selector:
        time: {}
    ignore_future_alarms:
      name: Ignore future alarms
      description: If enabled, alarms set for future dates will be ignored and the manual time will be used instead.
      default: false
      selector:
        boolean: {}
    check_entity:
      name: Additional entity to check before sunrise is triggered
      description: If set, checks if entity is 'on' or 'home' before triggering. Use e.g. a (workday) sensor, device_tracker or person entity.
      default: none
      selector:
        entity: {}
    sunrise_duration:
      name: Sunrise duration
      description: The sunrise will start the configured number of minutes before the timestamp.
      default: 25
      selector:
        number:
          min: 5.0
          max: 60.0
          step: 5.0
          unit_of_measurement: min
          mode: slider
    start_brightness:
      name: Minimum brightness
      description: The brightness to start with. Some lights ignore very low values and may turn on with full brightness instead!
      default: 1
      selector:
        number:
          min: 1.0
          max: 255.0
          step: 1.0
          mode: slider
    end_brightness:
      name: Maximum brightness
      description: The brightness will be transitioned from the minimum to the configured value.
      default: 254
      selector:
        number:
          min: 5.0
          max: 255.0
          step: 1.0
          mode: slider
    min_mired:
      name: Minimum color temperature
      description: "The minimum color temperature to use. (0: lowest supported)"
      default: 0
      selector:
        number:
          min: 0.0
          max: 500.0
          step: 5.0
          mode: slider
          unit_of_measurement: mired
    pre_sunrise_actions:
      name: Pre-sunrise actions
      description: Optional actions to run before sunrise starts.
      default: []
      selector:
        action: {}
    post_sunrise_actions:
      name: Post-sunrise actions
      description: Optional actions to run after sunrise ends (around the alarm time).
      default: []
      selector:
        action: {}
variables:
  light_entity: !input "light_entity"
  sensor: !input "timestamp_sensor"
  sunrise_duration: !input "sunrise_duration"
  start_brightness: !input "start_brightness"
  end_brightness: !input "end_brightness"
  range_brightness: "{{float(end_brightness)-float(start_brightness)}}"
  manual_time: !input "manual_time"
  seconds: "{{float(sunrise_duration) * 60}}"
  min_mired: !input "min_mired"
  start_mired: "{{state_attr(light_entity, 'max_mireds')}}"
  end_mired: "{{[state_attr(light_entity, 'min_mireds')|int(0), min_mired|int(0)]|max}}"
  tick_time: "{{float(seconds) / float(range_brightness)}}"
  check_entity: !input "check_entity"
  ignore_future_alarms: !input "ignore_future_alarms"
trigger:
  - platform: time_pattern
    minutes: "*"
condition: []
action:
  - variables:
      sensor_time: >
        {% if sensor != 'none' and states(sensor) != 'unavailable' and as_timestamp(states(sensor)) %}
          {% if ignore_future_alarms and as_timestamp(states(sensor)) | timestamp_custom('%Y-%m-%d') > now().strftime('%Y-%m-%d') %}
            {{ states('sensor.date') ~ ' ' ~ manual_time }}
          {% else %}
            {{ states(sensor) }}
          {% endif %}
        {% else %}
          {{ states('sensor.date') ~ ' ' ~ manual_time }}
        {% endif %}
  - wait_template: >
      {{ 0 < as_timestamp(sensor_time) - as_timestamp(states('sensor.date_time_iso')) <= float(seconds) and states(check_entity) in ['unknown', 'on', 'home'] }}
  - choose: []
    default: !input "pre_sunrise_actions"
  - service: light.turn_on
    data:
      brightness: "{{ start_brightness }}"
      color_temp: "{{ start_mired if state_attr(light_entity, 'min_mireds') != None else omit }}"
    entity_id: !input "light_entity"
  - repeat:
      while:
        - condition: template
          value_template: >
            {{ 0 < as_timestamp(sensor_time) - as_timestamp(now()) <= float(seconds) }}
      sequence:
        - delay: "{{ tick_time }}"
        - service: light.turn_on
          data:
            brightness: >
              {{ (float(end_brightness) - (float(range_brightness) * (as_timestamp(sensor_time) - as_timestamp(now())) / float(seconds))) | int(0) }}
            color_temp: >
              {% if state_attr(light_entity, 'min_mireds') != None %}
                {{ (float(end_mired) + (float(start_mired) - float(end_mired)) * ((as_timestamp(sensor_time) - as_timestamp(now())) / float(seconds))) | int(0) }}
              {% else %}
                {{ omit }}
              {% endif %}
          entity_id: !input "light_entity"
  - choose: []
    default: !input "post_sunrise_actions"
mode: single
max_exceeded: silent

Let me know what you think!

Hi,
I’m using this blueprint for several months without any problem.

I desactivate it for holidays a week ago and now it’s not working anymore !
I have this message :

Erreur : In 'template' condition: ValueError: Template error: as_timestamp got invalid input 'unknown 06:50:00' when rendering template '{{0 < as_timestamp(states(sensor) if sensor != 'none' else states('sensor.date') ~ ' ' ~ manual_time) - as_timestamp(states('sensor.date_time_iso')) <= float(seconds) and states(check_entity) in ['unknown', 'on', 'home']}}' but no default was specified

Do you have any idea of what’s doing wrong ?
Thanks

I’m up to date with core and modules.

1 Like

I was starting using it today and got the same error.

update:

have a look here:

1 Like

Perfect ! It works for me !

Many thanks UsefulVid !

This is great, I recently started using it and appreciate the blueprint! Could it be modified to also accept a “Do not run if Sun has risen” sensor? Or some way to gate it between certain hours?

When using my Next Alarm as the trigger it’s less useful if I have an afternoon alarm (or in the summer when the alarm is way after the sun has come up so I wouldn’t need the automation to fire)

I would like to achieve the following:

I set the alarm time with an input_datetime helper. I would like to use this helper as input for your blueprint. I then set the time offset for sunrise in the blueprint. Now I also want a Sonos speaker to start playing a song at the beginning of sunrise. Here, however, the volume should be turned up slowly. There is also another blueprint for this. However, this second blueprint also requires a start time as input. Here I would like to use the start time of the sunrise from your blueprint.

How do I get this time?