This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

OPPO control over IP
#1
Hi control is working but I am get respond with timeout. why?
Command function:

Code:
12345678910111213141516171819202122
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:
123456
ip = '192.168.11.105' if (event.getvalue() == true) then  res, err = tcp_oppo('POW', ip) end log (res, err)
Manual
Reply
#2
Try adding a new line character when sending:
Code:
1
res, err = sock:send('#' .. data .. '\r\n')
Reply
#3
(04.12.2018, 13:45)admin Wrote: Try adding a new line character when sending:
Code:
1
res, err = sock:send('#' .. data .. '\r\n')

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

Code:
12345
Event for Test 2 (32/5/1) 04.12.2018 16:36:21 * arg: 1  * nil * arg: 2  * string: timeout
Reply
#4
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:
12345678910111213141516171819202122232425262728293031
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)
Reply
#5
(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:
12345678910111213141516171819202122232425262728293031
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.
Reply
#6
Upgrade LuaSocket package via System config > System > Packages:
https://dl.openrb.com/lm-18-imx6/pkg/lua...1_imx6.ipk

Then replace receive part with:
Code:
1
res, err, partial = sock:receive('*r')
Reply
#7
(05.12.2018, 08:32)admin Wrote: Upgrade LuaSocket package via System config > System > Packages:
https://dl.openrb.com/lm-18-imx6/pkg/lua...1_imx6.ipk

Then replace receive part with:
Code:
1
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.
Reply
#8
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.
Reply


Forum Jump: