Summary
Barco Fsn3G 2004 projector exposes Pulse API control through TCP/IP and RS-232. This spec covers JSON-RPC methods, property access, subscriptions, HTTP file endpoints, and documented projector operations.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: secret_code_optional
Traits
- powerable
- routable
- queryable
- levelable
Actions
- id: system_poweron
label: Power On Projector
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
params: []
- id: system_poweroff
label: Power Off Projector
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
params: []
- id: property_set_source_displayport_1
label: Select DisplayPort 1
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.source", "value": "DisplayPort 1"}}'
params: []
- id: property_set_source_hdmi
label: Select HDMI
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.source", "value": "HDMI"}}'
params: []
- id: authenticate
label: Authenticate Session
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": 98765}, "id": 1}'
params:
- name: code
type: integer
description: Secret pass code
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "{property}", "value": "{value}"}, "id": "{id}"}'
params:
- name: property
type: string
description: Property name
- name: value
type: any
description: Property value
- name: id
type: string_or_number
description: Request identifier
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "{property}"}, "id": "{id}"}'
params:
- name: property
type: string
description: Property name
- name: id
type: string_or_number
description: Request identifier
- id: property_get_multiple
label: Get Multiple Properties
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": ["{property_1}", "{property_2}"]}, "id": "{id}"}'
params:
- name: property_1
type: string
description: First property name
- name: property_2
type: string
description: Second property name
- name: id
type: string_or_number
description: Request identifier
- id: property_subscribe
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "{property}"}, "id": "{id}"}'
params:
- name: property
type: string
description: Property name
- name: id
type: string_or_number
description: Request identifier
- id: property_subscribe_multiple
label: Subscribe to Multiple Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": ["{property_1}", "{property_2}"]}, "id": "{id}"}'
params:
- name: property_1
type: string
description: First property name
- name: property_2
type: string
description: Second property name
- name: id
type: string_or_number
description: Request identifier
- id: property_unsubscribe
label: Unsubscribe from Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "{property}"}, "id": "{id}"}'
params:
- name: property
type: string
description: Property name
- name: id
type: string_or_number
description: Request identifier
- id: property_unsubscribe_multiple
label: Unsubscribe from Multiple Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": ["{property_1}", "{property_2}"]}, "id": "{id}"}'
params:
- name: property_1
type: string
description: First property name
- name: property_2
type: string
description: Second property name
- name: id
type: string_or_number
description: Second property name
- name: id
type: string_or_number
description: Request identifier
- id: signal_subscribe
label: Subscribe to Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "{signal}"}, "id": "{id}"}'
params:
- name: signal
type: string
description: Signal name
- name: id
type: string_or_number
description: Request identifier
- id: signal_subscribe_multiple
label: Subscribe to Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": ["{signal_1}", "{signal_2}"]}, "id": "{id}"}'
params:
- name: signal_1
type: string
description: First signal name
- name: signal_2
type: string
description: Second signal name
- name: id
type: string_or_number
description: Request identifier
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "{signal}"}, "id": "{id}"}'
params:
- name: signal
type: string
description: Signal name
- name: id
type: string_or_number
description: Request identifier
- id: signal_unsubscribe_multiple
label: Unsubscribe from Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": ["{signal_1}", "{signal_2}"]}, "id": "{id}"}'
params:
- name: signal_1
type: string
description: First signal name
- name: signal_2
type: string
description: Second signal name
- name: id
type: string_or_number
description: Request identifier
- id: introspect_recursive
label: Recursive Introspection
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": ["{object}", true], "id": "{id}"}'
params:
- name: object
type: string
description: Object name
- name: id
type: string_or_number
description: Request identifier
- id: introspect_non_recursive
label: Non-Recursive Introspection
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": ["{object}", false], "id": "{id}"}'
params:
- name: object
type: string
description: Object name
- name: id
type: string_or_number
description: Request identifier
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.list", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.connector.list", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: image_source_listconnectors
label: List Source Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.{source}.listconnectors", "id": "{id}"}'
params:
- name: source
type: string
description: Lowercase source object name
- name: id
type: string_or_number
description: Request identifier
- id: environment_getcontrolblocks
label: Get Environment Control Blocks
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": {"type": "{type}", "valuetype": "{valuetype}"}, "id": "{id}"}'
params:
- name: type
type: string
description: Control block type
- name: valuetype
type: string
description: Sensor value type
- name: id
type: string_or_number
description: Request identifier
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: environment_getalarminfo
label: Get Alarm Information
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: firmware_listcomponentversionstatus
label: List Firmware Component Versions
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: firmware_schedulecomponentupgrade
label: Schedule Firmware Component Upgrade
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: illumination_clo_engage
label: Engage CLO
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: image_color_p7_custom_copypresettocustom
label: Copy Preset to Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": {"presetname": "{presetname}"}, "id": "{id}"}'
params:
- name: presetname
type: string
description: Preset name
- name: id
type: string_or_number
description: Request identifier
- id: image_color_p7_custom_resetpreset
label: Reset Preset
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": {"presetname": "{presetname}"}, "id": "{id}"}'
params:
- name: presetname
type: string
description: Preset name
- name: id
type: string_or_number
description: Request identifier
- id: image_color_p7_custom_resettonative
label: Reset to Native
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
- id: image_color_rgbmode_nextrgbmode
label: Select Next RGB Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode", "id": "{id}"}'
params:
- name: id
type: string_or_number
description: Request identifier
Feedbacks
- id: system_state
type: enum
values:
- boot
- eco
- standby
- ready
- conditioning
- on
- deconditioning
- service
- error
- id: illumination_state
type: enum
values:
- On
- Off
- id: active_source
type: string
property: image.window.main.source
- id: illumination_laser_power
type: float
property: illumination.sources.laser.power
- id: illumination_laser_minpower
type: float
property: illumination.sources.laser.minpower
- id: illumination_laser_maxpower
type: float
property: illumination.sources.laser.maxpower
- id: image_connector_detected_signal
type: object
property: image.connector.{connector}.detectedsignal
- id: network_state
type: enum
values:
- CONNECTED
- DISCONNECTED
- id: environment_alarm_state
type: enum
values:
- Fatal
- Error
- Alert
- Warning
- Ok
Variables
- id: active_source
type: string
property: image.window.main.source
- id: laser_power
type: float
property: illumination.sources.laser.power
constraints:
minimum: 0
maximum: 100
- id: image_brightness
type: float
property: image.brightness
constraints:
minimum: -1
maximum: 1
precision: 0.01
- id: image_contrast
type: float
property: image.contrast
constraints:
minimum: 0
maximum: 2
precision: 0.01
- id: image_gamma
type: float
property: image.gamma
constraints:
minimum: 1
maximum: 3
precision: 0.1
- id: image_saturation
type: float
property: image.saturation
constraints:
minimum: 0
maximum: 2
precision: 0.01
- id: image_sharpness
type: integer
property: image.sharpness
constraints:
minimum: -2
maximum: 8
precision: 1
- id: image_orientation
type: enum
property: image.orientation
values:
- DESKTOP_FRONT
- DESKTOP_REAR
- CEILING_FRONT
- CEILING_REAR
- id: image_window_position
type: object
property: image.window.main.position
- id: image_window_size
type: object
property: image.window.main.size
- id: image_window_scalingmode
type: enum
property: image.window.main.scalingmode
values:
- Fill
- OneToOne
- FillScreen
- Stretch
- id: warp_enable
type: boolean
property: image.processing.warp.enable
- id: warp_file_selected
type: string
property: image.processing.warp.file.selected
- id: warp_file_enable
type: boolean
property: image.processing.warp.file.enable
- id: blend_file_selected
type: string
property: image.processing.blend.file.selected
- id: blend_file_enable
type: boolean
property: image.processing.blend.file.enable
- id: blacklevel_file_selected
type: string
property: image.processing.blacklevel.file.selected
- id: blacklevel_file_enable
type: boolean
property: image.processing.blacklevel.file.enable
- id: dmx_mode
type: string
property: dmx.mode
- id: dmx_startchannel
type: integer
property: dmx.startchannel
constraints:
minimum: 1
maximum: 512
- id: dmx_shutdown
type: boolean
property: dmx.shutdown
- id: network_ip4config
type: object
property: network.device.lan.ip4config
- id: system_standby_enable
type: boolean
property: system.standby.enable
- id: system_eco_enable
type: boolean
property: system.eco.enable
- id: shutter_position
type: enum
property: optics.shutter.position
values:
- Open
- Closed
- id: shutter_target
type: enum
property: optics.shutter.target
values:
- Open
- Closed
- id: zoom_position
type: integer
property: optics.zoom.position
- id: focus_position
type: integer
property: optics.focus.position
- id: lensshift_horizontal_position
type: integer
property: optics.lensshift.horizontal.position
- id: lensshift_vertical_position
type: integer
property: optics.lensshift.vertical.position
Events
- id: property_changed
type: notification
method: property.changed
payload: property/value pairs
- id: signal_callback
type: notification
method: signal.callback
payload: signal/argument-list pairs
- id: model_updated
type: signal
name: modelupdated
- id: introspect_object_changed
type: signal
name: introspect.objectchanged
Macros
- id: upload_and_enable_warp_file
label: Upload and Enable Warp File
steps:
- http_post_warp_file
- select_warp_file
- enable_warp_file
- id: upload_and_enable_blend_mask
label: Upload and Enable Blend Mask
steps:
- http_post_blend_file
- select_blend_file
- enable_blend_file
- id: upload_and_enable_blacklevel_mask
label: Upload and Enable Black Level Mask
steps:
- http_post_blacklevel_file
- select_blacklevel_file
- enable_blacklevel_file
Safety
confirmation_required_for: []
interlocks:
- Verify system.state is standby or ready before system.poweron.
- Verify system.state is on before system.poweroff.
Notes
Pulse API availability can depend on projector configuration and peripherals. Introspection is documented as the best way to determine the exact API exposed by a projector.
Property.set confirmation should be awaited before setting the same property again, because continuous writes may flood the server and reduce performance.
HTTP file endpoint base pattern is http://{projector-address}/api.
RS-232 ECO wake command is :POWR1\r.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-01T18:09:43.199Z
last_checked_at: 2026-08-05T08:04:57.836Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:04:57.836Z
matched_actions: 34
action_count: 34
confidence: medium
summary: "All 34 spec actions map to JSON-RPC methods documented verbatim in the refined source; transport values (port 9090, RS232 params) are also source-verified. (5 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "Device-specific API availability depends on projector configuration and peripherals."
- "Firmware compatibility not stated in source."
- "Device-specific source list, connector list, dynamic API objects, and exact file endpoint availability may vary."
- "Secret pass code format and value are not specified for normal end-user access."
- "Error response structure and recovery sequence are not fully specified."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0