Summary

The Sony KDA89 Series is a BRAVIA Professional Display. This spec covers Sony's "Simple IP Control" protocol (SSIP), a TCP-based command/response protocol used to control the display over a local network. Messages are fixed-length 24-byte frames with a 2-byte header, message type, 4-byte FourCC command, 16-byte parameter, and a 1-byte LF footer. Listening port: TCP 20060. No authentication.

The spec covers the 16 client commands and 5 device-sent events documented in Sony's BRAVIA Pro "Simple IP control" knowledge center (IRCC, POWR, TPOW, VOLU, AMUT, INPT, PMUT, TPMU, SCEN, BADR, MADR).

Transport

protocols:
  - tcp
addressing:
  port: 20060
auth:
  type: none

auth.type: none is an inference: the source contains no login, password, or token procedure. Anyone able to reach TCP 20060 on the LAN can send commands.

Traits

- powerable
- routable
- queryable
- levelable

powerable inferred from setPowerStatus / togglePowerStatus examples. routable inferred from setInput examples. queryable inferred from getPowerStatus / getInput / getAudioVolume examples. levelable inferred from setAudioVolume examples.

Actions

Each command: string is 23 bytes (bytes 0-22). The implementer must append byte 23 = 0x0A (LF) on transmit. See "Frame format" in Notes.

- id: set_power_status
  label: Set Power Status
  kind: action
  command: '*SCPOWR000000000000000{state}'
  params:
    - name: state
      type: string
      description: "Power state digit at byte 22. 0 for standby (off), 1 for active (on)."

- id: get_power_status
  label: Get Power Status
  kind: query
  command: '*SEPOWR################'
  params: []

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

- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: '*SCVOLU{volume_padded_16}'
  params:
    - name: volume_padded_16
      type: string
      description: "Volume as a 16-character decimal value, right-aligned and zero-padded. Source example: 29 = '0000000000000029'."

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

- id: set_audio_mute
  label: Set Audio Mute
  kind: action
  command: '*SCAMUT000000000000000{state}'
  params:
    - name: state
      type: string
      description: "Mute state digit at byte 22. 0 for unmute, 1 for mute."

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

- id: set_input
  label: Set Input
  kind: action
  command: '*SCINPT0000000{type}0000{number:04d}'
  params:
    - name: type
      type: string
      description: "Input type digit at byte 13. 1 = HDMI, 3 = Composite, 4 = Component, 5 = Screen Mirroring."
    - name: number
      type: integer
      description: "Input number (1-9999), zero-padded to 4 ASCII digits at bytes 18-21."

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

- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: '*SCPMUT000000000000000{state}'
  params:
    - name: state
      type: string
      description: "Picture mute state digit at byte 22. 0 to disable, 1 to enable (turn screen black)."

- 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: []

- id: set_scene_setting
  label: Set Scene Setting
  kind: action
  command: '*SCSCEN{scene_padded_16}'
  params:
    - name: scene_padded_16
      type: string
      description: "Scene name, case-sensitive, right-padded with literal 0x23 (hash) to 16 characters. Valid values: auto, auto24pSync, general."

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

- id: set_ircc_code
  label: Send IR Remote Code
  kind: action
  command: '*SCIRCC{ir_code:16s}'
  params:
    - name: ir_code
      type: string
      description: "16-character IR code value (right-padded with 0x30 ASCII '0'). See the IR Codes table in Notes for the full code list."

- id: get_broadcast_address
  label: Get Broadcast Address
  kind: query
  command: '*SEBADR{interface_padded_16}'
  params:
    - name: interface_padded_16
      type: string
      description: "Interface name left-justified, right-padded with literal 0x23 (hash) to 16 characters. Source example: 'eth0' + 12 hashes."

- id: get_mac_address
  label: Get MAC Address
  kind: query
  command: '*SEMADR{interface_padded_16}'
  params:
    - name: interface_padded_16
      type: string
      description: "Interface name left-justified, right-padded with literal 0x23 (hash) to 16 characters. Source example: 'eth0' + 12 hashes."

Feedbacks

- id: power_state
  type: enum
  description: "From getPowerStatus answer. Byte 22 of the 24-byte answer: 0 = standby, 1 = active."
  values:
    - standby
    - active

- id: audio_volume
  type: string
  description: "From getAudioVolume answer. 16-character decimal string, right-aligned in the answer param (e.g. '0000000000000029' for volume 29)."

- id: audio_mute
  type: enum
  description: "From getAudioMute answer. Byte 22 of the answer: 0 = not muted, 1 = muted."
  values:
    - not_muted
    - muted

- id: input_source
  type: object
  description: "From getInput answer. Byte 13 = type (1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring); bytes 18-21 = input number as 4 ASCII digits."

- id: picture_mute
  type: enum
  description: "From getPictureMute answer. Byte 22 of the answer: 0 = disabled, 1 = enabled."
  values:
    - disabled
    - enabled

- id: scene_setting
  type: string
  description: "From getSceneSetting answer. Scene name right-padded with 0x23 (hash) to 16 chars; case-sensitive."

- id: broadcast_address
  type: string
  description: "From getBroadcastAddress answer. IPv4 address (e.g. '192.168.0.14') right-padded with 0x23 (hash) to 16 chars."

- id: mac_address
  type: string
  description: "From getMacAddress answer. 12 hex digits right-padded with 0x23 (hash) to 16 chars."

Events

- id: power_change
  description: "firePowerChange. Sent by monitor when power state changes. Byte 22 of message: 0 = power off, 1 = power on."
  message_type: N
  fourcc: POWR

- id: input_change
  description: "fireInputChange. Sent when the input changes. Byte 13 = type (1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring); bytes 18-21 = number as 4 ASCII digits."
  message_type: N
  fourcc: INPT

- id: volume_change
  description: "fireVolumeChange. Sent when volume changes. Param bytes contain the new volume as a 16-character decimal value."
  message_type: N
  fourcc: VOLU

- id: mute_change
  description: "fireMuteChange. Sent when mute state changes. Byte 22 of message: 0 = unmuting, 1 = muting."
  message_type: N
  fourcc: AMUT

- id: picture_mute_change
  description: "firePictureMuteChange. Sent when picture mute state changes. Byte 22 of message: 0 = enabled, 1 = disabled."
  message_type: N
  fourcc: PMUT

Safety

confirmation_required_for: []
interlocks: []

Notes

Source

Frame format

All Simple IP Control messages are 24 bytes total:

Bytes Field Value
0-1 Header 0x2A 0x53 (ASCII *S) — fixed
2 Message type 0x43 [C] control, 0x45 [E] enquiry, 0x41 [A] answer, 0x4E [N] notify
3-6 Command 4 ASCII characters, FourCC
7-22 Parameters 16 bytes, command-specific
23 Footer 0x0A (LF) — fixed

The command: strings in Actions show bytes 0-22 (23 chars). The 0x0A footer must be appended on transmit.

Answer codes

Answer (A type) parameter fields carry one of:

  • 0000000000000000 — success
  • FFFFFFFFFFFFFFFF — error
  • NNNNNNNNNNNNNNNN — not found / not available for current input

On success, the parameter field carries the requested value (broadcast address, MAC address, current input, volume, etc.).

Device-side setup required

Simple IP control must be enabled on the monitor:

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

EU / RED-DA model variants

EU-area models have 3 variants based on RED-DA compliance. Settings and the set of available commands may differ per variant. See https://pro-bravia.sony.net/setup/device-settings/red-da/ for details.

IR codes (set_ircc_code parameter values)

The 16-character param string to pass to setIrccCode (FourCC IRCC) for each supported IR remote button:

IR Command 16-char param
Display 0000000000000005
Home 0000000000000006
Options 0000000000000007
Return 0000000000000008
Up 0000000000000009
Down 0000000000000010
Right 0000000000000011
Left 0000000000000012
Confirm 0000000000000013
Red 0000000000000014
Green 0000000000000015
Yellow 0000000000000016
Blue 0000000000000017
Num1 0000000000000018
Num2 0000000000000019
Num3 0000000000000020
Num4 0000000000000021
Num5 0000000000000022
Num6 0000000000000023
Num7 0000000000000024
Num8 0000000000000025
Num9 0000000000000026
Num0 0000000000000027
Volume Up 0000000000000030
Volume Down 0000000000000031
Mute 0000000000000032
Channel Up 0000000000000033
Channel Down 0000000000000034
Subtitle 0000000000000035
DOT 0000000000000038
Picture Off 0000000000000050
Wide 0000000000000061
Jump 0000000000000062
Sync Menu 0000000000000076
Forward 0000000000000077
Play 0000000000000078
Rewind 0000000000000079
Prev 0000000000000080
Stop 0000000000000081
Next 0000000000000082
Pause 0000000000000084
Flash Plus 0000000000000086
Flash Minus 0000000000000087
TV Power 0000000000000098
Audio 0000000000000099
Input 0000000000000101
Sleep 0000000000000104
Sleep Timer 0000000000000105
Video 2 0000000000000108
Picture Mode 0000000000000110
Demo Surround 0000000000000121
HDMI 1 0000000000000124
HDMI 2 0000000000000125
HDMI 3 0000000000000126
HDMI 4 0000000000000127
Action Menu 0000000000000129
Help 0000000000000130

Spec written to `docs/pdfs/sony_kda89_series_ip.spec.md`. 17 actions, 8 feedbacks, 5 events, 56 IR codes in Notes. Port 20060, no auth. No `#` comments inside YAML frames.

## Provenance

```yaml
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/serial-control/command/
  - https://pro-bravia.sony.net/remote-display-control/serial-control/
  - https://pro-bravia.sony.net/remote-display-control/
  - https://pro-bravia.sony.net/remote-display-control/rest-api/
retrieved_at: 2026-05-26T19:47:01.959Z
last_checked_at: 2026-06-02T06:13:10.141Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T06:13:10.141Z
matched_actions: 17
action_count: 17
confidence: medium
summary: "All 17 spec actions matched verbatim to source FourCC commands; all 11 distinct source commands represented; transport parameters (port 20060, TCP, no auth) verified; coverage complete. (3 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "firmware version compatibility not stated in source. Source applies to current BRAVIA Pro displays generally; specific KDA89 firmware requirements are not enumerated."
- "source contains no safety warnings, interlock procedures, power-on sequencing, or fault recovery material."
- "source contains no firmware version, voltage, current, power, fault behavior, or authentication information. Auth was inferred as none."

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