Skip to main content

PJLink Projector / Display

PJLink is the JBMIA industry-standard network-control protocol for projectors and large-format displays. A single PJLink driver covers most modern commercial projectors and signage panels — Epson, NEC, Panasonic, Sharp, Sony, Maxell/Hitachi, Christie, BenQ, ViewSonic, Optoma, Ricoh, JVC, LG and many others — without needing a per-brand driver.

GEM's PJLink driver speaks Class 1 commands (which Class 2 projectors also accept) over TCP/4352 and handles the projector's MD5 challenge-response authentication transparently.

Prerequisites

  • The projector supports PJLink (Class 1 minimum). Most commercial projectors shipped in the last 10+ years do; consumer "home cinema" projectors often do not — check the model's spec sheet.
  • PJLink is enabled in the projector menu. Different menus call it Network Control, Standby Network, Project Control via LAN, or PJLink. The setting is normally on the same page as the IP / DHCP configuration.
  • The projector's IP is reachable from the GEM controller on TCP port 4352.
  • Standby mode is set to Network On / Standard / Communication On — the Eco standby mode usually disables LAN control, which means PJLink works while the projector is on but you cannot power it on again over the network.
  • If a PJLink password is set in the projector menu, you know it. A blank password in the projector menu means "no authentication".

Setup steps

  1. In the projector network menu, note the IP address (or assign a DHCP reservation so it doesn't move) and the PJLink password if one is set.
  2. In GEM, Admin → Devices → New, pick the PJLink Projector / Display driver.
  3. Enter the projector IP. Leave the port on 4352 unless the projector documents otherwise (a few legacy installs use a non-standard port).
  4. Enter the PJLink password if one is set. Leave blank for no-auth projectors. The driver auto-encrypts this attribute.
  5. Save the device. The driver immediately runs POWR ? to confirm the projector is reachable.
  6. The driver polls POWR, INPT, AVMT, LAMP, and ERST every 30 seconds (configurable via status_interval).
  7. Run the get_inputs command once to learn which input codes the projector actually advertises — use the returned 2-digit codes when driving the input / set_input commands.

Attribute reference

Required

AttributeTypeDescription
ipstringLAN IP or hostname of the projector.

Optional

AttributeTypeDefaultDescription
portint4352JBMIA-standard PJLink port.
passwordstring (secure)emptyPJLink password as configured in the projector menu. Blank = no auth.
status_intervalint (ms)30000How often the status loop runs.
request_timeoutint (ms)4000Per-command timeout for connect / greeting / response.

Surfaced by the driver (read-only)

AttributeSourceMeaning
power_statePOWR ?off / on / cooling / warming.
inputINPT ?2-digit PJLink input code.
input_typefirst digit of INPT ?rgb / video / digital / storage / network / internal.
av_muteAVMT ?av_unmuted / av_muted / video_unmuted / video_muted / audio_unmuted / audio_muted.
lamp_hoursLAMP ?Hours on the first (or only) lamp.
error_statusERST ?6-digit string: fan, lamp, temp, cover, filter, other (0 ok, 1 warn, 2 error).
has_errorderivedtrue if any digit of error_status is non-zero.

Zones

PJLink does not use GEM zones — the projector is controlled at the device level. All telemetry is on the device row.

Input code format

PJLink uses a 2-digit input code where the first digit identifies the type and the second digit identifies the number on that bus:

First digitSource typeCommon second-digit codes
1RGB / VGA / Computer11 RGB1, 12 RGB2
2Composite / Component Video21 Video1
3Digital / HDMI / DisplayPort31 HDMI1, 32 HDMI2
4Storage (USB / SD)41 USB1
5Network / LAN / Streaming51 LAN1
6Internal source (Class 2 ext.)61 Internal1

Mapping the second digit to the physical port is projector-specific. Run the get_inputs command to ask the projector for the codes it actually implements.

Known limitations / not yet supported

  • PJLink Class 2 extensions (SVOL, MVOL, FREZ, RESO, RTLM, IFOR, LKUP, SRCH) are not exposed in this version. Most can be added later by sending %2 prefixed commands; the wire format is identical.
  • Class 2 SRCH broadcast autodiscovery on UDP/4352 is not implemented — enter the IP manually.
  • Projector clock/scheduling (SNUM, INNM) commands are not exposed.
  • The driver speaks the open PJLink protocol only. Models that only expose vendor-specific protocols (e.g., Epson ESC/VP21, NEC NaviSet) need a different driver.

Troubleshooting

SymptomLikely cause
Every command returns ERRA: authentication failureWrong PJLink password, or the projector now requires auth and the password attribute is blank. Re-check the projector PJLink menu.
Driver connects, reads status, but power_on does nothingProjector standby mode is Eco — LAN control is disabled while powered off. Change to Network On / Standard.
power_state stays on cooling or warming for a long timeProjector lamp transition takes 30 – 120 seconds; status polling will update once it settles.
input command returns ERR2The input code is not advertised by this projector. Run get_inputs and pick a value from the returned list.
Commands work intermittentlyThe projector may only allow one PJLink session at a time. Disconnect any other building-management or AV-control system that holds a PJLink session.
Connect succeeds at boot but starts timing out hours laterMany projectors close idle TCP sessions; this driver opens a new connection per command, so this is normally not a problem. If you see it, raise request_timeout.