Posts: 133
Threads: 19
Joined: Apr 2018
Reputation:
0
22.04.2020, 14:04
(This post was last modified: 22.04.2020, 14:08 by manos@dynamitec.)
Hello All,
I need to control a Panasonic Projector which is compatible with the PJLINK (TCP/IP) protocol on port 4352.
I will need to send some hex or character commands to the IP 192.168.1.98 port 4352. Please see below example:
Power ON :
CHARACHTER => %1POWR(SP)0(CR)
HEX => 25 31 50 4f 57 52 20 30 0d
Can this be done via an event script triggered by a virtual object?
HomeLynk V3.0 FW:2.4.0
Thank you in advance
Posts: 7758
Threads: 42
Joined: Jun 2015
Reputation:
447
Event script mapped to binary on/off object:
Code: value = event.getvalue() and 1 or 0
sock = require('socket').tcp()
cmd = '%1POWR ' .. value .. '\r'
sock:settimeout(1)
res, err = sock:connect('192.168.1.98', 4352)
if res then
res, err = sock:receive(9)
if res and res == 'PJLINK 0\r' then
sock:send(cmd)
res, err = sock:receive(10)
log('receive reply', res, err)
else
log('receive init failed', res, err)
end
else
log('connect failed', err)
end
sock:close()
Result and any errors will be visible in Logs tab. You can remove log() calls if everything is working correctly.
Posts: 133
Threads: 19
Joined: Apr 2018
Reputation:
0
(22.04.2020, 14:55)admin Wrote: Event script mapped to binary on/off object:
Code: value = event.getvalue() and 1 or 0
sock = require('socket').tcp()
cmd = '%1POWR ' .. value .. '\r'
sock:settimeout(1)
res, err = sock:connect('192.168.1.98', 4352)
if res then
res, err = sock:receive(9)
if res and res == 'PJLINK 0\r' then
sock:send(cmd)
res, err = sock:receive(10)
log('receive reply', res, err)
else
log('receive init failed', res, err)
end
else
log('connect failed', err)
end
sock:close()
Result and any errors will be visible in Logs tab. You can remove log() calls if everything is working correctly.
Thank you Admin. I will try tomorrow.
If I need to send the command ON only when the object has a value 1 (True) then OFF using an other object with value 1 (TRUE) then the code will be like?:
Code: value = event.getvalue()
sock = require('socket').tcp()
cmd = '%1POWR 1\r' --OR '%1POWR 0\r' for OFF
sock:settimeout(1)
res, err = sock:connect('192.168.1.98', 4352)
if value and res then
res, err = sock:receive(9)
if res and res == 'PJLINK 0\r' then
sock:send(cmd)
res, err = sock:receive(10)
log('receive reply', res, err)
else
log('receive init failed', res, err)
end
else
log('connect failed', err)
end
sock:close()
Posts: 7758
Threads: 42
Joined: Jun 2015
Reputation:
447
The example already handles this, don't change anything.
Posts: 31
Threads: 10
Joined: Sep 2016
Reputation:
0
Hello admin
am trying an event based script to change input based on
11: RGB 1
31: HDMI 1
32: HDMI 2
nothing is working :/ any help on this
tks
Posts: 133
Threads: 19
Joined: Apr 2018
Reputation:
0
04.11.2020, 20:19
(This post was last modified: 04.11.2020, 20:22 by manos@dynamitec.)
(04.11.2020, 15:16)YOUSSEF Wrote: Hello admin
am trying an event based script to change input based on
11: RGB 1
31: HDMI 1
32: HDMI 2
nothing is working :/ any help on this
tks
Hello Youssef, please see below my code that worked without problems. The trigger value was always set to ON (1) for me. Make sure that the password for the user account is empty and that the webcontrol and PJLINK is active on the projector settings.
You have to change the '12' (input source) to your values every time and also change the IP address/Port to match your installation.
Code: --Projector Input RGB1 triggered by event script
--Sends the command via the PJLINK Protocol to the Projector
value = event.getvalue() and 1 or 0
sock = require('socket').tcp()
cmd = '%1INPT ' .. 11 .. '\r'
sock:settimeout(1)
res, err = sock:connect('192.168.1.98', 4352)
if res then
res, err = sock:receive(9)
if res and res == 'PJLINK 0\r' then
sock:send(cmd)
res, err = sock:receive(10)
log('receive reply', res, err)
else
--log('receive init failed', res, err)
end
else
--log('connect failed', err)
end
sock:close()
Posts: 31
Threads: 10
Joined: Sep 2016
Reputation:
0
Posts: 31
Threads: 10
Joined: Sep 2016
Reputation:
0
Hello
am having problems reading informations like state of the projector:
%POWR ? (power on off)
%1ERST ? (errors)
Lens working hours?
should it be resident script? any help ? Thank you
Posts: 7758
Threads: 42
Joined: Jun 2015
Reputation:
447
You either need a resident or a scheduled script depending on how often you want to read the status.
Try this example, you might need to install 2021 firmware as *r pattern is not supported in older firmwares. Change IP/port as needed. If the status read works then the script can be modified to write info into objects.
Code: sock = require('socket').tcp()
sock:settimeout(1)
res, err = sock:connect('192.168.1.98', 4352)
if res then
res, err = sock:receive('*r')
if res and res == 'PJLINK 0' then
sock:send('%POWR ?\r')
res, err = sock:receive('*r')
log('received powr reply', res, err)
sock:send('%1ERST ?\r')
res, err = sock:receive('*r')
log('received error reply', res, err)
sock:send('%1LAMP ?\r')
res, err = sock:receive('*r')
log('received lamp reply', res, err)
else
log('receive init failed', res, err)
end
else
log('connect failed', err)
end
sock:close()
Posts: 31
Threads: 10
Joined: Sep 2016
Reputation:
0
this is the log am getting
* arg: 1
* string: receive init failed
* arg: 2
* string: PJLINK 0
* arg: 3
* nil
I did the install the the 2021 FW,
Posts: 7758
Threads: 42
Joined: Jun 2015
Reputation:
447
The new pattern strips the \r character. I've modified the script, please try again.
Posts: 31
Threads: 10
Joined: Sep 2016
Reputation:
0
|