passed time after switchOff().afterMin(180)

Moderator: leecollings

Post Reply
pgas37
Posts: 99
Joined: Wednesday 06 December 2017 19:44
Target OS: -
Domoticz version:
Contact:

passed time after switchOff().afterMin(180)

Post by pgas37 »

Hello,

I have a dzventz-script with the command "domoticz.devices('xxx').switchOff().afterMin(180)".

I want to know how many minutes have been passed after the device is called for switchOff.

Can anyone help me with a piece of script?

Thanks
Paul
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: passed time after switchOff().afterMin(180)

Post by waaren »

pgas37 wrote: Saturday 28 December 2019 15:24 I have a dzventz-script with the command "domoticz.devices('xxx').switchOff().afterMin(180)".
I want to know how many minutes have been passed after the device is called for switchOff.
Where do you want to show this countdown value ? In the log, a variable or in another device ?
If you can share the script as it is now I might be able to help
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
pgas37
Posts: 99
Joined: Wednesday 06 December 2017 19:44
Target OS: -
Domoticz version:
Contact:

Re: passed time after switchOff().afterMin(180)

Post by pgas37 »

Waaren,
see code below.

The first intention was to show it in the log-file, but may be a 'variable' or in 'another device' opens some new possibilities.

thanks
Paul

Code: Select all

return {

	active = true, -- set to false to disable this script

	on = {
		devices = {
			110,         --ADC1 schakelaar afzuiginstallatie
			5560,      -- Motion MotionBadk
			5549,        --Motion-wc-hal
			5555,        --Motion-wc-etage
			5449        --Dummy afzuiginstallatie
			
		}
	},

	execute = function(domoticz, device)

    
    local   Afzuiging = domoticz.devices('Afzuiginstallatie - ADC1')
            MotionBadk = domoticz.devices('Motion-badkamer')
            MotionWcHal = domoticz.devices('Motion-wc-hal')
            MotionWcEtage = domoticz.devices('Motion-wc-etage')
            DummyAfzuig = domoticz.devices('Dummy afzuiginstallatie')  
            --currentTime = domoticz.time.raw       -- format 2017-12-31 22:19:15'
            currentTime = domoticz.time.rawTime     -- format 00:00:00
            currentHours = domoticz.time.hour
            currentMinutes = domoticz.time.minutes
            PRINT_MODE = false                      --true 
            
            
        if PRINT_MODE == true then
            print ('============================================================================================ ')
            print('======currentTime==== ' ..currentTime) 
            print('======current Hours=== ' ..currentHours)
            print('======current minutes=== ' ..currentMinutes)
  
        if (MotionWcHal.state) == 'On' then
                  print ('===========Motion-wc-hal is on =========== ')
              else
                  print ('===========Motion-wc-hal is off =========== ')
        end
        
        if (MotionBadk.state) == 'On' then
                  print ('===========MotionBadk is on =========== ')
              else
                  print ('===========MotionBadk is off =========== ')
        end
        if (MotionWcEtage.state) == 'On' then
                  print ('===========Motion-wc-etage is on =========== ')
              else
                  print ('===========Motion-wc-etage is off =========== ')
        end
        
        if (Afzuiging.state) == 'Off' then
                  print ('===========afzuiginstallatie uit =========== ')
              else
                  print ('===========afzuiginstallatie aan =========== ')
        end
   
        if (DummyAfzuig.state) == 'Off' then
                  print ('===========DummyAfzuig is off =========== ')
              else
                  print ('===========DummyAfzuig is on =========== ')
        end
    end
   
    --if (DummyAfzuig.state) == 'On' then
                 -- print ('===========DummyAfzuig 2  is on =========== ')
    --       return    
    --end
    
    --print ('===========afzuigscript loopt door =========== ')
    
    
			
			if
			    (MotionWcHal.state == 'On') and (DummyAfzuig.state == 'Off') then   
			    domoticz.devices('Afzuiginstallatie - ADC1').switchOn().checkFirst().repeatAfterSec(10,2)
			    domoticz.devices('Afzuiginstallatie - ADC1').switchOff().checkFirst().afterMin(15).repeatAfterSec(10,2)
			    if PRINT_MODE == true then
			     print ('===========return motion wc-hal===== ')    
			    end
			    return
			end
		
            if  (MotionWcEtage.state == 'On') and (DummyAfzuig.state == 'Off') then                     --and (currentTime >= "13:14:00") and (currentTime < "13:22:00") then   
                domoticz.devices('Afzuiginstallatie - ADC1').switchOn().checkFirst().repeatAfterSec(10,2)
			    domoticz.devices('Afzuiginstallatie - ADC1').switchOff().checkFirst().afterMin(15).repeatAfterSec(10,2)
			    --domoticz.devices('SchakelaarSL2- zolderstelling').switchOn() --.repeatAfterSec(3,2)Afzuiging.switchOn()
			    if PRINT_MODE == true then
			    print ('===========return motion wc-etage==== ')
			    end
			    return
			    end
			    
			if (MotionBadk.state == 'On') and (DummyAfzuig.state == 'Off') and (currentTime >= "21:45:00") and (currentTime < "23:00:00") then 
                   --domoticz.devices('Dummy afzuiginstallatie').switchOn().repeatAfterSec(10,2)
                   --domoticz.devices('Dummy afzuiginstallatie').switchOff().afterMin(120)repeatAfterSec(10,2)
                  if PRINT_MODE == true then
                   print ('===========return motion badk obv tijdslot===== ')
                  end
                  return
            end
        
            if (MotionBadk.state == 'On') and (DummyAfzuig.state == 'Off') then
			        domoticz.devices('Afzuiginstallatie - ADC1').switchOn().repeatAfterSec(10,2)
			        domoticz.devices('Dummy afzuiginstallatie').switchOn().repeatAfterSec(10,2)
			        domoticz.devices('Afzuiginstallatie - ADC1').switchOff().afterMin(180).repeatAfterSec(10,2)
			        domoticz.devices('Dummy afzuiginstallatie').switchOff().afterMin(179)repeatAfterSec(10,2)
			        if PRINT_MODE == true then
                   print ('===========return motion badk===== ')
                  end
			        return
			end    
		end

   		  
}
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: passed time after switchOff().afterMin(180)

Post by waaren »

pgas37 wrote: Sunday 29 December 2019 11:31 see code below.
Script could look like

Code: Select all

return 
{
    active = true, -- set to false to disable this script

    on = 
    {
        devices = 
        {
            110,         --ADC1 schakelaar afzuiginstallatie
            5560,      -- Motion MotionBadk
            5549,        --Motion-wc-hal
            5555,        --Motion-wc-etage
            5449        --Dummy afzuiginstallatie
        },

        timer = 
        {
            'every minute'
        },
    },

    logging = 
    { 
        level = domoticz.LOG_DEBUG
    },

    data = { countdown = { initial = {} }},

    execute = function(dz, item)
        _G.logMarker =  _G.moduleLabel
    
        local Afzuiging = dz.devices('Afzuiginstallatie - ADC1')
        local MotionBadk = dz.devices('Motion-badkamer')
        local MotionWcHal = dz.devices('Motion-wc-hal')
        local MotionWcEtage = dz.devices('Motion-wc-etage')
        local DummyAfzuig = dz.devices('Dummy afzuiginstallatie')  
        local Zolder = dz.devices('SchakelaarSL2- zolderstelling')
        local countdownVar = dz.variables('countdown') -- define this variable as type string

        local function managedSwitchOff(device, delay, repeatDelay, repeatTimes)
            delay = delay or 0
            
            device.cancelQueuedCommands() -- remove previous scheduled commands for this device
            if delay > 0 then dz.data.countdown[device.name] = delay end
            
            repeatDelay = repeatDelay or 10
            repeatTimes = repeatTimes or 2
            device.switchOff().afterMin(delay).repeatAfterSec(repeatDelay, repeatTimes)
        end
        
        local function managedSwitchOn(device, delay, repeatDelay, repeatTimes)
            delay = delay or 0
            repeatDelay = repeatDelay or 10
            repeatTimes = repeatTimes or 2
            device.switchOn().checkFirst().afterMin(delay).repeatAfterSec(repeatDelay, repeatTimes)
        end

        if item.isTimer then
            local countdownString, countdownLogString = ''
            for name, countdown in pairs(dz.data.countdown) do
                if countdown > 0 then 
                    dz.data.countdown[name] = countdown - 1 
                    countdownLogString = 'Remaining on time for ' .. name .. ': ' .. countdown .. ' minutes.'
                    dz.log('Remaining on time for ' .. name .. ': ' .. countdown .. ' minutes.', dz.LOG_DEBUG)
                    countdownString = countdownString .. countdownLogString .. '\n'
                end
            end
            if countdownVar.value ~= countdownString then countdownVar.set(countdownString) end
        else
            dz.log ('============================================================================================ ',dz.LOG_DEBUG)
            dz.log('======currentTime==== ' .. dz.time.raw,dz.LOG_DEBUG)
            dz.log('======current Hours=== ' .. dz.time.hour,dz.LOG_DEBUG)
            dz.log('======current minutes=== ' ..dz.time,minutes,dz.LOG_DEBUG)
            dz.log('===========MotionWcHal is ' .. MotionWcHal.state ..' =========== ',dz.LOG_DEBUG)
            dz.log('===========MotionBadk is ' .. MotionBadk.state ..' =========== ',dz.LOG_DEBUG)
            dz.log('===========MotionWcEtage is ' .. MotionWcEtage.state ..' =========== ',dz.LOG_DEBUG)
            dz.log('===========Afzuiging is ' .. Afzuiging.state ..' =========== ',dz.LOG_DEBUG)
            dz.log('===========DummyAfzuig is ' .. DummyAfzuig.state ..' =========== ',dz.LOG_DEBUG)
            --dz.log ('===========afzuigscript loopt door =========== ',dz.LOG_DEBUG)

            if MotionWcHal.state == 'On' and DummyAfzuig.state == 'Off' then   
                managedSwitchOn(Afzuiging)
                managedSwitchOff(Afzuiging, 15)
                dz.log ('===========return motion wc-hal===== '   ,dz.LOG_DEBUG)
            elseif MotionWcEtage.state == 'On' and DummyAfzuig.state == 'Off' then                     --and (currentTime >= "13:14:00") and (currentTime < "13:22:00") then   
                managedSwitchOn(Afzuiging)
                managedSwitchOff(Afzuiging, 15)
                -- zolder.switchOn() --.repeatAfterSec(3,2)Afzuiging.switchOn()
                dz.log ('===========return motion wc-etage==== ',dz.LOG_DEBUG)
            elseif MotionBadk.state == 'On' and DummyAfzuig.state == 'Off' and dz.time.matchesRule('at 22:45-23:00') then 
                -- managedSwitchOn(DummyAfzuig)
                -- managedSwitchOff(DummyAfzuig, 120)
                dz.log ('===========return motion badk obv tijdslot===== ',dz.LOG_DEBUG)
            elseif MotionBadk.state == 'On' and DummyAfzuig.state == 'Off' then
                managedSwitchOn(Afzuiging)
                managedSwitchOn(DummyAfzuig)
                managedSwitchOff(Afzuiging, 180)
                managedSwitchOff(DummyAfzuig, 179)
                dz.log ('===========return motion badk===== ',dz.LOG_DEBUG)
            end
        end
    end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
pgas37
Posts: 99
Joined: Wednesday 06 December 2017 19:44
Target OS: -
Domoticz version:
Contact:

Re: passed time after switchOff().afterMin(180)

Post by pgas37 »

Waaren,

Quite some additions and changes. I never could create this myself!
Thanks, in the next comming days i will try your script and let you know.
Thanks again.
Regards
Paul
pgas37
Posts: 99
Joined: Wednesday 06 December 2017 19:44
Target OS: -
Domoticz version:
Contact:

Re: passed time after switchOff().afterMin(180)

Post by pgas37 »

Hi Waaren,

regret to say, but the script does not work:

a motion:
does not switch on the device "afzuiging"
in de debug logfile the result of the lines "the dz.time.raw and hour" .

Also a manual switch(On) of the "DummyAfzuig"-switch does not result in debug-output.

I also replaced the managedSwitch(on) with the orginal command
"domoticz.devices('Afzuiginstallatie - ADC1').switchOn().checkFirst().repeatAfterSec(10,2)", but no Switch(On) of "Afzuiging" anymore.

I cannot find the operation of command managedSwitch(On) and (Off) c.q. the difference with Switch(On) or (Off). I looked for it in Domoticz-wiki.

Hope you can help once more?
regards
Paul
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: passed time after switchOff().afterMin(180)

Post by waaren »

pgas37 wrote: Tuesday 31 December 2019 13:31 I cannot find the operation of command managedSwitch(On) and (Off) c.q. the difference with Switch(On) or (Off). I looked for it in Domoticz-wiki.
These are local functions. Constructed for use in this script and not available for other scripts.
Hope you can help once more?
Sure, did you define the domoticz uservariable countdown as string ?
Can you please share the log ? Via DM is OK
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest