Summary

BRAVIA Professional Displays KDLW700 Series monitor controlled over TCP/IP using Sony's SSIP Simple IP Control protocol. All messages are 24-byte fixed-length frames (2-byte header *S, 1-byte message type, 4-byte FourCC command, 16-byte parameter, 1-byte LF footer) on TCP port 20060.

Transport

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

Traits

- powerable       # inferred from setPowerStatus / togglePowerStatus / getPowerStatus
- routable        # inferred from setInput / getInput (HDMI, Composite, Component, Screen Mirroring)
- queryable       # inferred from getPowerStatus / getAudioVolume / getAudioMute / getInput / getPictureMute / getSceneSetting / getBroadcastAddress / getMacAddress
- levelable       # inferred from setAudioVolume / getAudioVolume

Actions

- id: set_ircc_code
  label: Set IRCC Code (sends IR remote command)
  kind: action
  command: "*SCIRCC{ircc}###########"  # 4 ASCII bytes IRCC + padded params, 0x0A footer
  params:
    - name: ircc
      type: string
      description: 2-digit decimal IR command code (see IR Commands table in source)

- id: set_power_status
  label: Set Power Status
  kind: action
  command: "*SCPOWR000000000000000{state}\n"  # 0=Standby, 1=Active
  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################\n"
  params: []

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

- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: "*SCVOLU{volume}##########\n"  # volume as 16-digit decimal, right-padded with 0
  params:
    - name: volume
      type: integer
      description: Volume value (decimal, left-padded with 0 to 16 digits, e.g. 41 -> "0000000000000029")

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

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

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

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

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

- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: "*SCPMUT000000000000000{state}\n"
  params:
    - name: state
      type: integer
      enum: [0, 1]
      description: "0=Disabled, 1=Enabled (screen black)"

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

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

- id: set_scene_setting
  label: Set Scene Setting
  kind: action
  command: "*SCSCEN{scene}##########\n"  # scene: "auto", "auto24pSync", "general"; case-sensitive, right-pad with #
  params:
    - name: scene
      type: string
      enum: ["auto", "auto24pSync", "general"]
      description: Scene setting string, case-sensitive, right-padded with '#'

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

- id: get_broadcast_address
  label: Get Broadcast Address (eth0)
  kind: query
  command: "*SEBADReth0#############\n"  # EU models only (per source footnote)
  params:
    - name: interface
      type: string
      description: Interface name (source example uses "eth0")

- id: get_mac_address
  label: Get MAC Address (eth0)
  kind: query
  command: "*SEMADReth0#############\n"  # EU models only (per source footnote)
  params:
    - name: interface
      type: string
      description: Interface name (source example uses "eth0")

Feedbacks

- id: power_state
  type: enum
  values: [active, standby]
  description: Reported in response to getPowerStatus / firePowerChange (0=Standby/Off, 1=Active/On)

- id: audio_volume
  type: integer
  description: Reported in getAudioVolume answer and fireVolumeChange notifications (16-digit decimal value, right-padded with '0')

- id: audio_mute
  type: enum
  values: [unmuted, muted]
  description: Reported in getAudioMute answer and fireMuteChange (0=Unmuted, 1=Muted)

- id: current_input
  type: object
  description: Reported in getInput answer and fireInputChange; encodes input type (1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring) and port number 1-9999

- id: picture_mute_state
  type: enum
  values: [disabled, enabled]
  description: Reported in getPictureMute answer and firePictureMuteChange (0=Disabled, 1=Enabled)

- id: scene_setting
  type: string
  description: Reported in getSceneSetting answer; "auto", "auto24pSync", "general", or 'N'x16 = not available for current input

- id: broadcast_address
  type: string
  description: IPv4 broadcast address of named interface; reported in getBroadcastAddress answer, right-padded with '#'

- id: mac_address
  type: string
  description: MAC address of named interface; reported in getMacAddress answer, right-padded with '#'

- id: control_ack
  type: enum
  values: [success, error]
  description: Common Answer (A) message; 16-byte '0' payload = success, 16-byte 'F' payload = error

- id: not_found
  type: enum
  values: [not_found]
  description: setInput answer 'N'x16 = input/port not found

- id: scene_not_available
  type: enum
  values: [not_available]
  description: setSceneSetting / getSceneSetting answer 'N'x16 = not available for current input

Variables

# UNRESOLVED: source documents no settable numeric/scalar parameters beyond the discrete actions above

Events

- id: fire_power_change
  message_type: N
  fourcc: POWR
  description: Monitor -> Client notification; byte[22]=0 sent on power off, byte[22]=1 sent on power on

- id: fire_input_change
  message_type: N
  fourcc: INPT
  description: Monitor -> Client notification when input changes; encodes type (1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring) and port 1-9999

- id: fire_volume_change
  message_type: N
  fourcc: VOLU
  description: Monitor -> Client notification on volume change; 16-digit decimal value, right-padded with '0'

- id: fire_mute_change
  message_type: N
  fourcc: AMUT
  description: Monitor -> Client notification on mute change; byte[22]=0 unmute, 1 mute

- id: fire_picture_mute_change
  message_type: N
  fourcc: PMUT
  description: Monitor -> Client notification on picture mute change; byte[22]=0 enabled, 1 disabled (note: source row text is inverted from get/set encoding; record as source states)

Macros

# UNRESOLVED: source documents no multi-step macro sequences

Safety

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

Notes

Protocol uses 24-byte fixed frames: 0x2A 0x53 (header *S) + 1 byte type (C/E/A/N) + 4 ASCII command bytes (FourCC) + 16 ASCII parameter bytes (right-padded with 0 for control values, # for string parameters) + 0x0A (LF footer). Source example power-off request: *SCPOWR0000000000000000; example response: *SAPOWR0000000000000000 *SNPOWR0000000000000000 (SA* = accept, SN* = current state notify). Volume values are 16-digit decimals, left-padded with 0 (e.g. volume 41 hex = decimal 41 encoded as 0000000000000029). IR commands via setIrccCode use 2-digit decimal codes (e.g. Display=05, Home=06, VolumeUp=30, Mute=32, TVPower=98, HDMI1=124); full IR code table is in the source. EU-area KDLW700 models ship in 3 RED-DA compliance variants; available commands and settings differ per variant (see https://pro-bravia.sony.net/setup/device-settings/red-da/). getBroadcastAddress and getMacAddress carry a * footnote in source restricting them to EU models. Required monitor settings: Settings -> Network & Internet -> Remote device settings -> Control remotely; and Settings -> Network & Internet -> Home network -> IP control -> Simple IP control. Both wired and wireless LAN supported.

Provenance

source_domains:
  - pro-bravia.sony.net
  - aca.im
source_urls:
  - https://pro-bravia.sony.net/remote-display-control/simple-ip-control/
  - https://pro-bravia.sony.net/remote-display-control/rest-api/structure/
  - https://pro-bravia.sony.net/remote-display-control/ip-control-comparison/
  - "https://aca.im/driver_docs/Sony/sony%20bravia%20simple%20ip%20control.pdf"
retrieved_at: 2026-06-12T04:28:30.168Z
last_checked_at: 2026-06-12T19:48:41.919Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:48:41.919Z
matched_actions: 17
action_count: 17
confidence: medium
summary: "All 17 spec actions matched verbatim with source command definitions; transport parameters confirmed; complete coverage of source command catalogue. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "EU area models have 3 RED-DA specification variants with different available commands; full per-variant command matrix not provided in source."
- "source documents no settable numeric/scalar parameters beyond the discrete actions above"
- "source documents no multi-step macro sequences"
- "source contains no safety warnings, interlock procedures, or power-on sequencing requirements"
- "firmware version compatibility not stated in source. EU RED-DA variant-specific command availability not fully documented in source."

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