I have taken feedback and built the timer into ESPHome config: smart bed heater update
I have build a smart bed warmer years ago and thought it is worth sharing this silly idea. It is worth noting, that this will highly increase the acceptance factor in your household for your significant other if he or she is always cold. That way you can justify more silly home automation projects.
I am using the following components:
- Home Assistant
- Aqara Button (I am using the Zigbee2MQTT project with a CC2530 router to create the Zigbee network)
- bed warmer/heater
- Some sort of smart socket (in my case Sonoff Basic)
Finding the right bed warmer/heater
You need a bed warmer that will not turn itself off automatically after a fixed time. We want to control that our self. Just research this in the product description, comment ratings, or ask the manufacturer for your product of choice.
I just found a random one on amazon which has a physical switch to turn it off, level 1 and level 2. After some experimentation, I decided to use level 2 because this will heat up the bed way faster than level 1.
Deploy smart socket and switch
Now we need to put the smart socket near your bed, connect this guy with your bed warmer and make your bed. In my case, it was a Sonoff basic which I build some time ago. But you can take any smart socket which is compatible with Home Assistant.
After that, I placed an Aqara switch behind the bed frame. This is just for having easy access to toggle the smart socket. Mostly smart sockets are not in reach when you are being comfy in your bed.
You can use whatever switch you like which is the good thing about Home Assistant. It is flexible to your liking and does not force you into a vendor ecosystem.
Software with ESPHome and Home Assistant YAML
Now comes the software part. Do not worry, it is easy to set up.
ESPHome config for the Sonoff basic
This config is basically the same which is documented for the Sonoff Basic on the ESPHome website:
--- # bedheater esphome: name: sonoff_basic_05 platform: ESP8266 board: esp01_1m wifi: networks: - ssid: !secret wifi_ssid password: !secret wifi_password reboot_timeout: 15min # Enable logging logger: # Enable Home Assistant API api: reboot_timeout: 15min ota: binary_sensor: - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True on_press: then: - switch.toggle: relay name: "sonoff_basic_05_button" - platform: status name: "sonoff_basic_05_status" switch: - platform: gpio name: "sonoff_basic_05_relay" pin: GPIO12 id: relay on_turn_on: - light.turn_on: led on_turn_off: - light.turn_off: led output: # Register the green LED as a dimmable output .... - platform: esp8266_pwm id: basic_green_led pin: number: GPIO13 inverted: True light: # ... and then make a light out of it. - platform: monochromatic name: "sonoff_basic_05_green_led" output: basic_green_led id: led
Home Assistant configuration
When I turn on the
switch.bettheizung_relay (sorry for the German wording here) I will start a timer for 1 hour. After the timer has ended stop the
switch.bettheizung_relay and also reset the timer.
The Aqara button was configured to toggle the
switch.bettheizung_relay on a single button press. Just for easy on and off switching. Sometimes 30 minutes will make you more than toasty.
Suggestion for improvement
This works great for the past couple of years. But I always wanted to improve this by moving the timer logic from Home Assistant to the ESPHome based Sonoff basic. That way the device would always turn itself off after a certain time by itself and would not rely on Home Assistant. Home Assistant only would be used for connecting the bed heater relay with some sort of switch.
If you have an idea of how to accomplish this with ESPHome please let me know.