User Tools

Site Tools


misc_functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
misc_functions [2019/05/14 10:29]
akuzmuk
misc_functions [2021/04/14 08:42] (current)
atolstov
Line 7: Line 7:
  
 Example: Example:
-<code lua>+<code lua GetTime>
 function main (userId) function main (userId)
     local time = GetTime();     local time = GetTime();
Line 13: Line 13:
     INFO("Nanoseconds:" .. time.ns);     INFO("Nanoseconds:" .. time.ns);
 end end
 +</code>
 +
 +==== Delay ====
 +
 +<code lua Delay>
 +function main (userId)
 +    
 +        --  Uncomment this part to measure the time spent
 +                        -- local start_time = GetTime();
 +        --
 +    Delay(100.25, GetTimePrecise())    
 +        
 +        
 +        --  Uncomment this part to measure the time spent
 +                        -- local cur_time = GetTime();     local cur_sec, cur_ns =  cur_time.sec, cur_time.ns
 +                        -- local time_spent_sec, time_spent_ns = cur_sec - start_time.sec, cur_ns - start_time.ns
 +                        -- local millseconds_spent = time_spent_sec * 1000 + time_spent_ns / 1000000
 +                        -- ERROR("Time spent ms = " .. millseconds_spent)
 +        -- 
 +        
 +end
 + -- Additional functions can be defined after or before main() loop
 +function GetTimePrecise()
 +    local start_time = GetTime();
 +    return   start_time.sec * 1000^3  + start_time.ns  
 +end
 +
 +function Delay (milliseconds, precise_start_time)
 +    repeat
 +        delay_ns = milliseconds * 1000000
 +        local cur_time = GetTime();
 +        time_over = GetTimePrecise() > (precise_start_time + delay_ns)
 +    until time_over
 +end
 +
 +</code>
 +
 +==== GetReg filter nil (if nil then zero) ==== 
 +<code lua GetReg filtering>
 +function main (userId)
 +    
 +    val1 = GetReg(1) or 0 -- if GetReg is nil, then it will be equal to 0
 +    TRACE("val1 " ..tostring(val1))
 + val2 = GetReg("temperature")
 + TRACE("val2 " ..tostring(val2))
 +    
 +
 +
 + val2_filtered = (val2 or 0) -- if val2 is nil, then it will be equal to 0 too.
 + TRACE("val2_filtered " ..tostring(val2_filtered))
 +    sum = val1 + val2_filtered
 +
 +    TRACE(sum)
 +  
 +end
 +
 +
 +</code>
 +
 +==== IfInRangeHHMM ====
 +<code lua IfInRangeHHMM>
 +function main (userId)
 +    now = os.time()   
 +    
 +    
 +    working_time = ifInRangeHHMM(now, 20,0,8,0)
 +    
 +    
 +    TRACE("working_time = " .. tostring(working_time))
 +    if working_time then
 +        -- Add your code here
 +    end
 +end
 +
 +function ifInRangeHHMM(now, start_hour, start_min, end_hour, end_min)
 +-- проверяет текущее время на попадание в диапазон час минута 
 +        out = false
 +local cur_HH, cur_MM =  tonumber(os.date("%H", now)), 
 +                        tonumber(os.date("%M", now))
 +                       
 +    -- TRACE("now = " .. os.date("%X %x", now) .. "              " .. cur_HH .. ":" ..  cur_MM)
 +    not_splitted_midnight_shift = start_hour < end_hour or start_hour == end_hour and start_min < end_min
 +    if not_splitted_midnight_shift then
 +                         
 +    local after_start  = (cur_HH > start_hour)  or (cur_HH == start_hour    and cur_MM >= start_min) 
 +    local before_end =   (cur_HH < end_hour)    or (cur_HH == end_hour      and cur_MM <= end_min)
 +    -- TRACE("after_start =" .. tostring(after_start))
 +    -- TRACE("before_end =" .. tostring(before_end))
 +    
 +    out = after_start and before_end         ; --TRACE("going to return " ..  tostring(out))                         
 +    else
 +        TRACE("ifInRangeHHMM: Range is midnight splitted")
 +        out = ifInRangeHHMM(now, start_hour, start_min, 23, 59) or ifInRangeHHMM(now, 0, 0, end_hour, end_min)
 +    end
 +    
 +    
 +    return out 
 +
 +end 
 +
 +
 </code> </code>