Summary

Sony BRAVIA KD-SD8505 series displays support the Simple IP Control (SSIP) protocol over TCP. The protocol uses a 24-byte fixed-size binary message with FourCC function identifiers and ASCII-encoded parameters. Covers power, audio volume/mute, channel selection, input routing, PIP, picture mute, network address queries, and IR remote code emulation. A 30-second idle timeout disconnects stale connections.

Transport

protocols:
  - tcp
addressing:
  port: 20060
auth:
  type: none  # inferred: no auth procedure in source
notes:
  - "24-byte fixed-size messages over TCP"
  - "Header: 0x2A 0x53 (*S), Footer: 0x0A (LF)"
  - "Server disconnects after 30 s idle"

Traits

traits:
  - powerable    # setPowerStatus / getPowerStatus
  - queryable    # multiple enquiry (E-type) commands
  - routable     # setInput / setInputSource
  - levelable    # setAudioVolume

Actions

# Message format: *S{TYPE}{FOURCC}{PARAM16}\n  (24 bytes total)
#   TYPE: C=Control(0x43), E=Enquiry(0x45)
#   FOURCC: 4 ASCII chars identifying function
#   PARAM16: 16 ASCII chars, zero-padded; '#' = wildcard for enquiry
#   Footer: 0x0A (LF)
#
# In command templates below, variable parts shown in {braces}.

- id: set_power_status
  label: Set Power Status
  kind: action
  command: "*SCPOWR{status}\n"
  params:
    - name: status
      type: enum
      values:
        - value: "0000000000000000"
          label: Standby (Off)
        - value: "0000000000000001"
          label: Active (On)

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

- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: "*SCVOLU{level:0>16}\n"
  params:
    - name: level
      type: integer
      min: 0
      max: null  # UNRESOLVED: max volume not stated in source
      description: "Volume level as 16-digit zero-padded decimal (e.g. 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: "*SCAMUT{status}\n"
  params:
    - name: status
      type: enum
      values:
        - value: "0000000000000000"
          label: Unmute
        - value: "0000000000000001"
          label: Mute

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

- id: set_channel
  label: Set Channel (Preset)
  kind: action
  command: "*SCCHNN{channel}\n"
  params:
    - name: channel
      type: string
      description: "16-char preset number: 8-digit major, '.', 7-digit minor, right-padded (e.g. 00000050.1000000 for ch 50.1, 00000006.0000000 for ch 6)"

- id: get_channel
  label: Get Current Channel
  kind: query
  command: "*SECHNN################\n"
  params: []

- id: set_triplet_channel
  label: Set Channel (Triplet)
  kind: action
  command: "*SCTCHN{triplet}0000\n"
  params:
    - name: triplet
      type: string
      description: "12-hex-char triplet in hexadecimal (e.g. 7FE07FE00400 = 32736.32736.1024). Last 4 param bytes unused."

- id: get_triplet_channel
  label: Get Triplet Channel
  kind: query
  command: "*SETCHN################\n"
  params: []

- id: set_input_source
  label: Set Input Source
  kind: action
  command: "*SCISRC{source}############\n"
  params:
    - name: source
      type: enum
      values:
        - value: dvbt
          label: DVB-T
        - value: dvbc
          label: DVB-C
        - value: dvbs
          label: DVB-S
        - value: isdbt
          label: ISDB-T
        - value: isdbbs
          label: ISDB-BS
        - value: isdbcs
          label: ISDB-CS
        - value: antenna
          label: Antenna
        - value: cable
          label: Cable
        - value: isdbgt
          label: ISDB-GB
      description: "Source name left-justified, padded right with '#' to fill 16 chars"

- id: get_input_source
  label: Get Input Source
  kind: query
  command: "*SEISRC################\n"
  params: []

- id: set_input
  label: Set Input
  kind: action
  command: "*SCINPT{param16}\n"
  params:
    - name: input_type
      type: enum
      values:
        - value: "tv"
          label: TV
          param: "0000000000000000"
        - value: hdmi
          label: HDMI
          param: "00000010000{port:04d}"
        - value: scart
          label: SCART
          param: "00000020000{port:04d}"
        - value: composite
          label: Composite
          param: "00000030000{port:04d}"
        - value: component
          label: Component
          param: "00000040000{port:04d}"
        - value: screen_mirroring
          label: Screen Mirroring
          param: "00000050000{port:04d}"
        - value: pc_rgb
          label: PC RGB Input
          param: "00000060000{port:04d}"
    - name: port
      type: integer
      min: 1
      max: 9999
      description: "Port number (1-9999), not used for TV input type"

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

- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: "*SCPMUT{status}\n"
  params:
    - name: status
      type: enum
      values:
        - value: "0000000000000000"
          label: Disable Picture Mute
        - value: "0000000000000001"
          label: Enable Picture Mute (Black Screen)

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

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

- id: set_pip
  label: Set PIP
  kind: action
  command: "*SCPIPI{status}\n"
  params:
    - name: status
      type: enum
      values:
        - value: "0000000000000000"
          label: Disable PIP
        - value: "0000000000000001"
          label: Enable PIP

- id: get_pip
  label: Get PIP Status
  kind: query
  command: "*SEPIPI################\n"
  params: []

- id: toggle_pip
  label: Toggle PIP
  kind: action
  command: "*SCTPIP################\n"
  params: []

- id: toggle_pip_position
  label: Toggle PIP Position
  kind: action
  command: "*SCTPPP################\n"
  params: []

- id: get_broadcast_address
  label: Get Broadcast Address
  kind: query
  command: "*SEBADReth0############\n"
  params:
    - name: interface
      type: string
      description: "Network interface name (e.g. eth0), padded with # to 16 chars"

- id: get_mac_address
  label: Get MAC Address
  kind: query
  command: "*SEMADReth0############\n"
  params:
    - name: interface
      type: string
      description: "Network interface name (e.g. eth0), padded with # to 16 chars"

- id: send_ircc
  label: Send IR Code
  kind: action
  command: "*SCIRCC{code:0>16}\n"
  params:
    - name: code
      type: enum
      description: "IR code parameter as 16-digit zero-padded decimal"
      values:
        - value: "0000000000000000"
          label: Power Off
        - value: "0000000000000001"
          label: Input
        - value: "0000000000000002"
          label: GGuide
        - value: "0000000000000003"
          label: EPG
        - value: "0000000000000004"
          label: Favorites
        - value: "0000000000000005"
          label: Display
        - value: "0000000000000006"
          label: Home
        - value: "0000000000000007"
          label: Options
        - value: "0000000000000008"
          label: Return
        - value: "0000000000000009"
          label: Up
        - value: "0000000000000010"
          label: Down
        - value: "0000000000000011"
          label: Right
        - value: "0000000000000012"
          label: Left
        - value: "0000000000000013"
          label: Confirm
        - value: "0000000000000014"
          label: Red
        - value: "0000000000000015"
          label: Green
        - value: "0000000000000016"
          label: Yellow
        - value: "0000000000000017"
          label: Blue
        - value: "0000000000000018"
          label: Num1
        - value: "0000000000000019"
          label: Num2
        - value: "0000000000000020"
          label: Num3
        - value: "0000000000000021"
          label: Num4
        - value: "0000000000000022"
          label: Num5
        - value: "0000000000000023"
          label: Num6
        - value: "0000000000000024"
          label: Num7
        - value: "0000000000000025"
          label: Num8
        - value: "0000000000000026"
          label: Num9
        - value: "0000000000000027"
          label: Num0
        - value: "0000000000000028"
          label: Num11
        - value: "0000000000000029"
          label: Num12
        - value: "0000000000000030"
          label: Volume Up
        - value: "0000000000000031"
          label: Volume Down
        - value: "0000000000000032"
          label: Mute
        - value: "0000000000000033"
          label: Channel Up
        - value: "0000000000000034"
          label: Channel Down
        - value: "0000000000000035"
          label: Subtitle
        - value: "0000000000000036"
          label: Closed Caption
        - value: "0000000000000037"
          label: Enter
        - value: "0000000000000038"
          label: DOT
        - value: "0000000000000039"
          label: Analog
        - value: "0000000000000040"
          label: Teletext
        - value: "0000000000000041"
          label: Exit
        - value: "0000000000000042"
          label: Analog2
        - value: "0000000000000043"
          label: AD
        - value: "0000000000000044"
          label: Digital
        - value: "0000000000000045"
          label: Analog?
        - value: "0000000000000046"
          label: BS
        - value: "0000000000000047"
          label: CS
        - value: "0000000000000048"
          label: BS/CS
        - value: "0000000000000049"
          label: Ddata
        - value: "0000000000000050"
          label: Pic Off
        - value: "0000000000000051"
          label: Tv/Radio
        - value: "0000000000000052"
          label: Theater
        - value: "0000000000000053"
          label: SEN
        - value: "0000000000000054"
          label: Internet Widgets
        - value: "0000000000000055"
          label: Internet Video
        - value: "0000000000000056"
          label: Netflix
        - value: "0000000000000057"
          label: Scene Select
        - value: "0000000000000058"
          label: Mode3D
        - value: "0000000000000059"
          label: iManual
        - value: "0000000000000060"
          label: Audio
        - value: "0000000000000061"
          label: Wide
        - value: "0000000000000062"
          label: Jump
        - value: "0000000000000063"
          label: PAP
        - value: "0000000000000064"
          label: MyEPG
        - value: "0000000000000065"
          label: Program Description
        - value: "0000000000000066"
          label: Write Chapter
        - value: "0000000000000067"
          label: TrackID
        - value: "0000000000000068"
          label: Ten Key
        - value: "0000000000000069"
          label: AppliCast
        - value: "0000000000000070"
          label: acTVila
        - value: "0000000000000071"
          label: Delete Video
        - value: "0000000000000072"
          label: Photo Frame
        - value: "0000000000000073"
          label: TV Pause
        - value: "0000000000000074"
          label: KeyPad
        - value: "0000000000000075"
          label: Media
        - value: "0000000000000076"
          label: Sync Menu
        - value: "0000000000000077"
          label: Forward
        - value: "0000000000000078"
          label: Play
        - value: "0000000000000079"
          label: Rewind
        - value: "0000000000000080"
          label: Prev
        - value: "0000000000000081"
          label: Stop
        - value: "0000000000000082"
          label: Next
        - value: "0000000000000083"
          label: Rec
        - value: "0000000000000084"
          label: Pause
        - value: "0000000000000085"
          label: Eject
        - value: "0000000000000086"
          label: Flash Plus
        - value: "0000000000000087"
          label: Flash Minus
        - value: "0000000000000088"
          label: TopMenu
        - value: "0000000000000089"
          label: PopupMenu
        - value: "0000000000000090"
          label: Rakuraku Start
        - value: "0000000000000091"
          label: One Touch Time Rec
        - value: "0000000000000092"
          label: One Touch View
        - value: "0000000000000093"
          label: One Touch Rec
        - value: "0000000000000094"
          label: One Touch Stop
        - value: "0000000000000095"
          label: DUX
        - value: "0000000000000096"
          label: Football Mode
        - value: "0000000000000097"
          label: Social

Feedbacks

# Answer (A-type, 0x41) responses from TV to controller.
# All share format: *SA{FOURCC}{PARAM16}\n
# PARAM all-zeros (0000000000000000) = success; all-F (FFFFFFFFFFFFFFFF) = error.

- id: power_state
  type: enum
  values: [off, on]
  description: "Answer to getPowerStatus. Off=0000000000000000, On=0000000000000001"

- id: audio_volume
  type: integer
  description: "Answer to getAudioVolume. 16-digit zero-padded decimal value."

- id: audio_mute_state
  type: enum
  values: [unmuted, muted]
  description: "Answer to getAudioMute. Not Muted=0000000000000000, Muted=0000000000000001"

- id: channel_preset
  type: string
  description: "Answer to getChannel. Preset number as XXXXXXXX.XXXXXXX."

- id: channel_triplet
  type: string
  description: "Answer to getTripletChannel. 12-hex-char triplet."

- id: input_source
  type: string
  description: "Answer to getInputSource. Source name padded with #."

- id: input_state
  type: string
  description: "Answer to getInput. Encoded input type and port number."

- id: picture_mute_state
  type: enum
  values: [disabled, enabled]
  description: "Answer to getPictureMute. Disabled=0, Enabled=1"

- id: pip_state
  type: enum
  values: [disabled, enabled]
  description: "Answer to getPip. Disabled=0, Enabled=1"

- id: broadcast_address
  type: string
  description: "Answer to getBroadcastAddress. IPv4 broadcast address padded with #."

- id: mac_address
  type: string
  description: "Answer to getMacAddress. MAC address padded with #."

- id: command_error
  type: boolean
  description: "Universal error indicator. All-F param (FFFFFFFFFFFFFFFF) signals invalid parameter or command failure."

Variables

# UNRESOLVED: no persistent variable model described in source beyond action parameters

Events

# Notify (N-type, 0x4E) messages sent unsolicited from TV to controller.
# Format: *SN{FOURCC}{PARAM16}\n

- id: power_change
  description: "Sent on power state change"
  type: enum
  values: [off, on]
  fourcc: POWR

- id: channel_change
  description: "Sent when channel changes"
  type: string
  fourcc: CHNN
  value_format: "XXXXXXXX.XXXXXXX preset number"

- id: input_change
  description: "Sent when input changes (TV, HDMI, SCART, Composite, Component, Screen Mirroring, PC RGB)"
  type: string
  fourcc: INPT
  value_format: "Same encoding as setInput answer"

- id: volume_change
  description: "Sent when volume changes"
  type: integer
  fourcc: VOLU

- id: mute_change
  description: "Sent when mute state changes"
  type: enum
  values: [unmuted, muted]
  fourcc: AMUT

- id: pip_change
  description: "Sent when PIP state changes"
  type: enum
  values: [disabled, enabled]
  fourcc: PIPI

- id: picture_mute_change
  description: "Sent when picture mute state changes"
  type: enum
  values: [disabled, enabled]
  fourcc: PMUT

Macros

# UNRESOLVED: no macro sequences described in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source

Notes

  • Protocol version 0.6 as stated in source document header.
  • 30-second TCP idle timeout: client must send commands within this window or handle reconnection.
  • Parameter field uses '#' (0x23) padding for enquiry commands and as right-pad filler for short string values.
  • Answer success is 16 ASCII zeroes (0000000000000000); error is 16 ASCII F's (FFFFFFFFFFFFFFFF).
  • The Simple IP Control setting must be enabled on the TV via Network > Home Network Setup > IP Control > Simple IP Control (Normal Mode) or Hotel/Pro Mode > IP Control > Simple IP Control.
  • IR codes (Table 5) include Japan-specific broadcast keys (BS, CS, BS/CS, Ddata, acTVila, etc.) that may not function on all regional models.
  • Source also references a High Level HTTP/JSON-RPC protocol ("WebAPI") but this spec covers only the Low Level TCP protocol.

Provenance

source_domains:
  - aca.im
  - pro-bravia.sony.net
  - web.archive.org
source_urls:
  - "https://aca.im/driver_docs/Sony/sony%20bravia%20simple%20ip%20control.pdf"
  - https://pro-bravia.sony.net/develop/integrate/ssip/command-definitions/
  - https://web.archive.org/web/20210215035854/https://pro-bravia.sony.net/develop/integrate/ssip/command-definitions/index.html
  - https://pro-bravia.sony.net/develop/integrate/ssip/overview/
  - https://web.archive.org/web/20201112002911/https://pro-bravia.sony.net/develop/integrate/ssip/overview/index.html
retrieved_at: 2026-06-12T10:36:59.701Z
last_checked_at: 2026-06-12T19:48:42.758Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:48:42.758Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec action units matched source FourCC commands; complete transport verification; bidirectional coverage achieved. (10 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source covers the generic SSIP protocol v0.6 for \"BRAVIA 2014 models\" — SD8505 is a 2016 model; protocol applicability inferred from family/date, not explicitly stated per model"
- "max volume not stated in source"
- "no persistent variable model described in source beyond action parameters"
- "no macro sequences described in source"
- "no safety warnings or interlock procedures in source"
- "WebAPI/JSON-RPC commands not included — separate spec needed if device supports it"
- "firmware version compatibility not stated in source"
- "maximum volume level not stated in source"
- "no mention of RS-232 serial control for this model — may be IP-only"
- "power-on via WOL or other standby network wake not documented"

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