Script your Dryer or Washing Machine in Domoticz

Tutorial Domoticz washing machine script

Intro

You can buy smart washing machines and dryers, but for a small amount and a little script, you can make your current machines 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!

 

Installation

Get yourself a power plug that can measure power consumption, like this one:

NEO Coolcam NAS - SC01ZE - 1 Light Switch - EU 1GANG WHITE
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

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
%d bloggers like this: