DIY "Smart" Kettle

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

:warning:
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.

Put weight sensors underneath to predict whether there is actually water in the thing. (and you could also predict boiling time from weight.)

1 Like

Put weight sensors underneath

I wanted to do just this - do you have any suggestions for weight sensors that would do the trick?

I was watching a video on weight sensors the other day - hold on…

This one https://www.youtube.com/watch?v=ofHqZJTxBnE

For this, where you want it in the kitchen, I would get some nice wooden or glass board to put the kettle to sit on, and put the sensors underneath in each corner.

Or on a cordless kettle, perhaps just under the base?

1 Like

I like this project sadly I bought a smart kettle in 2015, now the cloud service has died a death this could be an option. Option 1 is to use an ESP8266 and see if I can control the kettle in its existing form :slight_smile: Just as a thought though, I think this would be a nice addition to a home grown smart kettle : https://www.instructables.com/Infrared-Sensor-With-ESP8266/