The automation runs nicely now without the delay period. I set the config to trigger a notification between 1.2 and 1.5 watts in the end so if I turn the machine on then off (and don’t set it running) I don’t get a notification. At idle the machine is between 0.9 and 1.1 watts and at the end of a cycle when the door is locked it’s between 1.2 and 1.5 watts.
Further developments with the TP-Link HS110 plug:
I’ve implemented a 60 second delay for when the current is <1.5 watts at the end of the washing machine cycle to wait for the locked door to open. So I only get the notification after the door opens. Plus if I turn the machine on the off and don’t set a cycle running it doesn’t send a notification. I did this with the below code:
switch:
- platform: tplink
host: 192.168.1.206
name: "Washing Machine"
sensor:
- platform: template
sensors:
washing_machine_current:
friendly_name: 'Washing Machine Current <1.5 watts'
value_template: '{{ states.switch.washing_machine.attributes["Current consumption"] | replace(" W", "") | float <1.5 }}'
notify:
platform: pushbullet
api_key: xxxxx
name: pushbullet
automation:
- alias: "Notify when the washing machine cycle is complete"
trigger:
platform: state
entity_id: sensor.washing_machine_current
from: 'False'
to: 'True'
for:
seconds: 60
action:
service: notify.pushbullet
data_template:
title: "The washing machine has finished."
message: "It's ready to be emptied"
Hmm, this the same guy who was about to give up? Now tweaking the code to make it even better!
Nice work man; glad you stuck with it!
It’s very rewarding when it works hence I stuck with it! I’ve now got it notifying Kodi when the washing machine door unlocks at the end of the cycle (so when I’m watching the TV an on screen message flashes up) as well as Pushbullet sending a notification to my phone (which is spoken out loud with TTS) and my PC.
I wasn’t able to have the same automation doing two actions, I think perhaps my formatting was off so I created a second duplicate automation for Kodi.
switch:
- platform: tplink
host: 192.168.1.206
name: "Washing Machine"
sensor:
- platform: template
sensors:
washing_machine_current:
friendly_name: 'Washing Machine Current <1.5 watts'
value_template: '{{ states.switch.washing_machine.attributes["Current consumption"] | replace(" W", "") | float <1.5 }}'
notify:
- platform: pushbullet
api_key: xxxxxx
name: pushbullet
- platform: kodi
name: kodi
host: 192.168.1.106
port: 80
automation:
- alias: "Notify Pushbullet when the washing machine cycle is complete"
trigger:
platform: state
entity_id: sensor.washing_machine_current
from: 'False'
to: 'True'
for:
seconds: 55
action:
service: notify.pushbullet
data_template:
title: "The washing machine has finished."
message: "It's ready to be emptied"
Automation 1:
- alias: "Notify Kodi when the washing machine cycle is complete"
trigger:
platform: state
entity_id: sensor.washing_machine_current
from: 'False'
to: 'True'
for:
seconds: 55
action:
service: notify.kodi
data_template:
title: "The washing machine has finished."
message: "It's ready to be emptied"
Can you share - you automation scripts. Im setting this up as a request from my wife.
Thank you in advance.
Here’s the one for the washing machine
sensor:
washing_machine_watts:
value_template: '{{ states.switch.hs110_washing_machine.attributes["current_consumption"] | replace(" W", "") | float }}'
unit_of_measurement: 'W'
# True when washer power level is below 3.4 watts, high threshold of resting state
# Default state is true
washing_machine_power_down:
value_template: "{{ states('sensor.washing_machine_watts') | int < 3.4 }}"
washing_machine_power_up:
value_template: "{{ states('sensor.washing_machine_watts') | int > 3.4 }}"
stopwatch:
friendly_name: "Time Elapsed"
value_template: >
{% if is_state('input_boolean.stopwatch', 'on') %}
{{ relative_time(states.automation.stopwatch_start.attributes.last_triggered) }}
{% elif is_state('sensor.stopwatch', 'unknown') %}
0 seconds
{% else %}
{{ states('sensor.stopwatch') }}
{% endif %}
entity_id:
- automation.stopwatch_start
- automation.stopwatch_update
- automation.stopwatch_stop
automation:
- alias: "Washing Machine Finish iOS Notification"
hide_entity: true
trigger:
- platform: state
entity_id: sensor.washing_machine_power_down
from: 'False'
to: 'True'
for:
minutes: 3
condition:
condition: state
entity_id: input_boolean.washing_machine_switch
state: 'on'
action:
- service: input_boolean.turn_off
entity_id: input_boolean.washing_machine_switch
- service: input_boolean.turn_off
entity_id: input_boolean.stopwatch
- service: notify.ios_jonos_iphone
data_template:
title: "Washing Done"
message: "Time Taken: {{ states('sensor.stopwatch') }}"
data:
- condition: time
after: '07:00:00'
before: '22:30:00'
- service: media_player.volume_set
data_template:
entity_id: media_player.google_home
volume_level: 0.27
- service: tts.google_say
entity_id: media_player.google_home
data_template:
message: "The Washing Machine has finished"
Thank you…
Where are the automations that you list under the entitys… I have tried your stop watch and get plenty of errors
Ooops, missed that out out!
automation:
- alias: "Stopwatch Start"
hide_entity: true
trigger:
platform: state
entity_id: input_boolean.stopwatch
to: "on"
action:
- service: input_boolean.toggle
entity_id: input_boolean.dummy
- alias: "Stopwatch Stop"
hide_entity: true
trigger:
platform: state
entity_id: input_boolean.stopwatch
to: 'off'
action:
- service: input_boolean.toggle
entity_id: input_boolean.dummy
- alias: "Stopwatch Update"
hide_entity: true
trigger:
platform: time
seconds: '/1'
condition:
condition: state
entity_id: input_boolean.stopwatch
state: 'on'
action:
service: input_boolean.toggle
entity_id: input_boolean.dummy
input boolean:
dummy:
name: "Dummy"
initial: off
Thanks I had got
I’ve got alerting on my washing machine a couple of months ago as well. Now including a way to only alert the people at home, or wait until the first one comes home
But… I’ve noticed that HA often sends me alerts during the night that the laundry is finished when it actually wasn’t in use.
It seems that every once in a while that plug has a small power peak (although i don’t see it in HA history) and that then triggers my automation:
automation:
- alias: Action - Set washing machine as finished
id: '1514637057229'
trigger:
- platform: numeric_state
entity_id: sensor.washingmachine_watts
below: '5'
for:
minutes: 5
condition: []
action:
- service: input_boolean.turn_on
entity_id: input_boolean.washingmachine_finished
I think setting a condition would solve the issue. A condition such as, if the power usage has been >0 W in the past 30 minutes. But this conflicts with the trigger. Any suggestions?
I’m having the same problem, random notifications. I’m thinking about setting up a trend or statistics sensor to sample and track the rise (and fall) of the power consumption over a 30 second period to determine whether the washer is off or on.
perhaps it’s a bit too late for you, but I’ve solved it with the following code that I put together in a package. It invokes a script that determines who to alert, but you can replace that with every type of notifier.
This code has been rock solid on me for over two months now.
#-------------------------------------------
# Washing Machine Related Packages
# @Naveci
#-------------------------------------------
#-------------------------------------------
switch:
- platform: tplink
host: x.x.x.x
enable_leds: true
sensor:
- platform: template
sensors:
washingmachine_amps:
value_template: '{{ states.switch.washing_machine.attributes.current_a}}'
unit_of_measurement: 'A'
friendly_name: 'Washing Machine ampère'
washingmachine_volts:
value_template: '{{ states.switch.washing_machine.attributes.voltage}}'
unit_of_measurement: 'V'
friendly_name: 'Washing Machine voltage'
washingmachine_watts:
value_template: '{{ states.switch.washing_machine.attributes.current_power_w}}'
unit_of_measurement: 'W'
friendly_name: 'Washing Machine current consumption'
washingmachine_total_kw:
value_template: '{{ states.switch.washing_machine.attributes.total_energy_kwh}}'
unit_of_measurement: 'kWh'
friendly_name: 'Washing Machine total consumption'
input_boolean:
washingmachine_finished:
name: Washingmachine Finished
initial: off
washingmachine_running:
name: Washingmachine Running
initial: off
input_select:
washingmachine_status:
name: Washingmachine Status
options:
- "Powered Off"
- "Running"
- "Finished"
initial: "Powered Off"
icon: mdi:washing-machine
#-------------------------------------------
group:
washing machine:
name: Washing Machine
view: no
entities:
- sensor.washingmachine_amps
- sensor.washingmachine_volts
- sensor.washingmachine_watts
- sensor.washingmachine_total_kw
#-------------------------------------------
automation:
- alias: Action - Set washing machine to running
id: '1514637041932'
trigger:
- platform: numeric_state
entity_id: sensor.washingmachine_watts
above: '5'
for:
minutes: 10
condition: []
action:
- service: input_select.select_option
data:
entity_id: input_select.washingmachine_status
option: "Running"
- alias: Action - Set washing machine as finished
id: '1514637057229'
trigger:
- platform: numeric_state
entity_id: sensor.washingmachine_watts
below: '10'
for:
minutes: 10
condition:
- condition: state
entity_id: input_select.washingmachine_status
state: "Running"
action:
- service: input_select.select_option
data:
entity_id: input_select.washingmachine_status
option: "Finished"
- alias: Notify - Washing machine finished
id: '1514634021340'
trigger:
- platform: state
entity_id: input_select.washingmachine_status
to: "Finished"
condition:
- condition: state
entity_id: group.hometracking
state: 'home'
action:
- service: script.notify_engine_present_people
data_template:
title: 'Washing Machine:'
message: "The washing program is finished. Please take out the laundry."
- service: input_select.select_option
data:
entity_id: input_select.washingmachine_status
option: "Powered Off"
- alias: Notify - Washing machine finished when someone arrives
id: '1514631344131'
trigger:
- platform: state
entity_id: group.hometracking
to: 'home'
condition:
- condition: state
entity_id: input_select.washingmachine_status
state: "Finished"
action:
- service: script.notify_engine_present_people
data_template:
title: 'Washing Machine:'
message: "The washing program has been finished for {{ ((as_timestamp(now())-as_timestamp(states.input_boolean.washingmachine_finished.last_updated))/60)|round(0) }} minutes. Please take out the laundry."
- service: input_select.select_option
data:
entity_id: input_select.washingmachine_status
option: "Powered Off"
PS. the group home tracking is just a group that I put ourselves in to see whether anyone is home. Our own entities are filled by one or more devices as well. So for myself, I track my two phones and laptop to see if any of those three is home.
Thanks @naveci. I have very similar code but it seems my Tasmota powered Sonoff POW is spiking at random times of the day which may be causing my random notifications.
I have a condition around my TTS notifications so they only fire between 0900 and 2000 which sorts most of it but I was looking to see if there way a way to average out these spikes to minimize the false detections. Like you, I track the power usage and when it’s low for 10 seconds I say it is ended.
- alias: 'Laundry: Washing Ends'
trigger:
- platform: numeric_state
entity_id: sensor.washing_machine_power
below: 10
for:
seconds: 10
I’ve just tweaked my on boolean so it looks for higher power usage and waits longer to trip the input boolean to mark the washing machine as active.
automation:
- alias: 'Washing Begins'
trigger:
- platform: numeric_state
entity_id: sensor.washing_machine_power
above: 55
for:
seconds: 45
I had a similar issue with my Sonoff Pow on the washing machine @xbmcnut, solved the notification power spike issue by adding in a condition that the switch must be on for the notification to fire.
- alias: Washing has Finished - Jason
hide_entity: true
trigger:
platform: state
entity_id: binary_sensor.washing_machine_power
from: 'off'
to: 'on'
for:
minutes: 1
condition:
condition: state
entity_id: switch.sonoff_pow_1
state: 'on'
action:
service: notify.jason
data:
message: "The Washing has Finished"
Thanks @kanga_who. I should have posted my full code as I have that already but I sometimes get random notifications which shouldn’t happen.
automation:
- alias: 'Washing Begins'
trigger:
- platform: numeric_state
entity_id: sensor.washing_machine_power
above: 55
for:
seconds: 45
condition:
- condition: state
entity_id: input_boolean.washing_active
state: 'off'
action:
- service: input_boolean.turn_on
entity_id: input_boolean.washing_active
- alias: 'Laundry: Washing Ends'
trigger:
- platform: numeric_state
entity_id: sensor.washing_machine_power
below: 10
for:
seconds: 10
condition:
- condition: state
entity_id: input_boolean.washing_active
state: 'on'
- condition: time
after: '09:00:00'
before: '20:00:00'
action:
- service: tts.google_say
entity_id:
- media_player.kitchen_home
- media_player.gaming_room_home
- media_player.ensuite_speaker
data_template:
message: "The washing machine has finished"
- service: input_boolean.turn_off
entity_id: input_boolean.washing_active
I had phantom “dryer done” notifications too. I noticed it wasn’t a spike but wifi dropout on the hs110 with the readings going from nothing to zero. I have my config for the hs110 documented here if anyone is interested http://inspectmygadgets.com/making-a-dumb-dryer-smart/
thanks to your guide explained in detail I managed to do everything perfectly without problems. Thank you so much for sharing!
I had a problem with my dishwasher “powering down” and double triggering. Some sort of drying cycle I guess but it gave a false trigger of completing. I solved it by counting the power cycles using the variable component (a must have HA add-on IMHO).
Here is what I did:
Create the template sensor to represent the dish washer. On is based on trigger power level
- platform: template
sensors:
appliance_washon:
friendly_name: Appliance Dishwasher
value_template: >-
{% if is_state('switch.plug_158d00024ef7d1', 'off') %}
off
{% elif (states.switch.plug_158d00024ef7d1.attributes.load_power|float) < 10 %}
standby
{% elif is_state('switch.plug_158d00024ef7d1', 'on') %}
on
{% else %}
failed
{% endif %}
Added a variable to monitor false power downs
variable:
washing_offcount:
value: 0
Automation to alert when on. Note it will only alert if variable is 0. If 1 it is a “false start” and will be ignored
- id: '1537094498820'
alias: DishOn
trigger:
- entity_id: sensor.appliance_dishon
for:
minutes: 1
platform: state
to: 'on'
condition: []
action:
- below: '1'
condition: numeric_state
entity_id: variable.washing_offcount
- data_template:
message: dishwasher on {{ now() }}
service: persistent_notification.create
Automation for when finished. It will only trigger when variable is 2.
- id: '1537094852909'
alias: DishOff
trigger:
- entity_id: sensor.appliance_dishon
for: 0:01:00
from: 'on'
platform: state
to: standby
condition: []
action:
- data:
value_template: '{{ ((variable.state | int) + 1) }}'
variable: washing_offcount
service: variable.set_variable
- above: '1'
condition: numeric_state
entity_id: variable.washing_offcount
- data:
value: '0'
variable: washing_offcount
service: variable.set_variable
- data_template:
message: dish off {{ now()}}
service: persistent_notification.create
Lastly, in the event someone cancels mid-cycle, a timeout. The dish washer will power down for 10 minutes so a 15 minute timeout would indicate something abnormal.
- id: '1541081691156'
alias: DishOffTimeout
trigger:
- entity_id: sensor.appliance_dishon
for: 00:15:00
platform: state
to: 'off'
condition: []
action:
- above: '0'
condition: numeric_state
entity_id: variable.washing_offcount
- data:
value: '0'
variable: washing_offcount
service: variable.set_variable
- data_template:
message: dishwasher off by timeout {{ now() }}
service: persistent_notification.create
For notification just change the persistent_notification service to the notification of your choice.
Hope this helps.
This is what I recently created based on what I’ve found related to the TP-Link HS110 power plug. Maybe it’s useful.
I know, automation can be simplified so droger and wasmachine are together in a single automation, but that’s still on my todo list.