Hello Admin,
Would you help me to refactor the code so that it can use all the features of Open web net ? I tried to redo it myself for the temperature, but I'm sure it's not the right way since the string is different there.
Would you help me to refactor the code so that it can use all the features of Open web net ? I tried to redo it myself for the temperature, but I'm sure it's not the right way since the string is different there.
Code:
if not sock then
mappingtemp = {
['1'] = '1/1/1',
['2'] = '1/1/2',
}
mapping = {
['3'] = '1/1/3',
['4'] = '1/1/4',
['5'] = '1/1/5',
['6'] = '1/1/6',
['7'] = '1/1/7',
['8'] = '1/1/8',
['9'] = '1/1/9',
['10'] = '1/1/10',
['11'] = '1/1/11',
['12'] = '1/1/12',
['13'] = '1/1/13',
['14'] = '1/1/14',
['15'] = '1/1/15',
['16'] = '1/1/16',
['17'] = '1/1/17',
['22'] = '1/1/22',
['23'] = '1/1/23',
['51'] = '1/1/51',
['0215'] = '1/1/52',
}
function parselighting(what, where)
log("Ok")
local addr = mapping[ where ]
what = tonumber(what) or -1
if addr and 0 <= what and what <= 10 then
grp.checkwrite(addr, what)
end
end
function parsetemperature(where, value)
local addr = mappingtemp[ where ]
log(where)
value = tonumber(value) or -1
if addr and 0 <= value and value <= 4050 then
value = value * 0.1
grp.checkwrite(addr, value)
log("done",value)
end
end
function parse(msg)
log (msg)
length = string.len(msg)
if length == 11 then
log("length",length)
local who, where, dimension, value = unpack(msg:split('*'))
if who == "#4" then
who = string.sub(who,2,2)
who = tonumber(who)
parsetemperature(where, value)
end
end
if length == 6 then
log("length",length)
local who, what, where = unpack(msg:split('*'))
who = tonumber(who)
-- lighting
if who == 1 then
parselighting(what, where)
log(what)
log(where)
end
end
end
function read(sock)
local buf = {}
while true do
local ch, err = sock:receive(1)
if ch then
local pr = buf[ #buf ]
buf[ #buf + 1 ] = ch
if ch == '#' and pr == '#' then
break
end
else
return nil, err
end
end
if #buf > 0 and buf[ 1 ] == '*' then
return table.concat(buf, '', 2, #buf - 2)
end
end
sock = require('socket').tcp()
sock:settimeout(1)
res, err = sock:connect('192.168.1.195', 20000)
if res then
sock:send('*99*1##')
else
log('connect failed', err)
sock:close()
sock = nil
os.sleep(1)
end
end
-- socket handler
if sock then
res, err = read(sock)
if res then
log(res)
parse(res)
elseif err == 'closed' then
sock:close()
sock = nil
end
end