04.05.2016, 10:55
Hi,
Ok so I have room of lights. These objects ( group addresses ) which are either switch ( boolean ) or value based ( scale ) they are tagged as "Liivng". I want to show the average value of these lights. All of the status objects have been tagged with the tag called "Living Feedback". An event based script is placed on the "Living Feedback" tag. I created a two virtual objects. The first allows me to set the value of tag objects. The second represents the feedback, the average value of the objects. The problem is that there is always a varying number of lights and it can that only one light is changed or all of them are changed. The feedback value can jump up and down whilst every light returns its status. I have tried to overcome this by not recalculating the every time by checking when the average value status object has just been updated. Which can lead to the value not always being correct. Is there a better way to do this?
Thanks,
Roger
Ok so I have room of lights. These objects ( group addresses ) which are either switch ( boolean ) or value based ( scale ) they are tagged as "Liivng". I want to show the average value of these lights. All of the status objects have been tagged with the tag called "Living Feedback". An event based script is placed on the "Living Feedback" tag. I created a two virtual objects. The first allows me to set the value of tag objects. The second represents the feedback, the average value of the objects. The problem is that there is always a varying number of lights and it can that only one light is changed or all of them are changed. The feedback value can jump up and down whilst every light returns its status. I have tried to overcome this by not recalculating the every time by checking when the average value status object has just been updated. Which can lead to the value not always being correct. Is there a better way to do this?
Thanks,
Roger
Code:
if (event.type=='groupwrite') then
local groupstatus = grp.find('5/3/0') -- Status address of living
local delta = os.time()-groupstatus.updatetime
if(delta>5) then
local currentV = round(groupstatus.value,0)
local sobj = grp.tag('Living Feedback')
local sTotal = 0
local counter = 0
for key, obj in ipairs(sobj) do
if(sobj[key].data==true)then
elseif(sobj[key].data==false)then
else
sTotal= sTotal + sobj[key].data
counter=counter+1
end
end
local value= round((sTotal / counter),0)
if(currentV~=value) then
grp.update('5/3/0', value, dt.scale)
end
end
end