Summary

Bose ControlSpace PowerMatch networked amplifiers controlled via ASCII serial protocol over TCP/IP (port 10055). Supports output volume/mute per slot/channel, standby control, fault/alarm monitoring, signal level metering, parameter set recall, group volume/mute, module-level DSP parameter control (input EQ, speaker EQ, limiters, delays, matrix mixer, signal generator, band pass). Command syntax is identical to the RS-232 serial protocol but transported over Ethernet.

Transport

protocols:
  - tcp
addressing:
  port: 10055
auth:
  type: UNRESOLVED  # source does not state this (was inferred none: no auth procedure in source)

Traits

traits:
  - powerable    # SY/GY standby/normal control
  - queryable    # GV, GM, GL, GY, GC, GF, GR, GH queries
  - levelable    # SV, GV, SI volume; SG/GG group level
  - routable     # Matrix Mixer cross-point control

Actions

actions:
  - id: set_parameter_set
    label: Recall Parameter Set
    kind: action
    params:
      - name: n
        type: integer
        description: "Parameter Set number 1-255 (hex 1-FF)"
    command: "SS {n}"
    description: "Recall/invoke Parameter Set n. No acknowledgement sent; follow with GS to confirm."

  - id: get_parameter_set
    label: Get Last Parameter Set
    kind: query
    params: []
    command: "GS"
    response: "S {n}"
    description: "Query last invoked Parameter Set. Response S n where n=0 if none recalled."

  - id: set_group_level
    label: Set Group Master Level
    kind: action
    params:
      - name: n
        type: integer
        description: "Group number 1-64 (hex 1-40)"
      - name: l
        type: integer
        description: "Level 0-120 decimal (0dB to -60dB in 0.5dB steps) or 255 for -inf"
    command: "SG {n},{l}"
    description: "Set master level of Group n. PM max level is 0dB (hex 78, dec 120)."

  - id: get_group_level
    label: Get Group Master Level
    kind: query
    params:
      - name: n
        type: integer
        description: "Group number 1-64"
    command: "GG {n}"
    response: "GG {n},{l}"

  - id: set_group_increment
    label: Set Group Level Increment/Decrement
    kind: action
    params:
      - name: n
        type: integer
        description: "Group number 1-64"
      - name: d
        type: integer
        description: "Direction 1=up 0=down"
      - name: x
        type: integer
        description: "Number of 0.5dB steps (hex)"
    command: "SH {n},{d},{x}"

  - id: set_group_mute
    label: Set Group Mute
    kind: action
    params:
      - name: n
        type: integer
        description: "Group number 1-64"
      - name: m
        type: string
        description: "M=Mute, U=Unmute, T=Toggle"
    command: "SN {n},{m}"

  - id: get_group_mute
    label: Get Group Mute
    kind: query
    params:
      - name: n
        type: integer
        description: "Group number 1-64"
    command: "GN {n}"
    response: "GN {n},{m}"

  - id: set_volume
    label: Set Output Volume
    kind: action
    params:
      - name: s
        type: integer
        description: "Slot number (PM8xxx: 1=InA-D,2=Out1-4,3=InE-H,4=Out5-8; PM4xxx: 1=InA-D,2=Out1-4)"
      - name: c
        type: integer
        description: "Channel 1-4"
      - name: l
        type: integer
        description: "Level hex 0(-60dB) to 78(0dB) in 0.5dB steps"
    command: "SV {s},{c},{l}"
    description: "PM only supports volume control of outputs, not inputs. Ignored if channel muted."

  - id: get_volume
    label: Get Output Volume
    kind: query
    params:
      - name: s
        type: integer
        description: "Slot number"
      - name: c
        type: integer
        description: "Channel 1-4"
    command: "GV {s},{c}"
    response: "GV {s},{c},{l}"

  - id: set_volume_increment
    label: Set Volume Increment/Decrement
    kind: action
    params:
      - name: s
        type: integer
        description: "Slot number"
      - name: c
        type: integer
        description: "Channel 1-4"
      - name: d
        type: integer
        description: "Direction 1=up 0=down"
      - name: x
        type: integer
        description: "Number of 0.5dB steps (hex)"
    command: "SI {s},{c},{d},{x}"

  - id: set_mute
    label: Set Output Mute
    kind: action
    params:
      - name: s
        type: integer
        description: "Slot number"
      - name: c
        type: integer
        description: "Channel 1-4"
      - name: m
        type: string
        description: "M=Mute, U=Unmute, T=Toggle"
    command: "SM {s},{c},{m}"

  - id: get_mute
    label: Get Output Mute
    kind: query
    params:
      - name: s
        type: integer
        description: "Slot number"
      - name: c
        type: integer
        description: "Channel 1-4"
    command: "GM {s},{c}"
    response: "GM {s},{c},{m}"

  - id: get_signal_level
    label: Get Signal Level
    kind: query
    params:
      - name: s
        type: integer
        description: "Slot index (see GL Indices table)"
    command: "GL {s}"
    response: "GL {s} [1,...,N]"
    description: "Returns array of channel levels in hex. PM outputs in dBV max (-60 to 0 in 0.5dB steps)."

  - id: set_ip_address
    label: Set IP Address
    kind: action
    params:
      - name: addr
        type: string
        description: "IP address xxx.xxx.xxx.xxx"
    command: "IP {addr}"
    description: "Change takes effect after reboot."

  - id: get_ip_address
    label: Get IP Address
    kind: query
    params: []
    command: "IP"
    response: "IP xxx.xxx.xxx.xxx"

  - id: set_network_param
    label: Set Network Parameter
    kind: action
    params:
      - name: p
        type: string
        description: "T=Type(DHCP/Static), M=Subnet Mask, G=Default Gateway"
      - name: v
        type: string
        description: "D=DHCP, S=Static, or xxx.xxx.xxx.xxx address"
    command: "NP {p},{v}"
    description: "Changes take effect after reboot."

  - id: get_network_param
    label: Get Network Parameter
    kind: query
    params:
      - name: p
        type: string
        description: "T=Type, M=Subnet Mask, G=Default Gateway"
    command: "NP {p}"
    response: "NP {p},{v}"

  - id: reset_network_defaults
    label: Reset Network Defaults
    kind: action
    params: []
    command: "NP F"

  - id: reset_device
    label: Reset/Reboot Device
    kind: action
    params: []
    command: "RESET"
    description: "Equivalent to power-cycle. All current settings lost; reverts to power-on (flashed) settings."

  - id: set_standby
    label: Set Standby Status
    kind: action
    params:
      - name: s
        type: string
        description: "S=Standby, N=Normal"
    command: "SY {s}"
    description: "PowerMatch and PowerShare only. Not immediate; allow time for transition."

  - id: get_standby
    label: Get Standby Status
    kind: query
    params: []
    command: "GY"
    response: "GY {s}"

  - id: get_configuration
    label: Get Output Configuration
    kind: query
    params: []
    command: "GC"
    response: "GC 1,2,3,4,5,6,7,8"
    description: "Returns configured state per channel. IN=Independent(Mono), BL=Bridged(LoZ), B7=Bridged(70v), B1=Bridged(100v), PA=Parallel, QL=Quad(LoZ), Q7=Quad(70v), Q1=Quad(100v). PM4xxx returns 4 values."

  - id: set_fault_notification
    label: Set Fault Notification
    kind: action
    params:
      - name: n
        type: string
        description: "O=On, F=Off"
    command: "SF {n}"
    description: "Enable/disable unsolicited Fault Output state changes. Not retained on power down."

  - id: get_fault_status
    label: Get Fault Status
    kind: query
    params: []
    command: "GF"
    response: "GF {f}"
    description: "f=F=Fault, C=No Fault"

  - id: clear_fault_alarms
    label: Clear Fault/Alarms
    kind: action
    params: []
    command: "CF"
    response: "<ACK>"

  - id: set_alarm_reporting
    label: Set Alarm Reporting
    kind: action
    params:
      - name: n
        type: string
        description: "O=On, F=Off"
    command: "SR {n}"
    description: "Enable/disable unsolicited alarm/fault notifications. Not retained on power down."

  - id: get_alarm_status
    label: Get Alarm Status
    kind: query
    params:
      - name: c
        type: integer
        description: "Channel 1-8 (1-4 for PM4xxx), or 0 for non-channel alarms"
    command: "GR {c}"
    response: "GR {c},{s},{t}"
    description: "s=severity (W=Warning,F=Fault,S=System,N=No Alarm), t=type (N=None,O=Open,S=Short,I=I-Share Missing,Z=Other)"

  - id: get_alarm_history
    label: Get Alarm History
    kind: query
    params: []
    command: "GH"
    response: "GH [Time, Date, Description ...]"
    description: "Dump of internal alarm log."

  - id: clear_alarm_history
    label: Clear Alarm History
    kind: action
    params: []
    command: "CH"
    response: "<ACK>"

  - id: set_module_param
    label: Set Module Parameter
    kind: action
    params:
      - name: module_name
        type: string
        description: "Unique module label from ControlSpace Designer"
      - name: index1
        type: integer
        description: "Primary index"
      - name: index2
        type: integer
        description: "Secondary index (optional)"
      - name: value
        type: string
        description: "Parameter value"
    command: "SA \"{module_name}\">{index1}>{index2}={value}"
    description: "Set a signal processing module parameter. Response: ACK (0x06) or NAK nn."

  - id: get_module_param
    label: Get Module Parameter
    kind: query
    params:
      - name: module_name
        type: string
        description: "Unique module label"
      - name: index1
        type: integer
        description: "Primary index"
      - name: index2
        type: integer
        description: "Secondary index (optional)"
    command: "GA \"{module_name}\">{index1}>{index2}"
    response: "GA \"{module_name}\">{index1}>{index2}={value}"

  - id: invoke_module_action
    label: Invoke Module Action
    kind: action
    params:
      - name: module_name
        type: string
        description: "Unique module label"
      - name: index1
        type: integer
        description: "Action index"
      - name: parameter
        type: string
        description: "Action parameter"
    command: "MA \"{module_name}\">{index1}={parameter}"
    description: "Invoke an action for modules that support it. Response: ACK or NAK nn."

  - id: subscribe
    label: Subscribe to Data Change
    kind: action
    params:
      - name: get_command
        type: string
        description: "Full text of GET command to subscribe to"
    command: "SUB \"{get_command}\""
    response: "SUB \"{get_command}\",yes"

  - id: unsubscribe
    label: Unsubscribe from Data Change
    kind: action
    params:
      - name: get_command
        type: string
        description: "Full text of GET command to unsubscribe"
    command: "UNS \"{get_command}\""
    response: "UNS \"{get_command}\",yes"

  - id: set_room_combine
    label: Set Room Combine [EX Only]
    kind: action
    params:
      - name: n
        type: string
        description: "Room Combine Group number, 1-6, or name"
      - name: a
        type: string
        description: "Room number, 1-6, or room name"
      - name: b
        type: string
        description: "Room number, 1-6, or room name"
      - name: s
        type: string
        description: "J = Join and S = Split"
    command: "SRC"
    description: "Join or split two rooms within a Room Combine Group, using room numbers or names."

  - id: get_room_combine
    label: Get Room Combine [EX Only]
    kind: query
    params:
      - name: n
        type: string
        description: "Room Combine Group number, 1-6, or name"
      - name: a
        type: string
        description: "Room number, 1-6, or room name (optional when querying joined rooms)"
      - name: b
        type: string
        description: "Room number, 1-6, or room name (optional when querying joined rooms)"
    command: "GRC"
    response: "GRC n,a,b,s"
    description: "Query whether two rooms are joined, or which rooms are currently joined in a Room Combine Group. State: J = Join and S = Split."

  - id: set_parameter_set_list_selection
    label: Set Parameter Set List Selection
    kind: action
    params:
      - name: name
        type: string
        description: "Parameter Set List name"
      - name: n
        type: integer
        description: "Index of the Parameter Set in the list to select"
    command: "SA"
    description: "Change the current selection of a Parameter Set List using index 1. Selection is set to nearest possible selection: 1 if n = 0, max selection if n is greater than max selection, otherwise n."

  - id: get_parameter_set_list_selection
    label: Get Parameter Set List Selection
    kind: query
    params:
      - name: name
        type: string
        description: "Parameter Set List name"
    command: "GA"
    response: "GA \"A\" >2= n"
    description: "Query the current selection of a Parameter Set List using index 2."

Feedbacks

feedbacks:
  - id: parameter_set_state
    type: integer
    description: "Last invoked Parameter Set number (0=none recalled)"
    query_command: "GS"

  - id: group_level
    type: integer
    description: "Current level of a group"
    query_command: "GG {n}"

  - id: group_mute_state
    type: enum
    values: [M, U]
    description: "M=Muted, U=Unmuted"
    query_command: "GN {n}"

  - id: output_volume
    type: integer
    description: "Current output volume level per slot/channel"
    query_command: "GV {s},{c}"

  - id: output_mute_state
    type: enum
    values: [M, U]
    description: "M=Muted, U=Unmuted per slot/channel"
    query_command: "GM {s},{c}"

  - id: signal_level
    type: array
    description: "Array of hex levels per slot channels. PM outputs in dBV max."
    query_command: "GL {s}"

  - id: standby_state
    type: enum
    values: [S, N]
    description: "S=Standby, N=Normal"
    query_command: "GY"

  - id: output_configuration
    type: array
    description: "Per-channel config: IN/BL/B7/B1/PA/QL/Q7/Q1"
    query_command: "GC"

  - id: fault_status
    type: enum
    values: [F, C]
    description: "F=Fault, C=No Fault"
    query_command: "GF"

  - id: alarm_status
    type: composite
    description: "Per channel: severity (W/F/S/N), type (N/O/S/I/Z), condition (S/C)"
    query_command: "GR {c}"

  - id: alarm_history
    type: array
    description: "Time-stamped alarm log entries"
    query_command: "GH"

  - id: ip_address
    type: string
    description: "Current IP address"
    query_command: "IP"

  - id: module_param_value
    type: string
    description: "Current value of a module parameter"
    query_command: "GA \"{module_name}\">{index1}>{index2}"

Variables

variables:
  - id: group_level
    description: "Group master level 0-120 (0dB to -60dB, 0.5dB steps) or 255 for -inf"
    min: 0
    max: 255

  - id: output_level
    description: "Per-channel output level hex 0(-60dB) to 78(0dB) in 0.5dB steps"
    min: 0
    max: 120

  - id: standby_state
    description: "S=Standby, N=Normal"

Events

events:
  - id: fault_output_change
    description: "Unsolicited fault output state change (enabled by SF O). Format: GF {f}. Not retained on power down."

  - id: alarm_fault_event
    description: "Unsolicited alarm/fault notification (enabled by SR O). Format: GR {c},{s},{t},{x}. Transient alarms (limiting/clip) only first instance reported."

  - id: subscription_update
    description: "Unsolicited data change for subscribed GET commands (SUB). Format matches the subscribed GET response."

Macros

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

Safety

confirmation_required_for: []
interlocks: []
notes: >
  RESET command causes full power-cycle - all current settings lost, reverts to
  flashed (power-on) settings. Standby transition is not immediate; allow adequate time.
  Alarm reporting and fault notification preferences are NOT retained on power down -
  they default to Off each power-up and must be re-enabled. Control connection (port 10055)
  is closed when ControlSpace Designer goes online to load a new design; re-establish after.

Notes

  • All commands use ASCII, terminated with <CR> (carriage return, 0x0D).
  • System and Device commands use hexadecimal notation for numerical values. Module commands use plain ASCII text.
  • System commands: no acknowledgement sent. Confirm with corresponding Get command.
  • Module commands: ACK (0x06) on success, NAK nn (0x15 + 2-digit error code) on failure. Error codes: 01=Invalid Module Name, 02=Illegal Index, 03=Value Out of Range, 99=Unknown Error.
  • Multiple module commands on one line separated by semicolons (0x3B).
  • PM supports up to 32 simultaneous serial-over-IP connections on port 10055.
  • ControlSpace Designer uses ports 10001/10002 simultaneously; third-party control does not interfere.
  • PM8xxxN slot layout: Slot 1=In A-D, Slot 2=Out 1-4, Slot 3=In E-H, Slot 4=Out 5-8. PM4xxxN: Slot 1=In A-D, Slot 2=Out 1-4.
  • PM only supports volume control of outputs, not inputs.
  • Set Volume commands ignored if channel is muted.
  • PM module labels (except Input and Amp Output) are fixed: "PEQ-5band A" through "PEQ-5band H", "Band Pass 1" through "Band Pass 8", "SpeakerPEQ 1" through "SpeakerPEQ 8", "Limiter 1" through "Limiter 8", "Delay 1" through "Delay 8", "Matrix 1", "SigGen 1".
  • PowerMatch default network: DHCP, IP 169.254.0.0/16.

Provenance

source_domains:
  - assets.boseprofessional.com
source_urls:
  - https://assets.boseprofessional.com/m/4998082f60dfee56/original/ControlSpace-Serial-Protocol-v5-13.pdf
  - https://assets.boseprofessional.com/m/48b4f11e8a4922b9/original/ug_csp_control_serial.pdf
  - https://assets.boseprofessional.com/m/5967be9a1795e9b9/original/tds_fse4_en.pdf
retrieved_at: 2026-05-15T00:55:44.088Z
last_checked_at: 2026-10-07T22:02:30.478Z

Verification Summary

verdict: verified
checked_at: 2026-10-07T22:02:30.478Z
matched_actions: 51
action_count: 51
confidence: medium
summary: "All 51 action units map to PowerMatch-applicable source commands with correct shapes and port 10055 is stated; MSA12X/endpoint commands excluded; only bare SUB is unrepresented. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "SUB (bare device-subscription-support query)"
- "physical RS-232 serial config (baud rate) for PowerMatch not explicitly stated — doc only lists ESP and EX serial settings"
- "no explicit multi-step sequences described in source"
- "RS-232 baud rate for PowerMatch not explicitly stated — doc only lists ESP-00 (38400) and ESP-880/1240/4120/1600/EX (115200)"
- "firmware version compatibility range not stated"
- "maximum concurrent TCP connections per PM model — doc says 32 for PM8500N/8250N/4500N/4250N but shared with ControlSpace Remote"

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