How to convert the smarter ikettle 3.0 to work with ESP home (Electronics knowledge required)

Time to complete. 1-2 hours depending on experience

Its not supposed to be pretty it just is intended to work and if you think you have a better way of doing this then do it your way as my way may not necessarilly be the best but it works for me :slight_smile:

To do this you will need:
Tools:
Crosshead screwdriver
Angle grinder
Soldering Iron
Solder
Parts
ESP32 (I used ESP32 NodeMCU Module WLAN WiFi Dev Kit C Development Board mit CP2102)
Single channel relay unit (I used 5V 1-Channel Relay Board Module for Arduino Raspberry Pi ARM AVR DSP PIC | eBay)
Dupont wires of varying lengths

Warning this involves working with a mains appliance, if you do not feel comfortable in doing this safely then do not start the project. Also this WILL invalidate any product warranty.

Read the instructions first and observe the positions of the components in the final photos before putting this together otherwise your wires may not be the right length.

Once ready create yourself a relay \ esp32 circuit using this diagram
image
Picture is to assist only D22 on this picture is actually GPIO13 in real life.
You will need to connect + to VIN (5v) on the ESP32
You will need to connect - to GND on the ESP32
You will need to connect the remaining connection (I call it signal) to GPIO13 on the ESP32

Now connect a microusb cable which will be your temporary power supply

Flash the ESP32 with ESPhome and get it working on wifi in home assistant then use this code after captive portal

# Define the momentary switch
switch:
  - platform: gpio
    pin: GPIO13
    id: smartboil_relay
    restore_mode: RESTORE_DEFAULT_OFF  # Add this line to set the default state to off

  - platform: template
    name: "Smartboil"
    turn_on_action:
      - switch.turn_on: smartboil_relay
      - delay: 100ms  # Adjust delay as needed
      - switch.turn_off: smartboil_relay
    turn_off_action:
      - switch.turn_on: smartboil_relay
      - delay: 100ms  # Adjust delay as needed
      - switch.turn_off: smartboil_relay

Add it to home assistant through the integrations you should have a switch which you can turn on and off but it will just cause the relay to turn on briefly in all positions.

Now you have done this you need to find 5v as you will be doing away with the microusb connection, luckilly when the kettle base is powered up the white jumper between the PSU and the smarter board has 5v pin 1+ and pin 2- however the cable is twisted so using a voltmeter determine which is pin 1 and 2 if you get a -5v instead of 5v then its round the wrong way.

Once you have found the 5v supply solder and insulate the 2 wires and take the +5v to the VIN (5v) pin on the ESP board. This is the same connection which the relay uses (I have both soldered together) and the - to GND (I used the one between G21 and G19)

So now you can unplug the microusb cable and plug the kettle base in and you should get power to the ESP32 and be able to operate the relay.

Having done that you just need to tap into the 2 solder pads which are where the boil switch is (right at the front) adding 2 wires to this then taking them to the Normally Open connection of the relay.

By doing it this way you can use the smarter app still and any integrations but also use ESP Home to trigger a boil operation.

The smarter PCB should work even if cloud services are down as all you are effectively doing is pressing the boil button using the ESP32 and relay combo.

Final component Placement

Wires soldered to the switch solder pads

Another picture to show the placement of the ESP32 between the smarter board and the cable exit

Jumper wire removed and exposed to test for 5v and for soldering

Relay with edge of board ground off with angle grinder carefully to make it fit in final placement area

ESP32 and relay combo photo of circuit

Piece of casing (upper) cut away to accomodate the wires coming off the back of the ESP32

After creating this I decided it would be useful to know the kettle status i.e Standby \ Boiling
Rather than soldering anything extra onto the boards and due to space limitations I decided it would be easy just to glue a photocell to the top of the boil switch so that when the LED lights up (Boiling) the value of the photocell changes and thus a value is presented to home assistant which can then be used to show the status.

I based my circuit on this diagram and used GPIO32 of the ESP32:
image

The extra code to pick up the raw value was this:

# Define the light sensor
sensor:
  - platform: adc
    pin: GPIO32
    id: smartboil_status_adc
    name: "Smartboil Status ADC"
    update_interval: 200ms  # Adjust the interval as needed
    filters:
      - lambda: return x;  # Use the raw ADC value

Creating an entity (input_text) called smartboil_status I then followed up with an automation:

alias: Smartboil Status
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.esphome_web_c8d4b8_smartboil_status_adc
    for:
      hours: 0
      minutes: 0
      seconds: 0
condition: []
action:
  - choose:
      - conditions:
          - condition: numeric_state
            entity_id: sensor.esphome_web_c8d4b8_smartboil_status_adc
            below: 0.09
        sequence:
          - service: input_text.set_value
            target:
              entity_id: input_text.smartboil_status
            data:
              value: Standby
      - conditions:
          - condition: numeric_state
            entity_id: sensor.esphome_web_c8d4b8_smartboil_status_adc
            above: 1
        sequence:
          - service: input_text.set_value
            target:
              entity_id: input_text.smartboil_status
            data:
              value: Boiling
      - conditions:
          - condition: numeric_state
            entity_id: sensor.esphome_web_c8d4b8_smartboil_status_adc
            above: 1
        sequence: []
mode: single

And this automation to pick up an error state (kettle off base) - note this will also trigger if the kettle boils within a few seconds (i.e its already just been boiled)

alias: Smartboil Error State
description: ""
trigger:
  - platform: state
    entity_id:
      - input_text.smartboil_status
    for:
      hours: 0
      minutes: 0
      seconds: 0
    from: Boiling
    to: Standby
condition: []
action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - choose:
      - conditions:
          - condition: state
            entity_id: input_text.smartboil_status
            state: Standby
        sequence:
          - service: input_text.set_value
            metadata: {}
            data:
              value: Error
            target:
              entity_id: input_text.smartboil_status
mode: single

And of course then theres the create the dashboard part:

Next step will be to add an external infrared heat sensor (on order) so keep an eye on this post for further updates.

I do not recommend you go beyond this as the smarter board has safety features including controlling when the kettle turns off. Whilst it is possible to automate the whole kettle and delete the smarter board totally you leave yourself open to errors which could cause the kettle to overboil or burn out so this is as far as I have taken my project at this time.

1 Like

Thanks for sharing! BTW this yaml isn’t formatted quite right for readability on this forum. You should enclose it with three back ticks.

1 Like