Summary

This spec covers the Sony Simple IP Control Protocol for BRAVIA 2014 models, used by the KDXD7005 series (KD-49XD7005, KD-55XD7005, etc.). The low-level transport is TCP on port 20060 using 24-byte fixed-size frames with Four-CC function codes. A higher-level HTTP/JSON-RPC layer is also documented as a protocol bridge to the same command set. Protocol must be enabled via Network > Home Network Setup > IP Control > Simple IP Control (or Hotel/Pro Mode > IP Control > Simple IP Control).

Transport

protocols:
  - tcp
addressing:
  port: 20060
  notes: "Server times out and disconnects after 30 seconds of client inactivity"
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # setPowerStatus
- routable        # setInput, setInputSource
- queryable       # getPowerStatus, getAudioVolume, getAudioMute, getChannel, getTripletChannel, getInputSource, getInput, getPictureMute, getPip, getBroadcastAddress, getMacAddress
- levelable       # setAudioVolume

Actions

# Each action is one 24-byte TCP frame. Frame layout:
#   Byte 0-1:  Header 0x2A 0x53 (fixed)
#   Byte 2:    Type     (0x43 Control, 0x45 Enquiry, 0x41 Answer, 0x4E Notify)
#   Byte 3-6:  Function Four-CC (ASCII)
#   Byte 7-22: Parameter (16 bytes, pad with '0' on left or '#' on right per command)
#   Byte 23:   Footer 0x0A (fixed)
# {value} below denotes the substituted parameter bytes.

- id: set_ircc_code
  label: Send IR-like code
  kind: action
  command: "2A 53 43 IRCC {ircc_param} 0A"  # 24-byte frame; IRCC param per Table 5
  params:
    - name: ircc_param
      type: string
      description: "16-byte IR code parameter, see Table 5 (e.g. Power Off = 00...00, Num1 = 00...12, Volume Up = 00...1E)"

- id: set_power_status
  label: Set Power Status
  kind: action
  command: "2A 53 43 POWR {state} 0A"
  params:
    - name: state
      type: enum
      values: [standby, active]
      description: "byte[7] = 0x00 standby, 0x01 active"

- id: get_power_status
  label: Get Power Status
  kind: query
  command: "2A 53 45 POWR 0A"

- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: "2A 53 43 VOLU {volume} 0A"
  params:
    - name: volume
      type: integer
      description: "Volume value as 16-digit decimal, left-padded with '0' (e.g. 0x29 -> 0000000000000029)"

- id: get_audio_volume
  label: Get Audio Volume
  kind: query
  command: "2A 53 45 VOLU 0A"

- id: set_audio_mute
  label: Set Audio Mute
  kind: action
  command: "2A 53 43 AMUT {state} 0A"
  params:
    - name: state
      type: enum
      values: [unmute, mute]
      description: "byte[7] = 0x00 unmute, 0x01 mute"

- id: get_audio_mute
  label: Get Audio Mute
  kind: query
  command: "2A 53 45 AMUT 0A"

- id: set_channel
  label: Set Channel (preset number)
  kind: action
  command: "2A 53 43 CHNN {channel} 0A"
  params:
    - name: channel
      type: string
      description: "Channel as 16-digit decimal.major padding (e.g. 00000050.1000000 = 50.1, 00000006.0000000 = 6)"

- id: get_channel
  label: Get Channel (preset number)
  kind: query
  command: "2A 53 45 CHNN 0A"

- id: set_triplet_channel
  label: Set Channel (triplet)
  kind: action
  command: "2A 53 43 TCHN {triplet} 0A"
  params:
    - name: triplet
      type: string
      description: "Channel as 3 hex words (e.g. 7FE07FE00400 = 32736.32736.1024)"

- id: get_triplet_channel
  label: Get Triplet Channel
  kind: query
  command: "2A 53 45 TCHN 0A"

- id: set_input_source
  label: Set TV Input Source
  kind: action
  command: "2A 53 43 ISRC {source} 0A"
  params:
    - name: source
      type: enum
      values: [dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt]
      description: "Source name right-padded with '#' to 16 bytes (e.g. dvbt############)"

- id: get_input_source
  label: Get TV Input Source
  kind: query
  command: "2A 53 45 ISRC 0A"

- id: set_input
  label: Set Input
  kind: action
  command: "2A 53 43 INPT {input_selector} 0A"
  params:
    - name: input_selector
      type: string
      description: "16-byte parameter; per Table 4: TV=00...00; HDMI 1-9999=000000010000XXXX; SCART 1-9999=000000020000XXXX; Composite 1-9999=000000030000XXXX; Component 1-9999=000000040000XXXX; Screen Mirroring 1-9999=000000050000XXXX; PC RGB 1-9999=000000060000XXXX"

- id: get_input
  label: Get Current Input
  kind: query
  command: "2A 53 45 INPT 0A"

- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: "2A 53 43 PMUT {state} 0A"
  params:
    - name: state
      type: enum
      values: [disable, enable]
      description: "byte[7] = 0x00 disable, 0x01 enable"

- id: get_picture_mute
  label: Get Picture Mute
  kind: query
  command: "2A 53 45 PMUT 0A"

- id: toggle_picture_mute
  label: Toggle Picture Mute
  kind: action
  command: "2A 53 43 TPMU 0A"  # no parameter

- id: set_pip
  label: Set PIP (Picture in Picture)
  kind: action
  command: "2A 53 43 PIPI {state} 0A"
  params:
    - name: state
      type: enum
      values: [disable, enable]
      description: "byte[7] = 0x00 disable, 0x01 enable"

- id: get_pip
  label: Get PIP Status
  kind: query
  command: "2A 53 45 PIPI 0A"

- id: toggle_pip
  label: Toggle PIP
  kind: action
  command: "2A 53 43 TPIP 0A"  # no parameter

- id: toggle_pip_position
  label: Change PIP Position (in turn)
  kind: action
  command: "2A 53 43 TPPP 0A"  # no parameter

- 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 left-justified in 4 bytes (e.g. 'eth0'); source shows answer is broadcast address right-padded with '#'"

- 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 left-justified in 4 bytes (e.g. 'eth0')"

Feedbacks

- id: power_state
  type: enum
  values: [standby, active]
  source: "Answer to getPowerStatus: byte[7] = 0x00 standby, 0x01 active"

- id: audio_mute_state
  type: enum
  values: [unmuted, muted]
  source: "Answer to getAudioMute: byte[7] = 0x00 not muted, 0x01 muted"

- id: audio_volume
  type: integer
  source: "Answer to getAudioVolume: 16-digit decimal volume value in parameter bytes"

- id: channel_preset
  type: string
  source: "Answer to getChannel: 16-byte preset channel number"

- id: channel_triplet
  type: string
  source: "Answer to getTripletChannel: 16-byte triplet channel number"

- id: input_source
  type: enum
  values: [dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt]
  source: "Answer to getInputSource: source name in parameter"

- id: input
  type: string
  source: "Answer to getInput: per Table 4 input selector encoding (TV/HDMI 1-9999/SCART 1-9999/Composite 1-9999/Component 1-9999/Screen Mirroring 1-9999/PC RGB 1-9999)"

- id: picture_mute_state
  type: enum
  values: [disabled, enabled]
  source: "Answer to getPictureMute: byte[7] = 0x00 disabled, 0x01 enabled"

- id: pip_state
  type: enum
  values: [disabled, enabled]
  source: "Answer to getPip: byte[7] = 0x00 disabled, 0x01 enabled"

- id: broadcast_address
  type: string
  source: "Answer to getBroadcastAddress: IPv4 address in 16 bytes, right-padded with '#' (e.g. 192.168.0.14)"

- id: mac_address
  type: string
  source: "Answer to getMacAddress: MAC address in 16 bytes, right-padded with '#'"

Variables

# Per source, no persistent settable variables are documented beyond the discrete actions above.
# UNRESOLVED: no source evidence for free-form variables.

Events

# All Notify (0x4E) messages are unsolicited events sent by TV -> Controller.
- id: power_change
  type: enum
  values: [standby, active]
  source: "Type 0x4E, FourCC POWR, byte[7] = 0x00 powering off, 0x01 powering on"
  command: "2A 53 4E POWR {state} 0A"

- id: channel_change
  type: string
  source: "Type 0x4E, FourCC CHNN, new preset channel in parameter"
  command: "2A 53 4E CHNN {channel} 0A"

- id: input_change
  type: string
  source: "Type 0x4E, FourCC INPT, per Table 4 input selector (TV/HDMI 1-9999/SCART 1-9999/Composite 1-9999/Component 1-9999/Screen Mirroring 1-9999/PC RGB 1-9999)"
  command: "2A 53 4E INPT {input_selector} 0A"

- id: volume_change
  type: string
  source: "Type 0x4E, FourCC VOLU, new volume value in parameter"
  command: "2A 53 4E VOLU {volume} 0A"

- id: mute_change
  type: enum
  values: [unmuted, muted]
  source: "Type 0x4E, FourCC AMUT, byte[7] = 0x00 unmuting, 0x01 muting"
  command: "2A 53 4E AMUT {state} 0A"

- id: pip_change
  type: enum
  values: [disabled, enabled]
  source: "Type 0x4E, FourCC PIPI, byte[7] = 0x00 disabled, 0x01 enabled"
  command: "2A 53 4E PIPI {state} 0A"

- id: picture_mute_change
  type: enum
  values: [disabled, enabled]
  source: "Type 0x4E, FourCC PMUT, byte[7] = 0x00 disabled, 0x01 enabled"
  command: "2A 53 4E PMUT {state} 0A"

Macros

# UNRESOLVED: no source evidence for multi-step sequences; remove or populate.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on sequencing requirements.

Notes

  • Frame format: every TCP message is exactly 24 bytes (0x2A 0x53 header, 1-byte type, 4-byte Four-CC function, 16-byte parameter, 0x0A footer). Parameters are padded per command: numeric values left-padded with '0' (e.g. volume), strings right-padded with '#' (e.g. source name), interface names left-justified in 4 bytes (e.g. 'eth0').
  • Connection lifecycle: server disconnects after 30s of client inactivity; clients must reconnect to issue new commands.
  • High-level bridge: a parallel HTTP/JSON-RPC layer exposes the same Four-CC command set; this spec only models the low-level TCP framing.
  • IR pass-through: setIrccCode lets the controller emulate any of the IR codes in Table 5 (Power, Input, digits, Volume, Channel, playback, color keys, etc.).
  • Source URL the spec was refined from is a markdown excerpt (not the original PDF).

Provenance

source_domains:
  - aca.im
  - applicationmarket.crestron.com
source_urls:
  - "https://aca.im/driver_docs/Sony/sony%20bravia%20simple%20ip%20control.pdf"
  - https://applicationmarket.crestron.com/content/Help/Sony/Sony_2014_Bravia_TV_v1_0_Help.pdf
retrieved_at: 2026-06-11T04:32:42.730Z
last_checked_at: 2026-06-11T13:46:47.865Z

Verification Summary

verdict: verified
checked_at: 2026-06-11T13:46:47.865Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec actions matched to FourCC commands in source Table 4; transport parameters verified; complete coverage of command-bearing operations. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "no firmware range stated; this is the BRAVIA 2014 Simple IP Control spec (v0.6) and may apply to additional model years not enumerated in source."
- "no source evidence for free-form variables."
- "no source evidence for multi-step sequences; remove or populate."
- "source contains no safety warnings, interlock procedures, or power-on sequencing requirements."
- "original PDF URL of the Simple IP Control Protocol document not captured; firmware compatibility range across BRAVIA 2014 models not enumerated."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0