SoftControl

Epson Projector PJLink Commands: What Differs From the Spec


Epson's manuals state PJLink Class 2 compliance with two named exceptions: AVMT 11 (image mute only) and AVMT 21 (audio mute only). Mute picture and sound together with %1AVMT 31 / %1AVMT 30 instead. Input numbers are not what the PJLink pattern suggests at first glance — on the EB-L690 series HDMI1 is 32, not 31 — so take them from Epson's table for your model or ask the projector with %1INST ?. PJLink is off until you switch it on in the Network menu, and the EB-PU2220B manual ties network control to Standby Mode being set to Communication On.

For the full ESC/VP21 command list, wiring and serial settings, see the Epson projector RS232 commands guide. This page covers only what is specific to PJLink on Epson hardware.

Which Epson documents say what

Everything Epson-specific below comes from two Epson manuals: the online User's Guide for the EB-L690/L695/L790/L890/L895 series, and the EB-PU2220B/EB-PU2120W User's Guide (Rev05). Both make the same core statements:

  • The projector complies with the PJLink Class2 standard established by the JBMIA.

  • The port used for the PJLink search function is 4352 (UDP).

  • Network settings must be made before PJLink can be used.

  • It complies with all Class 2 commands except AVMT 11 and AVMT 21, and Epson says agreement was confirmed by the PJLink standard adaptability verification.

Only the EB-L690-series guide contains the input-number table and the model-name strings. Only the EB-PU2220B guide contains the menu paths quoted below. For any other Epson model, Epson's own pointer is "See the projector's Specifications for details." Do not assume one model's table applies to another.

Note the port detail. UDP 4352 is what Epson names for search. The PJLink specification assigns control sessions to TCP 4352, and the Class 2 specification puts search and status notification on UDP 4352. A controller that sends %1POWR 1 is using TCP; a firewall rule that only opens UDP 4352 will let discovery work and block control.

Switching PJLink on

The EB-PU2220B manual lists these settings (paths as printed in the manual):

Menu pathWhat the manual says
Network > Network Configuration > Others > PJLinkSet to On to monitor the projector using PJLink
Network > Network Configuration > Basic > PJLink PasswordListed among the settings to make before using PJLink; the field description is not in the pages available here
Network > Network Configuration > Notifications > PJLink NotificationOn enables notification, provided the PJLink setting is enabled
Network > Network Configuration > Notifications > Notified IP AddressIP that receives the projector's operating status; 127.x.x.x and 224.0.0.0 through 255.255.255.255 are not allowed
Extended > Standby ModeCommunication On to monitor and control the projector over a network

Verification: from-vendor-doc — per the Epson EB-PU2220B/EB-PU2120W User's Guide; not tested against real hardware in this repo.

Password rules: the Epson pages available here do not describe the allowed characters for the PJLink Password field — not found in the vendor's official documentation. The PJLink specification itself defines the password as 32 or fewer ASCII alphanumeric characters, so stay inside that.

Standby Mode has three prerequisites in the same manual: set A/V Output to While Projecting first; Auto Power On must be Off or Computer; USB Power must be On While Projecting. The manual ties network monitoring and control to Communication On. If it is not set, the manual gives no assurance that the projector answers on the network while in standby — and standby is exactly when a %1POWR 1 has to get through.

One more setting shuts PJLink out entirely: Extended > HDBaseT > Control Communications. Set to On, it enables the Ethernet and serial ports on the HDBaseT transmitter or switcher and disables the projector's own LAN, RS-232C and Remote ports. If the projector is fed over HDBaseT and its own LAN jack stops answering, check this before anything else.

Authentication in brief

With a PJLink password set, the projector opens every TCP session with a challenge; with no password (or security off) it sends PJLINK 0 and no digest is needed:

PJLINK 1 <8 lowercase hex characters of random number>
PJLINK 0

The controller computes MD5 over the random number followed by the password, and sends the 32-character digest directly in front of its first command, in the same transmission. The projector checks only the first 32 bytes and treats byte 33 onward as the command. A wrong password returns PJLINK ERRA; the projector then waits for the controller to disconnect and closes the session itself 30 seconds after the error. If no digest arrives within 30 seconds of the challenge, the projector times out and drops the connection. The PJLink commands guide walks through a complete digest calculation.

The two mute commands Epson does not support

PJLink defines three mute pairs: 11/10 for image only, 21/20 for audio only, 31/30 for image and audio together. Epson lists the "set" half of the first two as non-compatible.

CommandPJLink meaningEpson statusBytes
%1AVMT 11Image mute onListed as non-compatible25 31 41 56 4D 54 20 31 31 0D
%1AVMT 21Audio mute onListed as non-compatible25 31 41 56 4D 54 20 32 31 0D
%1AVMT 31Image and audio mute onNot on the exception list25 31 41 56 4D 54 20 33 31 0D
%1AVMT 30Image and audio mute offNot on the exception list25 31 41 56 4D 54 20 33 30 0D

Verification: from-vendor-doc — per Epson's PJLink support pages and the JBMIA PJLink Class 1 specification v1.04; not tested against real hardware in this repo.

The PJLink specification says ERR2 (out of parameter) is returned when these audio-only or video-only instructions are sent to a product without that mute function. Which reply an Epson unit actually sends for AVMT 11 or AVMT 21 is not stated by Epson — not found in the vendor's official documentation. Epson's pages do not mention AVMT 10 or AVMT 20 separately — not found in the vendor's official documentation.

The practical consequence: a "blank screen" button built on AVMT 11 cannot be relied on with these projectors. The replacement, AVMT 31, mutes audio as well by definition, so if room audio is taken from the projector's output, the blank button will also cut the sound. Label the button accordingly.

Input numbers: HDMI1 is 32

PJLink INPT takes two digits. The first is the input type — 1 RGB, 2 VIDEO, 3 DIGITAL, 4 STORAGE, 5 NETWORK — and the second is an index within that type (1–9 in Class 1). The EB-L690/L695/L790/L890/L895 guide gives:

Epson inputPJLink numberReads asCommandBytes
HDMI132DIGITAL, index 2%1INPT 3225 31 49 4E 50 54 20 33 32 0D
HDMI233DIGITAL, index 3%1INPT 3325 31 49 4E 50 54 20 33 33 0D
USB41STORAGE, index 1%1INPT 4125 31 49 4E 50 54 20 34 31 0D
LAN52NETWORK, index 2%1INPT 5225 31 49 4E 50 54 20 35 32 0D
HDBaseT56NETWORK, index 6%1INPT 5625 31 49 4E 50 54 20 35 36 0D
Miracast57NETWORK, index 7%1INPT 5725 31 49 4E 50 54 20 35 37 0D

Verification: from-vendor-doc — per the Epson EB-L690/L695/L790/L890/L895 series User's Guide; valid only for the models listed there; not tested against real hardware in this repo.

Epson does not explain why HDMI1 sits at index 2 of the DIGITAL type — not found in the vendor's official documentation. Do not "correct" it to 31; with PJLink's own rule, 31 is simply a different input slot. Note too that HDBaseT is filed under the NETWORK type in Epson's table, not DIGITAL. Every second digit in the table falls in the Class 1 range of 1–9, so all six can be sent with the %1 prefix.

The PJLink responses to INPT tell you which mistake you made: ERR2 means the input source does not exist on this unit, ERR3 means unavailable time (standby, for example).

For a model not in Epson's table, ask the projector rather than guessing. %1INST ? returns the available inputs as a space-separated list of two-digit numbers in the range 11–59 (at most 50 entries); it also returns ERR3 in standby, so query it with the projector on.

Confirm which projector you are talking to

Before relying on a model-specific input table, check the identity strings. Per Epson's guide, the manufacturer query %1INF1 ? returns EPSON, and the product-name query %1INF2 ? returns a model string such as EPSON L690U. Under the PJLink specification, INF1 can carry up to 32 characters. If INF2 names a model that is not in the EB-L690-series list, go back to that model's own manual for its input numbers.

PJLink or ESC/VP21 on an Epson

The PJLink Class 1 command set is short: POWR, POWR ?, INPT, INPT ?, AVMT, AVMT ?, ERST ?, LAMP ?, INST ?, NAME ?, INF1 ?, INF2 ?, INFO ? and CLSS ?. That covers power, input, mute, error and lamp status, and identification — the same commands work across brands. It has no command for things like colour mode or brightness level; Epson's ESC/VP21 command table lists CMODE (colour mode) and LUMINANCE (brightness level). Those go over ESC/VP21.

ESC/VP21 over the network is not raw text on a TCP port: Epson's ESC/VP.net requires a 16-byte handshake on TCP 3629 before the first command. That process, and its password modes, are covered in Epson projector network control. Epson's advice to set Command Communication to Compatible is written for ESC/VP.net; the manual does not connect that setting to PJLink.

One difference that trips people moving between the two: the PJLink specification says the command body is case-insensitive. Epson's ESC/VP21 guide does not say either way — it only says a command in the wrong format returns ERR. Do not carry the PJLink leniency over.

Field pitfalls and the order to check them

When an Epson projector ignores PJLink, work through this order:

  • TCP 4352 refuses or times out. Check Network > Network Configuration > Others > PJLink is On. Check Extended > HDBaseT > Control Communications — On disables the projector's LAN port. If the projector is in standby, check Standby Mode is Communication On. Check that TCP (not just UDP) 4352 is open between controller and projector.

  • Reply is PJLINK ERRA. The digest does not match: wrong password on either side. The projector closes the session 30 seconds after the error if you do not.

  • Connection drops before any reply. A password is set and no digest arrived within 30 seconds of the PJLINK 1 challenge.

  • ERR2 or no effect on a mute command. Check whether you sent AVMT 11 or AVMT 21, which Epson lists as non-compatible. Switch to AVMT 31 / AVMT 30.

  • ERR2 on an input command. The number is not an input on this model. Run %1INST ? with the projector on.

  • ERR3. Unavailable time, such as standby. Query %1POWR ? and retry once the projector is on.

  • ERR1. Undefined command — usually a typo in the four-letter command body.

  • Several commands, only some executed. The PJLink specification does not guarantee responses or execution for commands sent before the previous response arrived. Send one, wait for the reply, then send the next.

In SoftControl specifically, the PJLink driver reports PJLINK ERRA, ERR3 and ERR4 as failed executions, and fails with a password-required error if the projector sends PJLINK 1 while no password is configured. ERR1 and ERR2 come back as the reply text of a call that is otherwise marked successful, so read the reply (for example %1AVMT=ERR2) rather than trusting the success flag. If no reply arrives within the response timeout, the driver treats the command as sent without a response.

SoftControl import snippet

SoftControl's pjlink protocol uses TCP 4352 and implements PJLink Class 1 with MD5 authentication. Write commandText with the %1 prefix and without a trailing CR — the driver appends it. If the projector has a PJLink password, put it in the device's auth.password; the driver reads the PJLINK 1 challenge and computes the digest. Each execution opens its own TCP session, sends one command, reads one reply and closes, which matches the specification's instruction that the controller disconnect once its commands are done.

name: Epson power on (PJLink)
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1POWR 1

name: Epson power off (PJLink)
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1POWR 0

name: Epson HDMI1 (PJLink, EB-L690 series numbering)
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1INPT 32

name: Epson blank picture and sound on
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1AVMT 31

name: Epson blank picture and sound off
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1AVMT 30

name: Epson list available inputs
protocol: pjlink
targetIpOrCom: 192.168.1.50
portOrBaud: 4352
commandText: %1INST ?

Verification: from-vendor-doc — command strings per the JBMIA PJLink specification and Epson's PJLink support pages; field model per SoftControl's PJLink driver; not tested against an Epson projector in this repo.

Replace 192.168.1.50 with the projector's address. For a power-on-then-input sequence, put the wait on the input command's delayMs, which is the time SoftControl waits before executing that command. Neither Epson's PJLink pages nor the PJLink specification give a warm-up figure — not found in the vendor's official documentation — so if the input command returns ERR3, lengthen the delay and re-test on site.

For Epson-only functions, send ESC/VP21 over serial instead. SoftControl's serial driver runs 8N1 and does not add a CR, so include it:

name: Projector power on (ESC/VP21 serial)
protocol: serial
targetIpOrCom: COM1
portOrBaud: 9600
payloadFormat: text
commandText: PWR ON\r

Verification: from-vendor-doc — per Epson's ESC/VP21 guide (9600, 8 bits, no parity, 1 stop bit); not tested against real hardware in this repo.

Before you build the button panel

Run %1INF2 ? and %1INST ? against the actual projector during commissioning and compare the result with Epson's table for that model. That one check catches the two mistakes this page is about — an input number borrowed from the wrong model, and a mute button that relies on AVMT 11.