Summary
Rotel RKB-850/8100/D850/D8100 multi-channel power amplifiers controlled over RS-232 using ASCII commands terminated with "!". Supports power, per-channel power, volume (master and per-channel L/R), mute, balance, input selection (D-models only), and status queries.
Transport
protocols:
- serial
serial:
baud_rate: 115200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred from power_on/power_off/power_toggle commands
- queryable # inferred from get_* query commands
- levelable # inferred from volume_up/volume_down/volume_n commands
Actions
- id: power_on
label: Power On
kind: action
command: "power_on!"
params: []
- id: power_off
label: Power Off
kind: action
command: "power_off!"
params: []
- id: power_toggle
label: Power Toggle
kind: action
command: "power_toggle!"
params: []
- id: channel_on
label: Turn Specific Channel On
kind: action
command: "channel_on!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
description: Optional channel prefix (e.g. "0A:channel_on!"). Omit to apply to all channels.
required: false
- id: channel_off
label: Turn Specific Channel Off
kind: action
command: "channel_off!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
description: Optional channel prefix. Omit to apply to all channels.
required: false
- id: volume_up
label: Volume Up
kind: action
command: "volume_up!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_down
label: Volume Down
kind: action
command: "volume_down!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_set
label: Set Volume to Level
kind: action
command: "volume_{n}!"
params:
- name: n
type: integer
description: Volume level 1-96
min: 1
max: 96
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
notes: Front panel level trims must all be at minimum for RS-232 volume commands to take effect.
- id: volume_l_up
label: Left Channel Volume Up
kind: action
command: "volume_l_up!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_r_up
label: Right Channel Volume Up
kind: action
command: "volume_r_up!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_l_down
label: Left Channel Volume Down
kind: action
command: "volume_l_down!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_r_down
label: Right Channel Volume Down
kind: action
command: "volume_r_down!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: volume_l_set
label: Set Left Channel Volume to Level
kind: action
command: "volume_l_{n}!"
params:
- name: n
type: integer
description: Left channel volume level 1-96
min: 1
max: 96
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
notes: Using independent L/R volume settings resets balance to 0 for the channel.
- id: volume_r_set
label: Set Right Channel Volume to Level
kind: action
command: "volume_r_{n}!"
params:
- name: n
type: integer
description: Right channel volume level 1-96
min: 1
max: 96
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
notes: Using independent L/R volume settings resets balance to 0 for the channel.
- id: mute_toggle
label: Mute Toggle
kind: action
command: "mute!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: mute_on
label: Mute On
kind: action
command: "mute_on!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: mute_off
label: Mute Off
kind: action
command: "mute_off!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: balance_right
label: Balance Right (step)
kind: action
command: "balance_right!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: balance_left
label: Balance Left (step)
kind: action
command: "balance_left!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: balance_max_left
label: Set Balance to Max Left
kind: action
command: "balance_L15!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: balance_center
label: Set Balance to 0 (Center)
kind: action
command: "balance_000!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: balance_max_right
label: Set Balance to Max Right
kind: action
command: "balance_R15!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: factory_default
label: Factory Default Reset
kind: action
command: "factory_default_on!"
params: []
notes: Resets all user settings to factory defaults.
- id: input_sel_auto
label: Input Selection Auto (D-models)
kind: action
command: "input_sel_auto!"
params: []
notes: RKB-D850/D8100 only, Main SW V2.45+. Auto selects Optical if digital signal present, else Analog.
- id: input_sel_digital
label: Select Digital (Optical) Input (D-models)
kind: action
command: "input_sel_digital!"
params: []
notes: RKB-D850/D8100 only, Main SW V2.45+.
- id: input_sel_analog
label: Select Analog Input (D-models)
kind: action
command: "input_sel_analog!"
params: []
notes: RKB-D850/D8100 only, Main SW V2.45+.
- id: display_update_auto
label: Set Status Update to Auto
kind: action
command: "display_update_auto!"
params: []
notes: Unsolicited status updates pushed on state changes.
- id: display_update_manual
label: Set Status Update to Manual
kind: action
command: "display_update_manual!"
params: []
notes: Status updates must be polled.
- id: get_product_type
label: Get Product Type
kind: query
command: "get_product_type!"
params: []
- id: get_product_version
label: Get Product (CPU SW) Version
kind: query
command: "get_product_version!"
params: []
- id: get_display_update
label: Get Display Update Mode
kind: query
command: "get_display_update!"
params: []
- id: get_current_power
label: Get Current Power Status
kind: query
command: "get_current_power!"
params: []
- id: get_input_sel_mode
label: Get Input Selection Mode (D-models)
kind: query
command: "get_input_sel_mode!"
params: []
notes: Requires Main SW V2.45+.
- id: get_channel_status
label: Get Channel Power Status
kind: query
command: "get_channel_status!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: get_balance
label: Get Balance Setting
kind: query
command: "get_balance!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: get_current_freq
label: Get Digital Input Frequency
kind: query
command: "get_current_freq!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: get_amp_trim
label: Get Amplifier Level Trims
kind: query
command: "get_amp_trim!"
params: []
- id: get_temperature
label: Get Amplifier Temperature
kind: query
command: "get_temperature!"
params: []
notes: Celsius. RKB-850/D850 returns 3 values (AB, CD, PS). RKB-8100/D8100 returns 4 values (AB, CD, PS1, PS2).
- id: get_fan_status
label: Get Fan Speed Status
kind: query
command: "get_fan_status!"
params: []
- id: get_amp_status
label: Get Amplifier Status
kind: query
command: "get_amp_status!"
params: []
- id: get_volume_max
label: Get Max Volume Value
kind: query
command: "get_volume_max!"
params: []
- id: get_volume_min
label: Get Min Volume Value
kind: query
command: "get_volume_min!"
params: []
- id: get_volume
label: Get Current Volume (L+R)
kind: query
command: "get_volume!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: get_volume_l
label: Get Left Channel Volume
kind: query
command: "get_volume_l!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
- id: get_volume_r
label: Get Right Channel Volume
kind: query
command: "get_volume_r!"
params:
- name: channel_prefix
type: enum
values: ["0A", "0B", "0C", "0D"]
required: false
Feedbacks
- id: power_state
type: enum
values: [on, standby, SignalSenseMode]
response_pattern: "power={value}!"
description: Returned by get_current_power and unsolicited power state changes.
- id: ch_power_state
type: enum
values: [on, off, amp_on, amp_off]
response_pattern: "{0A|0B|0C|0D}:ch_power={value}!"
description: Per-channel power. amp_on/amp_off only returned in Signal Sense mode.
- id: volume_left
type: integer
response_pattern: "{0A|0B|0C|0D}:volume_l_=##!"
description: 2-digit left channel volume level.
- id: volume_right
type: integer
response_pattern: "{0A|0B|0C|0D}:volume_r_=##!"
description: 2-digit right channel volume level.
- id: volume_max
type: integer
response_pattern: "volume_max=##!"
description: Maximum volume value (typically 96).
- id: volume_min
type: integer
response_pattern: "volume_min=##!"
description: Minimum volume value (typically 0).
- id: mute_state
type: enum
values: [on, off]
response_pattern: "{0A|0B|0C|0D}:mute={value}!"
- id: balance
type: string
response_pattern: "{0A|0B|0C|0D}:balance=###!"
description: Balance value. Format L01-L15 (left), R01-R15 (right), or 000 (center).
- id: digital_freq
type: enum
values: [off, "32", "44.1", "48", "88.2", "96", "176.4", "192"]
response_pattern: "{0A|0B|0C|0D}:freq={value}!"
description: Digital input sample frequency (kHz).
- id: amp_trim
type: string
response_pattern: "{0A|0B|0C|0D}:amp_trim={value}!"
description: Front-panel level trim per channel. Value is integer or "min"/"max".
- id: temperature
type: string
response_pattern: "temperature={ab},{cd},{ps}[,{ps2}]!"
description: Channel pair and power supply temperatures in Celsius. 3 values for RKB-850/D850, 4 values for RKB-8100/D8100.
- id: fan_status
type: enum
values: [normal, high]
response_pattern: "fan={value}!"
- id: amp_status
type: enum
values: [normal, protection]
response_pattern: "amp={value}!"
- id: display_update_mode
type: enum
values: [auto, manual]
response_pattern: "display_update={value}!"
- id: input_sel_mode
type: enum
values: [auto, digital, analog]
response_pattern: "input_sel_mode={value}!"
description: D-models only.
- id: product_type
type: string
response_pattern: "product_type=##,text"
description: 2-digit length prefix + comma + product name text. No "!" terminator.
- id: product_version
type: string
response_pattern: "product_version=##,text"
description: 2-digit length prefix + comma + version text. No "!" terminator.
Variables
- id: volume_level
type: integer
min: 1
max: 96
description: Master volume level per channel.
- id: volume_l_level
type: integer
min: 1
max: 96
description: Left channel independent volume level.
- id: volume_r_level
type: integer
min: 1
max: 96
description: Right channel independent volume level.
- id: balance_position
type: string
description: L01-L15, R01-R15, or 000 (center).
Events
# When display_update_auto is enabled, the device sends unsolicited status updates
# on any state change (power, temperature, level trims, digital input frequency, etc.)
# using the same response_pattern formats listed in Feedbacks.
- id: auto_status_push
description: Unsolicited push of any feedback string when display update mode is auto and device state changes.
trigger: state change while display_update=auto
Macros
# UNRESOLVED: no explicit multi-step macro sequences described in source
Safety
confirmation_required_for:
- factory_default
interlocks:
- condition: front_panel_level_trims_not_at_minimum
effect: RS-232 volume control commands have no effect on the unit.
- condition: signal_sense_mode_active
effect: RS-232 power_on/power_off and channel_on/channel_off commands are disabled.
- condition: channels_disabled_via_channel_off
effect: Channels will not respond to power_on; must be re-enabled via channel_on.
notes: |
RS-232 hardware does not support flow control. Sender/receiver must pace transmissions
to avoid packet loss. Commands must terminate with "!" and contain no spaces, CR, or LF.
# UNRESOLVED: no explicit electrical/voltage safety warnings in refined source
Notes
- Protocol is ASCII over RS-232 at 115200 8N1, no flow control. Every outbound command ends with "!".
- Responses terminate with "!" except
product_typeandproduct_versionwhich use a 2-digit length prefix (the count covers only the text, not the prefix or comma) and no trailing "!". - Channel-specific prefixes:
0A:(Channel A),0B:,0C:,0D:. Omitting the prefix applies the command to all channels and returns multi-line responses separated by CR. - Volume range 1-96 (max queryable via
get_volume_max!, min viaget_volume_min!). - Balance range L15 (max left) … 000 (center) … R15 (max right), single-step via
balance_left!/balance_right!. - Use either
power_on/power_offORchannel_on/channel_off, not both; mixing leaves channels unreachable from power commands. - Switching to independent L/R volume control resets per-channel balance to 0.
- Feature-gating by firmware: V1.31 for volume/mute/balance/channel-on-off, V2.43 for Signal Sense, V2.45 for input selection on D-models.
- Temperature query: 3 values on RKB-850/D850 (AB, CD, PSU); 4 values on RKB-8100/D8100 (AB, CD, PSU1, PSU2).
Provenance
source_domains:
- rotel.com
source_urls:
- "https://rotel.com/sites/default/files/product/rs232/RKB850%20Protocol.pdf"
retrieved_at: 2026-05-22T17:44:40.251Z
last_checked_at: 2026-06-02T17:23:57.386Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T17:23:57.386Z
matched_actions: 45
action_count: 45
confidence: medium
summary: "All 45 spec actions matched verbatim in source; transport parameters verified; full bidirectional coverage. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "RS-232 connector pinout / DE-9 wiring not stated in refined source"
- "command timing / inter-command delay not stated"
- "no explicit multi-step macro sequences described in source"
- "no explicit electrical/voltage safety warnings in refined source"
- "RS-232 connector type and pinout not stated in refined source"
- "inter-command timing / max command rate not stated"
- "behaviour when an invalid command is sent (NAK / silent drop) not stated"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0