LogicMachine Forum
OPPO control over IP - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Gateway (https://forum.logicmachine.net/forumdisplay.php?fid=10)
+--- Thread: OPPO control over IP (/showthread.php?tid=1771)



OPPO control over IP - Thinklight - 04.12.2018

Hi control is working but I am get respond with timeout. why?
Command function:

Code:
function tcp_oppo(data, ip, port)  local sock = require('socket').tcp()  sock:settimeout(3)  local res, err = sock:connect(ip, port or 23)    if res then    res, err = sock:send('#' .. data .. '\r')    if res then      res, err = sock:receive('*a')    else      alert('send failed: ' .. tostring(err))      end  else    alert('connect failed: ' .. tostring(err))  end  sock:close()  return res, err end
Event:
Code:
ip = '192.168.11.105' if (event.getvalue() == true) then  res, err = tcp_oppo('POW', ip) end log (res, err)
Manual


RE: OPPO control over IP - admin - 04.12.2018

Try adding a new line character when sending:
Code:
res, err = sock:send('#' .. data .. '\r\n')



RE: OPPO control over IP - Thinklight - 04.12.2018

(04.12.2018, 13:45)admin Wrote: Try adding a new line character when sending:
Code:
res, err = sock:send('#' .. data .. '\r\n')

Nop it`s not hellp in logs I got the same:

Code:
Event for Test 2 (32/5/1) 04.12.2018 16:36:21 * arg: 1  * nil * arg: 2  * string: timeout



RE: OPPO control over IP - admin - 04.12.2018

The remote host probably is not closing the socket after command that's why receive all (*a) is not working. You can get partial response like this:
Code:
function tcp_oppo(data, ip, port)   local sock = require('socket').tcp()   sock:settimeout(3)   local res, err = sock:connect(ip, port or 23)      if res then     res, err = sock:send('#' .. data .. '\r')     if res then       res, err, partial = sock:receive('*a')     else       alert('send failed: ' .. tostring(err))       end   else     alert('connect failed: ' .. tostring(err))   end   sock:close()   return res, err, partial end ---------------------------------- ip = '192.168.11.105' if (event.getvalue() == true) then   res, err, partial = tcp_oppo('POW', ip) end log (res, err, partial)



RE: OPPO control over IP - Thinklight - 04.12.2018

(04.12.2018, 14:45)admin Wrote: The remote host probably is not closing the socket after command that's why receive all (*a) is not working. You can get partial response like this:
Code:
function tcp_oppo(data, ip, port)  local sock = require('socket').tcp()  sock:settimeout(3)  local res, err = sock:connect(ip, port or 23)    if res then    res, err = sock:send('#' .. data .. '\r')    if res then      res, err, partial = sock:receive('*a')    else      alert('send failed: ' .. tostring(err))      end  else    alert('connect failed: ' .. tostring(err))  end  sock:close()  return res, err, partial end ---------------------------------- ip = '192.168.11.105' if (event.getvalue() == true) then  res, err, partial = tcp_oppo('POW', ip) end log (res, err, partial)


Thanks admin its working I get 'partial'
How you think how to do to get status of device power when device will be turn on over remote that LM will know of Player status.


RE: OPPO control over IP - admin - 05.12.2018

Upgrade LuaSocket package via System config > System > Packages:
https://dl.openrb.com/lm-18-imx6/pkg/luasocket_2.0.2-31_imx6.ipk

Then replace receive part with:
Code:
res, err, partial = sock:receive('*r')



RE: OPPO control over IP - Thinklight - 05.12.2018

(05.12.2018, 08:32)admin Wrote: Upgrade LuaSocket package via System config > System > Packages:
https://dl.openrb.com/lm-18-imx6/pkg/luasocket_2.0.2-31_imx6.ipk

Then replace receive part with:
Code:
res, err, partial = sock:receive('*r')

OK that working now I get sting in res.
How do that I get status of player in KNX objekt about power status. I mean that sometime can be that player will be turn on from original remote control I need to know.
Thanks.


RE: OPPO control over IP - admin - 05.12.2018

You need to send QPW command then parse the result and update status object if needed. You will need a separate resident script for that. Make sure that you don't use one object for both control and status, otherwise you can get an infinite script loop.