You can buy smart washing machines and dryers, but for a small amount and a little script, you can make your current dryer and washing machine smarter in Domoticz. Get a notification when the machine is ready with this Washing machine script. That’s nice if the machines are not within hearing range. This script can also be used for similar electrical appliances (dryers or even a toaster) because the logic is the same: If power consumption gets low after a high period then the machine is finished, simple!
Contents
Installation
Get yourself a power plug that can measure power consumption, like this one:
GC00AM NAS – WR01ZE Z-Wave Smart Socket – EU PLUG WHITE |
The only reason we use this plug is that is cheap and has a power consumption meter. That info is needed for the script. we don’t use the on/off function.
create user-variables in Domoticz
- washingmachine_status integer
- washingmachine_counter integer
Lua script for your dryer and washing machine
Copy this script and adjust the names of the devices.
Wasmachine_Usage Name of Z-Wave plug that contains actual consumption of washing machine (in Watts).
I thank Thinkpad for his script!
Click on Setup > More options > Events
click New and choose LUA, type in a name for your script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | --Change the values below to reflect to your own setup Script = 'script_time_wasmachine' Debug = 'Y' -- Functions function Debug_msg (msg) if (Debug == 'Y') then print('>> ' .. Script .. ': '.. msg) end end -- Variable local washer_status_uservar = 'washingmachine_status' local energy_consumption = 'Wasmachine_Usage' --Name of Z-Wave plug that contains actual consumption of washingmachine (in Watts) local washer_counter_uservar = 'washingmachine_counter' --Name of the uservariable that will contain the counter that is needed local idle_minutes = 5 --The amount of minutes the consumption has to stay below the 'consumption_lower' value local consumption_upper = 20 --If usage is higher than this value (Watts), the washingmachine has started local consumption_lower = 4.3 --If usage is lower than this value (Watts), the washingmachine is idle for a moment/done washing -- sWatt, sTotalkWh = otherdevices_svalues['Clothes Washer Power Usage']:match("([^;]+);([^;]+)") -- washer_usage = tonumber(sWatt) washer_usage = tonumber(otherdevices_svalues[energy_consumption]) commandArray = {} --Virtual switch is off, but consumption is higher than configured level, so washing has started if (washer_usage > consumption_upper) and uservariables[washer_status_uservar] == 0 then commandArray['Variable:' .. washer_status_uservar]='1' Debug_msg('Current power usage (' ..washer_usage.. 'W) is above upper boundary (' ..consumption_upper.. 'W), so washing has started!') commandArray['Variable:' .. washer_counter_uservar]=tostring(idle_minutes) end --Washing machine is not using a lot of energy, check the counter if (washer_usage < consumption_lower) and uservariables[washer_status_uservar] == 1 then commandArray['Variable:' .. washer_counter_uservar]=tostring(math.max(tonumber(uservariables[washer_counter_uservar]) - 1, 0)) Debug_msg('Current power usage (' ..washer_usage.. 'W) is below lower boundary (' ..consumption_lower.. 'W), washer is idle or almost ready') Debug_msg('Subtracting counter, old value: ' ..uservariables[washer_counter_uservar].. ' minutes') elseif ((uservariables[washer_counter_uservar] ~= idle_minutes) and uservariables[washer_status_uservar] == 1) then commandArray['Variable:' .. washer_counter_uservar]=tostring(idle_minutes) print('Resetting Washing Machine Timer') end --Washingmachine is done if ((uservariables[washer_status_uservar] == 1) and uservariables[washer_counter_uservar] == 0) then Debug_msg('Washingmachine is DONE') Debug_msg('Current power usage washingmachine ' ..washer_usage.. 'W') Debug_msg('Washingmachine is done, please go empty it!') commandArray['SendNotification']='Cycle Ended: Washing Machine#The load in the washing machine has finsihed, please move it to the dryer!#0' commandArray['Variable:' .. washer_status_uservar]='0' end return commandArray |