In my recent post about the smart bed heater I had a suggestion to move the logic for the timer from Home Assistant to the Sonoff Basic but I never looked into it because it is running reliably for years now. I think it must be something around 2018 when I build this.
Also, I am lazy. 😉
But after sharing this post on the Home Assistant Reddit someone told me it is easy to do:
Timed turn off in ESPHome is pretty straightforward - you just need to add something like
on_turn_on: - then: - delay: 30m - switch.turn_off: relay
to your switch component.
Since this seemed so easy I just tested this. The suggestion was not 100% correct but close. Here is the changed ESPHome config with the integrated time:
--- # 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 - delay: 2700s - switch.turn_off: relay 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
The only change is adding the
delay: 2700s and the
switch.turn_off: relay to the
switch: block and then removing all the timer logic in Home Assistant. The only thing to keep in Home Assistant is now the button press action which will turn on the relay.
Now the ESPHome device (Sonoff Basic) will turn itself off after 2700 seconds which are 45 minutes. That is enough for my particular bed warmer to heat up the bed properly. Your mileage may vary.
The Power of ESPHome
Having the ability to change the device default behavior with your own firmware and without code is just awesome.
Think of it this way. When you have a smart socket from some vendor X the vendor decides what you can do with YOUR device. The vendor also could have good intentions and integrate the device with a local API in Home Assistant, no cloud needed, etc.
A non ESPHome based smart socket will most likely not allow changing the intended behavior.
With ESPHome on the other hand I can do almost whatever I want.
Heck, I could decide to switch any other relay instead of the built-in relay. The smart button could be used to do anything Home Assistant is capable of. Even delivering a pizza from Dominos 🍕.
Unfortunately, the Home Assistant Dominos integration is not available in Germany 🙁.
So check out the ESPHome project if you are thinking of buying smart devices. This could impact your decision. It sure does impact mine!