16.06.2017, 23:40 
		
	
	
		Hi,
Maybe this helps someone. Here is basic bi-directional example for connecting the LM to some device that is controlled over TCP.
Thanks,
Roger
Place a resident script with a sleep interval of 0
Create event based script for
	
	
	
	
Maybe this helps someone. Here is basic bi-directional example for connecting the LM to some device that is controlled over TCP.
Thanks,
Roger
Place a resident script with a sleep interval of 0
Code:
if not ready then
  socket = require("socket")
  copas = require("copas")
  alert('not Ready')
  ready=true
  
  function parse(data)
   alert('parsing: %s', data)
   -- use this function to parse the data you receive from the tcp device
  end
  function sendTo(command)
   skt:send(command)
   --optional delay between commands sent tcp device you are controlling
   sleep(1) 
  end
    
  function fromKNX(command)
   alert('from knx: %s', command)
   local telegram = string.split(command,',')
   -- for every object that has the event script 
   if(telegram[1]=='1/1/1')then      
      sendTo('thisComand ='..telegram[2]..'\r')
   end
  end
  -- use this function to get the status of the remote tcp device
  function init()
   alert('Getting status of tcp device')
   sendTo('some command \r')
  end
  
  local server = socket.udp()
  server:setsockname("127.0.0.1",23456)
  function handler(skts)
    skts = copas.wrap(skts)
    alert("UDP connection handler")
    while true do
      local s, err
      alert("UDP receiving...")
      s, erro = skts:receive(2048)
      if not s then
        alert("UDP Receive error: ", erro)
        break
      end
      alert("Received data, bytes: "..s)
      fromKNX(s)
    end
  end
  copas.addserver(server, handler, 1)  
end
if not skt then
  -- create tcp client
  skt, err = socket.connect('10.10.10.41', 4999)
  -- when theres no error connect ok, initialize
  if(not err) then
    skt:settimeout(0)
    -- add receive thread
    copas.addthread(function()
        while true do
          local resp,err = copas.receive(skt)
          -- if theres no connection start a new connection
          if not resp then
            alert("[tcp-client] Receive error: %s", err)
            copas.removeserver(skt)
            skt = nil
            break
          end
          parse(resp)
        end
      end)
    if skt then
      alert('[tcp-client] connection ok')
      -- optional init function use to get initial status of remote device
      -- init()
    -- error while connecting,
    else
      if warningfailed then alert('[tcp-client] connection failed (conn): %s', err) end
      return
    end
  else
    alert('[tcp-client] error connecting %s',err)
    return
  end
end
copas.loop()Create event based script for
Code:
if event.type=='groupwrite' then
  require('socket')
  local client = socket.udp()
  local evt = event.dst..','..tostring(event.getvalue())
  if client then
    client:sendto(evt, '127.0.0.1', 23456)
    client:close()
  end
elseif event.type =='groupread' then
  grp.response(event.dst,event.getvalue())
end 
 

 
