Summary
Sony BRAVIA consumer TV (2019 X805G series, e.g. XBR-65X805G, XBR-75X805G) controlled via Simple IP Control (SSIP) — Sony's fixed-size 24-byte TCP protocol on port 20060. Covers power, volume, mute, input select, picture mute, scene setting, IR-code relay, and broadcast/MAC address queries.
Transport
protocols:
- tcp
addressing:
port: 20060
auth:
type: none # inferred: no auth procedure in source
Source states: TCP listening port 20060, fixed 24-byte messages, no login procedure described.
Traits
traits:
- powerable # inferred: setPowerStatus / togglePowerStatus commands present
- queryable # inferred: getPowerStatus / getAudioVolume / getAudioMute / getInput / getPictureMute / getSceneSetting / getBroadcastAddress / getMacAddress present
- routable # inferred: setInput (HDMI/Composite/Component/Screen Mirroring) present
- levelable # inferred: setAudioVolume (volume level) present
Actions
# Message format (all commands): 24 bytes fixed.
# Byte 0-1 Header : 0x2A 0x53 ("*S")
# Byte 2 MsgType : C=Control, E=Enquiry, A=Answer, N=Notify
# Byte 3-6 Command : 4-char FourCC (ASCII)
# Byte 7-22 Params : 16 chars (ASCII, "0"-"9"/"F"/"X"/"#"/etc per spec)
# Byte 23 Footer : 0x0A (LF)
# Success answer params = "0000000000000000"; error = "FFFFFFFFFFFFFFFF".
# Commands below show the parameterised ASCII body (header+type+FourCC+16 param);
# LF (0x0A) terminator appended at runtime.
- id: set_power_status
label: Set Power Status
kind: action
command: "*SCPOWR000000000000000N" # N=0 standby/off, N=1 active/on; e.g. *SCPOWR0000000000000000 = Power Off
params:
- name: state
type: enum
values: ["0", "1"]
description: "0 = Standby (Off), 1 = Active (On)"
- id: get_power_status
label: Get Power Status
kind: query
command: "*SEPOWR################" # enquiry; reply A with param 0/1, or FFFF... error
params: []
- id: toggle_power_status
label: Toggle Power Status
kind: action
command: "*SCTPOW################" # toggles power; reply A 0000...=success / FFFF...=error
params: []
- id: set_audio_volume
label: Set Audio Volume
kind: action
command: "*SCVOLU00000000000000XX" # XX = 2-digit decimal volume padded with leading 0s; e.g. 0000000000000029 = vol 29
params:
- name: level
type: integer
description: "Volume level, 2-digit decimal padded left with 0 (e.g. 29 -> '...0029'). Source gives no min/max; UNRESOLVED."
- id: get_audio_volume
label: Get Audio Volume
kind: query
command: "*SEVOLU################" # reply A with param = 16-char volume value, or FFFF... error
params: []
- id: set_audio_mute
label: Set Audio Mute
kind: action
command: "*SCAMUT000000000000000N" # N=0 Unmute, N=1 Mute
params:
- name: mute
type: enum
values: ["0", "1"]
description: "0 = Unmute, 1 = Mute"
- id: get_audio_mute
label: Get Audio Mute
kind: query
command: "*SEAMUT################" # reply A 0=Not Muted, 1=Muted, FFFF...=error
params: []
- id: set_input
label: Set Input
kind: action
command: "*SCINPT0000000T0000XXXX" # T=type digit, XXXX=input index; see params
params:
- name: type
type: enum
values: ["1", "3", "4", "5"]
description: "1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring"
- name: index
type: integer
description: "Input index (1-9999), 4-digit decimal padded"
- id: get_input
label: Get Input
kind: query
command: "*SEINPT################" # reply A with type+index, or NNNN...=Not Found, or FFFF...=error
params: []
- id: set_picture_mute
label: Set Picture Mute
kind: action
command: "*SCPMUT000000000000000N" # N=0 picture mute off, N=1 screen black (picture mute on)
params:
- name: state
type: enum
values: ["0", "1"]
description: "0 = Disable picture mute, 1 = Enable picture mute (screen black)"
- id: get_picture_mute
label: Get Picture Mute
kind: query
command: "*SEPMUT################" # reply A 0=disabled, 1=enabled, FFFF...=error
params: []
- id: toggle_picture_mute
label: Toggle Picture Mute
kind: action
command: "*SCTPMU################" # toggles picture mute; reply A 0000...=success / FFFF...=error
params: []
- id: set_scene_setting
label: Set Scene Setting
kind: action
# UNRESOLVED: source marks "BZ40P / BZ35P / BZ30P: not supported". X805G applicability unconfirmed.
command: "*SCSCEN{scene}###" # {scene} = case-sensitive ASCII name right-padded with '#'; e.g. 'auto24pSync#####'
params:
- name: scene
type: enum
values: ["auto", "auto24pSync", "general"]
description: "Case-sensitive; pad param field to 16 chars with trailing '#'. Reply A 0000...=success, NNNN...=Not available for current input, FFFF...=error."
- id: get_scene_setting
label: Get Scene Setting
kind: query
# UNRESOLVED: source marks "BZ40P / BZ35P / BZ30P: not supported". X805G applicability unconfirmed.
command: "*SESCEN################" # reply A with scene value, NNNN...=not available, FFFF...=error
params: []
- id: set_ircc_code
label: Set IRCC Code (IR Remote Relay)
kind: action
command: "*SCIRCC0000000000000NNN" # NNN = 3-digit IR command code; see IR code table in params/notes
params:
- name: code
type: enum
description: >-
Last 3 chars of the 16-char param field = IR code, leading zeros. Verbatim codes from
source IR Commands table: 005=Display, 006=Home, 007=Options, 008=Return,
009=Up, 010=Down, 011=Right, 012=Left, 013=Confirm, 014=Red, 015=Green,
016=Yellow, 017=Blue, 018=Num1, 019=Num2, 020=Num3, 021=Num4, 022=Num5,
023=Num6, 024=Num7, 025=Num8, 026=Num9, 027=Num0, 030=Volume Up, 031=Volume Down,
032=Mute, 033=Channel Up, 034=Channel Down, 035=Subtitle, 038=DOT, 050=Picture Off,
061=Wide, 062=Jump, 076=Sync Menu, 077=Forward, 078=Play, 079=Rewind, 080=Prev,
081=Stop, 082=Next, 084=Pause, 086=Flash Plus, 087=Flash Minus, 098=TV Power,
099=Audio, 101=Input, 104=Sleep, 105=Sleep Timer, 108=Video 2, 110=Picture Mode,
121=Demo Surround, 124=HDMI 1, 125=HDMI 2, 126=HDMI 3, 127=HDMI 4, 129=Action Menu,
130=Help.
- id: get_broadcast_address
label: Get Broadcast Address
kind: query
command: "*SEBADReth0############" # interface name 'eth0' then '#'; reply A with IPv4 broadcast padded right with '#', or FFFF...=error
params:
- name: interface
type: string
description: "Interface name (source example: 'eth0'); remainder of 16-char param field padded with '#'."
- id: get_mac_address
label: Get MAC Address
kind: query
command: "*SEMADReth0############" # reply A with MAC padded right with '#', or FFFF...=error
params:
- name: interface
type: string
description: "Interface name (source example: 'eth0'); remainder of 16-char param field padded with '#'."
Feedbacks
# Query responses / observable state. Answer messages (msg type 'A') returned for each enquiry.
- id: power_state
type: enum
values: ["off", "on"]
# A-POWR 0000...=Standby(Off), ...001=Active(On), FFFF...=Error
- id: audio_volume
type: integer
# A-VOLU returns 16-char volume value
- id: audio_mute_state
type: enum
values: ["unmuted", "muted"]
# A-AMUT 0000...=Not Muted, ...001=Muted, FFFF...=Error
- id: input_state
type: compound
# A-INPT type+index: 1=HDMI, 3=Composite, 4=Component, 5=Screen Mirroring (index 1-9999); NNNN...=Not Found
- id: picture_mute_state
type: enum
values: ["disabled", "enabled"]
# A-PMUT 0000...=disabled, ...001=enabled, FFFF...=Error
- id: scene_setting_value
type: string
# A-SCEN returns scene string; NNNN...=not available for current input; UNRESOLVED on X805G
- id: broadcast_address
type: string
# A-BADR returns IPv4 broadcast, right-padded with '#'
- id: mac_address
type: string
# A-MADR returns MAC address, right-padded with '#'
Variables
# No settable continuous variables beyond action params. Volume is set via set_audio_volume (action).
Events
# Unsolicited Notify (msg type 'N') messages pushed from monitor to client.
- id: fire_power_change
command: "*SNPOWR000000000000000N"
description: "N=0 powering off, N=1 powering on"
- id: fire_input_change
command: "*SNINPT0000000T0000XXXX"
description: "T=1/3/4/5 (HDMI/Composite/Component/Screen Mirroring), XXXX=index"
- id: fire_volume_change
command: "*SNVOLU00000000000000XX"
description: "XX = new volume value"
- id: fire_mute_change
command: "*SNAMUT000000000000000N"
description: "N=0 unmuting, N=1 muting"
- id: fire_picture_mute_change
command: "*SNPMUT000000000000000N"
description: "N=0 picture mute enabled, N=1 picture mute disabled (per source)"
Macros
# No multi-step sequences documented in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on
# sequencing requirements. Power command (setPowerStatus) is a direct toggle/set with no
# interlock described.
Notes
- Protocol name: SSIP (Sony Simple IP Control). Fixed 24-byte ASCII messages, terminated by LF (0x0A).
- Required monitor settings before use: Settings → Network & Internet → Remote device settings → Control remotely (enable); Settings → Network & Internet → Home network → IP control → Simple IP control (enable). Wired + wireless LAN both supported.
- Answer convention:
0000000000000000= success;FFFFFFFFFFFFFFFF= error (e.g. invalid params).################= no-param placeholder in enquiry/control.NNNNNNNNNNNNNNNN= "Not Found" / "Not available for current input". - Region caveat (verbatim from source): "EU area models have 3 types of specifications based on RED-DA compliance. Settings and available commands differ for each specification." Applies notably to getBroadcastAddress / getMacAddress. Target X805G region UNRESOLVED.
- Example verbatim (Power Off request):
*SCPOWR0000000000000000 - Example verbatim (Power Off response):
*SAPOWR0000000000000000 *SNPOWR0000000000000000(answer + notify in same TCP stream).
Provenance
source_domains:
- pro-bravia.sony.net
- sony.com
source_urls:
- https://pro-bravia.sony.net/remote-display-control/simple-ip-control/
- https://pro-bravia.sony.net/remote-display-control/serial-control/
- https://pro-bravia.sony.net/remote-display-control/serial-control/command/
- https://pro-bravia.sony.net
- https://www.sony.com/electronics/support/res/manuals/W000/W0009188M.pdf
retrieved_at: 2026-07-25T17:07:49.110Z
last_checked_at: 2026-08-05T08:47:06.554Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:47:06.554Z
matched_actions: 17
action_count: 17
confidence: medium
summary: "All 17 spec actions (Actions+Feedbacks) match source SSIP command table; transport port 20060 and TCP verified; spec coverage of source catalogue is complete. (10 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "Source document is the Sony Pro BRAVIA Simple IP Control spec (pro-bravia.sony.net). It is the canonical SSIP reference but its model-coverage list targets Pro Bravia / BZ / FW series. X805G is a 2019 consumer Android TV with no RS-232 port; SSIP-over-TCP is the documented IP control path. Whether every command (notably setSceneSetting/getSceneSetting, explicitly \"BZ40P / BZ35P / BZ30P: not supported\" in source) applies to X805G is not confirmed by the source — treat scene commands as UNRESOLVED applicability on this model."
- "firmware version compatibility not stated in source."
- "EU RED-DA variant — EU area models have 3 spec types; available commands differ. Region of the target X805G not stated."
- "source marks \"BZ40P / BZ35P / BZ30P: not supported\". X805G applicability unconfirmed."
- "source contains no safety warnings, interlock procedures, or power-on"
- "Source is the Sony Pro BRAVIA SSIP reference. Its model-coverage page targets Pro Bravia / BZ / FW professional displays. The X805G is a 2019 consumer Android TV; prior recovery notes flag model-year mismatch and that no first-party X805G-specific protocol doc was located. This spec assumes the consumer X805G implements the same SSIP command set — UNVERIFIED against a real device."
- "setSceneSetting / getSceneSetting explicitly \"BZ40P / BZ35P / BZ30P: not supported\" in source — applicability to X805G unknown."
- "Volume min/max range not stated in source."
- "Input index upper bound stated as 1-9999 but actual available inputs on X805G not enumerated."
- "IR code list applicability — source IR table is the BRAVIA generic IRCC set; whether all codes function on X805G unverified."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0