Detect Dishwasher Status via Power Consumption

I am struggeling to detect the dishwasher being done, looking at the power consumption.
Here are three examples of dishwashing:



The washing cycle could potentially be split down into segments of:

  • rinsing/pre-wash
  • heating water
  • washing
  • heating to dry
  • drying/waiting

However there are multiple points especially at the very end, where power consumption drops to zero.
How can I reliably detect, when the fully cycle has been completed?

Current Automations
  ##########################################################
  ## Dishwasher powered off
  ##########################################################
- alias: Dishwasher - powered off
  id: 'dishwasher_powered_off'
  trigger:
      #When power plug is turned off
    - platform: state
      entity_id: switch.dishwasher
      to: 'off'

  action:
    - service: input_select.select_option
      data:
        entity_id: input_select.dishwasher_status_dropdown
        option: 'Off'
  
  ##########################################################
  ## Dishwasher idle
  ##########################################################
- alias: Dishwasher - Idle
  id: 'dishwasher_idle'
  trigger:
      #Initial state, when power plug is turned on
    - platform: state
      entity_id: switch.dishwasher
      to: 'on'
      #Return to idle, after x minutes of being done
    - platform: state
      entity_id: input_select.dishwasher_status_dropdown
      to: 'Done'
      for: '00:15:00'
      ## TBD: No door/window sensor installed to detect 
      ## dishwasher being opend after dishwashing process has finished.

  action:
    - service: input_select.select_option
      data:
        entity_id: input_select.dishwasher_status_dropdown
        option: 'Idle'
        
  ##########################################################
  ## Dishwasher process started
  ##########################################################
- alias: Dishwasher - process started
  id: 'dishwasher_process_started'
  trigger:
      #Power consumption threshold to sense dishwasher is running
    - platform: numeric_state
      entity_id: sensor.dishwasher_power
      above: 5.0 #W
      
  action:
    - service: input_select.select_option
      data:
        entity_id: input_select.dishwasher_status_dropdown
        option: 'Running'

  ##########################################################
  ## Dishwasher process finished
  ##########################################################
- alias: Dishwasher - process finished
  id: 'dishwasher_process_finished'
  trigger:
    #Power consumption threshold to sense dishwasher is done
    - platform: state
      entity_id: sensor.dishwasher_power
      to: 0.0 #W
      for: '00:01:00'
    ## TBD - Done detection currently flawed!!
    
  condition:
    - condition: state
      entity_id: input_select.dishwasher_status_dropdown
      state: 'Running'
      
  action:
    - service: input_select.select_option
      data:
        entity_id: dishwasher_status_dropdown
        option: 'Done'

Can you use time and power? Say 2 hr from when power is above 1.75KW for 10 minutes as a rough example?

In this case I could probably go with a set time from start, but all three examples show a fully loaded dishwasher with the same programme selected.
The duration may change if e.g. the short programme is selected. So going with a fixed time would solve the right detection in most/standard use case, but it wouldn’t be really smart.

1 Like

Yes, this is basically how I monitor my tumble dryer. But if you look at the graphs above, you will notice, that the dishwasher stays on 0W for an extended period of time although it is not yet done with it’s cycle.

I have the same issue as it uses the heat from the wash to dry using no power, I add a longer for:
Could you change yours to this to ignore the 20mins of so of 0W consumption ? You would get a notification 20mins after it has finished though. You might need to increase it to match yours

- alias: Dishwasher - process finished
  id: 'dishwasher_process_finished'
  trigger:
    #Power consumption threshold to sense dishwasher is done
    - platform: numeric_state
      entity_id: sensor.dishwasher_power
      below: 1
      for: '00:20:00'

An idea that comes to mind, although I don’t like it because it creates another entity, is to have create another binary sensor that goes “on” when the first sensor goes “on” and turns “off” after the first sensor has gone to “off” for the x time. This will only work when the amount of stops is fixed. And you could probably combine both sensors; but I refuse to get out of my comfortable bed to tinker with the idea :slight_smile:

You could also set the “delay_off” to a time that is really should be off: say the “time-outs” are always approximately 10 minutes, then you could set the “delay_off:” to 15 minutes.

My tumble dryer never stops spinning after it’s done, it would rotate the drum after it has stopped.