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.

Arcam control over ip
#1
Hi,
What I am doing wrong?
I want to control Arcam receiver over IP and put in Command function this code:
Code:
function tcp_arcam(data, ip, port)
 local sock, res, err

 sock = require('socket').tcp()
 sock:settimeout(5)

 res, err = sock:connect(ip, port or 50000)
 
 if res then
   res, err = sock:receive(5)

   if res == 'PJ_OK' then
     sock:send('PJREQ')
     res, err = sock:receive(5)

     if res == 'PJACK' then
       sock:send(data)
       res, err = sock:receive(6)
     else
       alert('invalid/no ack: ' .. tostring(res))  
     end
   else
     alert('invalid/no init: ' .. tostring(res))  
   end
 else
   alert('connect failed: ' .. tostring(err))
 end

 sock:close()

 return res, err
end
Then from event script using this:

Code:
cmdon  = string.char(0x21, 0x01, 0x00, 0x01, 0xF0, 0x0D)
cmdoff = string.char(0x21, 0x01, 0x00, 0x00, 0xF0, 0x0D)
ip = '192.168.11.112'

if (event.getvalue()==true) then
 res, err = tcp_arcam(cmdon, ip)
else
 res, err = tcp_arcam(cmdoff, ip)
os.sleep(2.5)
 res, err = tcp_arcam(cmdoff, ip)
end
log (res, err)

Manual of receiver is her: Manual of control
Reply
#2
Try this:
Code:
function tcp_arcam(data, ip, port)
  local sock, res, err, len

  sock = require('socket').tcp()
  sock:settimeout(1)

  res, err = sock:connect(ip, port or 50000)
  
  if res then
    -- send data
    sock:send(data)

    -- receive response
    res, err = sock:receive(5)
    if type(res) == 'string' and #res == 5 then
      len = res:byte(5)
      res, err = sock:receive(len + 1)
    else
      alert('receive failed: ' .. tostring(err))
    end
  else
    alert('connect failed: ' .. tostring(err))
  end

  sock:close()

  return res, err
end
Reply
#3
(04.12.2018, 07:16)admin Wrote: Try this:
Code:
function tcp_arcam(data, ip, port)
 local sock, res, err, len

 sock = require('socket').tcp()
 sock:settimeout(1)

 res, err = sock:connect(ip, port or 50000)
 
 if res then
   -- send data
   sock:send(data)

   -- receive response
   res, err = sock:receive(5)
   if type(res) == 'string' and #res == 5 then
     len = res:byte(5)
     res, err = sock:receive(len + 1)
   else
     alert('receive failed: ' .. tostring(err))
   end
 else
   alert('connect failed: ' .. tostring(err))
 end

 sock:close()

 return res, err
end

I am got nil and timeout. What you think whats wrong?
Reply
#4
Do you get any entries in alerts?
Reply
#5
(04.12.2018, 10:01)admin Wrote: Do you get any entries in alerts?

Yes receive filed: timeout
Reply
#6
Try using IR simulation commands for on/off:
Code:
cmdon  = string.char(0x21, 0x01, 0x08, 0x02, 0x10, 0x7B, 0x0D)
cmdoff = string.char(0x21, 0x01, 0x08, 0x02, 0x10, 0x7C, 0x0D)
Reply
#7
(04.12.2018, 10:16)admin Wrote: Try using IR simulation commands for on/off:
Code:
cmdon  = string.char(0x21, 0x01, 0x08, 0x02, 0x10, 0x7B, 0x0D)
cmdoff = string.char(0x21, 0x01, 0x08, 0x02, 0x10, 0x7C, 0x0D)

It's working. Smile
Reply
#8
Some ideas how need to get status of Arcam in LM:

It is possible that the state of the AV may be changed as a result of user input via the front panel buttons or via the IR remote control. Any change
resulting from these inputs is relayed to the RC using the appropriate message type.
For example, if the user changed the front panel display brightness using the DISPLAY button on the front panel, a display message (defined below)
would be sent to the RC. A similar action would be taken for all other state changes (including decode mode changes).
Reply
#9
For this you will need a resident script to constantly poll status values from remote host.
Reply


Forum Jump: