29.11.2022, 09:50
(22.11.2022, 12:29)admin Wrote: 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.
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
The script you have shared worked, but sometimes it goes into the sleep mode or update the status very late. Also How do I get the brightness status through this script. I am using the event based script to send the brightness value command to lutron. Please guide
require('user.lutron')
tcp, err = lutron_login()
if not tcp then
log('no connection to device', err)
end
value = event.getvalue()
value = math.floor(value)
tcpend('#OUTPUT,151,1,'..value..'\r\n')