Summary
IP control specification for the Sony KJ-X9305 BRAVIA series (2014 Pro/B2B display line). Protocol: Sony Simple IP Control on TCP port 20060, 24-byte fixed-size framed messages with a 2-byte header 0x2A 0x53, 1-byte type (C/E/A/N), 4-byte FourCC function identifier, 16-byte parameter, and 1-byte 0x0A footer. The TV must have Simple IP Control enabled (Settings > Network > Home Network Setup > IP Control > Simple IP Control, or Hotel/Pro Mode > IP Control > Simple IP Control).
Transport
protocols:
- tcp
addressing:
port: 20060
auth:
type: none # inferred: no auth procedure in source
Traits
# - powerable (setPowerStatus command present)
# - routable (setInput/setInputSource present)
# - queryable (get* commands present)
# - levelable (setAudioVolume present)
Actions
# Sony Simple IP Control, 24-byte frame:
# [0..1] Header 0x2A 0x53
# [2] Type 0x43 C | 0x45 E | 0x41 A | 0x4E N
# [3..6] Function Four-CC ASCII
# [7..22] Parameter 16 bytes (ASCII hex digits or '#' placeholders)
# [23] Footer 0x0A
# Each `command:` below shows the 24-byte template, hex-grouped for clarity.
- id: set_ircc_code
label: Send IR-like Code
kind: action
command: "2A 53 43 IRCC XXXXXXXXXXXXXXXX 0A"
params:
- name: code
type: string
description: IRCC code as 16 ASCII hex digits, right-padded with '0' (e.g. Power Off = 0000000000000000, Volume Up = 0000000000000030). See Feedbacks > ircc_codes.
- id: set_power_status
label: Set Power Status
kind: action
command: "2A 53 43 POWR 0000000000000000 0A"
params:
- name: state
type: enum
values: [standby, active]
description: 0000000000000000 = Standby, 0000000000000001 = Active
- id: get_power_status
label: Get Power Status
kind: query
command: "2A 53 45 POWR ################ 0A"
params: []
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "2A 53 43 VOLU XXXXXXXXXXXXXXXX 0A"
params:
- name: level
type: integer
description: Volume value (0-100), 16-char ASCII decimal, left-padded with '0' (e.g. 41 -> 0000000000000029)
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "2A 53 45 VOLU ################ 0A"
params: []
- id: set_audio_mute
label: Set Audio Mute
kind: action
command: "2A 53 43 AMUT 0000000000000000 0A"
params:
- name: state
type: enum
values: [unmute, mute]
description: 0000000000000000 = Unmute, 0000000000000001 = Mute
- id: get_audio_mute
label: Get Audio Mute Status
kind: query
command: "2A 53 45 AMUT ################ 0A"
params: []
- id: set_channel
label: Set Channel (Preset)
kind: action
command: "2A 53 43 CHNN XXXXXXXX.XXXXXXX 0A"
params:
- name: channel
type: string
description: Preset number in 8.7 ASCII decimal (e.g. 50.1 -> 00000050.1000000, 6 -> 00000006.0000000)
- id: get_channel
label: Get Current Preset Channel
kind: query
command: "2A 53 45 CHNN ################ 0A"
params: []
- id: set_triplet_channel
label: Set Channel (Triplet)
kind: action
command: "2A 53 43 TCHN XXXXXXXXXXXXXXNN 0A"
params:
- name: triplet
type: string
description: Triplet channel as 16 hex digits (last 4 = major/minor fine detail) e.g. 7FE07FE00400 = 32736.32736.1024
- id: get_triplet_channel
label: Get Triplet Channel
kind: query
command: "2A 53 45 TCHN ################ 0A"
params: []
- id: set_input_source
label: Set TV Input Source (Tuner)
kind: action
command: "2A 53 43 ISRC XXXXXXXXXXXXXXXX 0A"
params:
- name: source
type: enum
values: [dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt]
description: Source string, right-padded with '#' to 16 chars (e.g. 'dvbt############')
- id: get_input_source
label: Get Current TV Input Source
kind: query
command: "2A 53 45 ISRC ################ 0A"
params: []
- id: set_input
label: Set Input
kind: action
command: "2A 53 43 INPT 00000000000XXXXX 0A"
params:
- name: input
type: string
description: '00 = TV; 01xxxx = HDMI(1-9999); 02xxxx = SCART(1-9999); 03xxxx = Composite(1-9999); 04xxxx = Component(1-9999); 05xxxx = Screen Mirroring(1-9999); 06xxxx = PC RGB Input(1-9999). xxxx = port number in ASCII decimal'
- id: get_input
label: Get Current Input
kind: query
command: "2A 53 45 INPT ################ 0A"
params: []
- id: set_picture_mute
label: Set Picture Mute
kind: action
command: "2A 53 43 PMUT 0000000000000000 0A"
params:
- name: state
type: enum
values: [disable, enable]
description: 0000000000000000 = Disable (picture on), 0000000000000001 = Enable (screen black)
- id: get_picture_mute
label: Get Picture Mute State
kind: query
command: "2A 53 45 PMUT ################ 0A"
params: []
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "2A 53 43 TPMU ################ 0A"
params: []
- id: set_pip
label: Set Picture-in-Picture
kind: action
command: "2A 53 43 PIPI 0000000000000000 0A"
params:
- name: state
type: enum
values: [disable, enable]
- id: get_pip
label: Get PIP Status
kind: query
command: "2A 53 45 PIPI ################ 0A"
params: []
- id: toggle_pip
label: Toggle PIP
kind: action
command: "2A 53 43 TPIP ################ 0A"
params: []
- id: toggle_pip_position
label: Cycle PIP Position
kind: action
command: "2A 53 43 TPPP ################ 0A"
params: []
- id: get_broadcast_address
label: Get Broadcast IPv4 Address
kind: query
command: "2A 53 45 BADR Eth0############ 0A"
params:
- name: interface
type: string
description: Interface name (e.g. 'Eth0'), right-padded with '#' to 16 chars
- id: get_mac_address
label: Get MAC Address
kind: query
command: "2A 53 45 MADR Eth0############ 0A"
params:
- name: interface
type: string
description: Interface name (e.g. 'Eth0'), right-padded with '#' to 16 chars
Feedbacks
- id: power_state
type: enum
values: [standby, active]
source: getPowerStatus answer
values_raw: ["0...0", "0...1"]
- id: volume_level
type: integer
source: getAudioVolume answer
description: Volume value as 16-char ASCII decimal, left-padded '0'
- id: mute_state
type: enum
values: [unmuted, muted]
source: getAudioMute answer
values_raw: ["0...0", "0...1"]
- id: channel_preset
type: string
source: getChannel answer
description: 8.7 ASCII decimal (e.g. 00000050.1000000)
- id: channel_triplet
type: string
source: getTripletChannel answer
description: 16 hex digits
- id: input_source
type: enum
values: [dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt]
source: getInputSource answer
- id: input
type: string
source: getInput answer
values: [TV, HDMI(1-9999), SCART(1-9999), Composite(1-9999), Component(1-9999), ScreenMirroring(1-9999), PCRGB(1-9999)]
description: 0000000000000000=TV; 0000000001xxxxxx=HDMI; 0000000002xxxxxx=SCART; 0000000003xxxxxx=Composite; 0000000004xxxxxx=Component; 0000000005xxxxxx=ScreenMirroring; 0000000006xxxxxx=PC RGB
- id: picture_mute_state
type: enum
values: [disabled, enabled]
source: getPictureMute answer
- id: pip_state
type: enum
values: [disabled, enabled]
source: getPip answer
- id: broadcast_address
type: string
source: getBroadcastAddress answer
description: IPv4 dotted-quad, right-padded with '#' to 16 chars (e.g. 192.168.0.14####)
- id: mac_address
type: string
source: getMacAddress answer
description: MAC address, right-padded with '#' to 16 chars
- id: ircc_codes
type: table
description: IR-like code values accepted by setIrccCode (16 hex digits, last byte = code index)
entries:
- { name: "Power Off", code: "0000000000000000" }
- { name: "Input", code: "0000000000000001" }
- { name: "GGuide", code: "0000000000000002" }
- { name: "EPG", code: "0000000000000003" }
- { name: "Favorites", code: "0000000000000004" }
- { name: "Display", code: "0000000000000005" }
- { name: "Home", code: "0000000000000006" }
- { name: "Options", code: "0000000000000007" }
- { name: "Return", code: "0000000000000008" }
- { name: "Up", code: "0000000000000009" }
- { name: "Down", code: "0000000000000010" }
- { name: "Right", code: "0000000000000011" }
- { name: "Left", code: "0000000000000012" }
- { name: "Confirm", code: "0000000000000013" }
- { name: "Red", code: "0000000000000014" }
- { name: "Green", code: "0000000000000015" }
- { name: "Yellow", code: "0000000000000016" }
- { name: "Blue", code: "0000000000000017" }
- { name: "Num1", code: "0000000000000018" }
- { name: "Num2", code: "0000000000000019" }
- { name: "Num3", code: "0000000000000020" }
- { name: "Num4", code: "0000000000000021" }
- { name: "Num5", code: "0000000000000022" }
- { name: "Num6", code: "0000000000000023" }
- { name: "Num7", code: "0000000000000024" }
- { name: "Num8", code: "0000000000000025" }
- { name: "Num9", code: "0000000000000026" }
- { name: "Num0", code: "0000000000000027" }
- { name: "Num11", code: "0000000000000028" }
- { name: "Num12", code: "0000000000000029" }
- { name: "Volume Up", code: "0000000000000030" }
- { name: "Volume Down", code: "0000000000000031" }
- { name: "Mute", code: "0000000000000032" }
- { name: "Channel Up", code: "0000000000000033" }
- { name: "Channel Down", code: "0000000000000034" }
- { name: "Subtitle", code: "0000000000000035" }
- { name: "Closed Caption", code: "0000000000000036" }
- { name: "Enter", code: "0000000000000037" }
- { name: "DOT", code: "0000000000000038" }
- { name: "Analog", code: "0000000000000039" }
- { name: "Teletext", code: "0000000000000040" }
- { name: "Exit", code: "0000000000000041" }
- { name: "Analog2", code: "0000000000000042" }
- { name: "AD", code: "0000000000000043" }
- { name: "Digital", code: "0000000000000044" }
- { name: "Analog?", code: "0000000000000045" }
- { name: "BS", code: "0000000000000046" }
- { name: "CS", code: "0000000000000047" }
- { name: "BS/CS", code: "0000000000000048" }
- { name: "Ddata", code: "0000000000000049" }
- { name: "Pic Off", code: "0000000000000050" }
- { name: "Tv_Radio", code: "0000000000000051" }
- { name: "Theater", code: "0000000000000052" }
- { name: "SEN", code: "0000000000000053" }
- { name: "Internet Widgets", code: "0000000000000054" }
- { name: "Internet Video", code: "0000000000000055" }
- { name: "Netflix", code: "0000000000000056" }
- { name: "Scene Select", code: "0000000000000057" }
- { name: "Mode3D", code: "0000000000000058" }
- { name: "iManual", code: "0000000000000059" }
- { name: "Audio", code: "0000000000000060" }
- { name: "Wide", code: "0000000000000061" }
- { name: "Jump", code: "0000000000000062" }
- { name: "PAP", code: "0000000000000063" }
- { name: "MyEPG", code: "0000000000000064" }
- { name: "Program Description", code: "0000000000000065" }
- { name: "Write Chapter", code: "0000000000000066" }
- { name: "TrackID", code: "0000000000000067" }
- { name: "Ten Key", code: "0000000000000068" }
- { name: "AppliCast", code: "0000000000000069" }
- { name: "acTVila", code: "0000000000000070" }
- { name: "Delete Video", code: "0000000000000071" }
- { name: "Photo Frame", code: "0000000000000072" }
- { name: "TV Pause", code: "0000000000000073" }
- { name: "KeyPad", code: "0000000000000074" }
- { name: "Media", code: "0000000000000075" }
- { name: "Sync Menu", code: "0000000000000076" }
- { name: "Forward", code: "0000000000000077" }
- { name: "Play", code: "0000000000000078" }
- { name: "Rewind", code: "0000000000000079" }
- { name: "Prev", code: "0000000000000080" }
- { name: "Stop", code: "0000000000000081" }
- { name: "Next", code: "0000000000000082" }
- { name: "Rec", code: "0000000000000083" }
- { name: "Pause", code: "0000000000000084" }
- { name: "Eject", code: "0000000000000085" }
- { name: "Flash Plus", code: "0000000000000086" }
- { name: "Flash Minus", code: "0000000000000087" }
- { name: "TopMenu", code: "0000000000000088" }
- { name: "PopupMenu", code: "0000000000000089" }
- { name: "Rakuraku Start", code: "0000000000000090" }
- { name: "One Touch Time Rec", code: "0000000000000091" }
- { name: "One Touch View", code: "0000000000000092" }
- { name: "One Touch Rec", code: "0000000000000093" }
- { name: "One Touch Stop", code: "0000000000000094" }
- { name: "DUX", code: "0000000000000095" }
- { name: "Football Mode", code: "0000000000000096" }
- { name: "Social", code: "0000000000000097" }
Events
- id: power_change
type: enum
values: [standby, active]
source: firePowerChange (type N)
description: 0000000000000000 = powering off, 0000000000000001 = powering on
- id: channel_change
type: string
source: fireChannelChange (type N)
description: 8.7 ASCII decimal preset number
- id: input_change
type: string
source: fireInputChange (type N)
description: 0000000000000000=TV; 0000000001xxxxxx=HDMI; 0000000002xxxxxx=SCART; 0000000003xxxxxx=Composite; 0000000004xxxxxx=Component; 0000000005xxxxxx=ScreenMirroring; 0000000006xxxxxx=PC RGB
- id: volume_change
type: integer
source: fireVolumeChange (type N)
description: New volume value, 16-char ASCII decimal
- id: mute_change
type: enum
values: [unmuted, muted]
source: fireMuteChange (type N)
- id: pip_change
type: enum
values: [disabled, enabled]
source: firePipChange (type N)
- id: picture_mute_change
type: enum
values: [disabled, enabled]
source: firePictureMuteChange (type N)
Macros
# UNRESOLVED: no multi-step sequences described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlocks, or power-on sequencing requirements stated in source
Notes
- TCP connections are server-terminated after 30 seconds of client inactivity; clients must reconnect or keep sending.
- Parameter field is 16 ASCII characters; placeholders are '0' (control), '#' (enquiry), or 'N' (no-such/error answer), or 'F' (error answer), per Table 3.
- For setInput, the 16-char parameter encodes BOTH the input class (positions 9-10 in the frame) and the port number (positions 13-16) as ASCII decimal; e.g. HDMI 2 =
0000000001000002. - Source covers the Low Level Protocol (24-byte frame). The companion High Level Protocol (HTTP + JSON-RPC WebAPI) is referenced but not detailed in this excerpt.
- This protocol is documented for the 2014 BRAVIA line including the X9305D chassis. Compatibility with newer Sony models that use the same Simple IP Control frame is likely but not confirmed by this source.
Provenance
source_domains:
- aca.im
- pro.sony
source_urls:
- "https://aca.im/driver_docs/Sony/sony%20bravia%20simple%20ip%20control.pdf"
- https://pro.sony/en_GB/support
retrieved_at: 2026-06-12T04:48:48.034Z
last_checked_at: 2026-06-12T19:56:08.678Z
Verification Summary
verdict: verified
checked_at: 2026-06-12T19:56:08.678Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec actions confirmed against source command table; wire-literal tokens and transport parameters verified; all source commands represented. (4 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility range, high-level JSON-RPC WebAPI details, exact model coverage beyond the X9305D chassis"
- "no multi-step sequences described in source"
- "no safety warnings, interlocks, or power-on sequencing requirements stated in source"
- "firmware version compatibility range, exact model coverage beyond X9305D, high-level WebAPI/JSON-RPC command names, power/voltage specs, authentication (none observed in low-level protocol)"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0