r3mcos3
(R3mcos3)
December 17, 2025, 6:12pm
1
Alarm Light
Wake up with lights that turn on before your phone alarm!
Features
Alarm Integration - Syncs with your phone’s next alarm sensor
Gradual Wake-up - Lights turn on 5-60 minutes before alarm
Presence Aware - Only triggers when you’re home
Darkness Check - Only activates when it’s dark outside
Day Selection - All days, weekdays only, or weekends only
Adjustable Brightness - Configure the perfect wake-up brightness
Requirements
Home Assistant 2025.12.0+
Next Alarm sensor (Android: built-in, iOS: requires Shortcuts workaround)
Person entity
Light entity
Android Setup
Install Home Assistant Companion App
Enable “Next Alarm” sensor in Companion App settings
Sensor appears as sensor.phone_name_next_alarm
iOS Setup
iOS doesn’t natively expose alarm data. Use iOS Shortcuts to sync your alarm to an Input Datetime helper. See iOS guides in the README .
Configuration
Input
Description
Default
Alarm Sensor
Next alarm timestamp sensor
-
Person
Person to check if home
-
Lights
Lights to turn on
-
Offset
Minutes before alarm
10 min
Brightness
Light brightness
33%
Days
All/Weekdays/Weekends
All
Screenshot
GitHub
GitHub Repository
Donate Me
5 Likes
Viv
February 2, 2026, 2:25pm
2
Thanks for this blueprints, I would like to know if it would be possible to add an extra options/conditions.
*Phone is charging/connected
If not could you please share partially the code for it.
Thanks again for your work.
r3mcos3
(R3mcos3)
February 2, 2026, 4:08pm
3
you can do with the blueprint what you want, but if change the blueprint for you then anyone will do a request. and i don’t have the time to changes the bleuprint to everybody’s needs. sorry!
Viv
February 3, 2026, 6:40am
4
Ok no worries sorry for asking
dkieft
(Dennis)
March 26, 2026, 2:47pm
5
“I’m using a custom version of your blueprint, it is for 2 persons, maybe someting to use voor youre next version”
input:
person1_alarm_sensor:
name: Persoon 1 - Next Alarm Sensor
selector:
entity:
filter:
- domain: sensor
device_class: timestamp
person1_entity:
name: 👤 Persoon 1 - Person
selector:
entity:
domain: person
person1_lights_target:
name: 💡 Persoon 1 - Target Lights
selector:
target:
entity:
domain: light
person1_offset_before_alarm:
name: ⏱️ Persoon 1 - Offset Before Alarm
default: "-00:10:00"
selector:
select:
options:
- label: 5 minutes before
value: "-00:05:00"
- label: 10 minutes before
value: "-00:10:00"
- label: 15 minutes before
value: "-00:15:00"
- label: 20 minutes before
value: "-00:20:00"
- label: 30 minutes before
value: "-00:30:00"
- label: 45 minutes before
value: "-00:45:00"
- label: 60 minutes before
value: "-01:00:00"
mode: dropdown
person1_brightness_pct:
name: ✨ Persoon 1 - End Brightness
default: 33
selector:
number:
min: 1
max: 100
step: 1
unit_of_measurement: "%"
mode: slider
person1_start_brightness_pct:
name: 🌅 Persoon 1 - Start Brightness
default: 1
selector:
number:
min: 1
max: 100
step: 1
unit_of_measurement: "%"
mode: slider
person1_kelvin_start:
name: 🔥 Persoon 1 - Start Kelvin
description: Bijvoorbeeld 2000 voor extra warm
default: 2000
selector:
number:
min: 1500
max: 6500
step: 100
unit_of_measurement: "K"
mode: box
person1_kelvin_end:
name: ☀️ Persoon 1 - End Kelvin
description: Bijvoorbeeld 4000 voor neutraler wit
default: 4000
selector:
number:
min: 1500
max: 6500
step: 100
unit_of_measurement: "K"
mode: box
person1_weekday_selection:
name: 📅 Persoon 1 - Active Days
default: "all"
selector:
select:
options:
- label: All Days
value: all
- label: Weekdays Only (Mon-Fri)
value: weekdays
- label: Weekends Only (Sat-Sun)
value: weekends
mode: dropdown
person2_alarm_sensor:
name: ⏰ Persoon 2 - Next Alarm Sensor
selector:
entity:
filter:
- domain: sensor
device_class: timestamp
person2_entity:
name: 👤 Persoon 2 - Person
selector:
entity:
domain: person
person2_lights_target:
name: 💡 Persoon 2 - Target Lights
selector:
target:
entity:
domain: light
person2_offset_before_alarm:
name: ⏱️ Persoon 2 - Offset Before Alarm
default: "-00:10:00"
selector:
select:
options:
- label: 5 minutes before
value: "-00:05:00"
- label: 10 minutes before
value: "-00:10:00"
- label: 15 minutes before
value: "-00:15:00"
- label: 20 minutes before
value: "-00:20:00"
- label: 30 minutes before
value: "-00:30:00"
- label: 45 minutes before
value: "-00:45:00"
- label: 60 minutes before
value: "-01:00:00"
mode: dropdown
person2_brightness_pct:
name: ✨ Persoon 2 - End Brightness
default: 33
selector:
number:
min: 1
max: 100
step: 1
unit_of_measurement: "%"
mode: slider
person2_start_brightness_pct:
name: 🌅 Persoon 2 - Start Brightness
default: 1
selector:
number:
min: 1
max: 100
step: 1
unit_of_measurement: "%"
mode: slider
person2_kelvin_start:
name: 🔥 Persoon 2 - Start Kelvin
description: Bijvoorbeeld 2000 voor extra warm
default: 2000
selector:
number:
min: 1500
max: 6500
step: 100
unit_of_measurement: "K"
mode: box
person2_kelvin_end:
name: ☀️ Persoon 2 - End Kelvin
description: Bijvoorbeeld 4000 voor neutraler wit
default: 4000
selector:
number:
min: 1500
max: 6500
step: 100
unit_of_measurement: "K"
mode: box
person2_weekday_selection:
name: 📅 Persoon 2 - Active Days
default: "all"
selector:
select:
options:
- label: All Days
value: all
- label: Weekdays Only (Mon-Fri)
value: weekdays
- label: Weekends Only (Sat-Sun)
value: weekends
mode: dropdown
mode: parallel
max: 4
max_exceeded: silent
variables:
p1_weekday_choice: !input person1_weekday_selection
p2_weekday_choice: !input person2_weekday_selection
p1_offset: !input person1_offset_before_alarm
p2_offset: !input person2_offset_before_alarm
p1_transition_seconds: >
{% set s = as_timedelta(p1_offset).total_seconds() | int %}
{{ (s * -1) if s < 0 else s }}
p2_transition_seconds: >
{% set s = as_timedelta(p2_offset).total_seconds() | int %}
{{ (s * -1) if s < 0 else s }}
trigger:
platform: time
id: person1
at:
entity_id: !input person1_alarm_sensor
offset: !input person1_offset_before_alarm
platform: time
id: person2
at:
entity_id: !input person2_alarm_sensor
offset: !input person2_offset_before_alarm
condition:
condition: state
entity_id: sun.sun
state: below_horizon
action:
choose:
conditions:
condition: trigger
id: person1
condition: state
entity_id: !input person1_entity
state: home
condition: template
value_template: >
{% set today = now().weekday() %}
{% if p1_weekday_choice == ‘all’ %}
true
{% elif p1_weekday_choice == ‘weekdays’ %}
{{ today < 5 }}
{% elif p1_weekday_choice == ‘weekends’ %}
{{ today >= 5 }}
{% else %}
true
{% endif %}
sequence:
service: light.turn_on
target: !input person1_lights_target
data:
brightness_pct: !input person1_start_brightness_pct
kelvin: !input person1_kelvin_start
delay:
seconds: 1
service: light.turn_on
target: !input person1_lights_target
data:
brightness_pct: !input person1_brightness_pct
kelvin: !input person1_kelvin_end
transition: “{{ p1_transition_seconds | int }}”
conditions:
condition: trigger
id: person2
condition: state
entity_id: !input person2_entity
state: home
condition: template
value_template: >
{% set today = now().weekday() %}
{% if p2_weekday_choice == ‘all’ %}
true
{% elif p2_weekday_choice == ‘weekdays’ %}
{{ today < 5 }}
{% elif p2_weekday_choice == ‘weekends’ %}
{{ today >= 5 }}
{% else %}
true
{% endif %}
sequence:
service: light.turn_on
target: !input person2_lights_target
data:
brightness_pct: !input person2_start_brightness_pct
kelvin: !input person2_kelvin_start
delay:
seconds: 1
service: light.turn_on
target: !input person2_lights_target
data:
brightness_pct: !input person2_brightness_pct
kelvin: !input person2_kelvin_end
transition: “{{ p2_transition_seconds | int }}”
r3mcos3
(R3mcos3)
April 4, 2026, 6:30am
6
Hi
Thanks for using the blueprint an making it your own version,
my wife has an iphone and no alarm sensor, so i have no usecase for it.
but anybody is free to use the blueprint and making his own version of it.
1 Like