I once looked at a smart kettle but immediately abandoned that idea when I saw the price, but then some friends (not HA users) showed me how they had added a smart plug to their kettle so that they can turn it on from other rooms in the house. I thought this was a great idea and realised I could build some extras around it to notify me when the kettle had finished boiling.
Requirements
- A “dumb” kettle, but it must have a physical switch which stays pressed when there is no power to the kettle. Not sure about elsewhere but in the UK you can grab one of these from most supermarkets.
- A smart plug with energy monitoring and high power handling capacity. I use the TP-Link Kasa smart plugs which can handle up to 13A (2990W UK Max.).
Premise
To avoid confusion, I will refer to the switch on the kettle as the “physical kettle switch”
With the power off at the smart plug, fill the kettle and set the physical kettle switch to on. The kettle will not boil because there is no power. As soon as there is power, the kettle should start boiling the water without you having to touch it.
Being heating devices, kettles use a lot of power. Mine seems to use about 11.5A (2600W) when heating the water. Most of these kettles will completely disconnect the power when idle so will, drop to almost 0A (the smart plug uses a bit of power). This gives a wide margin for detecting a “not heating” state.
The Script
Originally I was using automations but I decided on using a script so that a notification is only triggered when starting the kettle through HA. If you want to be notified when the kettle is started manually, convert this to an automation triggered when the smart plug changes state to “on” or when the current goes above 10A.
The script will:
- Turn on the kettle smart plug
- Check that the kettle has been prepared correctly (it will not draw power if the physical kettle switch is off)
- Wait for the kettle to finish boiling and notify you
- Notify you if the kettle has not finished within 2 minutes (safety net)
- Turn off the smart plug afterwards
Always ensure there is water in the kettle and the lid is on before setting the physical kettle switch to on!
alias: Boil Kettle
description: Boils the kettle with a notification once complete (or on error)
sequence:
# Turn on the kettle
- service: switch.turn_on
data:
entity_id: switch.kettle_plug
# Wait 30 seconds for the energy data from the plug to update
- delay:
seconds: 30
- choose:
# If kettle is not using enough power to be heating, send a notification
- conditions:
- condition: numeric_state
entity_id: sensor.kettle_plug_amps
below: 10
sequence:
- service: notify.pushover
data:
title: Kettle Error
message: The kettle did not start heating water when turned on.
- service: switch.turn_off
data:
entity_id: switch.kettle_plug
# If kettle is stating to heat, wait for it to stop or timeout after 2 minutes as there is probably something wrong
default:
- wait_for_trigger:
- platform: numeric_state
entity_id: sensor.kettle_plug_amps
below: 10
timeout:
minutes: 2
continue_on_timeout: true
- choose:
# Kettle finished boiling so notify
- conditions:
- condition: template
value_template: "{{ wait.completed }}"
sequence:
- service: notify.pushover
data:
title: Kettle Finished
message: The kettle has finished boiling.
- service: switch.turn_off
data:
entity_id: switch.kettle_plug
# Kettle monitoring timed out so send an error notification
default:
- service: notify.pushover
data:
title: Kettle Error
message: Timed out waiting for kettle to finish boiling. Something may be wrong.
- service: switch.turn_off
data:
entity_id: switch.kettle_plug
Ideas for expansion
- Could try to determine average boiling time. This will vary based on the amount of water in the kettle but could give a guide on time remaining assuming you fill it roughly the same each time.
- Add some kind of “brewing timer” which can notify you to take the tea bag out.
- See if the “current/consumption drop on finish” detection method can be used for other “dumb” appliances. Saves on the expense of a “smart” appliance which is probably collecting data.