Summary
Spec covers Sony BRAVIA Professional Displays Simple IP Control (SSIP) over TCP for the KD-XH9288 series. Each message is a fixed 24-byte frame consisting of a 2-byte header, 1-byte message type, 4-byte Four-CC command, 16-byte parameter, and 1-byte LF footer. No login or authentication is required; the monitor must have Remote Device Control and Simple IP Control enabled.
Transport
protocols:
- tcp
addressing:
port: 20060
auth:
type: none # inferred: no auth procedure in source
Traits
- powerable # inferred from setPowerStatus / togglePowerStatus / firePowerChange
- routable # inferred from setInput / getInput / fireInputChange
- queryable # inferred from getPowerStatus, getInput, getAudioVolume, getAudioMute, getPictureMute, getSceneSetting
- levelable # inferred from setAudioVolume / getAudioVolume
Actions
# Frame template for all actions:
# 0x2A 0x53 <MsgType> <FourCC> <Param 16 bytes> 0x0A
# MsgType: C = 0x43 (control), E = 0x45 (enquiry), N = 0x4E (notify), A = 0x41 (answer)
# All frames are 24 bytes total. Parameters are ASCII '0'/'F'/'#' or X-pad-by-'#'.
# --- Power ---
- id: set_power_status
label: Set Power Status
kind: action
command: "*SCPOWR0000000000000000\n" # 0=Standby, 1=Active
params:
- name: state
type: integer
values: [0, 1]
description: "0 = Standby (Off), 1 = Active (On); padded as 16 ASCII chars ending in 0 or 1"
- id: get_power_status
label: Get Power Status
kind: query
command: "*SEPOWR################\n"
params: []
- id: toggle_power_status
label: Toggle Power Status
kind: action
command: "*SCTPOW################\n"
params: []
# --- IR codes (remote control emul) ---
- id: set_ircc_code
label: Send IR Remote Code
kind: action
command: "*SCIRCC{code}##########\n"
params:
- name: code
type: integer
description: "IR code decimal value, 16 ASCII chars, right-padded with '0' (see IR Commands table)"
# IR sub-commands (one per documented code, all use C IRCC with the code in the last 2 digits)
- id: ir_display
label: IR Display
kind: action
command: "*SCIRCC0000000000000005\n"
params: []
- id: ir_home
label: IR Home
kind: action
command: "*SCIRCC0000000000000006\n"
params: []
- id: ir_options
label: IR Options
kind: action
command: "*SCIRCC0000000000000007\n"
params: []
- id: ir_return
label: IR Return
kind: action
command: "*SCIRCC0000000000000008\n"
params: []
- id: ir_up
label: IR Up
kind: action
command: "*SCIRCC0000000000000009\n"
params: []
- id: ir_down
label: IR Down
kind: action
command: "*SCIRCC0000000000000010\n"
params: []
- id: ir_right
label: IR Right
kind: action
command: "*SCIRCC0000000000000011\n"
params: []
- id: ir_left
label: IR Left
kind: action
command: "*SCIRCC0000000000000012\n"
params: []
- id: ir_confirm
label: IR Confirm
kind: action
command: "*SCIRCC0000000000000013\n"
params: []
- id: ir_red
label: IR Red
kind: action
command: "*SCIRCC0000000000000014\n"
params: []
- id: ir_green
label: IR Green
kind: action
command: "*SCIRCC0000000000000015\n"
params: []
- id: ir_yellow
label: IR Yellow
kind: action
command: "*SCIRCC0000000000000016\n"
params: []
- id: ir_blue
label: IR Blue
kind: action
command: "*SCIRCC0000000000000017\n"
params: []
- id: ir_num1
label: IR Num 1
kind: action
command: "*SCIRCC0000000000000018\n"
params: []
- id: ir_num2
label: IR Num 2
kind: action
command: "*SCIRCC0000000000000019\n"
params: []
- id: ir_num3
label: IR Num 3
kind: action
command: "*SCIRCC0000000000000020\n"
params: []
- id: ir_num4
label: IR Num 4
kind: action
command: "*SCIRCC0000000000000021\n"
params: []
- id: ir_num5
label: IR Num 5
kind: action
command: "*SCIRCC0000000000000022\n"
params: []
- id: ir_num6
label: IR Num 6
kind: action
command: "*SCIRCC0000000000000023\n"
params: []
- id: ir_num7
label: IR Num 7
kind: action
command: "*SCIRCC0000000000000024\n"
params: []
- id: ir_num8
label: IR Num 8
kind: action
command: "*SCIRCC0000000000000025\n"
params: []
- id: ir_num9
label: IR Num 9
kind: action
command: "*SCIRCC0000000000000026\n"
params: []
- id: ir_num0
label: IR Num 0
kind: action
command: "*SCIRCC0000000000000027\n"
params: []
- id: ir_volume_up
label: IR Volume Up
kind: action
command: "*SCIRCC0000000000000030\n"
params: []
- id: ir_volume_down
label: IR Volume Down
kind: action
command: "*SCIRCC0000000000000031\n"
params: []
- id: ir_mute
label: IR Mute
kind: action
command: "*SCIRCC0000000000000032\n"
params: []
- id: ir_channel_up
label: IR Channel Up
kind: action
command: "*SCIRCC0000000000000033\n"
params: []
- id: ir_channel_down
label: IR Channel Down
kind: action
command: "*SCIRCC0000000000000034\n"
params: []
- id: ir_subtitle
label: IR Subtitle
kind: action
command: "*SCIRCC0000000000000035\n"
params: []
- id: ir_dot
label: IR DOT
kind: action
command: "*SCIRCC0000000000000038\n"
params: []
- id: ir_picture_off
label: IR Picture Off
kind: action
command: "*SCIRCC0000000000000050\n"
params: []
- id: ir_wide
label: IR Wide
kind: action
command: "*SCIRCC0000000000000061\n"
params: []
- id: ir_jump
label: IR Jump
kind: action
command: "*SCIRCC0000000000000062\n"
params: []
- id: ir_sync_menu
label: IR Sync Menu
kind: action
command: "*SCIRCC0000000000000076\n"
params: []
- id: ir_forward
label: IR Forward
kind: action
command: "*SCIRCC0000000000000077\n"
params: []
- id: ir_play
label: IR Play
kind: action
command: "*SCIRCC0000000000000078\n"
params: []
- id: ir_rewind
label: IR Rewind
kind: action
command: "*SCIRCC0000000000000079\n"
params: []
- id: ir_prev
label: IR Prev
kind: action
command: "*SCIRCC0000000000000080\n"
params: []
- id: ir_stop
label: IR Stop
kind: action
command: "*SCIRCC0000000000000081\n"
params: []
- id: ir_next
label: IR Next
kind: action
command: "*SCIRCC0000000000000082\n"
params: []
- id: ir_pause
label: IR Pause
kind: action
command: "*SCIRCC0000000000000084\n"
params: []
- id: ir_flash_plus
label: IR Flash Plus
kind: action
command: "*SCIRCC0000000000000086\n"
params: []
- id: ir_flash_minus
label: IR Flash Minus
kind: action
command: "*SCIRCC0000000000000087\n"
params: []
- id: ir_tv_power
label: IR TV Power
kind: action
command: "*SCIRCC0000000000000098\n"
params: []
- id: ir_audio
label: IR Audio
kind: action
command: "*SCIRCC0000000000000099\n"
params: []
- id: ir_input
label: IR Input
kind: action
command: "*SCIRCC0000000000000101\n"
params: []
- id: ir_sleep
label: IR Sleep
kind: action
command: "*SCIRCC0000000000000104\n"
params: []
- id: ir_sleep_timer
label: IR Sleep Timer
kind: action
command: "*SCIRCC0000000000000105\n"
params: []
- id: ir_video_2
label: IR Video 2
kind: action
command: "*SCIRCC0000000000000108\n"
params: []
- id: ir_picture_mode
label: IR Picture Mode
kind: action
command: "*SCIRCC0000000000000110\n"
params: []
- id: ir_demo_surround
label: IR Demo Surround
kind: action
command: "*SCIRCC0000000000000121\n"
params: []
- id: ir_hdmi_1
label: IR HDMI 1
kind: action
command: "*SCIRCC0000000000000124\n"
params: []
- id: ir_hdmi_2
label: IR HDMI 2
kind: action
command: "*SCIRCC0000000000000125\n"
params: []
- id: ir_hdmi_3
label: IR HDMI 3
kind: action
command: "*SCIRCC0000000000000126\n"
params: []
- id: ir_hdmi_4
label: IR HDMI 4
kind: action
command: "*SCIRCC0000000000000127\n"
params: []
- id: ir_action_menu
label: IR Action Menu
kind: action
command: "*SCIRCC0000000000000129\n"
params: []
- id: ir_help
label: IR Help
kind: action
command: "*SCIRCC0000000000000130\n"
params: []
# --- Audio Volume ---
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "*SCVOLU{volume}########\n"
params:
- name: volume
type: integer
description: "Volume value, decimal, right-aligned in 16 ASCII chars, left-padded with '0' (e.g. 41 = 0000000000000029)"
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "*SEVOLU################\n"
params: []
# --- Audio Mute ---
- id: set_audio_mute
label: Set Audio Mute
kind: action
command: "*SCAMUT00000000000000{mute}\n"
params:
- name: mute
type: integer
values: [0, 1]
description: "0 = Unmute, 1 = Mute"
- id: get_audio_mute
label: Get Audio Mute
kind: query
command: "*SEAMUT################\n"
params: []
# --- Input ---
- id: set_input
label: Set Input
kind: action
command: "*SCINPT0000000000{src}00{n}####\n"
params:
- name: src
type: integer
values: [1, 3, 4, 5]
description: "Source type: 1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring"
- name: n
type: integer
description: "Source instance number, 1-9999, decimal, right-aligned in 4 ASCII chars"
- id: get_input
label: Get Current Input
kind: query
command: "*SEINPT################\n"
params: []
# --- Picture Mute ---
- id: set_picture_mute
label: Set Picture Mute
kind: action
command: "*SCPMUT00000000000000{state}\n"
params:
- name: state
type: integer
values: [0, 1]
description: "0 = Picture mute off, 1 = Picture mute on"
- id: get_picture_mute
label: Get Picture Mute
kind: query
command: "*SEPMUT################\n"
params: []
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "*SCTPMU################\n"
params: []
# --- Scene Setting ---
- id: set_scene_setting
label: Set Scene Setting
kind: action
command: "*SCSCEN{pad}############\n"
params:
- name: pad
type: string
description: "Scene name: 'auto', 'auto24pSync', or 'general'; case-sensitive, right-padded with '#' to 16 chars total"
- id: get_scene_setting
label: Get Scene Setting
kind: query
command: "*SESCEN################\n"
params: []
# --- Network info (EU-model footnoted; behavior elsewhere UNRESOLVED) ---
- id: get_broadcast_address
label: Get Broadcast Address
kind: query
command: "*SEBADReth0############\n"
params:
- name: interface
type: string
values: ["eth0"]
description: "Interface name; only 'eth0' documented in source"
- id: get_mac_address
label: Get MAC Address
kind: query
command: "*SEMADReth0############\n"
params:
- name: interface
type: string
values: ["eth0"]
description: "Interface name; only 'eth0' documented in source"
Feedbacks
- id: power_state
type: enum
values: [standby, active]
description: "Returned by getPowerStatus answer (0=Standby, 1=Active) and by firePowerChange notify (0=powering off, 1=powering on)"
- id: audio_volume
type: integer
description: "Returned by getAudioVolume answer as 16 ASCII decimal chars; also broadcast by fireVolumeChange"
- id: audio_mute_state
type: enum
values: [unmuted, muted]
description: "Returned by getAudioMute answer (0=Unmuted, 1=Muted) and by fireMuteChange notify (0=unmuting, 1=muting)"
- id: current_input
type: object
description: "Returned by getInput answer: 8-digit source type (00000001 HDMI, 00000003 Composite, 00000004 Component, 00000005 Screen Mirroring) + 4-digit source instance 0001-9999"
- id: picture_mute_state
type: enum
values: [disabled, enabled]
description: "Returned by getPictureMute answer (0=Disabled, 1=Enabled); firePictureMuteChange uses 0=enabled, 1=disabled (source has this asymmetry)"
- id: scene_setting
type: string
description: "Returned by getSceneSetting answer as a Scene name string"
- id: control_result
type: enum
values: [success, not_found, error]
description: "Generic A-frame (0x41) feedback: '0000000000000000' = success, 'NNNNNNNNNNNNNNNN' = not found/not available, 'FFFFFFFFFFFFFFFF' = error"
- id: broadcast_address
type: string
description: "Returned by getBroadcastAddress answer: IPv4 address, right-padded with '#' to 16 chars"
- id: mac_address
type: string
description: "Returned by getMacAddress answer: MAC address, right-padded with '#' to 16 chars"
Variables
# UNRESOLVED: no settable parameter values outside the discrete actions above are documented in the source.
Events
# Notify frames (MsgType N = 0x4E) are unsolicited push from monitor to client.
- id: fire_power_change
type: enum
values: [powering_off, powering_on]
description: "Notify N-POWR: 0 = power off, 1 = power on"
- id: fire_input_change
type: object
description: "Notify N-INPT: 8-digit source type + 4-digit source instance"
- id: fire_volume_change
type: integer
description: "Notify N-VOLU: new volume value (16 ASCII decimal chars)"
- id: fire_mute_change
type: enum
values: [unmuting, muting]
description: "Notify N-AMUT: 0 = unmuting, 1 = muting"
- id: fire_picture_mute_change
type: enum
values: [enabled, disabled]
description: "Notify N-PMUT: 0 = picture mute enabled, 1 = picture mute disabled"
Macros
# UNRESOLVED: no multi-step sequences described in the source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlocks, or power-on sequencing requirements.
Notes
- All frames are exactly 24 bytes. Outbound ASCII frames above show literal '\n' as the byte 0x0A footer; implementations must send the LF byte, not a literal backslash-n.
- Header bytes are fixed 0x2A ('*') and 0x53 ('S'). Footer is fixed 0x0A (LF).
- Message Type byte: 0x43 'C' (control), 0x45 'E' (enquiry), 0x41 'A' (answer), 0x4E 'N' (notify).
- A-frame (answer) parameter values: 16 ASCII '0' chars = success; 16 ASCII 'F' chars = error; 16 ASCII 'N' chars = not found / not available for current input. Specific commands may encode the result in the parameter (e.g. POWR 0/1, INPT src+number).
- For setInput, the source documents a byte-7 to byte-22 layout of
000000000{src}00{n}####(7 leading zeros, 1-digit src at byte 14, 2 zeros, 4-digit n, then 4 '#' placeholders) — implementations should pad trailing bytes per the source'ssetInputrow. - EU models only:
getBroadcastAddressandgetMacAddresscarry an EU-model footnote. Whether they are available on non-EU regional variants is not stated in the source. - EU area models have 3 specification variants per RED-DA compliance; per-variant command availability is not detailed in the source. See https://pro-bravia.sony.net/setup/device-settings/red-da/ for the official per-spec list.
- Monitor must have [Settings]→[Network & Internet]→[Remote device settings]→[Control remotely] and [Settings]→[Network & Internet]→[Home network]→[IP control]→[Simple IP control] both enabled before commands are accepted.
- SSIP stands for the BRAVIA Professional Displays proprietary protocol (per the source's "Simple and Efficient Command Format" section).
Provenance
source_domains:
- pro-bravia.sony.net
source_urls:
- https://pro-bravia.sony.net/remote-display-control/simple-ip-control
- https://pro-bravia.sony.net/remote-display-control/rest-api/reference
- https://pro-bravia.sony.net/remote-display-control/serial-control/command
- https://pro-bravia.sony.net
retrieved_at: 2026-06-10T01:17:06.564Z
last_checked_at: 2026-06-10T07:44:38.155Z
Verification Summary
verdict: verified
checked_at: 2026-06-10T07:44:38.155Z
matched_actions: 74
action_count: 74
confidence: medium
summary: "All 74 spec actions matched verbatim in source with correct FourCC codes and IR parameter values; all notify commands represented in Feedbacks/Events; transport port 20060 confirmed. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "EU models have 3 specification variants per RED-DA compliance; per-variant command availability is not detailed in the source."
- "getBroadcastAddress` and `getMacAddress` are footnoted as EU-model variants in the source; behavior on other regional models is unspecified."
- "no settable parameter values outside the discrete actions above are documented in the source."
- "no multi-step sequences described in the source."
- "source contains no safety warnings, interlocks, or power-on sequencing requirements."
- "firmware version compatibility not stated in source."
- "baud rate / data bits / parity / stop bits are not applicable — protocol is TCP/IP, not serial."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0