This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Remaining time or counter
#6
Hi,

Here is a improved version: (event based on trigger object "32/1/100" of light switch) 
Code:
-- ** Staircase logic with external time object and retriggering on input object Version 3.2 ** -- -- ****************************** Created by Erwin van der Zwart **************************** -- -- ************************************** SET PARAMETERS ************************************ -- -- Set output address AddressOutput = '32/1/101'  -- 01. 1 bit (boolean) -- Set external time address (optional) AddressExternalTime = '32/1/102' -- 07. 2 byte unsigned integer -- Use time left indication UseTimeLeft = true -- Set to false if no time left indication is used -- Set feedback adress of time left indication (optional) AddressTimeLeft = '32/1/103' -- 10. 3 byte time/day -- Set time delay (Used when external time is not available) SetDelay = 300 -- 5 minutes -- Seconds or Minutes SetSec = true -- Set to false for Minutes -- Set factor delay (Multiplies Delay) SetFac = 1 -- Logic can be turned of by value 0 Off_by_Value_Zero = false -- ************************************** END PARAMETERS ************************************ -- -- *************************** DON'T CHANGE ANYTHING UNDER THIS LINE ************************ -- Input_Value = event.getvalue() if Off_by_Value_Zero == false and (Input_Value == false or Input_Value == 0) then  return else  tpid = storage.get('PID:' .. _SCRIPTNAME)  if tpid == nil then      pid = os.getpid()      storage.set('PID:' .. _SCRIPTNAME, pid)  else    pid = os.getpid()      storage.set('PID:' .. _SCRIPTNAME, pid)    os.kill(tpid, signal.SIGKILL)  end   function Calculate_Time(StairCaseTime)     if StairCaseTime > (86400 -1) then        StairCaseTime = (86400 -1)     end     local hours = math.floor(StairCaseTime / 3600 % 24)     local minutes = math.floor(StairCaseTime / 60 % 60)     local seconds = math.floor(StairCaseTime % 60)     time = {       day = 0,       hour = hours,       minute = minutes,       second = seconds,     }     return time   end  if Input_Value == true or Input_Value == 1 then    ValueExternalTime = grp.getvalue(AddressExternalTime) or SetDelay    if SetSec == true then      Multiply_Seconds = 1    else      Multiply_Seconds = 60    end    StairCaseTime = ValueExternalTime * Multiply_Seconds * SetFac    ValueOutput = grp.getvalue(AddressOutput)    if ValueOutput == false then      grp.write(AddressOutput, true)    end    if UseTimeLeft == true then      if StairCaseTime > 0 then        time = Calculate_Time(StairCaseTime)        grp.update(AddressTimeLeft, time)        repeat          StairCaseTime = StairCaseTime - 1          time = Calculate_Time(StairCaseTime)          grp.update(AddressTimeLeft, time)          os.sleep(1)        until StairCaseTime == 0      end        else      os.sleep(StairCaseTime)    end    grp.write(AddressOutput, false)  elseif Input_Value == false or Input_Value == 0 then    ValueOutput = grp.getvalue(AddressOutput)    if ValueOutput == true then      if UseTimeLeft == true then        time = Calculate_Time(0)        grp.update(AddressTimeLeft, time)      end      grp.write(AddressOutput, false)    end  end  storage.delete('PID:' .. _SCRIPTNAME) end
Use these objects types:
   
BR,

Erwin
Reply


Messages In This Thread
Remaining time or counter - by Tokatubs - 15.12.2018, 21:29
RE: Remaining time or counter - by Tokatubs - 16.12.2018, 00:51
RE: Remaining time or counter - by AlexLV - 16.12.2018, 16:09
RE: Remaining time or counter - by Erwin van der Zwart - 16.12.2018, 16:26
RE: Remaining time or counter - by AlexLV - 16.12.2018, 20:59
RE: Remaining time or counter - by Tokatubs - 18.12.2018, 19:35
RE: Remaining time or counter - by AlexLV - 19.12.2018, 22:14
RE: Remaining time or counter - by Thomas - 20.12.2018, 10:13
RE: Remaining time or counter - by admin - 20.12.2018, 10:54
RE: Remaining time or counter - by Tokatubs - 20.12.2018, 22:27
RE: Remaining time or counter - by Daniel - 21.12.2018, 08:42
RE: Remaining time or counter - by Tokatubs - 21.12.2018, 09:28
RE: Remaining time or counter - by Daniel - 21.12.2018, 12:18
RE: Remaining time or counter - by Daniel - 21.12.2018, 13:11
RE: Remaining time or counter - by Tokatubs - 21.12.2018, 22:54
RE: Remaining time or counter - by AlexLV - 24.12.2018, 17:00
RE: Remaining time or counter - by CHOUAIBOU - 25.12.2018, 13:24
RE: Remaining time or counter - by AlexLV - 26.12.2018, 09:05
RE: Remaining time or counter - by AlexLV - 06.01.2019, 23:05
RE: Remaining time or counter - by admin - 29.01.2020, 11:28
RE: Remaining time or counter - by admin - 29.01.2020, 13:34
RE: Remaining time or counter - by AlexLV - 30.01.2020, 07:14
RE: Remaining time or counter - by AlexLV - 30.01.2020, 12:41
RE: Remaining time or counter - by admin - 09.08.2022, 08:20
RE: Remaining time or counter - by admin - 09.08.2022, 10:09
RE: Remaining time or counter - by Novodk - 26.05.2023, 19:46
RE: Remaining time or counter - by Novodk - 27.05.2023, 07:02
RE: Remaining time or counter - by admin - 27.05.2023, 06:59
RE: Remaining time or counter - by admin - 27.05.2023, 07:06
RE: Remaining time or counter - by Novodk - 27.05.2023, 07:18
RE: Remaining time or counter - by admin - 29.05.2023, 08:29
RE: Remaining time or counter - by Novodk - 29.05.2023, 08:52
RE: Remaining time or counter - by FatMax - 29.05.2023, 09:04
RE: Remaining time or counter - by Novodk - 01.06.2023, 16:26
RE: Remaining time or counter - by admin - 11.09.2024, 13:40

Forum Jump: