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.

Operating hours, relay closing time..., comparison 3byte
#1
Hello,
I have saved the on and off (time and date). Can you please advise me how to calculate the difference between "time_on, date_on" and "time_off, date_off" ?
Thank you


Code:
adr_relay_status     = '32/7/0'  --relay_status        --01 1bit adr_time_on         = '32/7/1'  --on time            --10 3byte time/day adr_date_on         = '32/7/2'  --on date            --11 3byte date adr_time_off         = '32/7/3'  --off time            --10 3byte time/day adr_date_off         = '32/7/4'  --off date            --11 3byte date adr_sum_days         = '32/7/5'  --sum days            --07 2byte unsigned integer adr_sum_hours         = '32/7/6'  --sum hours            --07 2byte unsigned integer adr_sum_minutes     = '32/7/7'  --sum minutes        --07 2byte unsigned integer adr_sum_seconds     = '32/7/8'  --sum seconds        --07 2byte unsigned integer relay_status     = grp.getvalue(adr_relay_status) if (relay_status == true) then   -- get current data as table   now = os.date('*t')   -- system week day starts from sunday, convert it to knx format   wday = now.wday == 1 and 7 or now.wday - 1   -- time table   time = {   day = wday,   hour = now.hour,   minute = now.min,   second = now.sec,   }   -- date table   date = {   day = now.day,   month = now.month,   year = now.year,   }   -- write to   grp.write(adr_time_on, time, dt.time)   grp.write(adr_date_on, date, dt.date) end if (relay_status == false) then   -- get current data as table   now = os.date('*t')   -- system week day starts from sunday, convert it to knx format   wday = now.wday == 1 and 7 or now.wday - 1   -- time table   time = {   day = wday,   hour = now.hour,   minute = now.min,   second = now.sec,   }   -- date table   date = {   day = now.day,   month = now.month,   year = now.year,   }   -- write to   grp.write(adr_time_off, time, dt.time)   grp.write(adr_date_off, date, dt.date)     time_on     = grp.getvalue(adr_time_on)   date_on     = grp.getvalue(adr_date_on)   time_off     = grp.getvalue(adr_time_off)   date_off     = grp.getvalue(adr_date_off)   sum_days     = grp.getvalue(adr_sum_days)   sum_hours     = grp.getvalue(adr_sum_hours)   sum_minutes     = grp.getvalue(adr_sum_minutes)   sum_seconds     = grp.getvalue(adr_sum_seconds)     --[[   script   calculation of the difference between the on and off time of the relay   addition to "sum_days" and  "sum_hours" and "sum_minutes" and "sum_seconds"   ]]--   days = 0 --?   hours = 0 --?   minutes = 0 --?   seconds = 0 --?     grp.write(adr_sum_days, days)   grp.write(adr_sum_hours, hours)   grp.write(adr_sum_minutes, minutes)   grp.write(adr_sum_seconds, seconds) end
Reply
#2
I'm not sure where you heading here but each object has its update time saved and you can use this instead os.time.

input = grp.find('1/1/1')
start = input.updatetime

This will give you time in numeric format. You can save on and off value in a storage and compare. Here is example of counter from FB Editor, It might help.
Code:
function operating_hours(input, reset, blockID)   local inputValue = input.value and input.value ~= 0   if reset and reset ~= 0 then     if inputValue then       storage.set(blockID .. "_start", os.time())     end     return inputValue and 0 or nil   elseif inputValue then     local start = storage.get(blockID .. "_start")     if start == nil then       start = input.updatetime       storage.set(blockID .. "_start", start)     end     return (os.time() - start) / 3600   else     storage.delete(blockID .. "_start")     return nil   end end input = grp.find('1/1/1') reset = grp.getvalue('1/1/4') blockID= _SCRIPTNAME hours = operating_hours(input, reset, blockID) log(hours) if hours ~= nil then     grp.write('1/1/2', hours) end
------------------------------
Ctrl+F5
Reply
#3
Thank you. I will try.
Reply


Forum Jump: