Appearance
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 off1= 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 ON10= Video and audio mute OFF21= Video mute ON20= Video mute OFF31= Audio mute ON30= Audio mute OFF
This implementation uses 11/10 to control both video and audio together.
