Blog

Room wake-up light: Custom room-wide wake-up light using Home Assistant

(updated January 27, 2019)
Table of contents

Recently I started using Home Assistant (HA) as a tool to control the lights in my home. My previous system was based on Homekit and, while working fairly good, lacked tools to further customize the automations. To get more control I switched to HA.

One of the first things I created using HA was a room wake-up light. I do own a Philips wake-up light but this doesn’t light up my whole room so that left room fore improvement. The automation I built using Home Assistant slowly lights my room every morning. The system works with any smart lamp that is compatible with HA, this includes Philips Hue] and IKEA Tradfri lamps. I use it with a few GU10 bulbs (like the Hue GU10 lights).

In this post I’ll show you how to build this system. The automation will be configurable (on/off, time) and has a switch to disable it on weekends.

More interested in Node-RED? Please read my post titled “Node-RED based custom full-room wake-up light”.

Dashboard widget of the Wake-up light component. All functions are configurable through the Home Assistant dashboard.
Dashboard widget of the Wake-up light component. All functions are configurable through the Home Assistant dashboard.

Example hardware

I’ve used the following components for my Wake-up light:

These components are just an example. A minimum requirement is a device that runs Home Assistant and a smart light that you can control.

My Home Automation hardware setup

Time sensor

First step is to add a new sensor that measures time. This sensor will trigger the automation at the correct time. Add the following to sensors.yaml:

# sensors.yaml
- platform: time_date
  display_options:
    - 'time'

Make sure that this file is included in your configuration.yaml file, if not add the following:

# configuration.yaml
sensor: !include sensors.yaml

Create dashboard widget

Next we build the dashboard widget. The widget consists of three controls: (1) a time input to control when the lights should go on, (2) an on/off switch and (3) a switch to enable the system on weekends.

We start with the two switches which are implemented as an input_boolean. Add the following to configuration.yaml:

# configuration.yaml
input_boolean :
  wakeup_enabled:
    name: "Wake-up lights"
    initial: on
    icon: mdi:theme-light-dark
  wakeup_weekend:
    name: "Enable Wake-up on weekends"
    initial: off # I disable the system on default on weekends
    icon: mdi:calendar-blank

The icons can be customized, see Material Design Icons for more options.

The third input controls the time of the wakeup light. For this we use input_datetime with the date component disabled as we are only interested in time.

# configuration.yaml
input_datetime:
  wakeup_time:
    name: "Start lights at"
    has_time: true
    has_date: false
    initial: "07:20"

To group the controls together in a single card on the dasboard we need to make a new group. Add the following to the groups.yaml file. Again make sure that this file is included in configuration.yaml.

# groups.yaml
alarm_clock:
  name: "Wake-up Lights"
  entities: # Add all entities here that should be part of the widget
    - input_datetime.wakeup_time
    - input_boolean.wakeup_enabled
    - input_boolean.wakeup_weekend

Note: As someone pointed out in the comments, if you want to persist the values between restarts of Home Assistant remove the ‘initial’ value from the configuration.

Create the automation

With all controls defined we can make the automation itself. The automation consists of three components: the trigger, the condition and the action. Add the following to automations.yaml:


# automations.yaml
- alias: "Wake-me up using bedroom lights"
  trigger:
    # Something that triggers the automation
  condition:
    # A list of conditions that need to be met
  action:
    # The action we want to perform.

The trigger is based on the time sensor we just created. It gets the state of the sensor and checks whether this value matches the value of our datetime input.


trigger:
  platform: template
  value_template: "{{ states('sensor.time') == (states.input_datetime.wakeup_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"

The trigger we defined above will fire regardless of the on/off switches. To include the switches in the automation we have to create a list of conditions. The first condition checks whether the wake-up light is enabled, if not the automation is not executed at all. Then we add an or condition that checks whether it is a weekday (a condition on time) or that the weekend switch is enabled. Only one of the or conditions has to be met.


condition:
  - condition: state
    entity_id: input_boolean.wakeup_enabled
    state: 'on'
  - condition: or # One of the conditions below must be true
    conditions:
      - condition: state # Will be true when the switch is 'on'
        entity_id: input_boolean.wakeup_weekend
        state: 'on'
      - condition: time # Will be true on weekdays
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri

Last we define what to do when all conditions are met. In my case I slowly fade in all the lights in the group.bedroom group. You can add your own lights here.


action:
  - service: light.turn_on
    entity_id: group.bedroom # Put the entity of your light or your group here
    data:
      transition: 600 # Transition time in seconds
      brightness: 255

The full automation with everything filled in, this should be placed in automations.yaml.


# automations.yaml
- alias: "Wake me up with bedroom light transition for weekdays"
  trigger:
    platform: template
    value_template: "{{ states('sensor.time') == (states.input_datetime.wakeup_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }}"
  condition:
    - condition: state
      entity_id: input_boolean.wakeup_enabled
      state: 'on'
    - condition: or
      conditions:
        - condition: state
          entity_id: input_boolean.wakeup_weekend
          state: 'on'
        - condition: time
          weekday:
            - mon
            - tue
            - wed
            - thu
            - fri
  action:
    - service: light.turn_on
      entity_id: group.bedroom
      data:
        transition: 600
        brightness: 255

Enable the automation

With everything filled in restart HA. The widget should be available on your dashboard. From there you can enable the widget and set a custom time. Your lights should now go on at the defined time.

Comments (31)

G Gary

Hi Wouter,
Checked your automation and is looking great.
However, using Ikea's Tradfri, it sadly seems not to work.
Is this automation stille working for you and any idea how I could troubleshoot please?

W Wouter Bulten

Hi Gary, what kind of problems do you encounter with your Tradfri lights? One thing to consider is that you can't set brightness and color_temp on Ikea lights in a single call.

G Gary

Thanks for replying. No, I'm not using the brightness neither the color temp. I did use your automation and set it up as described. However, the lights ain't doing anything. Tried troubleshooting but they just don't seem to react. I first try with the group, also tried with one of the two lights but they seem not to like turning on. In the Ikea app, you can use them and that works but I'd like to use the HA without all the seperate apps.
Any idea?

W Wouter Bulten

Hi Gary, can you turn on the lights using the HA dashboard? Also check your logs, maybe there is a small error and the logs usually give an indication where. Let me know if you have more info!

G Gary

Hi,
I did check the logs before I contacted you... nothing.
The same lights are controled by HA and even by a xiaomi sensor when detecting movement.

Gary

F Fredrik Lysen

Hi Gary,
You probably need to create a custom script for IKEA trådfri that does the colour brightness change in two or more steps with a sleep between the changes. IKEA trådfri can't take multiple changes in one command.

W Wouter Bulten

Good suggestion! Not sure whether Gary is using brightness and color temp.

One other thing to consider: I have seen some reports that IKEA lights are unresponsive during a transition. So take in to account that you possibly can't send a new command to the lights when they are still performing the transition.

M Markus

Hi,

thank you very much for the detailed article, found exactly the solution i was trying to implement. ;-)

Just to bring topics together - i found this article regarding "Light Fade In" in the HA forums, which follows another aproach - for example useful for the Tradfri Lights? - https://community.home-assi...

I'm using Tradfri lights in two kids rooms, at the moment the automation is triggered correctly, but the lights will turn on immediately to the given brightness, the transition seems to be ignored. I'll try Frederiks solution via script tonight, thanks again!!

W Wouter Bulten

Hi Markus, thanks for the suggestion! I'm glad the article helped. I've done something similar now for my implementation in Node-RED: I increase the brightness manually every minute instead of using a long transition. For some lights (like Tradfri) this seems to be more stable.

Good luck with your implementation!

A asdf

Remove all three "initial: ...." fields if you want the settings to be saved between restarts

W Wouter Bulten

Good tip, I will add it to the post!

C Caitlin T

Hi, do you know if there's a way to make the wake up light start at the reddest colour and gradually change to a whiter colour while it's also turning the brightness up?

W Wouter Bulten

Hi Caitlin, I think you can just add the color_temp to the "turn_on" call. It depends on the lights whether this is supported. The Ikea Tradfri lights don't for example (see https://www.wouterbulten.nl.... For those case you could write a small script that loops and sends a command every minute or so.

C Caitlin T

Yeah I have the Tradfri lights. I don't know anything about writing scripts, but I'll check out your link and see if it helps.

Q quantummobile

Hi Wouter,

thanks for great automation - works perfectly with Ikea Tradfri E28 bulbs.
Would be very convenient to have transition time and brightness configurable in a widget as well.

W Wouter Bulten

Thanks! You could use data_template in combination with an additional input to build that. Would be a nice addition indeed!

Q quantummobile

Hi,

maybe you could help with the code? :) I am very bad in code writing.

Thank you in advance!

D Dmitry

Hi Wouter,

How I can add widget group to lovelace properly?
I adding it like this

type: entities
entities:
- entity: group.alarm_clock

W Wouter Bulten

Hi Dmitry, I will have to update the post. For now you can edit it through the manual mode of Lovelace. I don't have a lovelace config (yet). If you have one and are willing to share I would happily ad it to the post :)

F fshkypr

thank you for sharing. unfortunately i'm having some issues getting this to work properly. im using Teckin SB50v3 light bulb flashed with Tasmota. i can trigger the light on with the automation.. but it wont run when i set the alarm. any idea how i could get this to work. thanks

W Wouter Bulten

Hi. It should work regardless of which light you use, as long at is controllable through Home Assistant. Based on your information, it's hard to determine where it goes wrong. Does the automation trigger at the right time?

W Wout

Hi, thanks for sharing this. Unfortunately, I’m still a noob in this...how do I integrate this with Lovelace? A very big thank you!

W Wouter Bulten

Hi Wout. To add to your lovelace view, just make a new card with the following entities:

input_datetime.wakeup_time
input_boolean.wakeup_enabled
input_boolean.wakeup_weekend

T Tom
For whatever reason, mine comes on full brightness. I suspect the switch cant transition, but i don't know how to check Light was bought from Costco Feit brand, and configured in esp home as a Tuya dimmer. I have tried several things and it will either not respond, or it will come on full
W Wouter Bulten
Hi Tom, I don't have any lights from that brand. Can you control the brightness in Home Assistant itself? If not, then it's maybe hardware related. Regards, Wouter
H Hille
Hi Wouter, Thanks for this clear post. Although I am new to Home Assistant, it was easy to install with this elaborate description. Only I have 1 question, on which I couldn't find the answer somewhere else on the internet: could it be possible to set the time in Lovelace as the alarm time, such that the brightness of the lights is at its maximum at that time? I assume that, if it is possible, this should be done in the trigger value_template. Such that it should start x seconds before the set alarm. The reason I ask is, since I own a Philips Wake-up light (which will be unnecessary in the future ;) ) , and when you set the alarm on that, the wake-up light starts 30 min before the alarm increasing its brightness from 0 to 100% . Most of the time I am awake just before the alarm goes off. But then the alarm is a back-up.
W Wouter Bulten
Hi Hille, Thanks! You mean that instead of entering the "start time" you would like to define the "end time"? That should be possible. You probably need to update the trigger for that. You could take a look at `timedelta` in the HA docs: https://www.home-assistant.io/docs/configuration/templating/#time Maybe you could calculate the time diff between your alarm and the current time, and then trigger if it's a 30 minutes before that. There are also some examples on the HA forum that you could check out, for example: https://community.home-assistant.io/t/trigger-automation-15-minutes-before-date-time-stored-in-input-datetime/145279 Quite some things have changed in the last version of HA regarding automations in YAML so there is probably an elegant way to do this. Let me know if this helps you further!
H Hein
Hey Wouter, Dank voor de goede heldere uitleg. Ben net zelf begonnen in de wereld van HA te ontdekken dus alles is nieuw. Maar heb nu wel een alarm licht erbij in de kamer dus dat is top. Ik gebruik een Tuya wifi smartlamp. Kan het zijn dat het langzaam sterker gaan branden alleen werkt bij Philips HUE of IKEA tradfri lampen? Ik heb de indruk dat die Tuya lamp in een keer aanspringt.
W Wouter Bulten
Hi Hein, Leuk dat je begonnen bent met HA. Kun je de lamp wel dimmen in Home Assistant zelf? Het zou kunnen dat die lampen geen `transition` ondersteunen. In dat geval zou je het zelf moeten inbouwen. Ik heb deze lampen zelf niet dus kan het ook niet testen. Misschien dat deze [post op het HA forum](https://community.home-assistant.io/t/transition-not-working-with-nooie-tuya-smart-bulb/247888/3) je kan helpen. Succes! Wouter
M Max
Hy and thanks for that somehow i mad a mistake but cant figure out what i did wrong maybee you can help me on theese errormessages when trying to restart and checking the config. Invalid config for [input_datetime]: expected a dictionary for dictionary value @ data['input_datetime']['has_date']. Got False expected a dictionary for dictionary value @ data['input_datetime']['has_time']. Got True expected a dictionary for dictionary value @ data['input_datetime']['initial']. Got '07:20' expected a dictionary for dictionary value @ data['input_datetime']['name']. Got 'Start lights at' expected a dictionary for dictionary value @ data['input_datetime']['wakeup_time']. Got None. (See /config/configuration.yaml, line 25).
W Wouter Bulten
Hi Max! Can you share your config? I've also noticed that you use capital letters for the booleans, instead of 'true'/'false'. See also: https://www.home-assistant.io/integrations/input_datetime/ Hope that helps!

Adding new comments is no longer possible. If you have a question or remark, please reach out via the contact page.

Copyright © 2026 Wouter Bulten

I may not have gone where I intended to go, but I think I have ended up where I needed to be.

— Douglas Adams, The Long Dark Tea-Time of the Soul

Colophon & disclaimer