Summary
Sony Bravia professional display control via Sony's "Simple IP Control" protocol: 24-byte fixed-length TCP messages on port 20060. Commands cover power, input, volume, mute, picture mute, scene setting, IR pass-through, and network address queries. The protocol uses a Four-CC command name and a 16-byte parameter block; messages begin with *S and end with LF (0x0A).
Transport
protocols:
- tcp
addressing:
port: 20060
auth:
type: none # inferred: no auth procedure in source
Traits
# powerable: setPowerStatus / getPowerStatus / togglePowerStatus
# queryable: getPowerStatus, getAudioVolume, getAudioMute, getInput, getPictureMute, getSceneSetting, getBroadcastAddress, getMacAddress
# routable: setInput / getInput (HDMI/Composite/Component/Screen Mirroring)
# levelable: setAudioVolume / getAudioVolume
powerable: true
queryable: true
routable: true
levelable: true
Actions
# All messages are exactly 24 bytes:
# byte 0 : 0x2A '*' (fixed header, byte 0)
# byte 1 : 0x53 'S' (fixed header, byte 1)
# byte 2 : Message Type - 0x43 'C' Control, 0x45 'E' Enquiry, 0x41 'A' Answer, 0x4E 'N' Notify
# byte 3-6 : FourCC command name (ASCII)
# byte 7-22 : 16-byte parameter field
# byte 23 : 0x0A LF (fixed footer)
# Source example (Power Off, 24 bytes):
# *SCPOWR0000000000000000<LF>
# ----------------- setIrccCode (Control, IR pass-through) -----------------
- id: set_ircc_code
label: Send IR Remote Control Code
kind: action
command: "*SCIRCC{ircc_param_padded_16_bytes}\n" # 0x2A 0x53 0x43 IRCC <16-byte IR code param> 0x0A
params:
- name: ircc_code
type: enum
description: |
IR remote code, encoded as ASCII decimal in the right-most two bytes
of the 16-byte param field (left-padded with '0' to 16 bytes total).
Valid values from source: Display, Home, Options, Return, Up, Down,
Right, Left, Confirm, Red, Green, Yellow, Blue, Num1..Num0,
Volume Up, Volume Down, Mute, Channel Up, Channel Down, Subtitle,
DOT, Picture Off, Wide, Jump, Sync Menu, Forward, Play, Rewind,
Prev, Stop, Next, Pause, Flash Plus, Flash Minus, TV Power, Audio,
Input, Sleep, Sleep Timer, Video 2, Picture Mode, Demo Surround,
HDMI 1..HDMI 4, Action Menu, Help.
# ----------------- setPowerStatus (Control) -----------------
- id: set_power_status
label: Set Power Status
kind: action
command: "*SCPOWR000000000000000{value}\n" # 0x2A 0x53 0x43 POWR 0..0{value} 0x0A
params:
- name: value
type: enum
values: [0, 1]
description: "0 = Standby (Off), 1 = Active (On). Encoded as ASCII digit in the final byte of the 16-byte param field."
# ----------------- getPowerStatus (Enquiry) -----------------
- id: get_power_status
label: Get Power Status
kind: query
command: "*SEPOWR################\n" # 0x2A 0x53 0x45 POWR <16 '#' placeholders> 0x0A
params: []
notes: |
Source: '*SEPOWR' + 16-byte param field (per Enquiry definition, param field
is filled with '#' = 0x23). Response: '*SAPOWR' + 16-byte answer payload
where final byte is '0' (Standby) or '1' (Active), or all 'F' on error.
# ----------------- togglePowerStatus (Control) -----------------
- id: toggle_power_status
label: Toggle Power Status
kind: action
command: "*SCTPOW################\n" # 0x2A 0x53 0x43 TPOW <16 '#' param> 0x0A
params: []
notes: "Param field = '#' per source. Response: '*SATPOW' + 16-byte answer ('0...0' success, 'F...F' error)."
# ----------------- setAudioVolume (Control) -----------------
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "*SCVOLU{volume_padded_16_bytes}\n" # 0x2A 0x53 0x43 VOLU <16-byte right-aligned decimal volume> 0x0A
params:
- name: volume
type: integer
description: |
Audio volume level, encoded as ASCII decimal digits right-aligned in
the 16-byte param field, left-padded with '0'. Source example:
volume 41 decimal = '0000000000000029' (the 2 ASCII chars '2' '9' in
the final two bytes). UNRESOLVED: valid min/max range not stated.
# ----------------- getAudioVolume (Enquiry) -----------------
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "*SEVOLU################\n" # 0x2A 0x53 0x45 VOLU <16 '#'> 0x0A
params: []
notes: "Response: '*SAVOLU' + 16-byte right-aligned decimal volume value, or 'F...F' on error."
# ----------------- setAudioMute (Control) -----------------
- id: set_audio_mute
label: Set Audio Mute
kind: action
command: "*SCAMUT000000000000000{value}\n" # 0x2A 0x53 0x43 AMUT 0..0{value} 0x0A
params:
- name: value
type: enum
values: [0, 1]
description: "0 = Unmute, 1 = Mute. ASCII digit in the final byte of the 16-byte param field."
# ----------------- getAudioMute (Enquiry) -----------------
- id: get_audio_mute
label: Get Audio Mute
kind: query
command: "*SEAMUT################\n" # 0x2A 0x53 0x45 AMUT <16 '#'> 0x0A
params: []
notes: "Response: '*SAAMUT' + 16-byte answer; final byte '0' = Not Muted, '1' = Muted, all 'F' = Error."
# ----------------- setInput (Control) -----------------
- id: set_input
label: Set Input
kind: action
command: "*SCINPT0000000000{input_type}000{port_padded}\n" # 0x2A 0x53 0x43 INPT 0..0{type} 0..0{port} 0x0A
params:
- name: input_type
type: enum
values: ["1", "3", "4", "5"]
description: "ASCII digit at offset 13 (0-indexed) of the 16-byte param field. 1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring."
- name: port
type: integer
description: "1-9999, encoded as ASCII decimal right-aligned in the final 4 bytes of the 16-byte param field (offsets 19-22)."
# ----------------- getInput (Enquiry) -----------------
- id: get_input
label: Get Current Input
kind: query
command: "*SEINPT################\n" # 0x2A 0x53 0x45 INPT <16 '#'> 0x0A
params: []
notes: "Response: '*SAINPT' + 16-byte answer with input_type digit at offset 13 ('1'/'3'/'4'/'5') and port (1-9999) in the final 4 bytes. 'N...N' = Not Found, 'F...F' = Error."
# ----------------- setPictureMute (Control) -----------------
- id: set_picture_mute
label: Set Picture Mute
kind: action
command: "*SCPMUT000000000000000{value}\n" # 0x2A 0x53 0x43 PMUT 0..0{value} 0x0A
params:
- name: value
type: enum
values: [0, 1]
description: "0 = Picture mute off (disabled), 1 = Picture mute on (screen black). ASCII digit in the final byte."
# ----------------- getPictureMute (Enquiry) -----------------
- id: get_picture_mute
label: Get Picture Mute
kind: query
command: "*SEPMUT################\n" # 0x2A 0x53 0x45 PMUT <16 '#'> 0x0A
params: []
notes: "Response: '*SAPMUT' + 16-byte answer; final byte '0' = Disabled, '1' = Enabled, 'F...F' = Error."
# ----------------- togglePictureMute (Control) -----------------
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "*SCTPMU################\n" # 0x2A 0x53 0x43 TPMU <16 '#'> 0x0A
params: []
notes: "Source describes TPMU as the FourCC. Param field = '#'. Response: '*SATPMU' + 16-byte answer ('0...0' success, 'F...F' error)."
# ----------------- setSceneSetting (Control) -----------------
- id: set_scene_setting
label: Set Scene Setting
kind: action
command: "*SCSCEN{scene_padded_16_bytes}\n" # 0x2A 0x53 0x43 SCEN <16-byte scene string> 0x0A
params:
- name: scene
type: enum
values: ["auto", "auto24pSync", "general"]
description: |
Case-sensitive scene name, ASCII, right-padded with '#' to fill the
16-byte param field. Source example: 'auto24pSync#####' (5 trailing
'#' = 0x23). 16-byte param field holds the 16 ASCII chars.
# ----------------- getSceneSetting (Enquiry) -----------------
- id: get_scene_setting
label: Get Scene Setting
kind: query
command: "*SESCEN################\n" # 0x2A 0x53 0x45 SCEN <16 '#'> 0x0A
params: []
notes: "Response: '*SASCEN' + 16-byte answer with current scene value, or 'N...N' (not available for current input), or 'F...F' (error)."
# ----------------- getBroadcastAddress (Enquiry) -----------------
- id: get_broadcast_address
label: Get Broadcast IPv4 Address
kind: query
command: "*SEBADREth0##########\n" # 0x2A 0x53 0x45 BADR "Eth0" + 10 '#' 0x0A
params:
- name: interface
type: enum
values: ["Eth0"]
description: "Interface tag, ASCII, in bytes 7-10 of the param field. Source example: 'Eth0'. Pad rest of 16-byte param with '#'."
notes: "Response: '*SABADR' + 16-byte answer containing IPv4 broadcast address, ASCII, right-padded with '#'. 'F...F' = Error."
# ----------------- getMacAddress (Enquiry) -----------------
- id: get_mac_address
label: Get MAC Address
kind: query
command: "*SEMADREth0##########\n" # 0x2A 0x53 0x45 MADR "Eth0" + 10 '#' 0x0A
params:
- name: interface
type: enum
values: ["Eth0"]
description: "Interface tag, ASCII, in bytes 7-10 of the param field. Source example: 'Eth0'. Pad rest of 16-byte param with '#'."
notes: "Response: '*SAMADR' + 16-byte answer with MAC address, ASCII, right-padded with '#'. 'F...F' = Error."
Feedbacks
- id: power_status
type: enum
values: [standby, active]
source: getPowerStatus answer final byte ('0' = standby, '1' = active)
- id: audio_volume
type: integer
source: getAudioVolume answer - right-aligned decimal in 16-byte param field
- id: audio_mute
type: enum
values: [unmuted, muted]
source: getAudioMute answer final byte ('0' = unmuted, '1' = muted)
- id: current_input
type: object
source: getInput answer - input_type digit at param offset 13 ('1'=HDMI, '3'=Composite, '4'=Component, '5'=Screen Mirroring) plus port 1-9999 in final 4 bytes
- id: picture_mute
type: enum
values: [disabled, enabled]
source: getPictureMute answer final byte ('0' = disabled, '1' = enabled)
- id: scene_setting
type: string
source: getSceneSetting answer - ASCII string in 16-byte param field (e.g. 'auto', 'auto24pSync', 'general')
- id: broadcast_address
type: string
source: getBroadcastAddress answer - IPv4 broadcast address, ASCII, e.g. '192.168.0.14'
- id: mac_address
type: string
source: getMacAddress answer - MAC address, ASCII, right-padded with '#'
Variables
- id: ircc_code
type: enum
description: |
IR remote code passed through setIrccCode. Encoded as ASCII decimal
right-aligned in the final two bytes of the 16-byte param field.
Source-defined values (one per row in the IR Commands table):
Display=5, Home=6, Options=7, Return=8, Up=9, Down=10, Right=11, Left=12,
Confirm=13, Red=14, Green=15, Yellow=16, Blue=17, Num1=18, Num2=19,
Num3=20, Num4=21, Num5=22, Num6=23, Num7=24, Num8=25, Num9=26, Num0=27,
Volume Up=30, Volume Down=31, Mute=32, Channel Up=33, Channel Down=34,
Subtitle=35, DOT=38, Picture Off=50, Wide=61, Jump=62, Sync Menu=76,
Forward=77, Play=78, Rewind=79, Prev=80, Stop=81, Next=82, Pause=84,
Flash Plus=86, Flash Minus=87, TV Power=98, Audio=99, Input=101,
Sleep=104, Sleep Timer=105, Video 2=108, Picture Mode=110,
Demo Surround=121, HDMI 1=124, HDMI 2=125, HDMI 3=126, HDMI 4=127,
Action Menu=129, Help=130.
- id: audio_volume
type: integer
description: "UNRESOLVED: valid range not stated in source. Source example: 41 decimal = '0000000000000029' in the 16-byte param field."
- id: input_port
type: integer
range: "1-9999"
description: "Input port number for setInput / reported by getInput / fireInputChange. Encoded as ASCII decimal in the final 4 bytes of the 16-byte param field."
Events
# All Notify (0x4E 'N') messages: header 0x2A 0x53, type 0x4E, fourCC, 16-byte param, footer 0x0A.
- id: power_change
source: "0x2A 0x53 0x4E POWR <16 bytes> 0x0A"
description: "Sent when power state changes. Final byte of param: '0' = powering off, '1' = powering on."
- id: input_change
source: "0x2A 0x53 0x4E INPT <16 bytes> 0x0A"
description: "Sent when input changes. Final byte '0' (transition/no port) or input_type digit at offset 13 plus 1-9999 port in final 4 bytes."
- id: volume_change
source: "0x2A 0x53 0x4E VOLU <16 bytes> 0x0A"
description: "Sent when volume changes. 16-byte param contains the new volume value (right-aligned decimal)."
- id: mute_change
source: "0x2A 0x53 0x4E AMUT <16 bytes> 0x0A"
description: "Sent when mute state changes. Final byte: '0' = unmuting, '1' = muting."
- id: picture_mute_change
source: "0x2A 0x53 0x4E PMUT <16 bytes> 0x0A"
description: "Sent when picture mute state changes. Final byte: '0' = picture mute enabled, '1' = picture mute disabled."
Macros
# UNRESOLVED: source does not document any multi-step sequences.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source does not document safety warnings, interlock procedures, or
# power-on sequencing requirements. EU RED-DA compliance variants exist
# (3 variants) and may omit certain commands; the source does not enumerate
# the differences.
Notes
- Message format is fixed 24 bytes for every request and every answer. Header
0x2A 0x53(*S), one-byte message type, four ASCII command bytes, 16 parameter bytes, footer0x0A(LF). The source power-off example string*SCPOWR0000000000000000shows 23 visible bytes; the trailing byte is the LF footer (0x0A). - Param field padding convention: unused bytes inside the 16-byte parameter field are filled with
#(0x23) for both Enquiry messages and certain Control messages. The 16th byte (offset 22) often carries a single ASCII digit value (e.g.'0'/'1') for on/off style controls. - Padding for setAudioVolume: decimal digits are right-aligned; the example
0000000000000029represents 41 (0x29 = 41). Source does not state a max. - IR pass-through: setIrccCode (
C IRCC) sends an arbitrary IR remote button press; the 47 supported codes (Display, Home, Num0..9, Volume Up/Down, Mute, Channel Up/Down, transport keys, HDMI 1..4, etc.) are encoded as ASCII decimal in the final two bytes of the 16-byte param field. - Scene Setting strings (
auto,auto24pSync,general) are case-sensitive and right-padded with#to fill the 16-byte param field. - EU region caveat: 3 RED-DA compliance variants exist; available settings and commands differ per variant and are not enumerated in the source.
- Required monitor settings to enable Simple IP Control:
Settings → Network & Internet → Remote device settings → Control remotely, andSettings → Network & Internet → Home network → IP control → Simple IP control. - Wired and wireless LAN are both supported; the device IP must be reachable on TCP port 20060.
- No authentication: the protocol exposes port 20060 with no login. Operators are responsible for network-level access control.
Provenance
source_domains:
- pro-bravia.sony.net
source_urls:
- https://pro-bravia.sony.net/remote-display-control/simple-ip-control/
retrieved_at: 2026-06-02T05:23:39.835Z
last_checked_at: 2026-06-02T05:46:23.710Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T05:46:23.710Z
matched_actions: 17
action_count: 17
confidence: medium
summary: "All 17 spec actions match their FourCC codes in the source command table; transport port 20060 verified; no unrepresented source commands. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "EU area models ship in 3 RED-DA compliance variants; the source warns that available commands and settings differ per variant, but does not enumerate which commands are missing from which variant."
- "valid min/max range not stated."
- "valid range not stated in source. Source example: 41 decimal = '0000000000000029' in the 16-byte param field.\""
- "source does not document any multi-step sequences."
- "source does not document safety warnings, interlock procedures, or"
- "firmware version compatibility not stated in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0