Summary

Optoma 3653Rk is an Interactive Flat Panel (IFP) controllable via RS-232C serial and RJ45 LAN (TCP, port 4023). The spec covers power, audio, video, input source, picture, OSD, and status query commands using the ASCII ~xx{code} {value} framing with device-ID addressing and CR termination.

Transport

# Source states both RS-232C and RJ45 (port 23 / 4023). LAN port = 4023.
# xx = 2-digit ASCII device ID (default "01"; source hex examples use "00").
# Framing: "~" + xx + 2/3-digit opcode + " " + value + CR (0x0D).
protocols:
  - serial
  - tcp
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
addressing:
  port: 4023
auth:
  type: none  # inferred: no auth procedure in source

Traits

traits:
  - powerable    # inferred: power on/off/restart commands present
  - levelable    # inferred: volume/treble/bass/brightness/contrast/color/backlight set commands
  - queryable    # inferred: extensive GET command set returns state

Actions

# Notes: xx = 2-digit ASCII device ID. All commands end with CR (0x0D).
# Hex example for device ID 00 shown in source; here command uses mnemonic template.
# "P" = success response, "F" = failed response.

# ---------- SET: Power ----------
- id: set_power
  label: Power Set
  kind: action
  command: "~xx00 {value}"
  params:
    - name: value
      type: integer
      description: "0=off, 1=on, 3=restart"
  response_success: "P"
  response_failed: "F"

- id: set_power_mode_standby
  label: Power Mode (Standby) Set
  kind: action
  command: "~xx114 {value}"
  params:
    - name: value
      type: integer
      description: "0=Eco, 1=Active"
  response_success: "P"
  response_failed: "F"

# ---------- SET: Audio ----------
- id: set_treble
  label: Treble Set
  kind: action
  command: "~xx95 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_bass
  label: Bass Set
  kind: action
  command: "~xx96 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_balance
  label: Balance Set
  kind: action
  command: "~xx99 {value}"
  params:
    - name: value
      type: integer
      description: "0-100 (50 = center)"
  response_success: "P"
  response_failed: "F"

- id: set_volume
  label: Volume Set
  kind: action
  command: "~xx81 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_mute
  label: Mute Set
  kind: action
  command: "~xx80 {value}"
  params:
    - name: value
      type: integer
      description: "0=off, 1=on"
  response_success: "P"
  response_failed: "F"

- id: set_sound_mode
  label: Sound Mode Set
  kind: action
  command: "~xx252 {value}"
  params:
    - name: value
      type: integer
      description: "1=Standard, 2=User, 3=Classroom, 4=Meeting, 5=Movie"
  response_success: "P"
  response_failed: "F"

# ---------- SET: Video / Picture ----------
- id: set_contrast
  label: Contrast Set
  kind: action
  command: "~xx22 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_brightness
  label: Brightness Set
  kind: action
  command: "~xx21 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_color
  label: Color Set
  kind: action
  command: "~xx45 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_backlight
  label: Backlight Set
  kind: action
  command: "~xx251 {value}"
  params:
    - name: value
      type: integer
      description: "0-100"
  response_success: "P"
  response_failed: "F"

- id: set_video_mute
  label: Video Mute Set
  kind: action
  command: "~xx13 {value}"
  params:
    - name: value
      type: integer
      description: "0=off, 1=on"
  response_success: "P"
  response_failed: "F"

- id: set_picture_mode
  label: Picture Mode Set
  kind: action
  command: "~xx20 {value}"
  params:
    - name: value
      type: integer
      description: "1=Presentation, 2=Bright, 3=Cinema, 5=User, 13=DICOM SIM., 21=HDR"
  response_success: "P"
  response_failed: "F"

- id: set_color_temp
  label: Color Temperature Set
  kind: action
  command: "~xx36 {value}"
  params:
    - name: value
      type: integer
      description: "1=Standard, 2=Cool, 4=Warm"
  response_success: "P"
  response_failed: "F"

- id: set_freeze
  label: Freeze Set
  kind: action
  command: "~xx04 {value}"
  params:
    - name: value
      type: integer
      description: "0=Unfreeze, 1=Freeze"
  response_success: "P"
  response_failed: "F"

- id: set_pixel_shift_interval
  label: Pixel Shift Interval Set (min)
  kind: action
  command: "~xx250 {value}"
  params:
    - name: value
      type: integer
      description: "0=off, 2, 3, 5, 30, 60"
  response_success: "P"
  response_failed: "F"

# ---------- SET: Input Source ----------
- id: set_input_source
  label: Input Source Set
  kind: action
  command: "~xx12 {value}"
  params:
    - name: value
      type: integer
      description: "1=HDMI1, 5=VGA, 15=HDMI2, 20=DisplayPort, 24=Android, 25=Slot in PC, 26=HDMI Front, 31=Type-C Front, 32=Type-C"
  response_success: "P"
  response_failed: "F"

# ---------- SET: Language ----------
- id: set_language
  label: Language Set
  kind: action
  command: "~xx70 {value}"
  params:
    - name: value
      type: integer
      description: "1=English, 2=German, 3=Français, 4=Italian, 5=Español, 6=Português, 7=Polish, 8=Dutch, 9=Swedish, 10=Norge, 11=Finnish, 13=Traditional Chinese, 14=Simplified Chinese, 17=Russian, 18=Hungarian, 19=Czech, 20=Arabic, 22=Turkish, 24=Danish, 27=Romanian"
  response_success: "P"
  response_failed: "F"

# ---------- SET: Remote Control Emulation ----------
- id: remote_control_command
  label: Remote Control Command
  kind: action
  command: "~xx140 {value}"
  params:
    - name: value
      type: integer
      description: "10=UP, 11=LEFT, 12=OK, 13=RIGHT, 14=DOWN, 17=Vol+, 18=Vol-, 20=Menu, 47=Input source, 74=Exit"
  response_success: "P"
  response_failed: "F"

# ---------- SET: OSD / System ----------
- id: display_osd_message
  label: Display Message on OSD
  kind: action
  command: "~xx210 {message}"
  params:
    - name: message
      type: string
      description: "ASCII message text"
  response_success: "P"
  response_failed: "F"

- id: reset_to_default
  label: Reset To Default
  kind: action
  command: "~xx112 1"
  params: []
  response_success: "P"
  response_failed: "F"

- id: set_osd_lock
  label: OSD Lock Set
  kind: action
  command: "~xx239 {mode} {password}"
  params:
    - name: mode
      type: integer
      description: "1=On, 2=Off"
    - name: password
      type: string
      description: "4-digit PIN, e.g. 0000-9999"
  response_success: "P"
  response_failed: "F"

# ---------- GET: Queries ----------
- id: query_power
  label: Power Status Query
  kind: query
  command: "~xx124 1"
  params: []
  response: "OK0=off, OK1=on"

- id: query_contrast
  label: Contrast Query
  kind: query
  command: "~xx126 1"
  params: []
  response: "OK0-100"

- id: query_brightness
  label: Brightness Query
  kind: query
  command: "~xx125 1"
  params: []
  response: "OK0-100"

- id: query_volume
  label: Volume Query
  kind: query
  command: "~xx120 1"
  params: []
  response: "OK0-100"

- id: query_video_mute
  label: Video Mute Query
  kind: query
  command: "~xx363 1"
  params: []
  response: "OK0=off, OK1=on"

- id: query_mute
  label: Mute Query
  kind: query
  command: "~xx356 1"
  params: []
  response: "OK0=off, OK1=on"

- id: query_sound_mode
  label: Sound Mode Query
  kind: query
  command: "~xx139 1"
  params: []
  response: "OK1=Standard, OK2=User, OK3=Classroom, OK4=Meeting, OK5=Movie"

- id: query_input_source
  label: Input Source Query
  kind: query
  command: "~xx121 1"
  params: []
  response: "OK7=HDMI1, OK8=HDMI2, OK22=HDMI Front, OK28=Type-C Front, OK2=VGA, OK20=Android, OK21=Slot in PC, OK29=Type-C, OK15=DisplayPort"

- id: query_aspect_ratio
  label: Aspect Ratio Query
  kind: query
  command: "~xx127 1"
  params: []
  response: "OK1=4:3, OK2=16:9, OK14=PTP"

- id: query_picture_mode
  label: Picture Mode Query
  kind: query
  command: "~xx123 1"
  params: []
  response: "OK1=Presentation, OK2=Bright, OK3=Cinema, OK5=User, OK10=DICOM SIM., OK21=HDR"

- id: query_color_temp
  label: Color Temperature Query
  kind: query
  command: "~xx128 1"
  params: []
  response: "OK1=Cool, OK0=Standard, OK3=Warm"

- id: query_wlan
  label: WLAN Status / IP Query
  kind: query
  command: "~xx451 {value}"
  params:
    - name: value
      type: integer
      description: "1=status (OK0=Disconnected, OK1=Connected), 2=IP address"
  response: "OK0/OK1 status, or IP string"

- id: query_mac_address
  label: MAC Address Query
  kind: query
  command: "~xx555 {value}"
  params:
    - name: value
      type: integer
      description: "1=LAN MAC, 2=WLAN MAC"
  response: "MAC address string nn:nn:nn:nn:nn:nn"

- id: query_lan
  label: LAN Status / IP Query
  kind: query
  command: "~xx87 {value}"
  params:
    - name: value
      type: integer
      description: "1=status (OK0=Disconnected, OK1=Connected), 3=IP address"
  response: "OK0/OK1 status, or IP string"

- id: query_fw_version
  label: Firmware Version Query
  kind: query
  command: "~xx122 1"
  params: []
  response: "version string e.g. 20190926164814"

- id: query_usage_hour
  label: Usage Hour Query
  kind: query
  command: "~xx108 1"
  params: []
  response: "OKnnnnn hours"

- id: query_device_type
  label: Device Type Query
  kind: query
  command: "~xx149 1"
  params: []
  response: "OK2 = IFP"

- id: query_information
  label: Information String Query
  kind: query
  command: "~xx150 {value}"
  params:
    - name: value
      type: integer
      description: "1=info string, 2=native resolution, 3=input source, 4=source resolution, 16=power mode standby, 17=DHCP, 18=system temp, 19=source refresh rate"
  response: "OK + value per param"

- id: query_regulatory_model
  label: Regulatory Model Name Query
  kind: query
  command: "~xx151 3"
  params: []
  response: "OKnnn e.g. SLUGRK"

- id: query_osd_lock
  label: OSD Lock Query
  kind: query
  command: "~xx229 1"
  params: []
  response: "OK0=Off, OK1=On"

- id: query_serial_number
  label: Serial Number Query
  kind: query
  command: "~xx353 1"
  params: []
  response: "serial number string"

Feedbacks

# System auto-send (unsolicited status notifications from device)
- id: standby_mode_notify
  type: string
  values: ["INFO0"]

- id: warming_up_notify
  type: string
  values: ["INFO1"]

- id: cooling_down_notify
  type: string
  values: ["INFO2"]

- id: over_temperature_notify
  type: string
  values: ["INFO7"]

Variables

# Settable numeric parameters also exposed as variables:
- id: volume
  type: integer
  range: [0, 100]
- id: treble
  type: integer
  range: [0, 100]
- id: bass
  type: integer
  range: [0, 100]
- id: balance
  type: integer
  range: [0, 100]
- id: contrast
  type: integer
  range: [0, 100]
- id: brightness
  type: integer
  range: [0, 100]
- id: color
  type: integer
  range: [0, 100]
- id: backlight
  type: integer
  range: [0, 100]

Events

# Unsolicited auto-send events from device (see Feedbacks):
- id: system_info
  trigger: auto-sent by device on state change
  payload: "INFO0 (Standby), INFO1 (Warming up), INFO2 (Cooling down), INFO7 (Over temperature)"

Macros

# UNRESOLVED: no multi-step sequences described in source

Safety

confirmation_required_for: []
interlocks: []
# Source lists over-temperature auto-notify (INFO7) but no explicit interlock
# procedure or power-on sequencing requirement.
# UNRESOLVED: no explicit safety/interlock procedures stated in source.

Notes

  • Device-ID addressing: commands use xx = 2-digit ASCII device ID. Source example default = 01; hex examples in the table use device ID 00.
  • Framing: lead code ~ (0x7E) + device ID + opcode + space + variable + CR (0x0D).
  • LED indicators (from source): Solid Red = Standby; Solid White = Power on; Flash White continuously = Backlight off.
  • GET input-source codes differ from SET codes (e.g. SET HDMI2=15, GET HDMI2=8). Both documented above.
  • Source labels itself "IFP" (Interactive Flat Panel); device type query returns OK2.

Provenance

source_domains:
  - region-resource.optoma.com
source_urls:
  - https://region-resource.optoma.com/products/import/Documents/f44df515-4251-4840-9eef-d9ee0d757cb3.pdf
retrieved_at: 2026-07-14T01:52:56.098Z
last_checked_at: 2026-07-22T00:20:37.917Z

Verification Summary

verdict: verified
checked_at: 2026-07-22T00:20:37.917Z
matched_actions: 44
action_count: 44
confidence: medium
summary: "All 44 spec actions matched literally in source with correct command opcodes, parameter ranges, and enum values; transport parameters verified; auto-send notifications represented in Feedbacks. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "device electrical/voltage specs not in this document; firmware version range not stated."
- "no multi-step sequences described in source"
- "no explicit safety/interlock procedures stated in source."
- "firmware version compatibility range not stated in source."
- "device electrical/power specs not in this document."
- "exact password encoding for OSD lock beyond 4-digit PIN not fully detailed."
- "baud/serial details beyond the single stated configuration not given."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0