self.sleep = 1 / params.resolution
-- empty channel value map
self.conn:ltrim(params.skey, 1, 0)
for chan = 1, params.channels do
self.channels[ chan ] = { current = 0, target = 0, ticks = 0 }
self.conn:lpush(params.skey, 0)
self.dm:setchannel(chan, 0)
local max, channels, ticks, values, val
max = self.params.channels
values = self.conn:lrange(self.params.skey, 0, max - 1) or {}
-- check for new values for each channel
val = tonumber(values[ chan ]) or 0
-- target value differs, set transcation
if val ~= channels[ chan ].target then
channels[ chan ].target = val
channels[ chan ].delta = (channels[ chan ].target - channels[ chan
].current) / ticks
channels[ chan ].ticks = ticks
for i = 1, self.params.resolution do
-- single transition step
-- transition for each channel