Skip to content

Projector Control Interface (projector) ​

The Projector Control Interface provides consistent controls for controlling Projectors across control protocols. It's primary use is with PJLink but may be extended for Projectors that do not implement the PJLink control protocol – such as Barco Pulse.

ProjectorControlInterface ​

errors ​

Query projector error status including fan, lamp, temperature, cover, filter, and other error conditions.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "errors",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: ERST ?

Example Response:

json
{
    "id": "ERST",
    "value": "000000",
    "raw": "000000"
}

Response format (6 digits): FLTCPO where each position is:

  • F = Fan error (0=OK, 1=Warning, 2=Error)
  • L = Lamp error (0=OK, 1=Warning, 2=Error)
  • T = Temperature error (0=OK, 1=Warning, 2=Error)
  • C = Cover open error (0=OK, 1=Warning, 2=Error)
  • P = Filter error (0=OK, 1=Warning, 2=Error)
  • O = Other error (0=OK, 1=Warning, 2=Error)

freeze ​

Freeze or unfreeze the projected image (pauses the current frame on screen).

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "freeze",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "freeze",
    "data": {
        "type": "ValueSetBoolean",
        "value": true
    },
    "mid": "123abc"
}

Accepts: ValueSetBoolean / Returns: ControlState

PJLink Command: FREZ 1 (freeze) / FREZ 0 (unfreeze) / FREZ ? (query)


input ​

Get/set the Projector input by friendly name.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input",
    "data": {
        "type": "ValueSet",
        "value": "HDMI 1"
    },
    "mid": "123abc"
}

Accepts: ValueSet / Returns: ControlState

PJLink Command: INNM ? (query input name)

Note: This uses PJLink Class 2 INNM command to query/set inputs by name. For setting inputs by numeric code, use input_num instead.


input_num ​

Get/set the Projector input by numeric PJLink input code.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input_num",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input_num",
    "data": {
        "type": "ValueSet",
        "value": "31"
    },
    "mid": "123abc"
}

Accepts: ValueSet / Returns: ControlState

PJLink Command: INPT <code> (set) / INPT ? (query)

Standard Input Codes:

  • 11-19: RGB inputs (VGA/Computer)
  • 21-29: VIDEO inputs (Composite/Component/S-Video)
  • 31-39: DIGITAL inputs (HDMI/DVI/DisplayPort)
  • 41-49: STORAGE inputs (USB/Memory card)
  • 51-59: NETWORK inputs (LAN/HDBaseT)

See PJLinkInput enum in the PJLink implementation for convenience constants.


inputs ​

Query the list of available inputs on the projector.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "inputs",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: INST ?

Example Response:

json
{
    "id": "INST",
    "value": "11 12 31 32",
    "raw": "11 12 31 32"
}

Response contains space-separated list of available input codes.


lamp ​

Query lamp status and running hours.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "lamp",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: LAMP ?

Example Response:

json
{
    "id": "LAMP",
    "value": "1234 1",
    "raw": "1234 1"
}

Response format: <hours> <status> where status is:

  • 0 = Lamp off
  • 1 = Lamp on

For projectors with multiple lamps, multiple pairs are returned.


name ​

Query the projector's configured name.

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "name",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: NAME ?


shutter ​

Mute or unmute the projector's AV output (video and audio blanking).

Get ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "shutter",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set ​

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "shutter",
    "data": {
        "type": "ValueSetBoolean",
        "value": true
    },
    "mid": "123abc"
}

Accepts: ValueSetBoolean / Returns: ControlState

PJLink Command: AVMT 11 (mute on) / AVMT 10 (mute off) / AVMT ? (query)

Note: PJLink AVMT command uses:

  • 11 = Video and audio mute ON
  • 10 = Video and audio mute OFF
  • 21 = Video mute ON
  • 20 = Video mute OFF
  • 31 = Audio mute ON
  • 30 = Audio mute OFF

This implementation uses 11/10 to control both video and audio together.

Atlas Hybrid cloud, on-premesis platform for large scale media program development, delivery and operation.