19.12.2024, 14:57
(This post was last modified: 19.12.2024, 15:09 by Erwin van der Zwart.)
Can you try this version, it uses webrequests instead of URL with basic authentication that is not supported anymore in FW 3.0.0
Code:
-- Batch adding trends v1.3 - Created by Erwin van der Zwart - Schneider Electric Netherlands -------------------
-- For spaceLYnk FW 3.0.0 or higher and Wiser for KNX FW 3.0.0 or higher ----------------------------------------
-- Make sure that "Block unsafe functions in scripts" is disbled in General Configuration
-- Refresh browser after creation to show the trends ------------------------------------------------------------
----------------------------------------------- Start Parameters ------------------------------------------------
-- Start address of objects
start_objectaddress = '3/0/0'
-- Trends for all objects between these range are created
-- End address of objects
end_objectaddress = '3/0/2'
-- Select trend type to create (or multiple types on same object)
create_trendtype_counter = false
create_trendtype_counter_with_negative_delta = false
create_trendtype_absolute_value = true
-- Select aggregate function (!Important! Can only be these values: AVERAGE / MIN / MAX / LAST))
trendaggregatefunction = 'AVERAGE'
-- Set trend resolution (!Important! Can only be these values: 5 / 10 / 15 / 20 / 30 / 60 minutes))
trendresolution = 5
-- Set trend precicion (!Important! Can only be these values: 0 to 8) decimal places
trendprecision = 2
-- Set trend count resolution (!Important! Can only be these values: '30' = 30 days, '180' = 180 days, '365' = 1 year, '730' = 2 years, '1825' = 5 years
trendcountresolution = 365
-- Set trend count days (!Important! Can only be these values: '1' = 1 year / '2' = 2 years / '5' = 5 years / '10' = 10 years)
trendcountdaily = 10
-- Set show always 0 base line
trendshowzero = 0 -- 0 = disabled 1 = enabled
------------------------------------------------ End Parameters -------------------------------------------------
------------------------------------ DON'T CHANGE ANYTHING UNDER THIS LINE --------------------------------------
-- Calculate start address to DB format
start_objectaddress = knxlib.encodega(start_objectaddress)
-- Calculate end address to DB format
end_objectaddress = knxlib.encodega(end_objectaddress)
-- Function to send request (in this case to create a trend)
function webrequest(mod, act, vars, data)
require('json')
require('dbenv')
local path
vars = vars or {}
function getvar(v)
return vars[ v ]
end
json.data = function()
return data or {}
end
if mod == 'plugin' then
path = 'plugins/' .. act .. '/web.lua'
else
path = 'web/' .. mod .. '/' .. act .. '.lua'
end
result = dofile('/lib/genohm-scada/' .. path)
-- Calculate results for creation results log
if result.success == true then
number_of_trends = number_of_trends + 1
else
number_failed = number_failed + 1
end
end
-- Function to create vars
function createvars(trend_object, trend_name, trend_type, trend_aggregate_function, trend_resolution, trend_precision, trend_count_resolution, trend_count_daily, trend_show_zero, trend_id)
local vars = {
object = trend_object,
name = trend_name,
type = trend_type,
aggregation = trend_aggregate_function,
resolution = trend_resolution,
precision = trend_precision,
count_resolution = trend_count_resolution * 12 * 24, -- nr of days * nr of points in a hour at min resolution (60/5 = 12) * hours per day
count_daily = trend_count_daily * 365, -- nr of days * 365 days a year
show_zero = trend_show_zero,
id = trend_id,
}
return vars
end
-- Set counters for creation log
number_of_trends = 0
number_failed = 0
-- Loop from startadres to end address to create trends
for i = start_objectaddress, end_objectaddress, 1 do
-- Get current group address from loop
current_GA = knxlib.decodega(i)
-- Get current object info
objectinfo = grp.find(current_GA)
-- Check if object excists
if objectinfo ~= nil then
-- Set parameters for request
trendobject = objectinfo.id
trendname = objectinfo.name
trendid = ''
-- Check if trend type 'Counter' should be created
if create_trendtype_counter == true then
-- Call function to create vars
requestdata = createvars(trendobject, trendname, 'C', trendaggregatefunction, trendresolution, trendprecision, trendcountresolution, trendcountdaily, trendshowzero, trendid)
webrequest('trends', 'save', {request = 'save'}, requestdata)
end
-- Check if trend type 'Counter with negative delta' should be created
if create_trendtype_counter_with_negative_delta == true then
-- Call function to send create vars
requestdata = createvars(trendobject, trendname, 'D', trendaggregatefunction, trendresolution, trendprecision, trendcountresolution, trendcountdaily, trendshowzero, trendid)
webrequest('trends', 'save', {request = 'save'}, requestdata)
end
-- Check if trend type 'Absolute value' should be created
if create_trendtype_absolute_value == true then
-- Call function to send create vars
requestdata = createvars(trendobject, trendname, 'G', trendaggregatefunction, trendresolution, trendprecision, trendcountresolution, trendcountdaily, trendshowzero, trendid)
webrequest('trends', 'save', {request = 'save'}, requestdata)
end
end
end
if number_failed == 0 then
log ("Created " .. number_of_trends .. " trends succesfully")
else
log ("Created " .. number_of_trends .. " trends succesfully and creation of " .. number_failed .. " trends failed")
end
-- Disable script when done automaticly
script.disable(_SCRIPTNAME)