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:
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
Reply
#2
Try adding a new line character when sending:
Code:
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:
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
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:
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:
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:
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:
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: