Controlling a washing machine capacitive start button

I have a Bosch washer and dryer that I would like to start from home assistant (so that they will run when the cost of electricity is low)

Using an ESP32 I connected an input to a status LED which blinks when it’s in standby and is solid when it’s running. This worked fine with the duty_cycle sensor.

My problem is to start the washer it’s a touch button and I can’t get that to work. There is an altmel64 processor in the dryer so my guess is that it’s using there “qtouch” (Introduction to QTouch® Peripheral Touch Controller (PTC) - Developer Help)
What I have tried:

Solder a 20cm cable onto the button pad. This resulted in the button not working at all.

Solder a smal 2cm pin to the button, then the button works and shorting this to ground dose work. But connecting the esp result in nothing.

My configuration:


output:
#capaciative start/pause button
  - platform: gpio
    id: torktummlare_button
    pin:
      number: GPIO23
      mode:
        output: true
    
switch:
  - platform: template
    name: "Diskmaskin start/pause"
    id: diskmaskin_start_pause
    turn_on_action:
      - output.turn_on: torktummlare_button
      - delay: 2s
      - output.turn_off: torktummlare_button
        


  
sensor:
  - platform: duty_cycle
    pin: GPIO22
    name: diskmaskin_led_duty_cycle
    update_interval: 2s
    on_value_range:
    - below: 50.0
      then:
        - text_sensor.template.publish:
            id: torktummlare_status
            state: "Standby"
    - above: 50.0
      then:
        - text_sensor.template.publish:
           id: torktummlare_status
           state: "running"
    
text_sensor:
  - platform: template
    name: "Torktummlare"
    update_interval: 2s
    icon: "mdi:washing-machine"
    id: 

1 Like

Not quite what you asked, but SwitchBot Bot | Smart Switch Button Pusher for Home Switch Controling – SwitchBot International

@nickrout thanks for the replay, unfortunately that won’t work as this is a captivate button. Below are two photos of how it looks.


You can control capacity Touch Buttons with a small capacity (for example 100pf) in series to a simple bc847 switching to earth (or gnd).
Probably the gpio configured as open drain could also work in stead of the additional bc847.

1 Like

Thanks! I’ll try that

Were you successful?

Unfortunately not :frowning: actually found out that my washer had a function for delayed start built in :grinning_face_with_smiling_eyes:

So does mine, but would still like to have the option to “press the break” if hourly electricity rates exceed x - specifically for the dryer.

I’ve managed to control the start button of a Bosch dryer.
The principle of how the sensor works is shown in the picture.

Schermafbeelding 2023-07-20 om 06.41.46

There is a send pin where the square signal is coming from and is read by the receive input.
Because of the high value of R (1 MOhm) the signal to the receive pin can be effected by the human body. The signal will be dropping and the controller will detect this.
I’ve used this to simulate a touch from a human body.

The resistor R have value of 1 mega Ohm (printed as 105) and need to be replaced by a trimmer (20K) and a resistor (1M). Schematic below.

Keep the wire from the 1M resistor as short as possible otherwise it will effect the signal to the receiver input. Connect the trimmer to the GPIO of the ESP board. Configure the GPIO as an Open Drain.


The trimmer is mounted at the ESP controller board.

With this trimmer you can adjust the level of the simulated ’ human body’.
Turn the trimmer and generate a puls via the ESP board. Keep trying by turning and pulsing till the dryer controller ‘thinks’ this must be a human body. Play a little with this trimmer to get a perfect detection and control.

output:
#capaciative start/pause button
  - platform: gpio
    id: dryer_button
    pin:
      number: GPIO23
      mode: OUTPUT_OPEN_DRAIN
      inverted: True
      
switch:
  - platform: template
    name: "Droger start/pause"
    id: dryer_start_pause
    turn_on_action:
      - output.turn_on: dryer_button
      - delay: 1s
      - output.turn_off: dryer_button

sensor:
  - platform: duty_cycle
    pin: GPIO22
    name: dryer_led_duty_cycle
    update_interval: 2s
    on_value_range:
    - below: 4.0
      then:
        - text_sensor.template.publish:
            id: dryer_status
            state: "Uit"    
    - above: 4.0
      below: 40.0
      then:
        - text_sensor.template.publish:
            id: dryer_status
            state: "Low energy"   
    - above: 40.0
      below: 80.0
      then:
        - text_sensor.template.publish:
            id: dryer_status
            state: "Standby"      
    - above: 80.0
      then:
        - text_sensor.template.publish:
           id: dryer_status
           state: "Aan"

text_sensor:
  - platform: template
    name: "Droger"
    update_interval: 2s
    icon: "mdi:tumble-dryer"
    id: dryer_status    

Now you can operate remotely when the dryer is in standby and still use the start/pause button at the dryer.

5 Likes

thnx, really cool.

Did you document some more? I am planning to apply this to my 12 year old Bosh dryer.
when I remove the panel, I got scared by the 10 or something wires, So I placed it back.

But it would be great if I could find some more information.

There are a few things I’m wondering about.

  • which esp32 module did you use.
  • could you grep the power from somewhere?
  • I think you only capture the “On” led, this this correct?
  • would a status change from “Aan” to “Standby” main the dryer is done? or do I also need to capture the buzzer if I want to have this information?

Any information would be helpfull. Thank youl