-
Star
(84)
You must be signed in to star a gist -
Fork
(113)
You must be signed in to fork a gist
-
-
Save sbyx/96c43b13b90ae1c35b872313ba1d2d2d to your computer and use it in GitHub Desktop.
| 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. | |
| Settings at or shortly after midnight will not work as expected! | |
| default: '7:00:00' | |
| selector: | |
| time: {} | |
| 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: {} | |
| source_url: https://gist.github.com/sbyx/96c43b13b90ae1c35b872313ba1d2d2d | |
| 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' | |
| trigger: | |
| - platform: time_pattern | |
| minutes: '*' | |
| condition: [] | |
| action: | |
| - wait_template: '{{sensor == ''none'' or as_timestamp(states(sensor), None) != None}}' | |
| - wait_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'']}}' | |
| - choose: [] | |
| default: !input 'pre_sunrise_actions' | |
| - condition: template | |
| value_template: '{{sensor == ''none'' or as_timestamp(states(sensor), None) != None}}' | |
| - condition: template | |
| value_template: '{{0 < as_timestamp(states(sensor) if sensor != ''none'' else states(''sensor.date'') | |
| ~ '' '' ~ manual_time) - as_timestamp(now()) <= float(seconds) and states(check_entity) | |
| in [''unknown'', ''on'', ''home'']}}' | |
| - choose: | |
| - conditions: | |
| - '{{state_attr(light_entity, ''min_mireds'') != None}}' | |
| sequence: | |
| - service: light.turn_on | |
| data: | |
| brightness: '{{start_brightness}}' | |
| color_temp: '{{start_mired}}' | |
| entity_id: !input 'light_entity' | |
| default: | |
| - service: light.turn_on | |
| data: | |
| brightness: '{{start_brightness}}' | |
| entity_id: !input 'light_entity' | |
| - repeat: | |
| while: | |
| - '{{sensor == ''none'' or as_timestamp(states(sensor), None) != None}}' | |
| - '{{0 < as_timestamp(states(sensor) if sensor != ''none'' else states(''sensor.date'') | |
| ~ '' '' ~ manual_time) - as_timestamp(now()) <= float(seconds)}}' | |
| sequence: | |
| - delay: '{{tick_time}}' | |
| - choose: | |
| - conditions: | |
| - '{{0 < state_attr(light_entity, ''brightness'') | int(0) < end_brightness | | |
| int}}' | |
| - '{{sensor == ''none'' or as_timestamp(states(sensor), None) != None}}' | |
| - '{{0 < as_timestamp(states(sensor) if sensor != ''none'' else states(''sensor.date'') | |
| ~ '' '' ~ manual_time) - as_timestamp(now()) <= float(seconds)}}' | |
| sequence: | |
| - choose: | |
| - conditions: | |
| - '{{state_attr(light_entity, ''min_mireds'') != None}}' | |
| sequence: | |
| - service: light.turn_on | |
| data: | |
| brightness: '{{(float(end_brightness) - (float(range_brightness) * | |
| (as_timestamp(states(sensor) if sensor != ''none'' else states(''sensor.date'') | |
| ~ '' '' ~ manual_time) - as_timestamp(now())) / float(seconds))) | |
| | int(0)}}' | |
| color_temp: '{{(float(end_mired) + (float(start_mired) - float(end_mired)) | |
| * ((as_timestamp(states(sensor) if sensor != ''none'' else states(''sensor.date'') | |
| ~ '' '' ~ manual_time) - as_timestamp(now())) / float(seconds))) | |
| | int(0)}}' | |
| entity_id: !input 'light_entity' | |
| default: | |
| - service: light.turn_on | |
| data: | |
| brightness: '{{(float(end_brightness) - (float(range_brightness) * (as_timestamp(states(sensor) | |
| if sensor != ''none'' else states(''sensor.date'') ~ '' '' ~ manual_time) | |
| - as_timestamp(now())) / float(seconds))) | int(0)}}' | |
| entity_id: !input 'light_entity' | |
| - choose: [] | |
| default: !input 'post_sunrise_actions' | |
| mode: single | |
| max_exceeded: silent |
It appears that this blueprint might not work in Home Assistant 2026.1 and higher:
WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argument
So I've created a fork https://gist.github.com/DigitallyRefined/e212f3b96042f265b2c662677fb16d13 that switches over to color_temp_kelvin
I have am input datetime helper that gets set via a shortcut on my iPhone and only contains my wakeup time not the date.
I want to use that to dynamically trigger. However I cannot select it as Alarm timestamp sensor.
Anyone as ha solution?
It appears that this blueprint might not work in Home Assistant 2026.1 and higher:
WARNING (MainThread) [homeassistant.components.light] Got `color_temp` argument in `turn_on` service, which is deprecated and will break in Home Assistant 2026.1, please use `color_temp_kelvin` argumentSo I've created a fork https://gist.github.com/DigitallyRefined/e212f3b96042f265b2c662677fb16d13 that switches over to
color_temp_kelvin
Thanks for that, I was getting concerned about that as well!
I tried using the updated one and I got the following 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
This is my first try at a blueprint and I'm a complete newby to home assistant. Any suggestions?
Using Claude I also modifed the script to use kelvin for the color temprature change and made the curve less steep when raising the brightness. The curve is modifiable via the settings. It also checks if the lights are allready turned on and then skips them.
This fork is available at https://gist.github.com/larkov/1c197a04d06c6df6f91137435234d171
I have this a Post-sunrise action, you could do it pre-sunrise.