Summary
Sony BRAVIA Simple IP Control Protocol (v0.6) for 2014-era BRAVIA TVs, including the KDXG8305 series. Exposes a 24-byte fixed-frame TCP message format on port 20060 with Four-CC function names for control, enquiry, answer, and notify messages. Covers power, volume, mute, channel, input, picture-mute, PIP, and network address queries, plus an IR-code passthrough for remote-button simulation.
Transport
protocols:
- tcp
addressing:
port: 20060
# Frame format: 24 bytes - 0x2A 0x53 header (bytes 0-1), type (byte 2),
# four-CC function (bytes 3-6), 16-byte parameter (bytes 7-22), 0x0A footer (byte 23)
auth:
type: none # inferred: no auth procedure in source
notes:
- Server disconnects after 30s of client idle
Traits
- powerable # inferred from setPowerStatus / getPowerStatus
- routable # inferred from setInput / setInputSource commands
- queryable # inferred from extensive get*/enquiry command set
- levelable # inferred from setAudioVolume command
Actions
# Frame template: 0x2A 0x53 <type> <fourcc> <16-byte param> 0x0A
# Type bytes: 0x43 [C] Control, 0x45 [E] Enquiry, 0x4E [N] Notify
# Command strings below show the four-CC + parameter payload in the
# "byte-position-2 onward" form; full 24-byte framing is implied.
- id: ircc_code
label: IR-like Code
kind: action
command: "0x49 0x52 0x43 0x43 {ircc_hex_2bytes}" # Function IRCC, param encodes IR code
params:
- name: ircc_code
type: integer
description: IR code from Table 5 (e.g. 0x0000 Power Off, 0x0030 Volume Up)
- id: set_power_status
label: Set Power Status
kind: action
command: "0x50 0x4F 0x57 0x52 {0x00|0x01}" # POWR, param last byte 00 standby / 01 active
params:
- name: state
type: enum
values: [standby, active]
- id: get_power_status
label: Get Power Status
kind: query
command: "0x50 0x4F 0x57 0x52 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23" # POWR enquiry: param padded with '#' (0x23)
params: []
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "0x56 0x4F 0x4C 0x55 {volume_padded}" # VOLU, param left-padded decimal volume (16 ASCII digits, e.g. "0000000000000029")
params:
- name: volume
type: integer
description: Volume value, left-padded with ASCII '0' to 16 chars (e.g. 41 → "0000000000000029")
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "0x56 0x4F 0x4C 0x55 0x23 x16" # VOLU enquiry, param '#'-padded
params: []
- id: set_audio_mute
label: Set Audio Mute
kind: action
command: "0x41 0x4D 0x55 0x54 {0x00|0x01}" # AMUT, param last byte 00 unmute / 01 mute
params:
- name: state
type: enum
values: [unmute, mute]
- id: get_audio_mute
label: Get Audio Mute
kind: query
command: "0x41 0x4D 0x55 0x54 0x23 x16" # AMUT enquiry, param '#'-padded
params: []
- id: set_channel
label: Set Channel (preset)
kind: action
command: "0x43 0x48 0x4E 0x4E {preset}" # CHNN, param = preset number (left-zero-padded 8 digits, '.', 7 digits, e.g. "00000050.1000000" = 50.1)
params:
- name: preset
type: string
description: Channel preset in NNNNNNNN.NNNNNNN form (16 chars total)
- id: get_channel
label: Get Channel
kind: query
command: "0x43 0x48 0x4E 0x4E 0x23 x16" # CHNN enquiry, param '#'-padded
params: []
- id: set_triplet_channel
label: Set Channel (triplet)
kind: action
command: "0x54 0x43 0x48 0x4E {triplet_hex_12bytes}" # TCHN, param = 12 hex bytes (major 4, minor 4, program 4) e.g. "7FE07FE00400"
params:
- name: triplet
type: string
description: 12 hex chars: 4 major + 4 minor + 4 program
- id: get_triplet_channel
label: Get Triplet Channel
kind: query
command: "0x54 0x43 0x48 0x4E 0x23 x16" # TCHN enquiry, param '#'-padded
params: []
- id: set_input_source
label: Set Input Source (tuner)
kind: action
command: "0x49 0x53 0x52 0x43 {source_padded}" # ISRC, param = tuner source string left-justified, '#'-padded (e.g. "dvbt############")
params:
- name: source
type: enum
values: [dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt]
- id: get_input_source
label: Get Input Source
kind: query
command: "0x49 0x53 0x52 0x43 0x23 x16" # ISRC enquiry, param '#'-padded
params: []
- id: set_input
label: Set Input
kind: action
command: "0x49 0x4E 0x50 0x54 {input_code}" # INPT, param encodes input kind + number per Table 4
params:
- name: input
type: string
description: "Input per Table 4: TV (0x00...00), HDMI 1-9999 (0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 NNNN), SCART 1-9999 (byte 7 = 0x02), Composite 1-9999 (0x03), Component 1-9999 (0x04), Screen Mirroring 1-9999 (0x05), PC RGB 1-9999 (0x06)"
- id: get_input
label: Get Input
kind: query
command: "0x49 0x4E 0x50 0x54 0x23 x16" # INPT enquiry, param '#'-padded
params: []
- id: set_picture_mute
label: Set Picture Mute
kind: action
command: "0x50 0x4D 0x55 0x54 {0x00|0x01}" # PMUT, param last byte 00 disable / 01 enable
params:
- name: state
type: enum
values: [disable, enable]
- id: get_picture_mute
label: Get Picture Mute
kind: query
command: "0x50 0x4D 0x55 0x54 0x23 x16" # PMUT enquiry, param '#'-padded
params: []
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "0x54 0x50 0x4D 0x55 0x23 x16" # TPMU, param '#'-padded
params: []
- id: set_pip
label: Set PIP
kind: action
command: "0x50 0x49 0x50 0x49 {0x00|0x01}" # PIPI, param last byte 00 disable / 01 enable
params:
- name: state
type: enum
values: [disable, enable]
- id: get_pip
label: Get PIP
kind: query
command: "0x50 0x49 0x50 0x49 0x23 x16" # PIPI enquiry, param '#'-padded
params: []
- id: toggle_pip
label: Toggle PIP
kind: action
command: "0x54 0x50 0x49 0x50 0x23 x16" # TPIP, param '#'-padded
params: []
- id: toggle_pip_position
label: Toggle PIP Position
kind: action
command: "0x54 0x50 0x50 0x50 0x23 x16" # TPPP, param '#'-padded
params: []
- id: get_broadcast_address
label: Get Broadcast Address
kind: query
command: "0x42 0x41 0x44 0x52 'eth0' 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23" # BADR, param = interface name 'eth0' left-justified, '#'-padded
params:
- name: interface
type: string
description: Interface name (e.g. "eth0"); pad with '#' to 16 bytes
- id: get_mac_address
label: Get MAC Address
kind: query
command: "0x4D 0x41 0x44 0x52 'eth0' 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23 0x23" # MADR, param = interface name 'eth0' left-justified, '#'-padded
params:
- name: interface
type: string
description: Interface name (e.g. "eth0"); pad with '#' to 16 bytes
Feedbacks
- id: power_state
type: enum
values: [standby, active]
- id: audio_volume
type: integer
description: Current volume (decimal, as echoed by VOLU answer)
- id: audio_mute
type: enum
values: [unmuted, muted]
- id: channel_preset
type: string
description: Current preset channel in NNNNNNNN.NNNNNNN form
- id: channel_triplet
type: string
description: Current triplet channel (12 hex chars)
- id: input_source_tuner
type: string
description: Current tuner source (dvbt/dvbc/...)
- id: input
type: string
description: Current input per Table 4 (TV/HDMI 1-9999/SCART/Composite/Component/Screen Mirroring/PC RGB)
- id: picture_mute
type: enum
values: [disabled, enabled]
- id: pip
type: enum
values: [disabled, enabled]
- id: broadcast_address
type: string
description: IPv4 broadcast address (ASCII), '#'-padded
- id: mac_address
type: string
description: MAC address (ASCII), '#'-padded
Variables
# UNRESOLVED: source defines parameters as 16-byte fields with command-specific
# encoding; no source-documented named settable variables beyond the action
# parameters above. Section retained as placeholder.
Events
# Unsolicited N-type (0x4E) notifications. Each carries the same four-CC +
# payload as its corresponding control command, with the type byte = 0x4E.
- id: power_change
notify_fourcc: POWR
payload_last_byte: {0x00: power_off, 0x01: power_on}
description: Sent on power-state change
- id: channel_change
notify_fourcc: CHNN
description: Sent on channel change (param = new preset)
- id: input_change
notify_fourcc: INPT
payload: per Table 4 INPT encoding
description: Sent on input change
- id: volume_change
notify_fourcc: VOLU
description: Sent on volume change (param = new volume, decimal padded)
- id: mute_change
notify_fourcc: AMUT
payload_last_byte: {0x00: unmuted, 0x01: muted}
description: Sent on mute-state change
- id: pip_change
notify_fourcc: PIPI
payload_last_byte: {0x00: disabled, 0x01: enabled}
description: Sent on PIP-state change
- id: picture_mute_change
notify_fourcc: PMUT
payload_last_byte: {0x00: disabled, 0x01: enabled}
description: Sent on picture-mute change
Macros
# UNRESOLVED: source does not document any device-side macro sequences.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source does not document safety warnings, interlocks, or
# power-on sequencing requirements for this protocol.
Notes
- Protocol is the BRAVIA Simple IP Control v0.6, fixed 24-byte frame on TCP/20060. Server disconnects after 30s of client idle; clients should re-establish.
- IP Control must be enabled in the TV's settings (Network > Home Network Setup > IP Control > Simple IP Control, or Hotel/Pro Mode equivalent) before commands are accepted.
- The High Level (HTTP/JSON-RPC) protocol layer is mentioned in §1 as a parallel interface but is not detailed in the supplied source; the WebAPI command catalogue is not reproduced here.
- A
'#'(0x23) byte in any parameter position means "unspecified / pad"; for enquiry (0x45) the entire 16-byte param is conventionally '#'-padded. - IR codes 0x00–0x97 are supported via setIrccCode; full mapping is in Table 5 of the source (Power Off=0x00, Volume Up=0x30, Num0–Num9=0x18–0x27, etc.).
setInputSource(ISRC) targets the tuner input naming (dvbt/dvbc/...);setInput(INPT) targets the physical input jack (TV/HDMI/SCART/Composite/Component/Screen Mirroring/PC RGB). They are distinct.
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_US/products/professional-displays
retrieved_at: 2026-06-12T04:41:20.437Z
last_checked_at: 2026-06-12T19:52:55.894Z
Verification Summary
verdict: verified
checked_at: 2026-06-12T19:52:55.894Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec actions match literal commands in source Table 4; transport parameters verified; notify events represented in spec Events section. (6 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source document covers \"BRAVIA 2014 models\" generically; KDXG8305 series inclusion inferred from the spec context but not explicitly named in the refined text."
- "source defines parameters as 16-byte fields with command-specific"
- "source does not document any device-side macro sequences."
- "source does not document safety warnings, interlocks, or"
- "refined source says \"BRAVIA 2014 models\" generically and does not name the KDXG8305 series explicitly — apply with caution and verify against device."
- "device-side authentication is not described; the protocol's \"Simple IP Control\" name suggests no auth, but real-world deployment may rely on network-level isolation. Treat auth.type: none as inferred."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0