25.10.2016, 14:43
I have a script for a read the states of inputs. But I have a little problem in my resident script. I cannot use grp.write() or grp.update() because I have this error:
I've tried send the same in the other script and there was ok.
This is my script:
Code:
Line 0: attempt to call field 'rshift' (a nil value)
I've tried send the same in the other script and there was ok.
This is my script:
Code:
-- Integracja z systemem Satelem po TCP
cmd = string.char(0xFE,0xFE,0x00,0xD7,0xE2,0xFE,0x0D)
bytes = 23
-- function Satel(cmd, bytes)
function satel_send(cmd, bytes)
ethm_ip = '192.168.2.9'
port = 7094
socket = require('socket')
client=socket.tcp()
success, error = client:connect(ethm_ip, port)
if success == 1 and error == nil then
client:settimeout(0.3)
client:send(cmd)
data, error, partial = client:receive(bytes)
-- error
if not data then
data = partial
end
client:close()
end
return data
end
-- Funkcja odpowiedzialna za wyciągniecie poszczególnych bitów i wstawienie ich do tabeli
function convert(data)
local res, byte
res = {}
for i = 1, #data do
-- get single byte
byte = data:byte(i, i)
byte = string.char(byte)
bits = hex2bin(byte)
for b = 1, #bits do
-- get single bit
bit = bits:byte(b, b)
bit = string.char(bit)
if bit == '0' then
bin = false
elseif bit =='1' then
bin = true
end
-- add to result
res[i*4-(4-b)] = bin
end
end
return res
end
data = satel_send(cmd, bytes)
-- check if some data is available
if data then
data = lmcore.strtohex(data, true)
-- delete first 4 and last 8 chars
data = string.sub(data, 5, (string.len(data) -8))
inputs = convert(data)
else
log('Satel: zajęty')
end
-- update the inputs in the LM database
for i = 1, #inputs do
GA = '0/0/'.. tostring(91+i-1)
grp.update(GA , inputs[i])
end