give each sensor its own timestamp_prev to prevent starvation of second sensor in case of pwr messages
This commit is contained in:
parent
0f2ad0b693
commit
e953fb0245
|
@ -78,14 +78,16 @@ function buffer(child, interval)
|
||||||
return coroutine.create(function(meter, timestamp, value)
|
return coroutine.create(function(meter, timestamp, value)
|
||||||
local measurements = data.new()
|
local measurements = data.new()
|
||||||
local threshold = timestamp + interval
|
local threshold = timestamp + interval
|
||||||
local old_timestamp = 0
|
local timestamp_prev = {}
|
||||||
|
|
||||||
while true do
|
while true do
|
||||||
if meter ~= nil and timestamp > math.max(1234567890, old_timestamp) then measurements:add(meter, timestamp, value) end
|
if meter ~= nil and timestamp > math.max(1234567890, timestamp_prev[meter] or 0) then
|
||||||
|
measurements:add(meter, timestamp, value)
|
||||||
|
end
|
||||||
if timestamp > threshold and next(measurements) then --checking whether table is not empty
|
if timestamp > threshold and next(measurements) then --checking whether table is not empty
|
||||||
coroutine.resume(child, measurements)
|
coroutine.resume(child, measurements)
|
||||||
threshold = timestamp + interval
|
threshold = timestamp + interval
|
||||||
old_timestamp = timestamp
|
timestamp_prev[meter] = timestamp
|
||||||
end
|
end
|
||||||
meter, timestamp, value = coroutine.yield()
|
meter, timestamp, value = coroutine.yield()
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue