more timers executing at the same time ?
Posted: Thursday 23 May 2019 22:54
Hi, i thought my irrigationscript was running perfect. But it is not working 100%.
i have three section(swiches) with programm 10 that seems to work perfect!
I have one section Tuinirrigatie_planten_timer with programm 20, every other day that did not start at all...
Could it be that a script cant execute twice at the same time (10 every day at sunset and 20 each other day ?)
No errors in the log...
i have three section(swiches) with programm 10 that seems to work perfect!
I have one section Tuinirrigatie_planten_timer with programm 20, every other day that did not start at all...
Could it be that a script cant execute twice at the same time (10 every day at sunset and 20 each other day ?)
No errors in the log...
Code: Select all
--local Tuinirrigatietimer10 = 'at 15:20 on mon,tue,wed,thu,fri,sat,sun'
local Tuinirrigatietimer10 = 'every day at sunset'
local Tuinirrigatietimer20 = 'every other day at sunset'
local Tuinirrigatietimer30 = 'at sunset on mon,thu,sun'
local Tuinirrigatietimer40 = 'every saturday at sunset'
local Tuinirrigatietimer50 = 'every month on the first at sunset'
return {
on = { timer = {Tuinirrigatietimer10,Tuinirrigatietimer20,Tuinirrigatietimer30,Tuinirrigatietimer40,Tuinirrigatietimer50},
devices = {'Tuinirrigatie','Tuinirrigatie_border_links_timer','Tuinirrigatie_border_rechts_timer','Tuinirrigatie_gazon_timer','Tuinirrigatie_planten_timer'}},
logging = { level = domoticz.LOG_INFO ,
marker = "Timers irrigatie"},
execute = function(dz,item,info)
local iswitch1 = dz.devices('Tuinirrigatie_border_links_timer')
local iswitch2 = dz.devices('Tuinirrigatie_border_rechts_timer')
local iswitch3 = dz.devices('Tuinirrigatie_gazon_timer')
local iswitch4 = dz.devices('Tuinirrigatie_planten_timer')
local switch2 = dz.devices('hetregent')
local switch3 = dz.devices('Tuinirrigatie')
local now = os.time(os.date('*t'))
local devduur1 = tonumber(dz.devices('Tuinirrigatie_border_links_waarde').levelName)
local devduur2 = tonumber(dz.devices('Tuinirrigatie_border_rechts_waarde').levelName)
local devduur3 = tonumber(dz.devices('Tuinirrigatie_gazon_waarde').levelName)
local devduur4 = tonumber(dz.devices('Tuinirrigatie_planten_waarde').levelName)
local devpauze = 1
if devduur1 >0 then
aftertimer1 = devduur1 + devpauze
else
aftertimer1 = 0
end
if devduur2 > 0 then
aftertimer2 = aftertimer1 + devduur2 + devpauze
else
aftertimer2 = aftertimer1
end
if devduur3 > 0 then
aftertimer3 = aftertimer2 + devduur3 + devpauze
else
aftertimer3 = aftertimer2
end
if devduur4 > 0 then
aftertimer4 = aftertimer3 + devduur4 + devpauze
else
aftertimer4 = aftertimer3
end
if (item.isTimer and iswitch1.level == 0 and iswitch2.level == 0 and iswitch3.level == 0 and iswitch4.level == 0) then
dz.log("Script: " .. info.scriptName .. " Timerevent gestart maar alle timerzones staat uit", dz.LOG_INFO)
elseif (item.isTimer and switch3.level == 0 ) then
dz.log("Script: " .. info.scriptName .. " Timerevent gestart maar timerssysteem staat uit", dz.LOG_INFO)
elseif (item.isTimer and switch3.level == 10 and switch2.state == 'On') then
dz.log("Script: " .. info.scriptName .. " Timerevent is gestart, maar is niet aangezet, het is aan t regenen... ", dz.LOG_INFO)
elseif ((item.isTimer and switch2.state == 'Off' and switch3.level == 10) or (item.isDevice and switch3.level == 20)) then
--dz.devices('usb lamp').switchSelector(20) -- anders gaat t wel aan maar staat de selector niet op aan
--dz.variables('ledlampkleur').set('blauw')
if (item.isTimer and iswitch1.level == 10 and item.trigger == Tuinirrigatietimer10) or
(item.isTimer and iswitch1.level == 20 and item.trigger == Tuinirrigatietimer20) or
(item.isTimer and iswitch1.level == 30 and item.trigger == Tuinirrigatietimer30) or
(item.isTimer and iswitch1.level == 40 and item.trigger == Tuinirrigatietimer40) or
(item.isTimer and iswitch1.level == 50 and item.trigger == Tuinirrigatietimer50) or
(item.isDevice and switch3.level == 20) then
if devduur1 >0 then
dz.devices('Tuinirrigatie_border_links').switchOn().checkFirst() --.forMin(devtimer1) wordt in DZ_irrigatie_source bepaalt
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_border_links, aangezet, om:" .. dz.time.rawTime .. " voor " .. devduur1 .. " minuten....", dz.LOG_INFO)
else
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_border_links is niet aangezet, de timer stond uit", dz.LOG_INFO)
end
end
if (item.isTimer and iswitch2.level == 10 and item.trigger == Tuinirrigatietimer10) or
(item.isTimer and iswitch2.level == 20 and item.trigger == Tuinirrigatietimer20) or
(item.isTimer and iswitch2.level == 30 and item.trigger == Tuinirrigatietimer30) or
(item.isTimer and iswitch2.level == 40 and item.trigger == Tuinirrigatietimer40) or
(item.isTimer and iswitch2.level == 50 and item.trigger == Tuinirrigatietimer50) or
(item.isDevice and switch3.level == 20) then
if devduur2 > 0 then
dz.devices('Tuinirrigatie_border_rechts').switchOn().checkFirst().afterMin(aftertimer1)
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_border_rechts, wordt aangezet " .. tostring(aftertimer1) .. " min na " .. dz.time.rawTime .. " en voor " .. devduur2 .. " minuten....", dz.LOG_INFO)
else
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_border_rechts is niet aangezet, de timer stond uit", dz.LOG_INFO)
end
end
if (item.isTimer and iswitch3.level == 10 and item.trigger == Tuinirrigatietimer10) or
(item.isTimer and iswitch3.level == 20 and item.trigger == Tuinirrigatietimer20) or
(item.isTimer and iswitch3.level == 30 and item.trigger == Tuinirrigatietimer30) or
(item.isTimer and iswitch3.level == 40 and item.trigger == Tuinirrigatietimer40) or
(item.isTimer and iswitch3.level == 50 and item.trigger == Tuinirrigatietimer50) or
(item.isDevice and switch3.level == 20) then
if devduur3 > 0 then
dz.devices('Tuinirrigatie_gazon').switchOn().checkFirst().afterMin(aftertimer2)
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_gazon, wordt aangezet " .. tostring(aftertimer2) .. " min na " .. dz.time.rawTime .. " en voor " .. devduur3 .. " minuten....", dz.LOG_INFO)
else
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_gazon is niet aangezet, de timer stond uit", dz.LOG_INFO)
end
end
if (item.isTimer and iswitch4.level == 10 and item.trigger == Tuinirrigatietimer10) or
(item.isTimer and iswitch4.level == 20 and item.trigger == Tuinirrigatietimer20) or
(item.isTimer and iswitch4.level == 30 and item.trigger == Tuinirrigatietimer30) or
(item.isTimer and iswitch4.level == 40 and item.trigger == Tuinirrigatietimer40) or
(item.isTimer and iswitch4.level == 50 and item.trigger == Tuinirrigatietimer50) or
(item.isDevice and switch3.level == 20) then
if devduur4 > 0 then
dz.devices('Tuinirrigatie_planten').switchOn().checkFirst().afterMin(aftertimer3)
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_planten, wordt aangezet " .. tostring(aftertimer3) .. " min na " .. dz.time.rawTime .. " en voor " .. devduur4 .. " minuten....", dz.LOG_INFO)
else
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie_planten is niet aangezet, de timer stond uit", dz.LOG_INFO)
end
end
if switch3.level == 20 then -- deze naar oude level zetten !! na x mn
switch3.switchSelector(switch3.lastLevel).afterMin(aftertimer4)
dz.log("Script: " .. info.scriptName .. ", device: Tuinirrigatie, wordt uitgezet " .. tostring(aftertimer4) .. " min na " .. dz.time.rawTime .. " ", dz.LOG_INFO)
end
--dz.devices('usb lamp').switchSelector(dz.variables('ledlampkleuroud').value) -- op t goede timermoment alles uit of weer terugzetten naar oorspronkelijke kleur
elseif (switch3.level == 0 or iswitch1.level == 0 or iswitch2.level == 0 or iswitch3.level == 0 or iswitch4.level == 0) then
if (switch3.level == 0 or iswitch1.level == 0) then
dz.devices('Tuinirrigatie_border_links').cancelQueuedCommands()
end
if (switch3.level == 0 or iswitch2.level == 0) then
dz.devices('Tuinirrigatie_border_rechts').cancelQueuedCommands()
end
if (switch3.level == 0 or iswitch3.level == 0) then
dz.devices('Tuinirrigatie_gazon').cancelQueuedCommands()
end
if (switch3.level == 0 or iswitch4.level == 0) then
dz.devices('Tuinirrigatie_planten').cancelQueuedCommands()
end
if (switch3.level == 0 or iswitch1.level == 0) then
dz.devices('Tuinirrigatie_border_links').switchOff().checkFirst()
end -- nadeel is ook 4 maal spraak dat het uit gaat en die had je al gehoord bij t autom uitgaan
if (switch3.level == 0 or iswitch2.level == 0) then
dz.devices('Tuinirrigatie_border_rechts').switchOff().checkFirst()
end
if (switch3.level == 0 or iswitch3.level == 0) then
dz.devices('Tuinirrigatie_gazon').switchOff().checkFirst()
end -- staat waarschijnlijk al uit, maar it het bijbehorende script wordt de queue geleegd en device ook uit als dit niet zo was
if (switch3.level == 0 or iswitch4.level == 0) then
dz.devices('Tuinirrigatie_planten').switchOff().checkFirst()
end -- voordeel is als je halverwege afbreekt, dat ook de switches direct uitgaan, nu moet je zelf n switch die loopt uitzetten
dz.log("Script: " .. info.scriptName .. " irrigatie timers/queue verwijderd... ", dz.LOG_INFO)
else
dz.log("Script: " .. info.scriptName .. " is niet aangezet, onbekende reden... ", dz.LOG_INFO)
end
end
}