My kids, specifically the eldest, loves to wake up before 7. My wife and I, do not like to wake up before 7. My kids can’t read the time yet or understand why every month the sun seems gets up at a different time.
Our solution to help stop this was a sleep training clock: a visual way to differentiate sleeping time with awake time. Online they run about $40 and, in my opinion, are just over the top with features and buttons. A simple scheduled LED was all we were after. So I built one with an esp8266, ESPHome, & HomeAssistant:
- RGB LED (I used a common anode variety)
- Some 300 ohm resistors
- Some wires & soldering stuff
- A functional Home Assistant installation (mine on a RPI3)
- ESPHome Add-on in Home Assistant
- An understanding of setting up and using ESPHome
Wiring it Together
I’ve just moved to using an iPad as my primary personal computer so I no longer have Fritzing, so my crude drawing in Notes.app will have to do:
Setting up ESPHome Module
In Home Assistant follow the ESPHome Add Module wizard filling in info about your ESPHome and WIFI networking settings. Editing the file once complete, mine looks like:
esphome: name: sleep_training_light platform: ESP8266 board: esp12e wifi: ssid: !secret wifi_name password: !secret wifi_pass manual_ip: static_ip: !secret sleep_training_light_ip gateway: !secret ip_gateway subnet: !secret ip_subnet # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "sleep-training-light" password: !secret fallback_pass # LED # @see https://community.home-assistant.io/t/inverse-rgb-led-values/170069/3 # common Anode light: - platform: rgb name: "Sleep Training Light" red: output_red green: output_green blue: output_blue output: - platform: esp8266_pwm id: output_red #D6 pin: GPIO12 inverted: true - platform: esp8266_pwm id: output_green #D7 pin: GPIO13 inverted: true - platform: esp8266_pwm id: output_blue #D5 pin: GPIO14 inverted: true captive_portal: # Enable logging logger: # Enable Home Assistant API api: password: !secret api_pass ota: password: !secret ota_pass
Add to HA
Home Assistants notification area should alert you to the new ESPHome device. You can add this entity.
At time of writing, I found the Confugration > Automattions area of Home Assistant a bit buggy, I ended up mostly setting up the automation via the File Editor. Here’s why my
/config/automations.yaml looks like:
- id: sleep_training_light_night alias: Sleep Training Light -> Night description: '' trigger: - platform: time at: '20:00:00' action: - data: brightness: 80 entity_id: - light.sleep_training_light rgb_color: - 162 - 116 - 255 service: light.turn_on entity_id: light.sleep_training_light mode: single - id: sleep_training_light_wakeup alias: Sleep Training Light -> Wake Up description: '' trigger: - at: 07:00:00 platform: time action: - data: brightness: 0 entity_id: - light.sleep_training_light rgb_color: - 0 - 0 - 0 entity_id: light.sleep_training_light service: light.turn_on mode: single
This turns on the light at 8:00pm, and turns off the light at 7:00am.
I designed a custom case (will update this post with a link to the thingiverse.com design shortly) for another project (IR Blaster) and reused it for this one, however I printed with clear filament and kept the RGB LED inside, giving the box a nice glow: