Summary
Sony BRAVIA Professional Displays (KDX8500 series). Simple IP Control (SSIP) over TCP. Fixed 24-byte ASCII messages. Listens TCP 20060. Covers power, volume, mute, input select, picture mute, scene select, IR remote emulation, plus power/input/volume/mute push events.
Transport
protocols:
- tcp
addressing:
port: 20060
# UNRESOLVED: host/discovery mechanism not in source (monitor located on LAN)
auth:
type: none # inferred: no auth procedure in source
Traits
traits:
- powerable # inferred from setPowerStatus examples
- queryable # inferred from get* enquiry examples
- levelable # inferred from setAudioVolume example
- routable # inferred from setInput examples
Actions
# Message format: 24 bytes fixed.
# Bytes 0-1: header "*S" (0x2A 0x53)
# Byte 2: message type - C=Control, E=Enquiry, A=Answer, N=Notify
# Bytes 3-6: FourCC command (4 ASCII chars)
# Bytes 7-22: 16-char parameter (zero-padded decimal, or '#' pad for no-param)
# Byte 23: footer LF (0x0A)
# All command strings below exclude trailing LF (0x0A). Append LF when transmitting.
# Param padding rules: '#' = no-param placeholder; '0' = decimal zero-pad.
# --- Power (POWR) ---
- id: set_power_off
label: Power Standby (Off)
kind: action
command: "*SCPOWR0000000000000000"
params: []
- id: set_power_on
label: Power Active (On)
kind: action
command: "*SCPOWR0000000000000001"
params: []
- id: toggle_power_status
label: Toggle Power
kind: action
command: "*SCTPOW################"
params: []
# --- Audio Volume (VOLU) ---
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "*SCVOLU{volume_param_16}" # 16-char param: decimal zero-padded on left
params:
- name: volume_param_16
type: string
description: Volume decimal value right-aligned in 16-char field, zero-padded left. Source example for value 29 = "0000000000000029". Value range not stated in source.
# --- Audio Mute (AMUT) ---
- id: set_audio_mute_off
label: Audio Unmute
kind: action
command: "*SCAMUT0000000000000000"
params: []
- id: set_audio_mute_on
label: Audio Mute
kind: action
command: "*SCAMUT0000000000000001"
params: []
# --- Picture Mute (PMUT) ---
- id: set_picture_mute_off
label: Picture Mute Disable
kind: action
command: "*SCPMUT0000000000000000"
params: []
- id: set_picture_mute_on
label: Picture Mute Enable (Black Screen)
kind: action
command: "*SCPMUT0000000000000001"
params: []
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "*SCTPMU################"
params: []
# --- Input Select (INPT) ---
- id: set_input_hdmi
label: Set Input HDMI
kind: action
command: "*SCINPT000000010000{index_padded_4}"
params:
- name: index_padded_4
type: string
description: HDMI input index 1-9999, zero-padded to 4 digits.
- id: set_input_composite
label: Set Input Composite
kind: action
command: "*SCINPT000000030000{index_padded_4}"
params:
- name: index_padded_4
type: string
description: Composite input index 1-9999, zero-padded to 4 digits.
- id: set_input_component
label: Set Input Component
kind: action
command: "*SCINPT000000040000{index_padded_4}"
params:
- name: index_padded_4
type: string
description: Component input index 1-9999, zero-padded to 4 digits.
- id: set_input_screen_mirroring
label: Set Input Screen Mirroring
kind: action
command: "*SCINPT000000050000{index_padded_4}"
params:
- name: index_padded_4
type: string
description: Screen Mirroring input index 1-9999, zero-padded to 4 digits.
# --- Scene Select (SCEN) ---
- id: set_scene_select
label: Set Scene Setting
kind: action
command: "*SCSCEN{scene_param_16}" # 16-char param: scene name right-padded with '#'
params:
- name: scene_param_16
type: enum
description: "Case-sensitive scene name padded right with '#' to 16 chars. Values: 'auto############', 'auto24pSync#####', 'general##########'."
# --- IR Remote Codes (setIrccCode / IRCC) ---
# Source lists each IR button as a distinct row. Param = 16-char zero-padded decimal IR code.
- id: ircc_display
label: IR Display
kind: action
command: "*SCIRCC0000000000000005"
params: []
- id: ircc_home
label: IR Home
kind: action
command: "*SCIRCC0000000000000006"
params: []
- id: ircc_options
label: IR Options
kind: action
command: "*SCIRCC0000000000000007"
params: []
- id: ircc_return
label: IR Return
kind: action
command: "*SCIRCC0000000000000008"
params: []
- id: ircc_up
label: IR Up
kind: action
command: "*SCIRCC0000000000000009"
params: []
- id: ircc_down
label: IR Down
kind: action
command: "*SCIRCC0000000000000010"
params: []
- id: ircc_right
label: IR Right
kind: action
command: "*SCIRCC0000000000000011"
params: []
- id: ircc_left
label: IR Left
kind: action
command: "*SCIRCC0000000000000012"
params: []
- id: ircc_confirm
label: IR Confirm
kind: action
command: "*SCIRCC0000000000000013"
params: []
- id: ircc_red
label: IR Red
kind: action
command: "*SCIRCC0000000000000014"
params: []
- id: ircc_green
label: IR Green
kind: action
command: "*SCIRCC0000000000000015"
params: []
- id: ircc_yellow
label: IR Yellow
kind: action
command: "*SCIRCC0000000000000016"
params: []
- id: ircc_blue
label: IR Blue
kind: action
command: "*SCIRCC0000000000000017"
params: []
- id: ircc_num1
label: IR Num1
kind: action
command: "*SCIRCC0000000000000018"
params: []
- id: ircc_num2
label: IR Num2
kind: action
command: "*SCIRCC0000000000000019"
params: []
- id: ircc_num3
label: IR Num3
kind: action
command: "*SCIRCC0000000000000020"
params: []
- id: ircc_num4
label: IR Num4
kind: action
command: "*SCIRCC0000000000000021"
params: []
- id: ircc_num5
label: IR Num5
kind: action
command: "*SCIRCC0000000000000022"
params: []
- id: ircc_num6
label: IR Num6
kind: action
command: "*SCIRCC0000000000000023"
params: []
- id: ircc_num7
label: IR Num7
kind: action
command: "*SCIRCC0000000000000024"
params: []
- id: ircc_num8
label: IR Num8
kind: action
command: "*SCIRCC0000000000000025"
params: []
- id: ircc_num9
label: IR Num9
kind: action
command: "*SCIRCC0000000000000026"
params: []
- id: ircc_num0
label: IR Num0
kind: action
command: "*SCIRCC0000000000000027"
params: []
- id: ircc_volume_up
label: IR Volume Up
kind: action
command: "*SCIRCC0000000000000030"
params: []
- id: ircc_volume_down
label: IR Volume Down
kind: action
command: "*SCIRCC0000000000000031"
params: []
- id: ircc_mute
label: IR Mute
kind: action
command: "*SCIRCC0000000000000032"
params: []
- id: ircc_channel_up
label: IR Channel Up
kind: action
command: "*SCIRCC0000000000000033"
params: []
- id: ircc_channel_down
label: IR Channel Down
kind: action
command: "*SCIRCC0000000000000034"
params: []
- id: ircc_subtitle
label: IR Subtitle
kind: action
command: "*SCIRCC0000000000000035"
params: []
- id: ircc_dot
label: IR DOT
kind: action
command: "*SCIRCC0000000000000038"
params: []
- id: ircc_picture_off
label: IR Picture Off
kind: action
command: "*SCIRCC0000000000000050"
params: []
- id: ircc_wide
label: IR Wide
kind: action
command: "*SCIRCC0000000000000061"
params: []
- id: ircc_jump
label: IR Jump
kind: action
command: "*SCIRCC0000000000000062"
params: []
- id: ircc_sync_menu
label: IR Sync Menu
kind: action
command: "*SCIRCC0000000000000076"
params: []
- id: ircc_forward
label: IR Forward
kind: action
command: "*SCIRCC0000000000000077"
params: []
- id: ircc_play
label: IR Play
kind: action
command: "*SCIRCC0000000000000078"
params: []
- id: ircc_rewind
label: IR Rewind
kind: action
command: "*SCIRCC0000000000000079"
params: []
- id: ircc_prev
label: IR Prev
kind: action
command: "*SCIRCC0000000000000080"
params: []
- id: ircc_stop
label: IR Stop
kind: action
command: "*SCIRCC0000000000000081"
params: []
- id: ircc_next
label: IR Next
kind: action
command: "*SCIRCC0000000000000082"
params: []
- id: ircc_pause
label: IR Pause
kind: action
command: "*SCIRCC0000000000000084"
params: []
- id: ircc_flash_plus
label: IR Flash Plus
kind: action
command: "*SCIRCC0000000000000086"
params: []
- id: ircc_flash_minus
label: IR Flash Minus
kind: action
command: "*SCIRCC0000000000000087"
params: []
- id: ircc_tv_power
label: IR TV Power
kind: action
command: "*SCIRCC0000000000000098"
params: []
- id: ircc_audio
label: IR Audio
kind: action
command: "*SCIRCC0000000000000099"
params: []
- id: ircc_input
label: IR Input
kind: action
command: "*SCIRCC0000000000000101"
params: []
- id: ircc_sleep
label: IR Sleep
kind: action
command: "*SCIRCC0000000000000104"
params: []
- id: ircc_sleep_timer
label: IR Sleep Timer
kind: action
command: "*SCIRCC0000000000000105"
params: []
- id: ircc_video_2
label: IR Video 2
kind: action
command: "*SCIRCC0000000000000108"
params: []
- id: ircc_picture_mode
label: IR Picture Mode
kind: action
command: "*SCIRCC0000000000000110"
params: []
- id: ircc_demo_surround
label: IR Demo Surround
kind: action
command: "*SCIRCC0000000000000121"
params: []
- id: ircc_hdmi_1
label: IR HDMI 1
kind: action
command: "*SCIRCC0000000000000124"
params: []
- id: ircc_hdmi_2
label: IR HDMI 2
kind: action
command: "*SCIRCC0000000000000125"
params: []
- id: ircc_hdmi_3
label: IR HDMI 3
kind: action
command: "*SCIRCC0000000000000126"
params: []
- id: ircc_hdmi_4
label: IR HDMI 4
kind: action
command: "*SCIRCC0000000000000127"
params: []
- id: ircc_action_menu
label: IR Action Menu
kind: action
command: "*SCIRCC0000000000000129"
params: []
- id: ircc_help
label: IR Help
kind: action
command: "*SCIRCC0000000000000130"
params: []
# --- Enquiries (E type, kind: query) ---
- id: get_power_status
label: Get Power Status
kind: query
command: "*SEPOWR################"
params: []
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "*SEVOLU################"
params: []
- id: get_audio_mute
label: Get Audio Mute
kind: query
command: "*SEAMUT################"
params: []
- id: get_input
label: Get Input
kind: query
command: "*SEINPT################"
params: []
- id: get_picture_mute
label: Get Picture Mute
kind: query
command: "*SEPMUT################"
params: []
- id: get_scene_setting
label: Get Scene Setting
kind: query
command: "*SESCEN################"
params: []
- id: get_broadcast_address
label: Get Broadcast Address
kind: query
command: "*SEBADReth0############" # param = interface name "eth0" padded right with '#'
params: []
- id: get_mac_address
label: Get MAC Address
kind: query
command: "*SEMADReth0############"
params: []
Feedbacks
# Answer (A type) messages from monitor. Param 16 chars.
# "0000000000000000" = success/result. "FFFFFFFFFFFFFFFF" = error. Other = value.
- id: power_state
type: enum
values: ["off", "on"]
description: Response to getPowerStatus. Off = "*SAPOWR0000000000000000"; On = "*SAPOWR0000000000000001"; Error = "*SAPOWRFFFFFFFFFFFFFFFF".
- id: audio_volume_value
type: integer
description: Response to getAudioVolume. Decimal value in 16-char zero-padded field. Range not stated in source.
- id: audio_mute_state
type: enum
values: ["unmuted", "muted"]
description: Response to getAudioMute. Unmuted = param 0...0; Muted = param 0...1; Error = param F...F.
- id: input_source
type: enum
values: ["hdmi", "composite", "component", "screen_mirroring"]
description: Response to getInput. Codes - HDMI=00000001, Composite=00000003, Component=00000004, Screen Mirroring=00000005, each followed by 4-char index 1-9999.
- id: picture_mute_state
type: enum
values: ["disabled", "enabled"]
description: Response to getPictureMute. Disabled = param 0...0; Enabled = param 0...1.
- id: scene_setting_value
type: string
description: Response to getSceneSetting. Scene name string in 16-char field; "N...N" (16 N's) = not available for current input.
- id: broadcast_address_value
type: string
description: Response to getBroadcastAddress. IPv4 broadcast address padded right with '#' (e.g. "192.168.0.14####").
- id: mac_address_value
type: string
description: Response to getMacAddress. MAC address string padded right with '#'.
Variables
# All settable parameters are exposed as parameterized Actions above
# (set_audio_volume, set_scene_select, set_input_*).
# UNRESOLVED: no additional settable variables documented in source.
Events
# Unsolicited Notify (N type) messages pushed by monitor to client.
- id: power_change_event
label: Power Change Notification
type: notification
command: "*SNPOWR0000000000000000" # off=...0000, on=...0001
params: []
description: Pushed on power state change. Off = "*SNPOWR0000000000000000"; On = "*SNPOWR0000000000000001".
- id: input_change_event
label: Input Change Notification
type: notification
command: "*SNINPT000000010000XXXX" # XXXX = input index 1-9999
params: []
description: Pushed on input change. Codes - HDMI=00000001, Composite=00000003, Component=00000004, Screen Mirroring=00000005.
- id: volume_change_event
label: Volume Change Notification
type: notification
command: "*SNVOLU{volume_param_16}"
params:
- name: volume_param_16
type: string
description: New volume value in 16-char zero-padded field.
description: Pushed on volume change.
- id: mute_change_event
label: Mute Change Notification
type: notification
command: "*SNAMUT0000000000000000" # unmute=...0000, mute=...0001
params: []
description: Pushed on mute state change. Unmute = "*SNAMUT0000000000000000"; Mute = "*SNAMUT0000000000000001".
- id: picture_mute_change_event
label: Picture Mute Change Notification
type: notification
command: "*SNPMUT0000000000000000" # enabled=...0000, disabled=...0001 (per source)
params: []
description: Pushed on picture mute change. Source: param 0...0 = picture mute ENABLED; param 0...1 = picture mute DISABLED (note inverted semantics vs other commands).
Macros
# UNRESOLVED: no multi-step sequences described in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or
# power-on sequencing requirements. Monitor setup steps (enable Remote Device
# Control, enable Simple IP Control) are configuration, not safety interlocks.
Notes
- Protocol name: SSIP (Simple IP Control). Sony BRAVIA Professional Displays proprietary.
- All messages exactly 24 bytes including trailing LF (0x0A). Implementations must append LF.
- Parameter padding: '#' = placeholder for no-param control/enquiry messages; '0' = decimal zero-pad for numeric values.
- Answer success = 16 '0' chars; Answer error = 16 'F' chars; "Not Found" / "Not available" = 16 'N' chars.
- Required monitor setup: [Settings] → [Network & Internet] → [Remote device settings] → [Control remotely] ON; then [Settings] → [Network & Internet] → [Home network] → [IP control] → [Simple IP control] ON.
- EU RED-DA models: 3 specification tiers; settings and available commands differ. Details not in this source.
- Scene name strings are case-sensitive; right-pad with '#'.
firePictureMuteChangeNotify semantics are inverted relative to other PMUT messages (0=mute on, 1=mute off) per source rows 201-202.
Provenance
source_domains:
- pro-bravia.sony.net
- pro.sony
source_urls:
- https://pro-bravia.sony.net/remote-display-control/simple-ip-control
- https://pro-bravia.sony.net/remote-display-control/ircc-ip
- https://pro-bravia.sony.net/remote-display-control/rest-api/reference
- https://pro-bravia.sony.net/remote-display-control/rest-api/structure
- https://pro.sony/s3/2026/03/17145824/IPRemote_UserGuide_en.pdf
retrieved_at: 2026-06-20T15:46:51.806Z
last_checked_at: 2026-06-22T11:50:26.798Z
Verification Summary
verdict: verified
checked_at: 2026-06-22T11:50:26.798Z
matched_actions: 79
action_count: 79
confidence: medium
summary: "All 79 spec actions matched to source; wire-level tokens verified; transport parameters confirmed; IR code table fully represented. (10 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact X8500 model variants (B/C/F/G/H) not enumerated in source. Firmware version not stated. EU RED-DA variants alter available commands but specifics undocumented here."
- "host/discovery mechanism not in source (monitor located on LAN)"
- "no additional settable variables documented in source."
- "no multi-step sequences described in source."
- "source contains no safety warnings, interlock procedures, or"
- "exact model variants covered (X8500B/C/F/G/H) not stated."
- "volume value range (0-99 vs 0-100) not stated."
- "LAN discovery / addressing mechanism not documented."
- "maximum concurrent TCP connections not stated."
- "command rate-limit / timing constraints not stated."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0