22.11.2022, 12:29
Try this, no guarantees that it will work because we don't have any Lutron devices to test. Check Logs for any errors if the script does not work.
Adjust each query call as needed. First argument is the query request (without \r\n, it's added automatically), second argument is the status group address where the new value is written.
Adjust each query call as needed. First argument is the query request (without \r\n, it's added automatically), second argument is the status group address where the new value is written.
Code:
require('user.lutron')
sock, err = lutron_login()
if not sock then
log('no connection to device', err)
os.sleep(5)
end
function close(err)
sock:close()
sock = nil
log('receive failed', err)
end
function query(req, out)
if not sock then
return
end
sock:send(req .. '\r\n')
local res, err = sock:receive()
if not res then
return close(err)
end
if res:sub(1, 1) ~= '~' then
return close('invalid reply ' .. res)
end
if res:sub(2, #req) ~= req:sub(2) then
return close('invalid reply ' .. res)
end
local val = res:sub(#req + 2)
val = tonumber(val)
if val then
grp.checkupdate(out, val)
end
end
while sock do
query('?DEVICE,10,6,3', '1/1/1')
query('?DEVICE,10,1,2', '1/1/2')
query('?DEVICE,10,3,4', '1/1/3')
if sock then
os.sleep(5) -- delay between each poll cycle
else
break
end
end