Summary
Optoma EH515/W515/WU515(W/T) ProScene DLP projectors with RS-232C serial control, LAN/RJ45 with "RS232 by Telnet" tunnel (TCP/23), and integrated control-system bridges (Crestron/Extron/PJLink/AMX). All RS-232 ASCII command set documented verbatim; same command set carried over Telnet.
Transport
protocols:
- serial
- tcp
serial:
baud_rate: 9600
data_bits: 8
parity: none
stop_bits: 1
flow_control: none # UART16550 FIFO: Disable (stated in source)
addressing:
port: 23 # Telnet (RS232-by-Telnet); HTTP=80, Crestron=41794, Extron=2023, PJLink=4352, AMX=9131 - also stated
auth:
type: none # inferred: RS232/Telnet command interface has no login procedure. Web UI uses admin/admin default (see Notes). Optional PIN guards power-on only.
# Notes on stated addressing defaults (Setup > Network > LAN Settings):
# IP default 192.168.0.100, mask 255.255.255.0, gateway 192.168.0.254, DNS 192.168.0.1
# Telnet-Control limits stated verbatim:
# - successive network payload < 50 bytes
# - one complete RS232 command < 26 bytes
# - minimum delay between RS232 commands > 200 ms
Traits
- powerable # power on/off + standby/power-mode commands present
- queryable # ~XX122..~XX358 query set returns state
- levelable # brightness/contrast/volume/keystone/etc. continuous params
- routable # ~XX12 / ~XX39 source-select commands
Actions
# Conventions (apply to every action below unless noted):
# - Replace XX with target projector ID, 00-99. XX=00 broadcasts to all projectors.
# - Every command ends with <CR> (HEX 0D); shown verbatim from source in `command`.
# - Source response codes: pass='P', fail='F'.
# - Hex payloads preserve source spacing verbatim. `a` denotes the parameter's hex byte(s).
# - For parameterized hex payloads, the variable byte position is marked with {value} or `a`.
# === POWER ===
- id: power_set
label: Power On/Off
kind: action
command: "~{pid}00 {state}\r"
params:
- name: pid
type: string
description: "Projector ID, 2-digit ASCII 00-99 (00 = all projectors). Substituted for XX."
- name: state
type: enum
values: ["1", "0"]
description: "1=Power ON, 0=Power OFF (0/2 backward-compatible per source)."
- id: power_on_with_pin
label: Power On with Password
kind: action
command: "~{pid}00 1 ~{pin}\r"
params:
- name: pid
type: string
description: "Projector ID 00-99."
- name: pin
type: string
description: "ASCII pin ~0000 (default) to ~9999. Hex payload `a` = 7E + 4 ASCII digits."
# === DISPLAY / SYNC ===
- id: resync
label: Resync
kind: action
command: "~{pid}01 1\r"
params: [{name: pid, type: string}]
- id: av_mute_set
label: AV Mute
kind: action
command: "~{pid}02 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=AV Mute On, 0=Off"}
- id: mute_set
label: Audio Mute
kind: action
command: "~{pid}03 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "2"], description: "1=Mute On; source lists Off as `~XX03 2` with HEX byte 30 (value '0'); 0/2 backward-compatible."}
- id: freeze_set
label: Freeze
kind: action
command: "~{pid}04 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=Freeze, 0=Unfreeze (0/2 backward-compatible)"}
- id: zoom_plus
label: Zoom Plus
kind: action
command: "~{pid}05 1\r"
params: [{name: pid, type: string}]
- id: zoom_minus
label: Zoom Minus
kind: action
command: "~{pid}06 1\r"
params: [{name: pid, type: string}]
# === SOURCE SELECT (Direct Source Commands) ===
- id: direct_source_select
label: Direct Source Select
kind: action
command: "~{pid}12 {source}\r"
params:
- {name: pid, type: string}
- name: source
type: enum
values: ["1", "15", "20", "5", "8", "6", "13", "9", "10", "21"]
description: "1=HDMI1, 15=HDMI2, 20=Displayport, 5=VGA1, 8=VGA1 Component, 6=VGA2, 13=VGA2 Component, 9=S-Video, 10=Video, 21=HDBaseT (only 'T' SKU)"
# === INPUT SOURCE (alt opcode) ===
- id: input_source_select
label: Input Source Select
kind: action
command: "~{pid}39 {source}\r"
params:
- {name: pid, type: string}
- name: source
type: enum
values: ["1", "7", "15", "5", "6", "9", "10"]
description: "1=HDMI1, 7=HDMI2, 15=Displayport, 5=VGA1, 6=VGA2, 9=S-Video, 10=Video"
# === DISPLAY MODE ===
- id: display_mode_set
label: Display Mode
kind: action
command: "~{pid}20 {mode}\r"
params:
- {name: pid, type: string}
- name: mode
type: enum
values: ["1", "2", "3", "4", "5", "7", "13", "9"]
description: "1=Presentation, 2=Bright, 3=Movie, 4=sRGB, 5=User, 7=Blackboard, 13=DICOM SIM., 9=3D"
# === IMAGE PARAMETERS (levelable) ===
- id: brightness_set
label: Brightness
kind: action
command: "~{pid}21 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50. Hex `a` = 2D 35 30 (for -50) to 35 30 (for 50)."}
- id: contrast_set
label: Contrast
kind: action
command: "~{pid}22 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: sharpness_set
label: Sharpness
kind: action
command: "~{pid}23 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=1 to 15"}
- id: color_saturation_set
label: Color (Saturation)
kind: action
command: "~{pid}45 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: tint_set
label: Tint
kind: action
command: "~{pid}44 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: noise_reduction_set
label: Noise Reduction
kind: action
command: "~{pid}196 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=1 to 10"}
- id: brilliantcolor_set
label: BrilliantColor
kind: action
command: "~{pid}34 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=1 to 10"}
- id: dynamic_black_set
label: Dynamic Black
kind: action
command: "~{pid}191 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=On, 0=Off (0/2 backward-compatible)"}
- id: gamma_set
label: Gamma
kind: action
command: "~{pid}35 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: enum
values: ["1", "3", "7", "5", "6", "8", "10", "11"]
description: "1=Film, 3=Graphics, 7=2.2, 5=1.8, 6=2.0, 8=2.6, 10=Blackboard, 11=DICOM"
- id: color_temp_set
label: Color Temperature
kind: action
command: "~{pid}36 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: enum
values: ["4", "1", "2", "3"]
description: "4=Warm, 1=Standard, 2=Cool, 3=Cold"
- id: color_space_set
label: Color Space
kind: action
command: "~{pid}37 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: enum
values: ["1", "2", "3", "4"]
description: "1=Auto, 2=RGB / RGB(0-255), 3=YUV, 4=RGB(16-235)"
# === RGB Gain/Bias ===
- id: rgb_red_gain
label: RGB Red Gain
kind: action
command: "~{pid}24 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: rgb_green_gain
label: RGB Green Gain
kind: action
command: "~{pid}25 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: rgb_blue_gain
label: RGB Blue Gain
kind: action
command: "~{pid}26 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: rgb_red_bias
label: RGB Red Bias
kind: action
command: "~{pid}27 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: rgb_green_bias
label: RGB Green Bias
kind: action
command: "~{pid}28 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
- id: rgb_blue_bias
label: RGB Blue Bias
kind: action
command: "~{pid}29 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=-50 to 50"}
# === Color Matching (7 colors × Hue/Saturation/Gain) ===
- id: cm_red_hue
label: Color Matching Red Hue
kind: action
command: "~{pid}327 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_red_saturation
label: Color Matching Red Saturation
kind: action
command: "~{pid}333 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_red_gain
label: Color Matching Red Gain
kind: action
command: "~{pid}339 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_green_hue
label: Color Matching Green Hue
kind: action
command: "~{pid}328 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_green_saturation
label: Color Matching Green Saturation
kind: action
command: "~{pid}334 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_green_gain
label: Color Matching Green Gain
kind: action
command: "~{pid}340 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_blue_hue
label: Color Matching Blue Hue
kind: action
command: "~{pid}329 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_blue_saturation
label: Color Matching Blue Saturation
kind: action
command: "~{pid}335 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_blue_gain
label: Color Matching Blue Gain
kind: action
command: "~{pid}341 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_cyan_hue
label: Color Matching Cyan Hue
kind: action
command: "~{pid}330 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_cyan_saturation
label: Color Matching Cyan Saturation
kind: action
command: "~{pid}336 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_cyan_gain
label: Color Matching Cyan Gain
kind: action
command: "~{pid}342 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_yellow_hue
label: Color Matching Yellow Hue
kind: action
command: "~{pid}331 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_yellow_saturation
label: Color Matching Yellow Saturation
kind: action
command: "~{pid}337 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_yellow_gain
label: Color Matching Yellow Gain
kind: action
command: "~{pid}343 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_magenta_hue
label: Color Matching Magenta Hue
kind: action
command: "~{pid}332 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_magenta_saturation
label: Color Matching Magenta Saturation
kind: action
command: "~{pid}338 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: cm_magenta_gain
label: Color Matching Magenta Gain
kind: action
command: "~{pid}344 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
# === White Balance (CMY + White) ===
- id: white_red
label: White Red
kind: action
command: "~{pid}345 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: white_green
label: White Green
kind: action
command: "~{pid}346 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: white_blue
label: White Blue
kind: action
command: "~{pid}347 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-50 to 50"}]
- id: reset
label: Reset
kind: action
command: "~{pid}215 1\r"
params: [{name: pid, type: string}]
# === Signal (RGB) ===
- id: signal_freq_set
label: Signal (RGB) Frequency
kind: action
command: "~{pid}73 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-5 to 5 (by signal)"}]
- id: automatic_set
label: Automatic
kind: action
command: "~{pid}91 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=On, 0=Off (0/2 backward-compatible)"}
- id: phase_set
label: Phase
kind: action
command: "~{pid}74 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 31"}]
- id: h_position_set
label: H. Position
kind: action
command: "~{pid}75 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-5 to 5 (by timing)"}]
- id: v_position_set
label: V. Position
kind: action
command: "~{pid}76 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-5 to 5 (by timing)"}]
# === Signal (Video) ===
- id: video_white_level_set
label: Signal (Video) White Level
kind: action
command: "~{pid}200 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 31"}]
- id: video_black_level_set
label: Signal (Video) Black Level
kind: action
command: "~{pid}201 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-5 to 5"}]
- id: ire_set
label: IRE Select
kind: action
command: "~{pid}204 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=0 IRE, 0=7.5 IRE"}
# === Format / Geometry ===
- id: format_set
label: Format
kind: action
command: "~{pid}60 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: enum
values: ["1", "2", "3", "5", "6", "7"]
description: "1=4:3, 2=16:9, 3=16:10 (WXGA/WUXGA), 5=LBX, 6=Native, 7=Auto"
- id: edge_mask_set
label: Edge Mask
kind: action
command: "~{pid}61 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 10"}]
- id: zoom_set
label: Zoom
kind: action
command: "~{pid}62 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-5 to 25"}]
- id: h_image_shift
label: H Image Shift
kind: action
command: "~{pid}63 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-100 to 100"}]
- id: v_image_shift
label: V Image Shift
kind: action
command: "~{pid}64 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-100 to 100"}]
- id: h_keystone_set
label: H Keystone
kind: action
command: "~{pid}65 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-30 to 40"}]
- id: v_keystone_set
label: V Keystone
kind: action
command: "~{pid}66 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=-30 to 40"}]
- id: auto_vkeystone_set
label: Auto V. Keystone
kind: action
command: "~{pid}69 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=On, 0=Off"}
- id: four_corners_set
label: Four Corners Adjustment
kind: action
command: "~{pid}59 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: integer
description: "1-16. 1-4=Top-Left (Right+/Left+/Up+/Down+), 5-8=Top-Right, 9-12=Bottom-Left, 13-16=Bottom-Right"
# === 3D ===
- id: three_d_mode_set
label: 3D Mode
kind: action
command: "~{pid}230 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "3", "0"], description: "1=DLP-Link, 3=VESA 3D, 0=Off (0/2 backward-compatible)"}
- id: three_d_to_2d_set
label: 3D->2D
kind: action
command: "~{pid}400 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2"], description: "0=3D, 1=L, 2=R"}
- id: three_d_format_set
label: 3D Format
kind: action
command: "~{pid}405 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2", "3"], description: "0=Auto, 1=SBS, 2=Top and Bottom, 3=Frame sequential"}
- id: three_d_sync_invert_set
label: 3D Sync Invert
kind: action
command: "~{pid}231 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1"], description: "0=On, 1=Off (per source)"}
# === LANGUAGE / PROJECTION / OSD ===
- id: language_set
label: Language
kind: action
command: "~{pid}70 {value}\r"
params:
- {name: pid, type: string}
- name: value
type: enum
values: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "25", "26", "27"]
description: "1=English, 2=German, 3=French, 4=Italian, 5=Spanish, 6=Portuguese, 7=Polish, 8=Dutch, 9=Swedish, 10=Norwegian/Danish, 11=Finnish, 12=Greek, 13=Traditional Chinese, 14=Simplified Chinese, 15=Japanese, 16=Korean, 17=Russian, 18=Hungarian, 19=Czechoslovak, 20=Arabic, 21=Thai, 22=Turkish, 23=Farsi, 25=Vietnamese, 26=Indonesian, 27=Romanian. Note: source HEX shows values 25/26/27 share byte sequence '32 33' (likely source typo)."
- id: projection_set
label: Projection
kind: action
command: "~{pid}71 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "2", "3", "4"], description: "1=Front-Desktop, 2=Rear-Desktop, 3=Front-Ceiling, 4=Rear-Ceiling"}
- id: screen_type_set
label: Screen Type (WXGA/WUXGA)
kind: action
command: "~{pid}90 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "0"], description: "1=16:10, 0=16:9"}
- id: menu_location_set
label: Menu Location
kind: action
command: "~{pid}72 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "2", "3", "4", "5"], description: "1=Top Left, 2=Top Right, 3=Centre, 4=Bottom Left, 5=Bottom Right"}
# === SECURITY ===
- id: security_timer_set
label: Security Timer
kind: action
command: "~{pid}77 {mm}{dd}{hh}\r"
params:
- {name: pid, type: string}
- {name: mm, type: integer, description: "Month 00-12 (HEX aa = 30 30 to 31 32)"}
- {name: dd, type: integer, description: "Day 00-30 (HEX bb = 30 30 to 33 30)"}
- {name: hh, type: integer, description: "Hour 00-24 (HEX cc = 30 30 to 32 34)"}
- id: security_set
label: Security On/Off
kind: action
command: "~{pid}78 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=On, 0=Off (0/2 backward-compatible). Source HEX row for Off lacks terminating 0D - preserved verbatim."}
- id: password_set
label: Set PIN
kind: action
command: "~{pin}\r"
params:
- {name: pin, type: string, description: "ASCII pin ~0000 (HEX 7E 30 30 30 30) to ~9999 (HEX 7E 39 39 39 39)"}
# === SYSTEM ===
- id: projector_id_set
label: Projector ID Set
kind: action
command: "~{pid}79 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: integer, description: "n=00 to 99 (HEX a = 30 30 to 39 39)"}
- id: internal_speaker_set
label: Internal Speaker
kind: action
command: "~{pid}310 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On"}
- id: audio_mute_set
label: Mute
kind: action
command: "~{pid}80 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=On, 0=Off (0/2 backward-compatible)"}
- id: volume_audio_set
label: Volume (Audio)
kind: action
command: "~{pid}81 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 10"}]
- id: volume_mic_set
label: Volume (Mic)
kind: action
command: "~{pid}93 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 10"}]
- id: audio_input_set
label: Audio Input
kind: action
command: "~{pid}89 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "3", "4"], description: "0=Default, 1=Audio1, 3=Audio2, 4=Audio3"}
# === LOGO ===
- id: logo_set
label: Logo
kind: action
command: "~{pid}82 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "2", "3"], description: "1=Default, 2=User, 3=Neutral"}
- id: logo_capture
label: Logo Capture
kind: action
command: "~{pid}83 1\r"
params: [{name: pid, type: string}]
# === CLOSED CAPTIONING ===
- id: closed_captioning_set
label: Closed Captioning
kind: action
command: "~{pid}88 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2"], description: "0=Off, 1=cc1, 2=cc2"}
# === NETWORK CONTROL TOGGLES ===
- id: crestron_net_set
label: Crestron Network Toggle
kind: action
command: "~{pid}454 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 41794)"}
- id: extron_net_set
label: Extron Network Toggle
kind: action
command: "~{pid}455 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 2023)"}
- id: pjlink_net_set
label: PJLink Network Toggle
kind: action
command: "~{pid}456 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 4352)"}
- id: amx_net_set
label: AMX Device Discovery Network Toggle
kind: action
command: "~{pid}457 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 9131; AMX section text states 1023 - discrepancy noted)"}
- id: telnet_net_set
label: Telnet Network Toggle
kind: action
command: "~{pid}458 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 23)"}
- id: http_net_set
label: HTTP Network Toggle
kind: action
command: "~{pid}459 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On (port 80). NOTE: source HEX row for this entry duplicates opcode 458 (33 35 38) - appears to be source typo. ASCII mnemonic 459 preserved as listed."}
# === LOCKS / SYSTEM TOGGLES ===
- id: source_lock_set
label: Source Lock
kind: action
command: "~{pid}100 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: high_altitude_set
label: High Altitude
kind: action
command: "~{pid}101 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: information_hide_set
label: Information Hide
kind: action
command: "~{pid}102 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: keypad_lock_set
label: Keypad Lock
kind: action
command: "~{pid}103 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: display_mode_lock_set
label: Display Mode Lock
kind: action
command: "~{pid}348 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
# === TEST PATTERN / BACKGROUND ===
- id: test_pattern_set
label: Test Pattern
kind: action
command: "~{pid}195 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2"], description: "0=None, 1=Grid, 2=White Pattern"}
- id: background_color_set
label: Background Color
kind: action
command: "~{pid}104 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "2", "3", "4", "5"], description: "1=Blue, 2=Black, 3=Red, 4=Green, 5=White"}
# === IR / REMOTE ===
- id: ir_function_set
label: IR Function
kind: action
command: "~{pid}11 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2", "3"], description: "0=Off, 1=On, 2=Front, 3=Top"}
- id: remote_code_set
label: Remote Code
kind: action
command: "~{pid}350 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=00 to 99"}]
# === TRIGGER / POWER MANAGEMENT ===
- id: trigger_12v_set
label: 12V Trigger
kind: action
command: "~{pid}192 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On"}]
- id: direct_power_on_set
label: Direct Power On
kind: action
command: "~{pid}105 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: signal_power_on_set
label: Signal Power On
kind: action
command: "~{pid}113 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["0", "1"], description: "0=Off, 1=On"}]
- id: auto_power_off_set
label: Auto Power Off (min)
kind: action
command: "~{pid}106 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 180, 5-min steps (HEX a=30 to 31 38 30)"}]
- id: sleep_timer_set
label: Sleep Timer (min)
kind: action
command: "~{pid}107 {value}\r"
params: [{name: pid, type: string}, {name: value, type: integer, description: "n=0 to 990, 10-min steps"}]
- id: sleep_timer_repeat_set
label: Sleep Timer Repeat
kind: action
command: "~{pid}507 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: quick_resume_set
label: Quick Resume
kind: action
command: "~{pid}115 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: power_mode_set
label: Power Mode (Standby)
kind: action
command: "~{pid}114 {state}\r"
params:
- {name: pid, type: string}
- {name: state, type: enum, values: ["1", "0"], description: "1=Eco (<=0.5W), 0=Active (0/2 backward-compatible)"}
# === LAMP / FILTER ===
- id: lamp_reminder_set
label: Lamp Reminder
kind: action
command: "~{pid}109 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: lamp_mode_set
label: LampMode
kind: action
command: "~{pid}110 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["1", "2", "5"], description: "1=Bright, 2=Eco, 5=Power"}
- id: power_wattage_set
label: Power Wattage
kind: action
command: "~{pid}326 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2", "3", "4", "5"], description: "0=365W, 1=350W, 2=330W, 3=310W, 4=300W, 5=280W"}
- id: lamp_reset_set
label: Lamp Reset
kind: action
command: "~{pid}111 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"], description: "1=Yes, 0=No"}]
- id: optional_filter_set
label: Optional Filter Installed
kind: action
command: "~{pid}320 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"], description: "1=Yes, 0=No"}]
- id: filter_reminder_set
label: Filter Reminder
kind: action
command: "~{pid}322 {value}\r"
params:
- {name: pid, type: string}
- {name: value, type: enum, values: ["0", "1", "2", "3", "4"], description: "0=Off, 1=300 hrs, 2=500 hrs, 3=800 hrs, 4=1000 hrs"}
- id: filter_reset_set
label: Filter Reset
kind: action
command: "~{pid}323 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"], description: "1=Yes, 0=No"}]
# === OSD / RESET ===
- id: information_menu_set
label: Information Menu
kind: action
command: "~{pid}313 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"]}]
- id: factory_reset_set
label: Factory Reset
kind: action
command: "~{pid}112 {state}\r"
params: [{name: pid, type: string}, {name: state, type: enum, values: ["1", "0"], description: "1=Yes, 0=No"}]
- id: osd_message_set
label: Display Message on OSD
kind: action
command: "~{pid}210 {message}\r"
params:
- {name: pid, type: string}
- {name: message, type: string, description: "1-30 characters (source HEX row shows literal `n` byte in opcode slot - preserved as listed)."}
# === REMOTE EMULATION (~XX140) ===
- id: remote_key
label: Remote Key Emulation
kind: action
command: "~{pid}140 {key}\r"
params:
- {name: pid, type: string}
- name: key
type: enum
values: ["10", "11", "12", "13", "14", "15", "16", "17", "18", "20", "47"]
description: "10=Up, 11=Left, 12=Enter, 13=Right, 14=Down, 15=V Keystone+, 16=V Keystone-, 17=Volume-, 18=Volume+, 20=Menu, 47=Source"
# === QUERIES (SEND from host, projector returns value) ===
- id: query_sw_version
label: Software Version Query
kind: query
command: "~{pid}122 1\r"
params: [{name: pid, type: string}]
- id: query_lan_fw
label: LAN FW Version Query
kind: query
command: "~{pid}357 1\r"
params: [{name: pid, type: string, description: "Source ASCII mnemonic 357; HEX row shows opcode 33 35 34 (=354). Discrepancy noted."}]
- id: query_display_mode
label: Display Mode Query
kind: query
command: "~{pid}123 1\r"
params: [{name: pid, type: string}]
- id: query_power_state
label: Power State Query
kind: query
command: "~{pid}124 1\r"
params: [{name: pid, type: string}]
- id: query_brightness
label: Brightness Query
kind: query
command: "~{pid}125 1\r"
params: [{name: pid, type: string}]
- id: query_contrast
label: Contrast Query
kind: query
command: "~{pid}126 1\r"
params: [{name: pid, type: string}]
- id: query_format
label: Format Query
kind: query
command: "~{pid}127 1\r"
params: [{name: pid, type: string}]
- id: query_color_temp
label: Color Temperature Query
kind: query
command: "~{pid}128 1\r"
params: [{name: pid, type: string}]
- id: query_projection
label: Projection Mode Query
kind: query
command: "~{pid}129 1\r"
params: [{name: pid, type: string}]
- id: query_information
label: Information Query
kind: query
command: "~{pid}150 1\r"
params: [{name: pid, type: string}]
- id: query_model_name
label: Model Name Query
kind: query
command: "~{pid}151 1\r"
params: [{name: pid, type: string}]
- id: query_lamp_hours
label: Lamp Hours Query
kind: query
command: "~{pid}108 1\r"
params: [{name: pid, type: string}]
- id: query_lamp_hours_total
label: Cumulative Lamp Hours Query
kind: query
command: "~{pid}108 2\r"
params: [{name: pid, type: string}]
- id: query_filter_hours
label: Filter Usage Hours Query
kind: query
command: "~{pid}321 1\r"
params: [{name: pid, type: string}]
- id: query_network_status
label: Network Status Query
kind: query
command: "~{pid}87 1\r"
params: [{name: pid, type: string}]
- id: query_ip_address
label: IP Address Query
kind: query
command: "~{pid}87 3\r"
params: [{name: pid, type: string}]
- id: query_fan1_speed
label: Fan1 Speed (Blower) Query
kind: query
command: "~{pid}351 0\r"
params: [{name: pid, type: string, description: "Source ASCII mnemonic 351 with value 0; HEX row shows opcode 33 35 31 (=351). Preserved as listed."}]
- id: query_system_temp
label: System Temperature Query
kind: query
command: "~{pid}352 1\r"
params: [{name: pid, type: string}]
- id: query_serial_number
label: Serial Number Query
kind: query
command: "~{pid}353 1\r"
params: [{name: pid, type: string}]
- id: query_cc
label: Closed Captioning Query
kind: query
command: "~{pid}354 1\r"
params: [{name: pid, type: string}]
- id: query_av_mute
label: AV Mute Query
kind: query
command: "~{pid}355 1\r"
params: [{name: pid, type: string}]
- id: query_mute
label: Mute Query
kind: query
command: "~{pid}356 1\r"
params: [{name: pid, type: string}]
- id: query_lamp_watt
label: Current Lamp Wattage Query
kind: query
command: "~{pid}358 1\r"
params: [{name: pid, type: string}]
Feedbacks
- id: power_state
type: enum
values: [off, on]
source_query: query_power_state
response_format: "OKn (n=0 Off, n=1 On)"
- id: display_mode
type: enum
values: [none, presentation, bright, movie, srgb, user, blackboard, dicom_sim, "3d"]
source_query: query_display_mode
response_format: "Okn (n=0 None, 1 Presentation, 2 Bright, 3 Movie, 4 sRGB, 5 User, 7 Blackboard, 12 DICOM SIM., 9 3D)"
- id: format
type: enum
values: ["4:3", "16:9", "16:10", LBX, Native, Auto]
source_query: query_format
- id: color_temperature
type: enum
values: [standard, cool, cold, warm]
source_query: query_color_temp
- id: projection_mode
type: enum
values: [front_desktop, rear_desktop, front_ceiling, rear_ceiling]
source_query: query_projection
- id: model_name
type: enum
values: [WXGA, "1080p", WUXGA]
source_query: query_model_name
- id: lamp_hours
type: integer
source_query: query_lamp_hours
- id: lamp_hours_cumulative
type: integer
source_query: query_lamp_hours_total
- id: filter_hours
type: integer
source_query: query_filter_hours
- id: network_status
type: enum
values: [disconnected, connected]
source_query: query_network_status
- id: ip_address
type: string
source_query: query_ip_address
- id: fan1_speed
type: integer
source_query: query_fan1_speed
response_format: "Okaaaa (a=0000~9999)"
- id: system_temperature
type: integer
source_query: query_system_temp
- id: serial_number
type: string
source_query: query_serial_number
- id: closed_captioning_state
type: enum
values: [off, cc1, cc2]
source_query: query_cc
- id: av_mute_state
type: enum
values: [off, on]
source_query: query_av_mute
- id: mute_state
type: enum
values: [off, on]
source_query: query_mute
- id: lamp_wattage
type: integer
source_query: query_lamp_watt
- id: software_version
type: string
source_query: query_sw_version
- id: lan_fw_version
type: string
source_query: query_lan_fw
- id: information_bundle
type: object
source_query: query_information
response_format: "Okabbbbbccddde"
fields:
power_status: {position: a, values: {0: off, 1: on}}
lamp_hours: {position: bbbbb, type: integer}
source: {position: cc, values: {00: None, 02: VGA1, 03: VGA2, 04: S-Video, 05: Video, 07: HDMI1, 08: HDMI2, 15: Displayport, 16: HDBaseT}}
firmware_version: {position: dddd, type: string}
display_mode: {position: ee, values: {00: None, 01: Presentation, 02: Bright, 03: Movie, 04: sRGB, 05: User, 07: Blackboard, 09: 3D, 12: DICOM SIM.}}
- id: command_ack
type: enum
values: [pass, fail]
description: "Synchronous per-command return. 'P' = pass, 'F' = fail."
Variables
# Settable continuous parameters already exposed as Actions (brightness, contrast,
# volume, keystone, etc.). No additional Variables beyond those action parameters.
# UNRESOLVED: none expected for this device class.
Events
- id: status_notification
description: "Unsolicited status broadcast from projector when entering Standby / Cooling / Out of Range / Lamp fail / Fan Lock / Over Temperature."
payload_format: "INFOn n"
payload_map:
"0": Standby
"1": Cooling
"2": Out of Range
"3": Lamp fail
"4": Fan Lock
"6": Over Temperature
"7": UNRESOLVED # source lists '7'/'8'/'9' in INFOn range without labels
"8": UNRESOLVED
"9": UNRESOLVED
direction: device_to_host
Macros
# UNRESOLVED: no explicit multi-step sequences documented in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source excerpt contains no safety warnings, interlock procedures, or
# power-on sequencing requirements. Full user manual (lamp replacement, ceiling mount,
# High Altitude mode rationale) not present in refined excerpt.
Notes
- Models in family: EH515, W515, WU515 base; EH515T, W515T, WU515T add HDBaseT input (
~XX12 21source only valid on T SKU). - Projector ID (
XX): settable 00-99 via OSD or~XX79.XX=00broadcasts to every projector on the bus. Per-command. - All commands terminate with
<CR>(HEX 0D). Hex payloads in source show this byte explicitly. - Return codes: synchronous
P= pass,F= fail. Status changes emit unsolicitedINFOn(see Events). - Telnet control limits (stated verbatim): successive network payload < 50 bytes; one complete RS232 command < 26 bytes; min delay between commands > 200 ms.
- Web UI auth (separate from command interface): default username/password
admin/admin. Not used by RS-232 or Telnet command channels. - Power-on PIN: optional
~nnnnsuffix on~XX00 1. Default~0000; configurable~0000-~9999. - Network defaults (Setup > Network > LAN Settings): DHCP Off; IP 192.168.0.100; mask 255.255.255.0; gateway 192.168.0.254; DNS 192.168.0.1.
- Control bridges (on-device toggles via
~XX454-~XX459): Crestron (41794), Extron (2023), PJLink (4352, Class 1 v1.00), AMX Device Discovery (9131 — body text says 1023), Telnet (23), HTTP (80). Toggle via RS-232; bridges' own protocols not documented in this excerpt. - Source typos preserved verbatim, not silently corrected:
~XX459(HTTP toggle) row HEX repeats opcode33 35 38(=458/Telnet).~XX357(LAN FW query) row HEX shows opcode33 35 34(=354).~XX03Off row lists ASCII value2with HEX byte30(=0).~XX78 0(Security Off) row HEX missing terminating0D.- Language codes 25 (Vietnamese), 26 (Indonesian), 27 (Romanian) all share HEX bytes
32 33(=23). - AMX port: control-settings table says 9131; prose body says 1023.
Provenance
source_domains:
- optomaeurope.com
- region-resource.optoma.com
- optoma.com
source_urls:
- https://www.optomaeurope.com/uploads/manuals/EH515-M-en.pdf
- https://region-resource.optoma.com/products/import/Documents/fcc27c8d-3ab3-462f-a7f3-ee35633fdb8c.pdf
- https://region-resource.optoma.com/products/import/Documents/cf45148a-8c4b-4489-8689-b9b1c8d09d14.pdf
- https://www.optoma.com/us/support/product-downloads/
- https://region-resource.optoma.com/products/import/Documents/471bc1d6-63f6-4825-aeef-2414e9cc5f99.pdf
retrieved_at: 2026-07-25T21:15:35.275Z
last_checked_at: 2026-08-05T08:35:15.126Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:35:15.126Z
matched_actions: 144
action_count: 144
confidence: medium
summary: "All 144 spec actions map to literal source command rows; transport values verified; source RS-232 catalogue fully represented. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact voltage/power/lamp-wattage hardware spec not in excerpt (only control-state enumerations present)."
- "none expected for this device class."
- "no explicit multi-step sequences documented in source."
- "source excerpt contains no safety warnings, interlock procedures, or"
- "firmware version compatibility ranges not stated."
- "lamp wattage actual hardware spec (only control-state enum 365W/350W/330W/310W/300W/280W present)."
- "voltage/current/power input spec absent from refined excerpt."
- "INFOn codes 7/8/9 listed in range without labels."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0