Summary

The Extron USB Plus Matrix Controller is a USB switching matrix that routes USB Extender Plus transmitters (inputs) to receivers (outputs). It is controlled via Ethernet (TCP, default port 22123) or RS-232 using the Extron SIS (Simple Instruction Set) protocol. Up to 20 simultaneous TCP connections are supported.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 22123
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: credential
  method: telnet_login
  notes: >
    Default username: admin. Default password: device serial number.
    After full system reset, password reverts to "extron".

Traits

traits:
  - routable    # inferred from tie make/break/view commands
  - queryable   # inferred from firmware, part number, matrix size, connection status queries

Actions

actions:
  - id: reload_configuration
    label: Reload Configuration
    kind: action
    command: "ESC RELOAD CR"
    response: "RELOAD X2) CR/LF"
    params: []
    description: Reload the current CSV configuration. Response code X2): 0=error reloading CSV, 1=success, 2=error restarting matrix, 3=error stopping matrix, 4=CSV not found.

  - id: view_all_ties
    label: View All Ties
    kind: query
    command: "ESC 0* X# *1VC CR"
    response: "Vgp00•Out X# * X![1]•X![2]...X![16]•Vid CR/LF"
    params:
      - name: start_output
        type: integer
        description: Starting output tie number (X#)
    description: View all ties starting from output X#. Up to 16 ties displayed.

  - id: view_output_tie
    label: View Output Tie Status
    kind: query
    command: "X@ !"
    response: "OUT X@ •IN X! •ALL CR/LF"
    params:
      - name: output
        type: integer
        description: Output (receiver) number (X@)

  - id: break_all_ties
    label: Break All Ties
    kind: action
    command: "0*!"
    response: varies
    params: []
    description: Remove all existing input-output ties.

  - id: make_tie
    label: Make Tie
    kind: action
    command: "X! * X@ !"
    response: "OUT X@ •IN X! •ALL CR/LF"
    params:
      - name: input
        type: integer
        description: Input (transmitter) number (X!)
      - name: output
        type: integer
        description: Output (receiver) number (X@)
    description: Create a tie between input X! and output X@.

  - id: break_tie
    label: Break Tie
    kind: action
    command: "0* X! !"
    response: "OUT00•IN X! •ALL CR/LF"
    params:
      - name: input
        type: integer
        description: Input (transmitter) number (X!)

  - id: set_clear_ties_on_startup
    label: Set Clear Ties on Startup
    kind: action
    command: "ESC CLEAR* X2@ CR"
    response: "CLEAR* X2@ CR/LF"
    params:
      - name: setting
        type: integer
        values: [0, 1]
        description: "0 = do not clear ties at startup, 1 = clear ties at startup"

  - id: view_clear_ties_on_startup
    label: View Clear Ties on Startup
    kind: query
    command: "ESC CLEARVC CR"
    response: "CLEAR* X2@ CR/LF"
    params: []

  - id: set_healing_behavior
    label: Set Healing Behavior
    kind: action
    command: "ESC HEALING* X* CR"
    response: "HEAL X* CR/LF"
    params:
      - name: behavior
        type: integer
        values: [0, 1]
        description: "0 = untie (ties not restored to replacement extender), 1 = maintain existing ties (restore ties to replacement)"
    description: Set system behavior when a USB Extender Plus is replaced.

  - id: view_healing_behavior
    label: View Healing Behavior
    kind: query
    command: "ESC HEALVC CR"
    response: "HEAL X* CR/LF"
    params: []

  - id: force_healing_check
    label: Force Healing Check
    kind: action
    command: "ESC HEALNOW CR"
    response: "FORCED CR/LF"
    params: []
    description: Force the system to perform a healing process.

  - id: set_global_timeout
    label: Set Global Timeout
    kind: action
    command: "ESC 1* X1( TC CR"
    response: "Pti1* X1( CR/LF"
    params:
      - name: timeout
        type: integer
        description: "Timeout in 10-second increments. Range 1 (10s) through 6500 (65000s). Default 30 (300s)."

  - id: view_global_timeout
    label: View Global Timeout
    kind: query
    command: "ESC 1TC CR"
    response: "Pti1* X1( CR/LF"
    params: []

  - id: view_input_connection_status
    label: View Input Connection Status
    kind: query
    command: "ESC CONNI CR"
    response: "CONNI X%[1] X%[2] ... X%[N] CR/LF"
    params: []
    description: "View connection status of all USB Plus inputs. X%: 0=offline, 1=online, -=not configured."

  - id: view_output_connection_status
    label: View Output Connection Status
    kind: query
    command: "ESC CONNO CR"
    response: "CONNO X%[1] X%[2] ... X%[N] CR/LF"
    params: []
    description: "View connection status of all USB Plus outputs. X%: 0=offline, 1=online, -=not configured."

  - id: view_extender_input_name
    label: View Extender Input Name
    kind: query
    command: "ESC ENAME*I* X! CR"
    response: "ENAME*I* X! * X2! CR/LF"
    params:
      - name: input
        type: integer
        description: Input (transmitter) number (X!)

  - id: view_extender_output_name
    label: View Extender Output Name
    kind: query
    command: "ESC ENAME*O* X@ CR"
    response: "ENAME*O* X@ * X2! CR/LF"
    params:
      - name: output
        type: integer
        description: Output (receiver) number (X@)

Feedbacks

feedbacks:
  - id: firmware_version
    label: Firmware Version
    type: string
    query_command: "Q"
    response: "Ver01* X$ CR/LF"

  - id: part_number
    label: Software Part Number
    type: string
    query_command: "N"
    response: "Pno56-002-000001 CR/LF"

  - id: matrix_size
    label: Matrix Input/Output Size
    type: string
    query_command: "I"
    response: "Info00*USB X2# * X2$ CR/LF"
    description: "X2# = input size, X2$ = output size"

  - id: serial_port_parameters
    label: Serial Port Parameters
    type: string
    query_command: "ESC 1CP CR"
    response: "Cpn001•Ccp X1@, X1#, X1$, X1% CR/LF"
    description: "Returns baud rate, parity, data bits, stop bits."

  - id: ip_address
    label: IP Address
    type: string
    query_command: "ESC CI CR"
    response: "Ipi• X1^ CR/LF"

  - id: mac_address
    label: MAC Address
    type: string
    query_command: "ESC CH CR"
    response: "Iph• X1& CR/LF"

  - id: tcp_connection_count
    label: TCP Connection Count
    type: integer
    query_command: "ESC CC CR"
    response: "Icc X1! CR/LF"
    description: Three-digit zero-padded response.

  - id: hostname
    label: Hostname
    type: string
    query_command: "ESC CN CR"
    response: "Ipn• X1* CR/LF"

  - id: controller_time
    label: Controller Time
    type: string
    query_command: "ESC CT CR"
    response: "Ipt• X2% CR/LF"
    description: "Format: Www, DD Mmm yyyy HH:MM:SS"

Variables

# UNRESOLVED: no continuous variable ranges (volume, gain, brightness) found in source

Events

events:
  - id: input_status_changed
    label: Input Status Changed
    unsolicited: true
    response_format: "CONNI X! * X^ CR/LF"
    description: "Unsolicited. Fired when an input extender changes connection status. X^: 0=offline, 1=online, 2=unknown device."

  - id: output_status_changed
    label: Output Status Changed
    unsolicited: true
    response_format: "CONNO X@ * X^ CR/LF"
    description: "Unsolicited. Fired when an output extender changes connection status. X^: 0=offline, 1=online, 2=unknown device."

  - id: healed_endpoint
    label: Healed Endpoint
    unsolicited: true
    response_format: "HEALED* X% * X( CR/LF"
    description: "Unsolicited. Fired after healing occurs. X%: connection status, X(: endpoint number."

Macros

# UNRESOLVED: no multi-step macro sequences described in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no explicit safety warnings or interlock procedures found in source

Notes

  • Minimum 300 ms between SIS commands required for reliable execution.
  • When using a third-party controller, changes (such as ties) can take up to 10 seconds to take effect or be reflected in PCS.
  • The controller is locked to verbose mode 3 — all query responses are broadcast to all connected TCP clients and serial port.
  • Each transmitter can be tied to no more than four receivers at a time.
  • Upper- and lowercase text can be used interchangeably in commands (unless otherwise stated).
  • Error codes: E01 (invalid input), E10 (invalid command), E12 (invalid output), E13 (invalid value), E14 (invalid command for config), E95 (config file missing), E96 (transmitter offline), E97 (receiver offline), E98 (max receivers tied), E99 (no config loaded).
  • Port 22022 provides user-space access for CSV file and SFTP.
  • All responses from controller end with CR/LF.

Provenance

source_domains:
  - media.extron.com
  - extron.com
source_urls:
  - https://media.extron.com/public/download/files/userman/usb_plus_matrix_cntrlr_68-3056-50_K.pdf
  - https://www.extron.com/product/usbextenderplus
  - https://media.extron.com/public/download/files/userman/matrix100all-man.pdf
  - https://www.extron.com/download/files/userman/fox3_matrix_series_68-2987-01_G.pdf
  - https://www.extron.com/article/tech92
retrieved_at: 2026-05-15T01:49:11.123Z
last_checked_at: 2026-10-07T12:57:37.167Z

Verification Summary

verdict: verified
checked_at: 2026-10-07T12:57:37.167Z
matched_actions: 26
action_count: 26
confidence: medium
summary: "All 26 action units match source SIS commands with correct shapes, transport values are supported, and the spec covers the full 26-command catalogue. (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "maximum matrix size (input/output count) not explicitly stated — only example shows 4x4"
- "USB Extender Plus firmware compatibility range not stated"
- "no continuous variable ranges (volume, gain, brightness) found in source"
- "no multi-step macro sequences described in source"
- "no explicit safety warnings or interlock procedures found in source"
- "exact ASCII byte encoding for ESC character in SIS commands not specified (assumed 0x1B)"
- "maximum matrix input/output size not stated — source only shows example with T1–T4 / R1–R4"
- "save-configuration command ASCII string not in command table (X1) result code defined but command syntax missing)"

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