Summary

Sony BRAVIA KDXH8005 Series LED TVs (KD-43XH8005 / KD-49XH8005 / KD-55XH8005) controlled over TCP using Sony's SSIP "Simple IP Control" protocol. All messages are fixed 24-byte payloads on TCP port 20060, with a 2-byte header (*S), 1-byte message type (C/E/A/N), 4-byte FourCC command, 16-byte parameter block, and 1-byte LF footer.

Transport

protocols:
  - tcp
addressing:
  port: 20060
auth:
  type: none  # inferred: no auth procedure in source

Message frame (24 bytes, all ASCII printable or 0x0A):

Offset Length Meaning
0–1 2 Header *S (0x2A 0x53), fixed
2 1 Message type: C (Control) / E (Enquiry) / A (Answer) / N (Notify)
3–6 4 FourCC command code (ASCII)
7–22 16 Parameters (ASCII, right-padded with #)
23 1 Footer 0x0A (LF), fixed

Traits

- powerable       # inferred from setPowerStatus / togglePowerStatus
- routable        # inferred from setInput / getInput
- queryable       # inferred from get* command set
- levelable       # inferred from setAudioVolume

Actions

# ----- Power -----
- id: set_power_status
  label: Set Power Status
  kind: action
  command: "*SCPOWR000000000000000{state}"  # state: 0=Standby, 1=Active; 24th byte is LF (0x0A)
  params:
    - name: state
      type: integer
      enum: [0, 1]
      description: 0 = Standby (Off), 1 = Active (On)

- id: get_power_status
  label: Get Power Status
  kind: query
  command: "*SEPOWR################"  # params padded with `#`
  params: []

- id: toggle_power_status
  label: Toggle Power Status
  kind: action
  command: "*SCTPOW################"
  params: []

# ----- Audio Volume -----
- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: "*SCVOLU00000000000000{level}"  # level in decimal digit pad (e.g. 0000000000000029 = 29)
  params:
    - name: level
      type: integer
      description: Volume value, decimal, right-aligned in 16-byte param field

- id: get_audio_volume
  label: Get Audio Volume
  kind: query
  command: "*SEVOLU################"
  params: []

# ----- Audio Mute -----
- id: set_audio_mute
  label: Set Audio Mute
  kind: action
  command: "*SCAMUT00000000000000{state}"  # 0=Unmute, 1=Mute
  params:
    - name: state
      type: integer
      enum: [0, 1]

- id: get_audio_mute
  label: Get Audio Mute
  kind: query
  command: "*SEAMUT################"
  params: []

# ----- Input Routing -----
- id: set_input
  label: Set Input
  kind: action
  command: "*SCINPT0000000000{kind}0{number}"  # kind 1=HDMI, 3=Composite, 4=Component, 5=ScreenMirroring; number 1-9999
  params:
    - name: kind
      type: integer
      enum: [1, 3, 4, 5]
      description: "1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring"
    - name: number
      type: integer
      description: Input number 1-9999

- id: get_input
  label: Get Current Input
  kind: query
  command: "*SEINPT################"
  params: []

# ----- Picture Mute -----
- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: "*SCPMUT00000000000000{state}"  # 0=Disable, 1=Enable (black screen)
  params:
    - name: state
      type: integer
      enum: [0, 1]

- id: get_picture_mute
  label: Get Picture Mute
  kind: query
  command: "*SEPMUT################"
  params: []

- id: toggle_picture_mute
  label: Toggle Picture Mute
  kind: action
  command: "*SCTPMU################"
  params: []

# ----- Scene Setting -----
- id: set_scene_setting
  label: Set Scene Setting
  kind: action
  command: "*SCSCEN{value}#########"  # value: "auto", "auto24pSync", "general" (case-sensitive, right-padded with #)
  params:
    - name: value
      type: string
      enum: ["auto", "auto24pSync", "general"]

- id: get_scene_setting
  label: Get Scene Setting
  kind: query
  command: "*SESCEN################"
  params: []

# ----- IR Code Passthrough (setIrccCode) -----
# All IR commands use the same FourCC `IRCC` with the IR code as the 16-byte param.
# Right-aligned decimal in the last 2 bytes; leading bytes are ASCII `0` digits.
- id: ircc_display
  label: IR Display
  kind: action
  command: "*SCIRCC0000000000000005"

- id: ircc_home
  label: IR Home
  kind: action
  command: "*SCIRCC0000000000000006"

- id: ircc_options
  label: IR Options
  kind: action
  command: "*SCIRCC0000000000000007"

- id: ircc_return
  label: IR Return
  kind: action
  command: "*SCIRCC0000000000000008"

- id: ircc_up
  label: IR Up
  kind: action
  command: "*SCIRCC0000000000000009"

- id: ircc_down
  label: IR Down
  kind: action
  command: "*SCIRCC0000000000000010"

- id: ircc_right
  label: IR Right
  kind: action
  command: "*SCIRCC0000000000000011"

- id: ircc_left
  label: IR Left
  kind: action
  command: "*SCIRCC0000000000000012"

- id: ircc_confirm
  label: IR Confirm
  kind: action
  command: "*SCIRCC0000000000000013"

- id: ircc_red
  label: IR Red
  kind: action
  command: "*SCIRCC0000000000000014"

- id: ircc_green
  label: IR Green
  kind: action
  command: "*SCIRCC0000000000000015"

- id: ircc_yellow
  label: IR Yellow
  kind: action
  command: "*SCIRCC0000000000000016"

- id: ircc_blue
  label: IR Blue
  kind: action
  command: "*SCIRCC0000000000000017"

- id: ircc_num1
  label: IR Num 1
  kind: action
  command: "*SCIRCC0000000000000018"

- id: ircc_num2
  label: IR Num 2
  kind: action
  command: "*SCIRCC0000000000000019"

- id: ircc_num3
  label: IR Num 3
  kind: action
  command: "*SCIRCC0000000000000020"

- id: ircc_num4
  label: IR Num 4
  kind: action
  command: "*SCIRCC0000000000000021"

- id: ircc_num5
  label: IR Num 5
  kind: action
  command: "*SCIRCC0000000000000022"

- id: ircc_num6
  label: IR Num 6
  kind: action
  command: "*SCIRCC0000000000000023"

- id: ircc_num7
  label: IR Num 7
  kind: action
  command: "*SCIRCC0000000000000024"

- id: ircc_num8
  label: IR Num 8
  kind: action
  command: "*SCIRCC0000000000000025"

- id: ircc_num9
  label: IR Num 9
  kind: action
  command: "*SCIRCC0000000000000026"

- id: ircc_num0
  label: IR Num 0
  kind: action
  command: "*SCIRCC0000000000000027"

- id: ircc_volume_up
  label: IR Volume Up
  kind: action
  command: "*SCIRCC0000000000000030"

- id: ircc_volume_down
  label: IR Volume Down
  kind: action
  command: "*SCIRCC0000000000000031"

- id: ircc_mute
  label: IR Mute
  kind: action
  command: "*SCIRCC0000000000000032"

- id: ircc_channel_up
  label: IR Channel Up
  kind: action
  command: "*SCIRCC0000000000000033"

- id: ircc_channel_down
  label: IR Channel Down
  kind: action
  command: "*SCIRCC0000000000000034"

- id: ircc_subtitle
  label: IR Subtitle
  kind: action
  command: "*SCIRCC0000000000000035"

- id: ircc_dot
  label: IR DOT
  kind: action
  command: "*SCIRCC0000000000000038"

- id: ircc_picture_off
  label: IR Picture Off
  kind: action
  command: "*SCIRCC0000000000000050"

- id: ircc_wide
  label: IR Wide
  kind: action
  command: "*SCIRCC0000000000000061"

- id: ircc_jump
  label: IR Jump
  kind: action
  command: "*SCIRCC0000000000000062"

- id: ircc_sync_menu
  label: IR Sync Menu
  kind: action
  command: "*SCIRCC0000000000000076"

- id: ircc_forward
  label: IR Forward
  kind: action
  command: "*SCIRCC0000000000000077"

- id: ircc_play
  label: IR Play
  kind: action
  command: "*SCIRCC0000000000000078"

- id: ircc_rewind
  label: IR Rewind
  kind: action
  command: "*SCIRCC0000000000000079"

- id: ircc_prev
  label: IR Prev
  kind: action
  command: "*SCIRCC0000000000000080"

- id: ircc_stop
  label: IR Stop
  kind: action
  command: "*SCIRCC0000000000000081"

- id: ircc_next
  label: IR Next
  kind: action
  command: "*SCIRCC0000000000000082"

- id: ircc_pause
  label: IR Pause
  kind: action
  command: "*SCIRCC0000000000000084"

- id: ircc_flash_plus
  label: IR Flash Plus
  kind: action
  command: "*SCIRCC0000000000000086"

- id: ircc_flash_minus
  label: IR Flash Minus
  kind: action
  command: "*SCIRCC0000000000000087"

- id: ircc_tv_power
  label: IR TV Power
  kind: action
  command: "*SCIRCC0000000000000098"

- id: ircc_audio
  label: IR Audio
  kind: action
  command: "*SCIRCC0000000000000099"

- id: ircc_input
  label: IR Input
  kind: action
  command: "*SCIRCC0000000000000101"

- id: ircc_sleep
  label: IR Sleep
  kind: action
  command: "*SCIRCC0000000000000104"

- id: ircc_sleep_timer
  label: IR Sleep Timer
  kind: action
  command: "*SCIRCC0000000000000105"

- id: ircc_video2
  label: IR Video 2
  kind: action
  command: "*SCIRCC0000000000000108"

- id: ircc_picture_mode
  label: IR Picture Mode
  kind: action
  command: "*SCIRCC0000000000000110"

- id: ircc_demo_surround
  label: IR Demo Surround
  kind: action
  command: "*SCIRCC0000000000000121"

- id: ircc_hdmi1
  label: IR HDMI 1
  kind: action
  command: "*SCIRCC0000000000000124"

- id: ircc_hdmi2
  label: IR HDMI 2
  kind: action
  command: "*SCIRCC0000000000000125"

- id: ircc_hdmi3
  label: IR HDMI 3
  kind: action
  command: "*SCIRCC0000000000000126"

- id: ircc_hdmi4
  label: IR HDMI 4
  kind: action
  command: "*SCIRCC0000000000000127"

- id: ircc_action_menu
  label: IR Action Menu
  kind: action
  command: "*SCIRCC0000000000000129"

- id: ircc_help
  label: IR Help
  kind: action
  command: "*SCIRCC0000000000000130"

# ----- Network Info -----
- id: get_broadcast_address
  label: Get Broadcast Address
  kind: query
  command: "*SEBADReth0############"  # interface id ASCII, e.g. "eth0"
  params:
    - name: interface
      type: string
      description: Interface name (e.g. "eth0")

- id: get_mac_address
  label: Get MAC Address
  kind: query
  command: "*SEMADR{interface}##########"  # interface id ASCII, e.g. "eth0"
  params:
    - name: interface
      type: string
      description: Interface name (e.g. "eth0")

Feedbacks

- id: power_state
  type: enum
  values: [standby, active]
  source: getPowerStatus Answer (param last byte 0=Standby, 1=Active)

- id: audio_volume
  type: integer
  source: getAudioVolume Answer (volume value in 16-byte param)

- id: audio_mute
  type: enum
  values: [unmuted, muted]
  source: getAudioMute Answer (param last byte 0=Unmuted, 1=Muted)

- id: current_input
  type: object
  source: getInput Answer
  fields:
    kind: integer   # 1=HDMI, 3=Composite, 4=Component, 5=ScreenMirroring
    number: integer # 1-9999

- id: picture_mute_state
  type: enum
  values: [disabled, enabled]
  source: getPictureMute Answer (param last byte 0=Disabled, 1=Enabled)

- id: scene_setting
  type: string
  source: getSceneSetting Answer (param value; "N…N" = not available for current input)

- id: broadcast_address
  type: string
  source: getBroadcastAddress Answer (e.g. "192.168.0.14" right-padded with #)

- id: mac_address
  type: string
  source: getMacAddress Answer (MAC right-padded with #)

Variables

# Set-only numeric/string parameters already covered as Actions above.
# No additional tunable parameters enumerated in source.

Events

# Unsolicited Notify (N) messages from monitor to client.
- id: fire_power_change
  fourcc: POWR
  payload: "*SNPOWR000000000000000{state}"  # state 0=powering off, 1=powering on

- id: fire_input_change
  fourcc: INPT
  payload: "*SNINPT0000000000{kind}0{number}"  # kind 1/3/4/5; number 1-9999

- id: fire_volume_change
  fourcc: VOLU
  payload: "*SNVOLU{level}##############"  # level = right-aligned decimal

- id: fire_mute_change
  fourcc: AMUT
  payload: "*SNAMUT000000000000000{state}"  # state 0=unmuting, 1=muting

- id: fire_picture_mute_change
  fourcc: PMUT
  payload: "*SNPMUT000000000000000{state}"  # state 0=enabled, 1=disabled

Macros

# UNRESOLVED: no multi-step sequences described in source

Safety

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

Notes

Protocol is SSIP (Sony Simple IP Control) — fixed 24-byte frames, TCP port 20060, no authentication. All command strings shown above are the literal 23-byte ASCII body; the 24th byte is the fixed LF footer (0x0A) and is appended by the stack.

Answer / error decoding: an Answer (A) message with 0…0 parameters indicates success; F…F (16 F's) indicates an error (e.g. invalid parameters). For setInput, N…N indicates "Not Found".

Required monitor settings (user must enable in OSD before TCP control works):

  • Settings → Network & Internet → Remote device settings → Control remotely
  • Settings → Network & Internet → Home network → IP control → Simple IP control

EU RED-DA caveat: EU-area models ship in three RED-DA compliance variants; available commands and parameter ranges differ per variant. See https://pro-bravia.sony.net/setup/device-settings/red-da/ for per-variant detail. Commands listed above are the superset for non-EU/redundant variants.

Source caveat: protocol documentation lives under Sony's "BRAVIA Professional Displays Knowledge Center" (pro-bravia.sony.net). Source text does not explicitly confirm XH8005 chassis support; treat the list above as the best-effort command set pending a vendor confirmation.

Variable-length parameter handling: 16-byte parameter fields are right-padded with ASCII # (0x23) for fixed values; numeric values are zero-padded left.

Connection model: source describes netcat example — open single TCP connection to monitor IP on port 20060, then send/receive 24-byte messages. No persistent session, no handshake, no keepalive documented in source.

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/
  - https://pro-bravia.sony.net/remote-display-control/ip-control-comparison/
retrieved_at: 2026-05-27T15:07:21.888Z
last_checked_at: 2026-06-02T07:06:41.668Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T07:06:41.668Z
matched_actions: 73
action_count: 73
confidence: medium
summary: "All 73 spec actions match FourCC commands in source; transport parameters verified; source coverage complete. (3 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is the BRAVIA Professional Displays Knowledge Center; protocol applicability to consumer XH8005 chassis not explicitly confirmed in source text. EU-region models ship in three RED-DA compliance variants with different available commands — see Notes."
- "no multi-step sequences described in source"
- "no safety warnings, interlock procedures, or power-on sequencing"

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