Sony TV (Simple IP Control)
Sony BRAVIA professional / prosumer displays that expose Sony's older text-based Simple IP Control protocol are driven over a plain TCP socket on the TV's own LAN IP, default port 20060. There is no gateway or serial adapter — one TV becomes one GEM device, and commands target that device directly. This driver creates no zones.
Simple IP Control is a fixed-width ASCII protocol: each frame is *S, a type letter, a four-letter
function, and a sixteen-character parameter (for example *SCPOWR0000000000000001). GEM adds the
carriage-return / line-feed terminator for you, so the strings you enter never include it.
Unlike the HTTP BRAVIA driver, this driver does not bake the Simple IP command strings into the firmware layer. When you add the device it creates the four status-query commands and a set_channel command as empty rows, and it ships no power / volume / mute / input control commands at all. To get live feedback and to control the set you fill in the command strings once on the device's Commands tab — they are the standard, published Sony Simple IP Control frames, listed in full below. Values you type are kept across restarts. Budget a few minutes for this step during commissioning; it is the difference between a device that does nothing and a fully working TV.
GEM ships several Sony display drivers — pick by how the set is reachable:
- Sony BRAVIA TV (HTTP) — modern BRAVIA Android / Google TVs over the REST/IRCC HTTP API with a Pre-Shared Key. Reach for this first for any current networked BRAVIA. See Sony BRAVIA TV (HTTP).
- Sony TV (Simple IP Control) — this driver. The older text-based Simple IP Control protocol on TCP 20060, for BRAVIA Pro / B2B-grade models that expose that port instead of (or as well as) the REST API.
- Sony TV (Serial over IP) — the TV's RS-232 service port carried over a serial-to-IP gateway, for sets with no working network control.
Reach for this driver when the set is a BRAVIA Pro / professional model and you can turn on Simple IP Control on TCP 20060 in its network menu. If the set has the modern HTTP API with a Pre-Shared Key, prefer the HTTP driver — it ships its commands ready to use.
What's controlled
- Live status feedback — once the four status-query strings are filled in, GEM polls the TV and reports power, volume, mute, and the current input so a touchpanel button or a trigger stays in sync even when someone uses the Sony remote.
- Power, volume, mute, and input — sent through control commands you add on the Commands tab (power on/off, mute on/off, absolute volume, volume step, HDMI select, on-screen navigation). The exact frames are given below.
- Channels —
set_channeltunes a digital channel by its on-screen number. This is the one parameterised command the driver formats for you: you pass a number such as5.1and the driver zero-pads it to Simple IP'sMMMM.mmmmform (0005.1000) before sending.
Prerequisites
- The TV is a BRAVIA Pro / professional model. Simple IP Control is not present on every consumer BRAVIA — check the TV's network settings menu for it before choosing this driver. If the set only offers the modern HTTP IP-control with a Pre-Shared Key, use the HTTP driver instead.
- The TV on the same network as GEM, reachable at a fixed IP (assign a static IP or a DHCP reservation so the address never moves).
- Simple IP Control turned on in the TV menu: Network → IP Control → Simple IP Control → On, with Authentication set to None. This driver does not implement BRAVIA pre-shared-key authentication, so the Simple IP port must be open without a key.
- Network Standby (Remote Start) enabled if you want
power_onto wake the set from full standby — otherwise the TV's LAN port powers all the way down and ignores a power-on frame (see Power and standby).
Setup
- Open Devices, add a device, and choose the Sony TV (Simple IP Control) driver.
- Pick the AV subsystem for the device. The tv device type is suggested automatically — leave it as tv.
- Fill in the connection fields:
- TV IP Address (required) — the TV's own LAN IP, e.g.
192.168.1.60. - TCP Port (optional) — leave at the default 20060 unless the set uses a non-standard Simple IP port.
- Status Poll Interval (ms) (optional) — how often GEM re-reads the TV; default 25000 (25 s), minimum 5000.
- TV IP Address (required) — the TV's own LAN IP, e.g.
- Save and enable the device. GEM opens the socket and begins polling immediately.
- Open the device's Commands tab and enter the command strings from The command frames below — first the four status queries (so feedback works), then the control commands you need (power, HDMI, volume, mute).
- Run
get_power, thenpower_on/power_offand anhdmi_1from the Commands tab to confirm control end-to-end before wiring the TV into macros or a UI.
The command frames
Simple IP Control frames are fixed-width. A frame is *S + a type letter + a four-letter
function + a sixteen-character parameter. The type is E for an enquiry (read a value —
the parameter is sixteen #) or C for a control (set a value — the parameter is the value,
zero-padded to sixteen characters). GEM appends the CR/LF terminator, so never include it in the
string you type.
Status queries — fill the four rows the driver created
These four command rows already exist on the Commands tab with empty templates. Paste the template into each. Once they are in place, GEM's background poll can read the set and keep the status attributes live; leave any of them blank and that reading stays empty.
| Command (already present) | Template to enter | Reads |
|---|---|---|
get_power | *SEPOWR################ | power on/off → power_state |
get_volume | *SEVOLU################ | volume level → volume |
get_mute | *SEAMUT################ | mute on/off → mute_state |
get_input | *SEINPT################ | current input → input |
Channel — already present, formatted for you
| Command (already present) | Template to enter | Argument |
|---|---|---|
set_channel | *SCCHNN0000[channel]000 | channel — pass e.g. 5.1; the driver zero-pads it to 0005.1000 before sending. |
Control commands — add these rows
The driver ships no control commands, so add each of these as a new command on the Commands tab (name on the left, template on the right). Power and mute have discrete on/off frames; HDMI select, navigation, and volume/channel stepping use Sony's remote-key (IRCC) frames.
| Command to add | Template | Does |
|---|---|---|
power_on | *SCPOWR0000000000000001 | Turn the TV on (needs Network Standby — see below). |
power_off | *SCPOWR0000000000000000 | Turn the TV off (to standby). |
mute_on | *SCAMUT0000000000000001 | Mute. |
mute_off | *SCAMUT0000000000000000 | Unmute. |
volume_up | *SCIRCC0000000000000030 | Step volume up one. |
volume_down | *SCIRCC0000000000000031 | Step volume down one. |
hdmi_1 | *SCIRCC0000000000000124 | Select HDMI 1. |
hdmi_2 | *SCIRCC0000000000000125 | Select HDMI 2. |
hdmi_3 | *SCIRCC0000000000000126 | Select HDMI 3. |
hdmi_4 | *SCIRCC0000000000000127 | Select HDMI 4. |
channel_up | *SCIRCC0000000000000033 | Channel up. |
channel_down | *SCIRCC0000000000000034 | Channel down. |
home | *SCIRCC0000000000000006 | Home menu. |
return | *SCIRCC0000000000000008 | Back / return. |
display | *SCIRCC0000000000000005 | Display / info. |
options | *SCIRCC0000000000000007 | Options menu. |
mute_toggle | *SCIRCC0000000000000032 | Toggle mute (remote-key form). |
An absolute-volume frame exists — *SCVOLU00000000000000[volume], where [volume] is an argument
you pass. The driver substitutes the value literally (it only auto-pads set_channel, not
volume), so the frame is clean only for a two-digit level (10–99). For reliable, model-agnostic
volume control use volume_up / volume_down above, or set the TV as the AV zone's Volume Device
and drive it with the zone slider (see Volume in a zone).
The protocol also has a direct input-select frame (*SCINPT…), but its sixteen-character parameter
layout varies by model and input family, so it is easy to get wrong. For everyday input switching
use the hdmi_1–hdmi_4 remote-key commands above; GEM reads the resulting input back through
get_input on the next poll.
Power and standby
power_on / power_off send the Simple IP power frame — they do not send a Wake-on-LAN magic
packet. For power_on to wake a fully-off set, the TV must keep its network interface alive in
standby:
- Enable Network Standby (labelled Remote Start on some firmware) in the TV menu. With it on, the set answers the power frame and powers up. With it off, a fully-powered-down TV won't respond, and only a physical remote can wake it.
- Simple IP Control can auto-disable when the TV power-cycles after a firmware update. If the TV suddenly stops responding to all commands, re-enable Simple IP Control in the network menu and consider turning off automatic firmware updates.
Live status feedback
Feedback depends on the four status-query strings being present (see The command frames). With them in place:
- On connect, GEM reads power → volume → mute → input, about a second apart, so the full status is current within a few seconds of the device coming online.
- After that, GEM re-reads on the Status Poll Interval (default 25 s). When the TV is on it re-reads volume, mute, and input; when the TV is off it only re-checks power (so an off set isn't polled needlessly). The moment the set reports it has turned on, GEM re-reads volume, mute, and input a second later.
- Each reading is written to a device attribute —
power_state,volume,mute_state,input— so a touchpanel button, a dashboard, or a trigger reflects the set's real state even when someone changes it with the Sony remote.
Raise the interval for lighter network traffic; lower it (down to 5 s) for snappier feedback.
Volume in a zone
If the room's audio comes out of the TV's own speakers, make this TV the AV zone's volume device: open AV Zones, edit the zone, and set its Volume Device to this TV so the zone's volume slider and mute button drive the set (via the volume/mute commands you added). If the room audio instead runs through a receiver, amp, or soundbar, leave that device as the zone's Volume Device and route the TV's own audio away from its speakers, so you aren't fighting two volume controls at once.
Attributes
status_interval is specific to this driver; the live status attributes (power_state, volume,
mute_state, input) are set automatically by GEM as it polls — you don't create them by hand, but
type them exactly when you reference them in a trigger or macro.
Device — required
| Attribute | Type | Description |
|---|---|---|
ip | string | The TV's own LAN IP address (e.g. 192.168.1.60). |
Device — optional
| Attribute | Type | Default | Description |
|---|---|---|---|
port | int | 20060 | Simple IP Control TCP port. |
status_interval | int | 25000 | How often (ms) GEM polls the TV for power, volume, mute, and input. Minimum 5000. |
Device — status (set automatically)
| Attribute | Type | Description |
|---|---|---|
power_state | string | on / off. |
volume | int | Current volume level. |
mute_state | string | on / off. |
input | string | Current input as <type>_<port> — type is one of hdmi, tunr (tuner), comp (component), or screen (screen mirroring), e.g. hdmi_1. |
Commands summary
Out of the box the driver creates only these rows; everything else in the tables above is a control command you add yourself.
| Command | Ships | Notes |
|---|---|---|
get_power | created (template blank) | Enter *SEPOWR################. |
get_volume | created (template blank) | Enter *SEVOLU################. |
get_mute | created (template blank) | Enter *SEAMUT################. |
get_input | created (template blank) | Enter *SEINPT################. |
set_channel (arg channel) | created (template blank) | Enter *SCCHNN0000[channel]000; driver pads the channel. |
| power / volume / mute / HDMI / nav | not shipped | Add per Control commands. |
Known limitations and quirks
- Command strings ship blank. The driver formats the channel and polls the set, but you must enter the Simple IP frames on the Commands tab before it reads or controls anything. This is by design for this protocol variant — the frames are listed above.
- Authentication is not supported. Simple IP Control must be set to Authentication: None on the TV; this driver does not send a pre-shared key. If your set requires a key, use the HTTP driver.
- No Wake-on-LAN.
power_onis a Simple IP frame, so the TV must keep Network Standby enabled; a fully-powered-down set won't wake from this driver. - Simple IP can auto-disable after a firmware update. Re-enable it in the network menu if commands stop working after the set updates.
- Absolute volume is two-digit only. The
*SCVOLU…[volume]frame isn't auto-padded — prefervolume_up/volume_downor the AV-zone Volume Device. - Single device, no zones. A BRAVIA is one GEM device; it creates no zones. Group rooms and multi-room behaviour at the AV-zone / macro layer.
Troubleshooting
| Symptom | Check |
|---|---|
| Connection refused / nothing connects | Simple IP Control is disabled or on a different port. Enable it under Network → IP Control → Simple IP Control and confirm the port (default 20060). Confirm the TV's IP is reachable from GEM and hasn't changed (use a static IP / DHCP reservation). |
| Connects, but power/volume/mute status never populates | The status-query strings are still blank. Enter *SEPOWR################, *SEVOLU################, *SEAMUT################, and *SEINPT################ on get_power / get_volume / get_mute / get_input. |
| No power/volume/input commands to run | Those control commands aren't shipped — add them per Control commands. |
power_on does nothing when the TV is fully off | Enable Network Standby (Remote Start) on the TV. This driver does not send a Wake-on-LAN packet. |
| Worked, then went dead after a TV update | Simple IP Control auto-disabled on the power-cycle. Re-enable it in the network menu and turn off automatic firmware updates. |
Absolute volume sets the wrong level | The volume frame isn't auto-padded — it's reliable only for two-digit levels. Use volume_up / volume_down or the AV-zone Volume Device instead. |
| Status readout never reflects the Sony remote | Confirm the four status-query strings are filled in and the poll is running (Status Poll Interval isn't set absurdly high); the background poll is what catches changes made from the remote. |
See also
- Sony BRAVIA TV (HTTP) — the modern REST/IRCC BRAVIA driver, with commands ready to use.
- AV Zones — set the TV as a zone's Volume Device for volume and mute.
- Devices — adding and configuring devices.
- Commands — adding, editing, and running device commands.
- Command Sets — where a device's command rows live.
- Attributes — editing device attributes such as
status_interval. - Triggers — fire automations on the TV's power, volume, mute, or input.