Summary
ASCII RS232 and TCP/IP control for the Rotel RSP-1582, from the manufacturer's Controller Command List version 1.40, dated March 6, 2017. Includes all documented controls and feedback requests, with separate volume formats for HDMI 1.4 / software V2.xx and HDMI 2.0a / software V5.xx.
Transport
protocols:
- serial
- tcp
serial:
baud_rate: 115200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
addressing:
port: 9596
auth:
type: UNRESOLVED # source does not establish authentication requirements
encoding: ASCII
command_terminator: "!"
# Commands contain no spaces and must not be followed by CR or LF.
# Response framing also supports byte-counted variable-length text; see Notes.
Traits
- powerable # inferred from the documented power commands
- routable # inferred from the documented input selection commands
- queryable # inferred from the documented status query commands
Actions
- id: power_on
label: "Power On"
kind: action
command: "power_on!"
params: []
response: "power=on!"
- id: power_off
label: "Power Off"
kind: action
command: "power_off!"
params: []
response: "power=standby!"
- id: power_toggle
label: "Power Toggle"
kind: action
command: "power_toggle!"
params: []
response: "power=on/standby!"
- id: volume_up
label: "Volume Up"
kind: action
command: "volume_up!"
params: []
response: "volume=-##.#db!/volume=##!"
- id: volume_down
label: "Volume Down"
kind: action
command: "volume_down!"
params: []
response: "volume=-##.#db!/volume=##!"
- id: set_volume_db
label: "Set Volume to level n; n = 90.0 (min) – 00.0 (max); Applies to SW V2.xx units only."
kind: action
command: "volume_-{magnitude_db}db!"
source_command: "volume_-nn.ndb!"
firmware: "SW V2.xx only"
params:
- name: magnitude_db
type: string
description: "Replace nn.n with the positive magnitude, formatted as two decimal digits, a decimal point and one decimal digit: 00.0 to 90.0. The command supplies the minus sign. 90.0 is minimum volume; 00.0 is maximum. SW V2.xx only."
response: "volume=-##.#db!"
- id: set_volume_flat
label: "Set Volume to level n; n = 00 (min) – 96 (max); Applies to SW 5.xx units only."
kind: action
command: "volume_{level}!"
source_command: "volume_nn!"
firmware: "SW V5.xx only"
params:
- name: level
type: string
description: "Replace nn with two decimal digits: 00 (minimum) through 96 (maximum). SW V5.xx / HDMI 2.0a only."
response: "volume=##!"
- id: mute_toggle
label: "Mute Toggle"
kind: action
command: "mute!"
params: []
response: "mute=on/off!"
- id: mute_on
label: "Mute On"
kind: action
command: "mute_on!"
params: []
response: "mute=on!"
- id: mute_off
label: "Mute Off"
kind: action
command: "mute_off!"
params: []
response: "mute=off!"
- id: source_cd
label: "Source CD"
kind: action
command: "cd!"
params: []
response: "source=cd!"
- id: source_video1
label: "Source Video 1"
kind: action
command: "video1!"
params: []
response: "source=video1!"
- id: source_video2
label: "Source Video 2"
kind: action
command: "video2!"
params: []
response: "source=video2!"
- id: source_video3
label: "Source Video 3"
kind: action
command: "video3!"
params: []
response: "source=video3!"
- id: source_video4
label: "Source Video 4"
kind: action
command: "video4!"
params: []
response: "source=video4!"
- id: source_video5
label: "Source Video 5"
kind: action
command: "video5!"
params: []
response: "source=video5!"
- id: source_video6
label: "Source Video 6"
kind: action
command: "video6!"
params: []
response: "source=video6!"
- id: source_video7
label: "Source Video 7"
kind: action
command: "video7!"
params: []
response: "source=video7!"
- id: source_video8
label: "Source Video 8"
kind: action
command: "video8!"
params: []
response: "source=video8!"
- id: source_tuner
label: "Source Tuner"
kind: action
command: "tuner!"
params: []
response: "source=tuner!"
- id: source_phono
label: "Source Phono"
kind: action
command: "phono!"
params: []
response: "source=phono!"
- id: source_usb
label: "Source Front USB"
kind: action
command: "usb!"
params: []
response: "source=usb!"
- id: source_pc_usb
label: "Source PC-USB"
kind: action
command: "pc_usb!"
params: []
response: "source=pc_usb!"
- id: source_bal_xlr
label: "Source XLR"
kind: action
command: "bal_xlr!"
params: []
response: "source=bal_xlr!"
- id: source_bluetooth
label: "Source Bluetooth"
kind: action
command: "bluetooth!"
params: []
response: "source=bluetooth!"
- id: source_multi_input
label: "Source Multi Input"
kind: action
command: "multi_input!"
params: []
response: "source=multi_input!"
- id: play
label: "PlaySource"
kind: action
command: "play!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: stop
label: "StopSource"
kind: action
command: "stop!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: pause
label: "Pause Source"
kind: action
command: "pause!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: track_fwd
label: "Track Forward/Tune Up"
kind: action
command: "track_fwd!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: track_back
label: "Track Backward/Tune Down"
kind: action
command: "track_back!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: menu
label: "Displaythe Menu"
kind: action
command: "menu!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: exit
label: "Exit Key"
kind: action
command: "exit!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: cursor_up
label: "Cursor Up"
kind: action
command: "up!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: cursor_down
label: "Cursor Down"
kind: action
command: "down!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: cursor_left
label: "Cursor Left"
kind: action
command: "left!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: cursor_right
label: "Cursor Right"
kind: action
command: "right!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: enter
label: "Enter Key"
kind: action
command: "enter!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: dsp_2channel
label: "Select 2 channel mode"
kind: action
command: "2channel!"
params: []
response: "dsp_mode=stereo!"
- id: dsp_3channel
label: "Select 3 channel stereo mode"
kind: action
command: "3channel!"
params: []
response: "dsp_mode=dolby_3_stereo!"
- id: dsp_5channel
label: "Select 5 channel stereo mode"
kind: action
command: "5channel!"
params: []
response: "dsp_mode=5_channel_stereo!"
- id: dsp_7channel
label: "Select 7 channel stereo mode"
kind: action
command: "7channel!"
params: []
response: "dsp_mode=7_channel_stereo!"
- id: dsp_prologic_music
label: "Select Pro Logic II Music mode"
kind: action
command: "prologic_music!"
params: []
response: "dsp_mode=dolby_pliix_music!"
- id: dsp_prologic_movie
label: "Select Pro Logic II Movie mode"
kind: action
command: "prologic_movie!"
params: []
response: "dsp_mode=dolby_pliix_movie!"
- id: dsp_prologic_game
label: "Select Pro Logic II Game mode"
kind: action
command: "prologic_game!"
params: []
response: "dsp_mode=dolby_pliix_game!"
- id: dsp_prologic_iiz
label: "Select Pro Logic IIz mode"
kind: action
command: "prologic_iiz!"
params: []
response: "dsp_mode=dolby_pliiz!"
- id: dsp_neo6_music
label: "Select dts Neo:6 Music mode"
kind: action
command: "neo6_music!"
params: []
response: "dsp_mode=dts_neo:6_music!"
- id: dsp_neo6_cinema
label: "Select dts Neo:6 Cinema mode"
kind: action
command: "neo6_cinema!"
params: []
response: "dsp_mode=dts_neo:6_cinema!"
- id: dsp_bypass
label: "Select AnalogBypass mode"
kind: action
command: "bypass!"
params: []
response: "dsp_mode=analog_bypass!"
- id: dsp_surround_next
label: "Select the next DSP mode"
kind: action
command: "surround_next!"
params: []
response_description: "cycles through all dspmodes"
# UNRESOLVED: this row gives a behavior description, not response bytes.
- id: subwoofer_up
label: "Temp. increase Sub level +0.5dB"
kind: action
command: "subwoofer_up!"
params: []
response: "subwoofer_level=+/-##.#db!"
- id: subwoofer_down
label: "Temp. decrease Sub level -0.5dB"
kind: action
command: "subwoofer_down!"
params: []
response: "subwoofer_level=+/-##.#db!"
- id: center_up
label: "Temp. increase Ctr level +0.5dB"
kind: action
command: "center_up!"
params: []
response: "center_level=+/-##.#db!"
- id: center_down
label: "Temp. decrease Ctr level -0.5dB"
kind: action
command: "center_down!"
params: []
response: "center_level=+/-##.#db!"
- id: surround_right_up
label: "Temp. increase RS level +0.5dB"
kind: action
command: "surround_right_up!"
params: []
response: "surround_right =+/-##.#db!"
- id: surround_right_down
label: "Temp. decrease RS level -0.5dB"
kind: action
command: "surround_right_down!"
params: []
response: "surround_right =+/-##.#db!"
- id: surround_left_up
label: "Temp. increase LS level +0.5dB"
kind: action
command: "surround_left_up!"
params: []
response: "surround_left=+/-##.#db!"
- id: surround_left_down
label: "Temp. decrease LS level -0.5dB"
kind: action
command: "surround_left_down!"
params: []
response: "surround_left=+/-##.#db!"
- id: center_back_right_up
label: "Temp. increase RB level +0.5dB"
kind: action
command: "center_back_right_up!"
params: []
response: "center_back_right=+/-##.#db!"
- id: center_back_right_down
label: "Temp. decrease RB level -0.5dB"
kind: action
command: "center_back_right_down!"
params: []
response: "center_back_right=+/-##.#db!"
- id: center_back_left_up
label: "Temp. increase LB level +0.5dB"
kind: action
command: "center_back_left_up!"
params: []
response: "center_back_left=+/-##.#db!"
- id: center_back_left_down
label: "Temp. decrease LB level -0.5dB"
kind: action
command: "center_back_left_down!"
params: []
response: "center_back_left=+/-##.#db!"
- id: dimmer_toggle
label: "Toggle displaydimmer(+/-10)"
kind: action
command: "dimmer!"
params: []
response: "dimmer=+/-##!"
- id: dimmer_0
label: "Set displayto neutral level(0)"
kind: action
command: "dimmer_0!"
params: []
response: "dimmer=0!"
- id: dimmer_minus
label: "Set display to dimmer level -n; (n = 1-10)"
kind: action
command: "dimmer_-{level}!"
source_command: "dimmer_-n!"
params:
- name: level
type: integer
description: "Magnitude n from 1 through 10; command supplies the minus sign."
min: 1
max: 10
response: "dimmer_-#!"
- id: dimmer_plus
label: "Set display to dimmer level +n; (n = 1-10)"
kind: action
command: "dimmer_+{level}!"
source_command: "dimmer_+n!"
params:
- name: level
type: integer
description: "Magnitude n from 1 through 10; command supplies the plus sign."
min: 1
max: 10
response: "dimmer=+#!"
- id: factory_default_on
label: "Reset unit to factorydefaults"
kind: action
command: "factory_default_on!"
params: []
# UNRESOLVED: Unit Response is listed as n/a; no response payload documented.
- id: get_current_power
label: "Request currentpower status"
kind: query
command: "get_current_power!"
params: []
response: "power=on!/ power=standby!"
response_example: "power=on!"
- id: get_current_source
label: "Request current source"
kind: query
command: "get_current_source!"
params: []
response: "source=cd! / source=coax1! / source=coax1! / source=coax2! /<br>source=coax3! / source=opt1! / source=opt2! / source=opt3! /<br>source=tuner! / source=phono! / source=usb! / source=pc_usb! /<br>source=video1! / source=video2! / source=video3! / source=video4! /<br>source=video5! / source=video6! / source=video7! / source=video8! /<br>source=bluetooth!/source=bal_xlr!/source=multi_input!"
response_example: "source=pc_usb!"
- id: get_volume
label: "Request current volume value"
kind: query
command: "get_volume!"
params: []
response: "volume=-##.#db!(V2.xx) /volume=##!(V5.xx)"
response_example: "volume=-40.5db!/volume=26!"
- id: get_mute_status
label: "Request current mute status."
kind: query
command: "get_mute_status!"
params: []
response: "mute=off!/mute=on!"
response_example: "mute=on!"
- id: get_dsp_mode
label: "Request current DSP mode. Note for Dolby Pro Logic II modes, will return either dolby_plii_music or dolby_pliix_music depending on if system is configured for 5.1 or 7.1 operation."
kind: query
command: "get_dsp_mode!"
params: []
response: "dsp_mode=stereo! / dsp_mode=dolby_3_stereo! /<br>dsp_mode=5_channel_stereo! / dsp_mode=7_channel_stereo! /<br>dsp_mode=dolby_plii_music! / dsp_mode=dolby_pliix_music! /<br>dsp_mode=dolby_plii_movie! / dsp_mode=dolby_pliix_movie! /<br>dsp_mode=dolby_plii_game! / dsp_mode=dolby_pliix_game! /<br>dsp_mode=dolby_pliiz! / dsp_mode=dts_neo:6_music! /<br>dsp_mode=dts_neo:6_cinema! / dsp_mode=analog_bypass! /<br>dsp_mode=source_dependent!"
response_example: "dsp_mode=dolby_pliix_music!"
Feedbacks
- id: "volume_level"
label: "Volume Level"
type: "string"
responses: ["volume=-##.#db!", "volume=##!"]
notes: "Preserved common feedback ID. Interpret dB text for V2.xx and two-digit numeric text for V5.xx; firmware-specific domains are documented below."
- id: "power_state"
type: "enum"
values: ["on", "standby"]
response: "power=on!/ power=standby!"
- id: "current_source"
type: "enum"
values: ["cd", "coax1", "coax2", "coax3", "opt1", "opt2", "opt3", "tuner", "phono", "usb", "pc_usb", "video1", "video2", "video3", "video4", "video5", "video6", "video7", "video8", "bluetooth", "bal_xlr", "multi_input"]
response: "source={source}!"
notes: "Query return strings include coax1/coax2/coax3 and opt1/opt2/opt3; no corresponding source-selection command rows are documented. The source repeats coax1 in its query response list."
- id: "volume_db"
type: "number"
response: "volume=-##.#db!"
firmware: "SW V2.xx / HDMI 1.4"
min: -90.0
max: 0.0
unit: "dB"
example: "volume=-74.5db!"
- id: "volume_numeric"
type: "number"
response: "volume=##!"
firmware: "SW V5.xx / HDMI 2.0a"
min: 0
max: 96
example: "volume=25!"
- id: "mute_status"
type: "enum"
values: ["on", "off"]
response: "mute=off!/mute=on!"
- id: "dsp_mode"
type: "enum"
values: ["stereo", "dolby_3_stereo", "5_channel_stereo", "7_channel_stereo", "dolby_plii_music", "dolby_pliix_music", "dolby_plii_movie", "dolby_pliix_movie", "dolby_plii_game", "dolby_pliix_game", "dolby_pliiz", "dts_neo:6_music", "dts_neo:6_cinema", "analog_bypass", "source_dependent"]
response: "dsp_mode={mode}!"
notes: "For Dolby Pro Logic II the query can return plii or pliix variants depending on 5.1 or 7.1 configuration; preserve the query inventory even though the setter table shows pliix responses."
- id: "subwoofer_level"
type: "number"
response: "subwoofer_level=+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "center_level"
type: "number"
response: "center_level=+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "surround_right_level"
type: "number"
response: "surround_right =+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "surround_left_level"
type: "number"
response: "surround_left=+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "center_back_right_level"
type: "number"
response: "center_back_right=+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "center_back_left_level"
type: "number"
response: "center_back_left=+/-##.#db!"
unit: "dB"
notes: "Temporary level trim; each documented up/down command changes the level by 0.5 dB. UNRESOLVED: absolute range is not documented."
- id: "dimmer_level"
type: "number"
responses: ["dimmer=+/-##!", "dimmer=0!", "dimmer_-#!", "dimmer=+#!"]
notes: "Negative-setting response is copied literally as dimmer_-#!; the source does not use equals in that row. Do not silently normalize it."
Variables
# UNRESOLVED: no additional settable variables beyond the action parameters are documented.
Events
# UNRESOLVED: the source does not distinguish unsolicited events from command responses.
Macros
# UNRESOLVED: no multi-command macros or sequences are documented.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: the source documents no confirmation or interlock procedures.
# factory_default_on! is explicitly described as resetting the unit to factory defaults.
Notes
Source: docs/pdfs/rotel_rsp_1_series.md, refined verbatim at docs/pdfs/rotel_rsp_1_series.refined.md. The source explicitly names RSP-1582; this spec makes no family-wide compatibility claim.
Every command ends in !. Do not include spaces, carriage return or line feed in the transmitted command. TCP commands and responses use port 9596; the product must have a valid IP address on a local network. The source states that RS232 hardware has no flow control and warns to take care sending and receiving to avoid packet loss. No numeric pacing or retry interval is documented.
Response framing is not universally delimiter-only. The source says status information has either a terminating ! or a byte count for variable-length text that may itself contain !. That count includes text data only, excluding the length and comma character.
The source's response strings use # as digit placeholders and / or +/- to show alternatives or signs. Action response values preserve that notation, including HTML line breaks copied from the source tables; they are documentation patterns, not strings to transmit. source_command records the original vendor template for the four parameterized setters. Substitute the documented parameter text into braces in command; do not transmit the braces. The space in surround_right =+/-##.#db! and the unusual negative-dimmer response dimmer_-#! are preserved as documented.
HDMI 1.4 / software V2.xx uses -90.0 dB minimum through 00.0 maximum; the source examples are volume=-74.5db! and volume_-84.0db!. HDMI 2.0a / software V5.xx uses the numeric range 00 minimum through 96 maximum; examples are volume=25! and volume_12!. Select the volume setter and feedback interpretation for the actual unit's software/HDMI branch. The source supplies no firmware discovery command.
Front USB input selection noticeably slows IP responses. The source recommends RS232 instead of IP when Front USB is used. The source gives no numeric timeout adjustment.
Protocol history retained from the manual: version 1.00 (October 23, 2015) is the original specification; 1.10 (July 12, 2016) reflects RS232 feedback and command changes in main software V2.59/2.60; 1.20 (January 9, 2017) reflects stereo DSP feedback changed with V2.81; 1.30 (January 16, 2017) adds the HDMI 2.0a volume-change note; 1.40 (March 6, 2017) adds missing Surround/Center Back trim commands. This history does not establish a complete per-command minimum firmware matrix.
Provenance
source_domains:
- rotel.com
source_urls:
- "https://www.rotel.com/sites/default/files/product/rs232/RSP1582%20Protocol_0.pdf"
retrieved_at: 2026-09-26T14:23:14.694Z
last_checked_at: 2026-09-26T14:23:14.694Z
Verification Summary
verdict: verified
checked_at: 2026-09-26T14:23:14.694Z
matched_actions: 72
action_count: 72
confidence: medium
summary: "All 72 RSP-1582 commands, firmware-specific domains, responses and transport match; source contradictions and framing gaps remain explicit. (12 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "authentication, complete firmware compatibility range, error responses and quantitative timing limits are not stated."
- "Unit Response is listed as n/a; no response payload documented."
- "this row gives a behavior description, not response bytes."
- "absolute range is not documented.\""
- "no additional settable variables beyond the action parameters are documented."
- "the source does not distinguish unsolicited events from command responses."
- "no multi-command macros or sequences are documented."
- "the source documents no confirmation or interlock procedures."
- "the source does not give a complete byte-counted message example or grammar, so a universal framing parser cannot be specified from this document."
- "these vendor response oddities have not been checked against hardware."
- "volume-up/down step size and which intermediate absolute volume values are accepted are not stated."
- "authentication, error messages, timeout/retry handling, full byte-count framing, and firmware compatibility outside explicitly documented branches require further source evidence."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0