User Tools

Site Tools


useful_programs

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
useful_programs [2020/04/17 10:56] – [Debug printing] emozolyakuseful_programs [2020/07/30 15:07] atolstov
Line 769: Line 769:
             return false -- nothing happened              return false -- nothing happened 
 end -- P_TRIG  end -- P_TRIG 
 +
 +-- multiple ids or aliases read, returns table, have to be unpack() 'ed
 +-- usage: v1, v2, v3... = unpack(mRead(1, 2, 3, ...))
 +function mRead(...) 
 +     local results = {} 
 +     for i = 1, #arg do 
 +         local param = arg[i]
 +        --  INFO("processing " .. param .. " paramter")
 +          results[i] = GetReg(param)
 +     end 
 +     if (#results == 1) then 
 +         return results[1]
 +     else 
 +         return results
 +     end 
 +end 
 </code> </code>
  
Line 861: Line 877:
 </code> </code>
  
 +===== Curve handler =====
 +Library
 +<code lua - curves.lib>
 +function GetCurveValue ( curve_register, x_to_find_y  )
 +    --[[   
 +    --Curve handler 
 +    INPUT:
 +        Put curve register as first argument and X coordinate as second.
 +    OUTPUT:
 +        Get as result status if it is inside curve range of outside(false) and the Y value as second output argument
 +    
 +    EXAMPLE:
 +        curve_status, value = GetCurveValue( "curve_for_current_hour", current_hour )
 +    --]]
 +    table = cjson.decode( R ( curve_register ) )
 +    -- inRangeCurve( table, x_to_find_y )
 +    for _, value in ipairs( table ) do --piecewise handler inside range of the curve
 +        if ( value.range[1] <= x_to_find_y and x_to_find_y < value.range[2] ) then 
 +            -- in_range_status, index_curve_piece, y = true, index, curveLinearCalc( x_to_find_y, value.k, value.b )
 +            in_range_status, y = true, ( x_to_find_y * value.k + value.b )
 +            return in_range_status, y
 +        end
 +    end
 +    if  x_to_find_y < table[1].range[1] then -- behaivior for outside left-sided
 +        -- in_range_status, index_curve_piece, y = false, 1, curveLinearCalc( table[1].range[1], table[1].k*0, table[1].b ) --table[1].b
 +        in_range_status, index_curve_piece, y = false, 1, ( table[1].range[1] * table[1].k + table[1].b ) --table[1].b
 +        return in_range_status, y
 +    elseif x_to_find_y > table[#table].range[2] then -- behaivior for outside right-sided
 +        -- in_range_status, index_curve_piece, y = false,#table,curveLinearCalc( table[#table].range[2], table[#table].k, table[#table].b ) --table[#table].b
 +        in_range_status,  y = false,#table,( table[#table].range[2] * table[#table].k + table[#table].b)
 +        return in_range_status, y
 +    end
 +
 +    return in_range_status,
 +end
 +</code>
 +Example of usage:
 +<code lua - Getter>
 +include "curves.lib"
 +
 +function main (userId)
 +
 +    local t = os.date("*t", os.time()) 
 +    current_hour = tonumber(t.hour)
 +    curve_status, y = GetCurveValue( "curve_for_current_hour", current_hour )
 +    WriteReg("value_for_current_hour", y) 
 +
 +end
 +</code>
  
useful_programs.txt · Last modified: 2024/03/19 09:39 by emozolyak

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki