Summary
Barco Pulse projector controlled via JSON-RPC 2.0 API over TCP/IP (port 9090) or RS-232 serial. Supports power control, source selection, illumination/laser power, picture settings (brightness, contrast, gamma, saturation, sharpness), lens optics (zoom, focus, lens shift, shutter), warping, blending, black level correction, DMX, environment monitoring (temperatures, fan speeds, alarms), and firmware management. File endpoints for warp grids, blend masks, and black level masks are available via HTTP.
Transport
protocols:
- tcp
- serial
- http
addressing:
port: 9090 # TCP/IP service port for JSON-RPC Pulse API
base_url: "http://{projector-ip}/api" # HTTP file endpoints; IP is device-specific
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: passcode # optional: authentication required only for elevated access levels; normal end user access skips auth
Traits
traits:
- powerable # inferred from system.poweron / system.poweroff commands
- queryable # inferred from property.get query commands
- routable # inferred from source selection commands
- levelable # inferred from brightness/contrast/gamma/laser power level controls
Actions
# ============================================================================
# JSON-RPC 2.0 methods - all communication uses JSON-RPC 2.0 over TCP (port
# 9090) or serial. Each action carries the verbatim JSON-RPC payload from the
# source. Parameterized actions show the variable part in braces.
# ============================================================================
# --- Power control ---
- id: power_on
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron"}'
params: []
- id: power_off
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
params: []
- id: eco_wake_serial
label: ECO Mode Wake via RS-232
kind: action
command: ':POWR1\r'
params: []
notes: ASCII serial command to wake projector from ECO/power-save mode. Only applies to projectors with ECO mode.
# --- Authentication ---
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":{passcode}}}'
params:
- name: passcode
type: integer
description: Secret pass code for elevated access level
notes: Optional. Required only when higher-than-normal user access is needed.
# --- Illumination ---
- id: illumination_clo_engage
label: Engage CLO (Constant Light Output)
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
notes: Engages CLO at the current light level.
# --- Lens / optics control (property.set) ---
- id: set_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.target","value":{target}}}'
params:
- name: target
type: string
description: Shutter target - "Open" or "Closed"
- id: set_zoom_position
label: Set Zoom Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.zoom.position","value":{position}}}'
params:
- name: position
type: integer
description: Zoom position value
- id: set_focus_position
label: Set Focus Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.focus.position","value":{position}}}'
params:
- name: position
type: integer
description: Focus position value
- id: set_lensshift_horizontal
label: Set Horizontal Lens Shift Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.horizontal.position","value":{position}}}'
params:
- name: position
type: integer
description: Horizontal lens shift position value
- id: set_lensshift_vertical
label: Set Vertical Lens Shift Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.vertical.position","value":{position}}}'
params:
- name: position
type: integer
description: Vertical lens shift position value
# --- Source selection (property.set) ---
- id: set_source
label: Select Input Source
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.source","value":"{source}"}}'
params:
- name: source
type: string
description: Source name (e.g. "DisplayPort 1", "HDMI", "DVI 1", "DVI 2", "DisplayPort 2", "Dual DVI", "Dual DisplayPort", "Dual Head DVI", "Dual Head DisplayPort", "HDBaseT", "SDI")
# --- Picture settings (property.set) ---
- id: set_brightness
label: Set Brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":{value}}}'
params:
- name: value
type: float
description: Normalized brightness offset. 0 is default, 1 is 100% offset. Range -1 to 1, precision 0.01.
- id: set_contrast
label: Set Contrast
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.contrast","value":{value}}}'
params:
- name: value
type: float
description: Normalized contrast gain. 1 is default. Range 0 to 2, precision 0.01.
- id: set_gamma
label: Set Gamma
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.gamma","value":{value}}}'
params:
- name: value
type: float
description: Gamma value. Default is 2.2. Range 1 to 3, precision 0.1.
- id: set_saturation
label: Set Saturation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.saturation","value":{value}}}'
params:
- name: value
type: float
description: Normalized saturation. 1 is default. Range 0 to 2, precision 0.01.
- id: set_sharpness
label: Set Sharpness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.sharpness","value":{value}}}'
params:
- name: value
type: integer
description: Sharpness value. Range -2 to 8, step size 1.
- id: set_orientation
label: Set Image Orientation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.orientation","value":{value}}}'
params:
- name: value
type: string
description: Orientation - "DESKTOP_FRONT", "DESKTOP_REAR", "CEILING_FRONT", "CEILING_REAR"
- id: set_window_position
label: Set Window Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.position","value":{"x":{x},"y":{y}}}}'
params:
- name: x
type: integer
description: Window X position
- name: y
type: integer
description: Window Y position
- id: set_window_size
label: Set Window Size
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.size","value":{"width":{width},"height":{height}}}}'
params:
- name: width
type: integer
description: Window width
- name: height
type: integer
description: Window height
- id: set_scalingmode
label: Set Scaling Mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.scalingmode","value":{value}}}'
params:
- name: value
type: string
description: Scaling mode - "Fill", "OneToOne", "FillScreen", "Stretch"
# --- Illumination power (property.set) ---
- id: set_laser_power
label: Set Laser Power
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"illumination.sources.laser.power","value":{value}}}'
params:
- name: value
type: float
description: Target laser power in percent
# --- Warp control (property.set) ---
- id: set_warp_enable
label: Enable/Disable All Warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":{value}}}'
params:
- name: value
type: boolean
description: True to enable all warp functions, false to disable
- id: set_warp_file_enable
label: Enable/Disable File Warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":{value}}}'
params:
- name: value
type: boolean
description: True to enable file warp, false to disable
- id: set_warp_file_selected
label: Select Warp File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.selected","value":"{filename}"}}'
params:
- name: filename
type: string
description: Warp grid file name (e.g. "warp.xml")
# --- Blend control (property.set) ---
- id: set_blend_file_enable
label: Enable/Disable Blend File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":{value}}}'
params:
- name: value
type: boolean
description: True to enable file blend, false to disable
- id: set_blend_file_selected
label: Select Blend File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.selected","value":"{filename}"}}'
params:
- name: filename
type: string
description: Blend mask file name (e.g. "mask.png")
# --- Black level control (property.set) ---
- id: set_blacklevel_file_enable
label: Enable/Disable Black Level Correction
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":{value}}}'
params:
- name: value
type: boolean
description: True to enable black level correction, false to disable
- id: set_blacklevel_file_selected
label: Select Black Level File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.selected","value":"{filename}"}}'
params:
- name: filename
type: string
description: Black level mask file name (e.g. "blacklevel.png")
# --- System state enable (property.set) ---
- id: set_standby_enable
label: Enable/Disable Standby State
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.standby.enable","value":{value}}}'
params:
- name: value
type: boolean
description: Enable or disable use of standby state. Check availability first.
- id: set_eco_enable
label: Enable/Disable ECO State
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.eco.enable","value":{value}}}'
params:
- name: value
type: boolean
description: Enable or disable use of ECO state. Check availability first.
# --- DMX control (property.set) ---
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.mode","value":{value}}}'
params:
- name: value
type: string
description: DMX mode string
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.startchannel","value":{value}}}'
params:
- name: value
type: integer
description: DMX start channel, range 1 to 512
- id: set_dmx_shutdown
label: Set DMX Shutdown
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.shutdown","value":{value}}}'
params:
- name: value
type: boolean
description: Shutdown enabled or not
# --- LED control ---
- id: led_blink
label: LED Blink
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":{led},"color":{color},"period":{period}}}'
params:
- name: led
type: string
description: LED identifier (e.g. "systemstatus")
- name: color
type: string
description: LED color (e.g. "red")
- name: period
type: integer
description: Blink period
# --- Color management ---
- id: color_copy_preset_to_custom
label: Copy Color Preset to Custom
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":{presetname}}}'
params:
- name: presetname
type: string
description: Name of preset to copy
- id: color_reset_preset
label: Reset Color Preset
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":{presetname}}}'
params:
- name: presetname
type: string
description: Name of preset to reset to defaults
- id: color_reset_to_native
label: Reset Color to Native
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
params: []
- id: color_next_rgb_mode
label: Next RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
notes: Cycles through all possible RGB modes.
# --- Firmware management ---
- id: firmware_schedule_upgrade
label: Schedule Firmware Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
notes: Forces a component upgrade at the following reboot.
# --- Subscription management ---
- id: property_subscribe
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":{property}}}'
params:
- name: property
type: string
description: Property name or array of property names to observe
- id: property_unsubscribe
label: Unsubscribe from Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":{property}}}'
params:
- name: property
type: string
description: Property name or array of property names to stop observing
- id: signal_subscribe
label: Subscribe to Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":{signal}}}'
params:
- name: signal
type: string
description: Signal name or array of signal names (e.g. "modelupdated")
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":{signal}}}'
params:
- name: signal
type: string
description: Signal name or array of signal names to stop observing
# --- HTTP file endpoints ---
- id: upload_warp_file
label: Upload Warp Grid File
kind: action
command: "POST {base_url}/image/processing/warp/file/transfer"
params:
- name: file
type: file
description: Warp grid file (XML format, same as MCM500/400)
notes: HTTP multipart upload. Example: curl -F file=@warp.xml http://{ip}/api/image/processing/warp/file/transfer
- id: download_warp_file
label: Download Warp Grid File
kind: action
command: "GET {base_url}/image/processing/warp/file/transfer"
params: []
notes: HTTP GET. Some endpoints require specifying the file name in the URL path.
- id: upload_blend_mask
label: Upload Blend Mask
kind: action
command: "POST {base_url}/image/processing/blend/file/transfer"
params:
- name: file
type: file
description: Blend mask image (PNG up to 16 bit, JPEG, or TIFF; grayscale only)
notes: Mask size must match projector resolution (WUXGA: 1920x1200, WQXGA/4K: 1280x800, 4K Cinemascope: 1280x540).
- id: upload_blacklevel_mask
label: Upload Black Level Mask
kind: action
command: "POST {base_url}/image/processing/blacklevel/file/transfer"
params:
- name: file
type: file
description: Black level mask image (PNG up to 16 bit, JPEG, or TIFF; grayscale only)
notes: Mask size must match projector resolution (WUXGA: 1920x1200, WQXGA/4K: 1280x800, 4K Cinemascope: 1280x540).
# ============================================================================
# Queries (kind: query)
# ============================================================================
- id: get_system_state
label: Get Projector State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.state"}}'
params: []
returns: enum - "boot", "eco", "standby", "ready", "conditioning", "on", "service", "deconditioning", "error"
- id: get_illumination_state
label: Get Illumination State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.state"}}'
params: []
returns: enum - "On", "Off"
- id: get_laser_power
label: Get Laser Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.power"}}'
params: []
returns: float - current laser power in percent
- id: get_laser_minpower
label: Get Laser Minimum Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.minpower"}}'
params: []
returns: float - minimum laser power in percent
- id: get_laser_maxpower
label: Get Laser Maximum Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.maxpower"}}'
params: []
returns: float - maximum laser power in percent
- id: get_laser_serial_number
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
returns: string
- id: get_active_source
label: Get Active Source
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.source"}}'
params: []
returns: string - name of currently active source
- id: list_sources
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list"}'
params: []
returns: array of strings - source names (contents vary by projector model)
- id: list_connectors
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list"}'
params: []
returns: array of strings - connector names
- id: list_source_connectors
label: List Connectors for Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{sourceobject}.listconnectors"}'
params:
- name: sourceobject
type: string
description: Source object name derived from source name (remove non-word chars, lowercase; e.g. "displayport1")
returns: array of objects - connector info with name and grid position
- id: get_detected_signal
label: Get Detected Signal Info
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.connector.{connectorobject}.detectedsignal"}}'
params:
- name: connectorobject
type: string
description: Connector object name (e.g. "displayport1")
returns: object - signal info including active, name, resolution, frequency, color space, scan type, etc.
- id: get_brightness
label: Get Brightness
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.brightness"}}'
params: []
returns: float - normalized brightness offset, 0 is default
- id: get_contrast
label: Get Contrast
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.contrast"}}'
params: []
returns: float - normalized contrast gain, 1 is default
- id: get_gamma
label: Get Gamma
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.gamma"}}'
params: []
returns: float - gamma value, default 2.2
- id: get_saturation
label: Get Saturation
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.saturation"}}'
params: []
returns: float - normalized saturation, 1 is default
- id: get_sharpness
label: Get Sharpness
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.sharpness"}}'
params: []
returns: integer - sharpness value
- id: get_orientation
label: Get Image Orientation
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.orientation"}}'
params: []
returns: enum - "DESKTOP_FRONT", "DESKTOP_REAR", "CEILING_FRONT", "CEILING_REAR"
- id: get_window_position
label: Get Window Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.position"}}'
params: []
returns: object - {x: int, y: int}
- id: get_window_size
label: Get Window Size
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.size"}}'
params: []
returns: object - {width: int, height: int}
- id: get_scalingmode
label: Get Scaling Mode
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.scalingmode"}}'
params: []
returns: enum - "Fill", "OneToOne", "FillScreen", "Stretch"
- id: get_shutter_position
label: Get Shutter Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.shutter.position"}}'
params: []
returns: enum - "Open", "Closed"
- id: get_shutter_target
label: Get Shutter Target
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.shutter.target"}}'
params: []
returns: enum - "Open", "Closed"
- id: get_zoom_position
label: Get Zoom Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.zoom.position"}}'
params: []
returns: integer
- id: get_focus_position
label: Get Focus Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.focus.position"}}'
params: []
returns: integer
- id: get_lensshift_horizontal
label: Get Horizontal Lens Shift
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.lensshift.horizontal.position"}}'
params: []
returns: integer
- id: get_lensshift_vertical
label: Get Vertical Lens Shift
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.lensshift.vertical.position"}}'
params: []
returns: integer
- id: get_warp_enable
label: Get Warp Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.warp.enable"}}'
params: []
returns: boolean
- id: get_warp_file_enable
label: Get Warp File Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.warp.file.enable"}}'
params: []
returns: boolean
- id: get_warp_file_selected
label: Get Selected Warp File
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.warp.file.selected"}}'
params: []
returns: string - selected warp file name
- id: get_blend_file_enable
label: Get Blend File Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.blend.file.enable"}}'
params: []
returns: boolean
- id: get_blend_file_selected
label: Get Selected Blend File(s)
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.blend.file.selected"}}'
params: []
returns: array of strings - selected blend file names
- id: get_blacklevel_file_enable
label: Get Black Level File Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.blacklevel.file.enable"}}'
params: []
returns: boolean
- id: get_blacklevel_file_selected
label: Get Selected Black Level File
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.processing.blacklevel.file.selected"}}'
params: []
returns: string - selected black level file name
- id: get_dmx_mode
label: Get DMX Mode
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.mode"}}'
params: []
returns: string
- id: get_dmx_startchannel
label: Get DMX Start Channel
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.startchannel"}}'
params: []
returns: integer - range 1 to 512
- id: get_dmx_shutdown
label: Get DMX Shutdown State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.shutdown"}}'
params: []
returns: boolean
- id: get_network_state
label: Get Network Device State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.state"}}'
params: []
returns: enum - "CONNECTED", "DISCONNECTED"
- id: get_network_ip4config
label: Get Network IPv4 Configuration
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.ip4config"}}'
params: []
returns: object - {Address: string, Mask: string, Gateway: string, NameServers: string}
- id: get_standby_enable
label: Get Standby Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.standby.enable"}}'
params: []
returns: boolean
- id: get_eco_enable
label: Get ECO Enable State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.eco.enable"}}'
params: []
returns: boolean
- id: get_alarm_state
label: Get Alarm State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"environment.alarmstate"}}'
params: []
returns: enum - "Fatal", "Error", "Alert", "Warning", "Ok"
- id: get_alarm_info
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
params: []
returns: array of objects - each with severity, timestamp, source, description, custommessage
- id: get_environment_temperatures
label: Get Temperature Sensor Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"Sensor","valuetype":"Temperature"}}'
params: []
returns: dictionary - sensor name to temperature value
- id: get_environment_fan_speeds
label: Get Fan Speed Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"Sensor","valuetype":"Speed"}}'
params: []
returns: dictionary - fan name to tacho RPM value
- id: get_environment_controlblocks
label: Get Environment Control Blocks
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":{type},"valuetype":{valuetype}}}'
params:
- name: type
type: string
description: Sensor type - "Sensor", "Filter", "Controller", "Actuator", "Alarm", "GenericBlock"
- name: valuetype
type: string
description: Value type - "Temperature", "Speed", "PWM", "Voltage", "Current", "Power", "Altitude", "Pressure", "Humidity", "ADC", "Coordinate", "Peltier", "Waveform", "Average", "Delay", "Difference", "Interpolation", "Limit", "Median", "Noise", "Weighting", "Comparison", "Threshold", "Formula", "Driver", "PID", "Mode", "State", "Pump", "Resistance", "Simulation", "Constant", "Manual", "Range", "Any"
returns: array of key/value pairs
- id: list_dmx_channels
label: List DMX Channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
params: []
returns: array of strings - available channel names
- id: list_dmx_modes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
params: []
returns: array of strings - available mode names
- id: list_firmware_components
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
params: []
returns: array of strings - component names
- id: list_firmware_version_status
label: List Firmware Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
returns: array of objects - each with name, versions (available, running), status ("Unknown", "OK", "Upgradable")
- id: introspect
label: Introspect API
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":{object},"recursive":{recursive}}}'
params:
- name: object
type: string
description: Object name to introspect in dot notation. Empty/default introspects everything.
- name: recursive
type: boolean
description: If true (default), lists all methods/properties/signals. If false, only lists object names one level.
returns: object - metadata of available objects (methods, properties, signals)
Feedbacks
- id: system_state
type: enum
values: ["boot", "eco", "standby", "ready", "conditioning", "on", "service", "deconditioning", "error"]
description: Current projector operating state
- id: illumination_state
type: enum
values: ["On", "Off"]
description: Illumination on/off state
- id: laser_power
type: number
description: Current laser power level in percent
- id: active_source
type: string
description: Name of currently active source
- id: brightness
type: number
description: Current brightness offset value (-1 to 1)
- id: contrast
type: number
description: Current contrast gain value (0 to 2)
- id: gamma
type: number
description: Current gamma value (default 2.2)
- id: saturation
type: number
description: Current saturation value (0 to 2)
- id: sharpness
type: integer
description: Current sharpness value (-2 to 8)
- id: shutter_position
type: enum
values: ["Open", "Closed"]
description: Physical shutter position
- id: network_state
type: enum
values: ["CONNECTED", "DISCONNECTED"]
description: LAN device connection state
- id: alarm_state
type: enum
values: ["Fatal", "Error", "Alert", "Warning", "Ok"]
description: Overall environment alarm state
- id: detected_signal
type: object
description: Detected signal information for a connector (active, name, resolution, frequency, color space, etc.)
Variables
- id: laser_power_level
property: illumination.sources.laser.power
type: float
access: read-write
min: null # UNRESOLVED: minpower is dynamic and device-specific
max: null # UNRESOLVED: maxpower is dynamic and device-specific
description: Target laser power in percent
- id: brightness_level
property: image.brightness
type: float
access: read-write
min: -1
max: 1
precision: 0.01
description: Normalized brightness offset, 0 is default
- id: contrast_level
property: image.contrast
type: float
access: read-write
min: 0
max: 2
precision: 0.01
description: Normalized contrast gain, 1 is default
- id: gamma_level
property: image.gamma
type: float
access: read-write
min: 1
max: 3
precision: 0.1
description: Gamma value, default 2.2
- id: saturation_level
property: image.saturation
type: float
access: read-write
min: 0
max: 2
precision: 0.01
description: Normalized saturation, 1 is default
- id: sharpness_level
property: image.sharpness
type: integer
access: read-write
min: -2
max: 8
description: Image sharpness
Events
- id: property_changed
method: property.changed
description: >
Unsolicited notification sent by the server when a subscribed property value changes.
Client must implement this handler. The params.property field contains an array of
objects mapping property names to their new values.
payload_example: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"system.state":"ready"}]}}'
notes: Two notifications may be delivered for source changes - first when the old source is deselected (empty string), then when the new source is selected.
- id: signal_callback
method: signal.callback
description: >
Unsolicited notification sent by the server when a subscribed signal is emitted.
Client must implement this handler. The params.signal field contains an array of
objects mapping signal names to their argument objects.
payload_example: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"modelupdated":{"object":"motors.motor1","newobject":true}}]}}'
- id: model_updated
signal: modelupdated
description: Triggered when the object structure changes (objects added or removed). Subscribe via signal.subscribe with signal "modelupdated".
Macros
# No multi-step sequences are explicitly described in the source as named macros.
# The source does describe implicit sequences (e.g. upload warp file → select file → enable warp),
# but these are presented as individual steps, not named macros.
Safety
confirmation_required_for: []
interlocks:
- description: "Power on: good practice to verify projector state is standby or ready before issuing power on. If already on or transitioning, nothing happens."
- description: "Power off: good practice to verify projector state is on before issuing power off. If already off or transitioning, nothing happens."
- description: "property.set: best practice to wait for confirmation before setting the same property again. Flooding with repeated sets may reduce performance."
# UNRESOLVED: no explicit safety warnings, interlock procedures, or power-on sequencing requirements stated in source beyond the operational notes above.
Notes
- The projector uses a JSON-RPC 2.0 API called "Pulse API". All commands are identical regardless of connection type (TCP or serial).
- TCP/IP connection uses port 9090. Serial connection uses RS-232 with a standard 9-pin cable (pin 2↔2, pin 3↔3, pin 5↔5).
- Authentication is optional — only needed for elevated access levels. Normal end-user access can skip authentication entirely.
- The API is dynamic: available objects/methods/properties depend on projector configuration and attached peripherals. Introspection (
introspectmethod) is the recommended way to discover the exact API for a specific device. - Source/connector object names are derived by removing all non-word characters from the display name and converting to lowercase (e.g. "DisplayPort 1" → "displayport1").
- Warp file format is the same as MCM500/400.
- Blend and black level masks support PNG (up to 16-bit), JPEG, and TIFF. Only grayscale data is used; color images use only the blue channel.
- Mask resolution must match projector resolution: WUXGA → 1920×1200, WQXGA → 1280×800, 4K → 1280×800, 4K Cinemascope → 1280×540.
- ECO mode wake requires either Wake-on-LAN, IR remote power button, keypad power button, or the serial command
:POWR1\r.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-14T08:51:28.056Z
last_checked_at: 2026-07-21T20:30:38.447Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T20:30:38.447Z
matched_actions: 97
action_count: 97
confidence: medium
summary: "All 97 spec actions are documented verbatim in source with correct transport parameters (port 9090, baud 19200, passcode auth optional). Complete bidirectional coverage. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact projector model family not explicitly stated; \"Pulse projector\" is the platform name. The device name \"098 Dc2K 24 39\" was provided externally."
- "minpower is dynamic and device-specific"
- "maxpower is dynamic and device-specific"
- "no explicit safety warnings, interlock procedures, or power-on sequencing requirements stated in source beyond the operational notes above."
- "firmware version compatibility not stated in source"
- "exact laser power min/max are dynamic and device-specific"
- "protocol version number not stated in source"
- "voltage/current/power specifications not stated in source"
- "DMX extended mode channel count not documented beyond \"basic mode has 2 channels\""
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0