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 11andAVMT 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 path | What the manual says |
|---|---|
| Network > Network Configuration > Others > PJLink | Set to On to monitor the projector using PJLink |
| Network > Network Configuration > Basic > PJLink Password | Listed among the settings to make before using PJLink; the field description is not in the pages available here |
| Network > Network Configuration > Notifications > PJLink Notification | On enables notification, provided the PJLink setting is enabled |
| Network > Network Configuration > Notifications > Notified IP Address | IP 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 Mode | Communication 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 0The 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.
| Command | PJLink meaning | Epson status | Bytes |
|---|---|---|---|
%1AVMT 11 | Image mute on | Listed as non-compatible | 25 31 41 56 4D 54 20 31 31 0D |
%1AVMT 21 | Audio mute on | Listed as non-compatible | 25 31 41 56 4D 54 20 32 31 0D |
%1AVMT 31 | Image and audio mute on | Not on the exception list | 25 31 41 56 4D 54 20 33 31 0D |
%1AVMT 30 | Image and audio mute off | Not on the exception list | 25 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 input | PJLink number | Reads as | Command | Bytes |
|---|---|---|---|---|
| HDMI1 | 32 | DIGITAL, index 2 | %1INPT 32 | 25 31 49 4E 50 54 20 33 32 0D |
| HDMI2 | 33 | DIGITAL, index 3 | %1INPT 33 | 25 31 49 4E 50 54 20 33 33 0D |
| USB | 41 | STORAGE, index 1 | %1INPT 41 | 25 31 49 4E 50 54 20 34 31 0D |
| LAN | 52 | NETWORK, index 2 | %1INPT 52 | 25 31 49 4E 50 54 20 35 32 0D |
| HDBaseT | 56 | NETWORK, index 6 | %1INPT 56 | 25 31 49 4E 50 54 20 35 36 0D |
| Miracast | 57 | NETWORK, index 7 | %1INPT 57 | 25 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 1challenge.
ERR2or no effect on a mute command. Check whether you sentAVMT 11orAVMT 21, which Epson lists as non-compatible. Switch toAVMT 31/AVMT 30.
ERR2on 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\rVerification: 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.