Logic Machine Forum
OPPO control over IP - Printable Version

+- Logic Machine 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.