Overview
The 4Drivers PJ Link Projector driver controls any projector or display compatible with the PJ Link Class 1 standard (JBMIA) over IP, without relying on manufacturer-proprietary commands. It implements the official protocol documented at pjlink.jbmia.or.jp.
- Powers the projector on/off and tracks the real power state (Standby, Warm-up, On, Cooling)
- Selects video inputs through the protocol's 5 official classes: RGB, Video, Digital (HDMI/DVI), Storage (USB) and Network
- Periodically reads lamp hours, error status, mute state and other device information
- Supports PJ Link authentication (MD5) when security is enabled on the projector
- Keeps the TCP connection alive with a configurable keep alive, avoiding the protocol's 30-second timeout
- Sends raw PJ Link commands for functions not mapped in the driver's UI
- Includes a trial/license system and optional DriverCentral integration
PJ Link is an open standard: any projector or display advertising "PJLink Class 1" compatibility can be controlled by this driver, regardless of manufacturer.
Requirements
- Projector or display with PJ Link Class 1 enabled in the network menu (on many models this option ships disabled)
- Projector and Control4 controller on the same network/VLAN, with TCP port 4352 open (or the custom port configured on the projector)
- Static IP (or DHCP reservation) configured on the projector
- PJ Link password on hand, if security is enabled on the device
Properties
PJ Link Settings
| Property | Type | Default | Description |
| IP | Text | — | Projector's IP address on the network |
| TCP Port | Number | 4352 | PJ Link TCP port. Only change it if the projector uses a custom port |
| PJLink Password | Password | — | Projector's PJ Link password. Leave empty if security is disabled on the device |
| Keep Alive Interval-Seconds | Number (10-25) | 20 | Interval for the POWR ? keep-alive query. PJ Link drops the connection after 30s without traffic |
| Command Delay-Milliseconds | Number (200-2500) | 300 | Minimum interval between commands sent back to back |
Status (read-only)
| Property | Source (PJ Link command) | Description |
| IP Conn Status | — | TCP connection state: Connected, Disconnected, authentication error, etc. |
| Power Status | POWR ? | Standby, Warm-up, On or Cooling |
| Input Status | INPT ? | Currently selected video input code |
| Mute Status | AVMT ? | 11=video muted, 21=audio muted, 31=video and audio muted, 30=no mute |
| Lamp Hours | LAMP ? | Accumulated lamp usage hours |
| Error Status | ERST ? | Fan, lamp, temperature, cover, filter and other error status |
| Projector Name | NAME ? | Name configured on the projector itself |
| Manufacturer | INF1 ? | Manufacturer reported by the device |
| Product Name | INF2 ? | Product/model name reported by the device |
| Other Info | INFO ? | Additional free-form information from the manufacturer |
| PJ Link Class | CLSS ? | PJ Link class supported by the device (this driver implements Class 1) |
| Available Inputs | INST ? | List of input codes actually supported by that specific projector |
| Controller MAC Address | — | Control4 controller MAC, used internally for license validation |
Manufacturer, model, class and input list information (INF1/INF2/INFO/CLSS/INST) is queried once per connection, right after connecting. Error status, lamp hours and mute are refreshed every 5 keep-alive cycles (by default, roughly every 100 seconds) to avoid unnecessary polling load on the projector. Use the Refresh Status action to force an immediate update of everything.
Navigation (outside the PJ Link standard)
| Property | Type | Description |
| Cmd UP | Text | Raw command sent when the proxy requests UP |
| Cmd DOWN | Text | Raw command sent when the proxy requests DOWN |
| Cmd ENTER | Text | Raw command sent when the proxy requests ENTER |
| Cmd CANCEL | Text | Raw command sent when the proxy requests CANCEL |
PJ Link Class 1 does not define on-screen menu navigation commands. These four fields exist only in case your projector's manufacturer has a proprietary extension command for menu navigation. Leave them blank if you don't know or if the projector doesn't support it — the driver won't get stuck or throw an error, it simply ignores the command.
Image Adjustments (outside the PJ Link standard)
| Property | Type | Description |
| Cmd Brightness Up | Text | Raw command sent when the proxy requests brightness up |
| Cmd Brightness Down | Text | Raw command sent when the proxy requests brightness down |
| Cmd Contrast Up | Text | Raw command sent when the proxy requests contrast up |
| Cmd Contrast Down | Text | Raw command sent when the proxy requests contrast down |
Just like menu navigation, brightness and contrast are also not part of the PJ Link Class 1 protocol — the official specification defines no image adjustment commands. Only fill these in if your projector's manufacturer has a proprietary extension for it. Leave them blank otherwise.
Driver License
| Property | Type | Default | Description |
| License Key | Text | Trial | License key provided by 4Drivers. Use Trial to evaluate |
| Validation | Text | auto | License status — filled in automatically (read-only) |
| Developers Use | Password | — | Reserved for 4Drivers internal use (superdebug) |
Driver Info
| Property | Type | Default | Description |
| Debug Mode | List | Off | Print shows operational messages in the Composer log (connection, errors, high-level commands). The actual network content (TX/RX) only appears with the restricted developer mode enabled |
| Driver Version | Text | — | Installed driver version (read-only) |
Video Connections
PJ Link defines 5 official video input classes (INPT command, spec chapter 4.3). The driver exposes one connection per class, already mapped to the corresponding PJ Link code:
| Connection ID | Name | PJ Link Class | INPT Code |
| 1000 | RGB 1 | RGB (1) | 11 |
| 1001 | RGB 2 | RGB (1) | 12 |
| 1002 | Digital 1 (HDMI) | Digital (3) | 31 |
| 1003 | Digital 2 (HDMI) | Digital (3) | 32 |
| 1004 | Video (Composite) | Video (2) | 21 |
| 1005 | Network | Network (5) | 51 |
| 1006 | Storage | Storage (4) | 41 |
Wire each physical source (Blu-ray, Apple TV, etc.) to one of these connections in Composer's Connections tab, matching the signal type. The Available Inputs property shows which codes that specific projector actually reports supporting — use it to confirm the mapping.
Actions
| Action | Description |
| Power ON | Sends %1POWR 1 — turns the projector on |
| Power OFF | Sends %1POWR 0 — turns the projector off |
| Refresh Status | Forces an immediate query of all status: power, input, error, lamp, name, mute, manufacturer, model, class and input list |
| Send Command | Sends a raw PJ Link command typed manually, e.g. %1POWR 1. Useful for manufacturer extension commands not covered by the driver |
Commands (programmable)
| Command | Parameter | Description |
| Power | Acao: ON / OFF | Turns the projector on or off |
| Select Input | Input: 1000-1006 | Selects the video input by connection ID (see Video Connections table) |
| Send Command | Command: text | Sends a raw PJ Link command, same as the Send Command action |
PJ Link Authentication
If the projector has PJ Link security enabled, it sends a random challenge upon connecting. The driver automatically computes the MD5 hash (random number + password) and sends it along with the following commands, as described in chapter 5 of the specification.
- Fill in the PJLink Password property with the password configured on the projector
- If security is disabled on the device, leave the field empty
- If the password is wrong, the IP Conn Status property shows "Erro de autenticacao (senha invalida)"
Connection and Keep Alive
PJ Link operates exclusively over TCP/IP (there is no serial version of the protocol). The device drops the connection after 30 seconds without traffic. To prevent this, the driver sends a periodic POWR ? (property Keep Alive Interval-Seconds, default 20s), which doubles as keep-alive and power status update.
- The driver sends commands as soon as the TCP socket connects, without waiting for extra PJ Link handshake confirmation — this prevents the driver from getting "stuck" if the device doesn't respond to the protocol exactly as expected
- If the connection drops, the driver automatically retries every 5 seconds
- Commands sent before the connection opens are queued and dispatched as soon as the socket connects
Step-by-Step Setup
1 — Enable PJ Link on the projector
- In the projector's network menu, enable the PJLink option (naming may vary by manufacturer)
- Note the projector's IP and, if applicable, its configured PJ Link password
2 — Add the driver to the project
- Copy
4Drivers_PJLink_Projector.c4z to Composer's driver folder
Windows: C:\Users\[user]\Documents\Control4\Drivers\
- In Composer Pro, search for PJ Link Projector and drag the driver into the projector's room
3 — Configure the network
- Open the driver's Properties tab
- Fill in IP with the projector's address
- Confirm TCP Port (4352 is the protocol default — only change it if the projector uses a different one)
- If the projector has PJ Link security enabled, fill in PJLink Password
- Save (File > Save) and watch the IP Conn Status property change to Conectado
4 — Wire the video inputs
- In the Connections tab, wire each video source (Blu-ray, Apple TV, etc.) to one of the RGB, Digital (HDMI), Video, Network or Storage connections on the driver, matching the projector's physical input type
- Check the Available Inputs property to confirm which inputs the projector actually reports supporting
5 — Test
- In Actions, click Power ON and confirm Power Status changes to Warm-up and then On
- Test input switching through programming or the Select Input command
- Click Refresh Status and check that Lamp Hours, Error Status, Manufacturer and Product Name are populated
If nothing happens on power on/off, confirm PJLink is actually enabled in the projector's menu and that TCP port 4352 isn't blocked by a firewall between the controller and the projector.
6 — Finish
- Make sure Debug Mode is set to
Off
- Save and publish the project
Setup complete. The driver will keep the connection alive via keep-alive and refresh statuses automatically.
Troubleshooting
| Issue | Solution |
| IP Conn Status stays "Desconectado" | Confirm the projector's IP and TCP port, verify PJLink is enabled in the device's network menu and that no firewall is blocking port 4352 |
| "Erro de autenticacao (senha invalida)" | Check the PJ Link password configured on the projector and re-enter it in the PJLink Password property |
| Input command doesn't switch video | Check the Available Inputs property to confirm that code actually exists on the projector. Confirm the connection mapping used in Connections |
| Lamp Hours / Error Status never update | These fields are read roughly every 100s by default. Use the Refresh Status action to force an immediate update |
| UP/DOWN/ENTER/CANCEL do nothing | Expected: PJ Link Class 1 does not define menu navigation. Fill in the Cmd UP/DOWN/ENTER/CANCEL fields with the manufacturer's proprietary command, if one exists |
Technical Information
| Item | Value |
| Protocol | PJ Link Class 1 (JBMIA) — pjlink.jbmia.or.jp |
| Transport | TCP/IP, default port 4352 (network only — PJ Link has no serial version) |
| Command format | %1CCCC PARAM<CR> / response %1CCCC=VALUE<CR> |
| Authentication | Random challenge + MD5(random+password), when the projector's security is enabled |
| Keep alive | Periodic POWR ? (default 20s) to avoid the protocol's 30-second timeout |
| Persistence | License/trial data in PersistData — survives controller reboot |
Change Log
| Version | Date | Changes |
| 1051 | 08/01/2026 | Added raw command fields for image adjustment (Brightness/Contrast) and internal variables mirroring the projector's read-out data |
| 1050 | 08/01/2026 | Release Version |