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
#26
Code:
-- ** Staircase logic with external time object and retriggering on input object Version 3.2 ** --
-- ****************************** Created by Erwin van der Zwart **************************** --
-- ************************************** SET PARAMETERS ************************************ --

-- Set input address
AddressInput = '32/1/20 ' -- 01. 1 bit (boolean)
-- Set output address
AddressOutput = '32/1/21'  -- 01. 1 bit (boolean)

-- Set external time address (optional)
AddressExternalTime = '32/1/22' -- 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/23' -- 255 byte string

-- Set time delay (Used when external time is not available)
SetDelay = 120 -- 2 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,
  }
  time =string.format('%02d:%02d:%02d',time.hour,time.minute,time.second)
  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

Hi admin, thanks for your response, I need to include it in the script itself. I have tried your script and it only activates the output if the block is true, but I need if the block is true that it activates and deactivates me at the end of the time.
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 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 davidchispas - 29.01.2020, 12:46
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: