Summary
Sunbrite Solis IP is a Smart TV using LG webOS. Control via TCP/IP on port 9761 using AES-128 encrypted commands. Wake-on-LAN supported for power-on from standby. SDDP and SSDP device discovery supported.
Transport
protocols:
- tcp
addressing:
port: 9761
auth:
type: psk # AES-128 PSK; 8-digit alphanumeric password shown on TV; PBKDF2 key derivation
encryption:
algorithm: AES-128-CBC
key_derivation:
pbkdf2:
algorithm: sha256
salt: "0x63,0x61,0xb8,0x0e,0x9b,0xdc,0xa6,0x63,0x8d,0x07,0x20,0xf2,0xcc,0x56,0x8f,0xb9"
iterations: 16384
iv_length: 16
block_length: 16
message_termination: "\r" # 0x0d
wake_on_lan:
port: 4343
magic_packet_format: "6xFF + 16xMACaddress (102 bytes total)"
Traits
- powerable # POWER off command; WoL for power-on
- routable # INPUT_SELECT, APP_LAUNCH
- queryable # GET_MANUFACTURER, MODEL_NAME, FIRMWARE_VERSION, POWER_STATUS, CURRENT_APP, etc.
- levelable # VOLUME_CONTROL (0-100), PICTURE_BACKLIGHT (0-100), PICTURE_CONTRAST (0-100), etc.
Actions
- id: power_off
label: Power Off
kind: action
params: []
- id: aspect_ratio
label: Set Aspect Ratio
kind: action
params:
- name: mode
type: enum
values: [4by3, 16by9, setbyoriginal]
description: Video mode and live TV only
- id: screen_mute
label: Screen Mute
kind: action
params:
- name: mode
type: enum
values: [screenmuteon, videomuteon, allmuteoff]
description: screenmuteon=mute OSD+video, videomuteon=video only, allmuteoff=off
- id: volume_mute
label: Volume Mute
kind: action
params:
- name: state
type: enum
values: [on, off]
- id: volume_control
label: Volume Control
kind: action
params:
- name: level
type: integer
range: [0, 100]
- id: picture_mode
label: Picture Mode
kind: action
params:
- name: mode
type: enum
values: [vivid, normal, cinema, game, eco, sports]
description: SDR modes; HDR and Dolby Vision modes are vivid/normal/cinema/game only. IP control cannot switch between SDR/HDR/Dolby Vision; mode must match content type or command ignored.
- id: picture_backlight
label: Backlight
kind: action
params:
- name: level
type: integer
range: [0, 100]
- id: picture_contrast
label: Contrast
kind: action
params:
- name: level
type: integer
range: [0, 100]
- id: picture_brightness
label: Brightness
kind: action
params:
- name: level
type: integer
range: [0, 100]
- id: picture_colour
label: Colour / Color
kind: action
params:
- name: level
type: integer
range: [0, 100]
description: Note spelling COLOUR in command name
- id: picture_tint
label: Tint
kind: action
params:
- name: level
type: integer
range: [0, 100]
description: 0=Red max, 50=Neutral, 100=Green max
- id: picture_sharpness
label: Sharpness
kind: action
params:
- name: level
type: integer
range: [0, 50]
description: Range 0-50 unlike other picture controls
- id: picture_colour_temperature
label: Colour Temperature
kind: action
params:
- name: level
type: integer
range: [0, 100]
description: 0=Warm max, 50=Neutral, 100=Cold max
- id: remotecontroller_lock
label: Remote Control Lock
kind: action
params:
- name: state
type: enum
values: [on, off]
- id: audio_balance
label: Audio Balance
kind: action
params:
- name: level
type: integer
range: [0, 100]
description: 0=Left max, 50=Balanced, 100=Right max
- id: audio_equalizer
label: Audio Equalizer
kind: action
params:
- name: band
type: integer
range: [1, 5]
description: "1=100Hz, 2=300Hz, 3=1kHz, 4=3kHz, 5=10kHz"
- name: gain
type: integer
range: [0, 20]
description: "0=-10, 1=-9, ... 20=+10; Sound>Sound Mode Settings>Equalizer must be ON"
- name: level
type: integer
range: [0, 20]
description: Gain level value
- id: energy_saving
label: Energy Saving
kind: action
params:
- name: mode
type: enum
values: [auto, screenoff, maximum, medium, minimum, off]
description: screenoff may not be compatible with newer models
- id: channel_setting_atsc_atv
label: Tune ATSC/ATV Channel
kind: action
params:
- name: channel
type: integer
- name: source
type: enum
values: [antenna, cable]
- id: channel_setting_atsc_dtv
label: Tune ATSC/DTV Channel
kind: action
params:
- name: channel
type: integer
- name: source
type: enum
values: [cablemaj, antennanotphy, cablenotphy]
- name: minor
type: integer
required: false
- id: channel_add_delete
label: Channel Add / Delete
kind: action
params:
- name: action
type: enum
values: [add, delete]
- id: key_action
label: Key Action
kind: action
params:
- name: key
type: enum
values: [Exit, channelup, channeldown, volumeup, volumedown, arrowright, arrowleft, volumemute, deviceinput, sleepreserve, livetv, previouschannel, favoritechannel, pause, stop, returnback, captionsubtitle, arrowup, arrowdown, myapp, settingmenu, ok, quickmenu, videomode, audiomode, channellist, bluebutton, yellowbutton, greenbutton, redbutton, aspectration, audiodescription, programmorder, userguide, smarthome, simplelink, fastforward, rewind, programminfo, programguide, play, slowplay, soccerscreen, screenbright, number0, number1, number2, number3, number4, number5, number6, number7, number8, number9]
- id: input_select
label: Input Select
kind: action
params:
- name: input
type: enum
values: [dtv, atv, cadtv, catv, hdmi1, hdmi2, hdmi3, hdmi4]
description: APP_LAUNCH recommended for HDMI input selection
- id: app_launch
label: Launch Application
kind: action
params:
- name: appid
type: string
description: webOS app ID e.g. com.webos.app.hdmi3, com.webos.app.lgchannels
- id: launch_webos_app
label: Launch Always Ready / Smart Home Card
kind: action
params:
- name: card
type: enum
values: [Art, Clock, Movements, Moments, SoundPalette, LaunchGameCard, LaunchSportsCard]
description: Solis does not support Always Ready; must use WoL to power on
- name: level
type: integer
required: false
- id: get_manufacturer
label: Get Manufacturer
kind: action
command: GET_MANUFACTURER
params: []
- id: model_name
label: Model Name
kind: action
command: MODEL_NAME
params: []
- id: firmware_version
label: Firmware Version
kind: action
command: FIRMWARE_VERSION
params: []
- id: is_firmware_available
label: Is Firmware Available
kind: action
command: IS_FIRMWARE_AVAILABLE
params: []
- id: power_status
label: Power Status
kind: action
command: POWER_STATUS
params: []
- id: get_serial_number
label: Get Serial Number
kind: action
command: GET_SERIAL_NUMBER
params: []
- id: get_current_audio_codec
label: Get Current Audio Codec
kind: action
command: GET_CURRENT_AUDIO codec
params: []
- id: get_current_video_signal
label: Get Current Video Signal
kind: action
command: GET_CURRENT_VIDEO signal
params: []
- id: get_current_audio_output
label: Get Current Audio Output
kind: action
command: GET_CURRENT_AUTIO output
params: []
- id: friendly_name
label: Friendly Name
kind: action
command: FRIENDLY_NAME
params: []
- id: arc_status
label: Arc Status
kind: action
command: ARC_STATUS
params: []
- id: lamp_hours
label: Lamp Hours
kind: action
command: LAMP_HOURS
params: []
- id: get_macaddress
label: Get MAC Address
kind: action
command: GET_MACADDRESS
params: []
- id: mute_state
label: Mute State
kind: action
command: MUTE_STATE
params: []
- id: current_vol
label: Current Volume
kind: action
command: CURRENT_VOL
params: []
- id: get_ipcontrol_state
label: Get IP Control State
kind: action
command: GET_IPCONTROL_STATE
params: []
Feedbacks
- id: manufacturer
type: string
query_command: GET_MANUFACTURER
description: GET_MANUFACTURER returns "Manufacturer: <mfg name>"
- id: model_name
type: string
query_command: MODEL_NAME
description: MODEL_NAME returns "Model Name: WebOS22"
- id: firmware_version
type: string
query_command: FIRMWARE_VERSION
description: FIRMWARE_VERSION returns "Firmware Version: <version>"
- id: firmware_available
type: enum
values: [Yes, No]
query_command: IS_FIRMWARE_AVAILABLE
description: IS_FIRMWARE_AVAILABLE returns "Firmware Available: Yes / No"
- id: power_status
type: enum
values: [active, "always ready"]
query_command: POWER_STATUS
description: POWER_STATUS returns "Power Status: active / always ready"
- id: current_app
type: object
query_command: CURRENT_APP
description: CURRENT_APP returns APP, HDCP, Hot plug, Signal
properties:
app: string
hdcp: string
hot_plug: string
signal: string
- id: serial_number
type: string
query_command: GET_SERIAL_NUMBER
description: GET_SERIAL_NUMBER returns "Serial Number: <serial>"
- id: current_audio_codec
type: enum
values: [PCM, AC3]
query_command: GET_CURRENT_AUDIO codec
description: GET_CURRENT_AUDIO codec returns "Audio codec: PCM/AC3"
- id: current_video_signal
type: string
query_command: GET_CURRENT_VIDEO signal
description: GET_CURRENT_VIDEO signal returns "Video signal type: <resolution>"
- id: current_audio_output
type: enum
values: [external_arc, tv_speakers]
query_command: GET_CURRENT_AUTIO output
description: GET_CURRENT_AUDIO output returns "Sound output: external_arc / tv_speakers"
- id: friendly_name
type: string
query_command: FRIENDLY_NAME
description: FRIENDLY_NAME returns "Friendly name: [mfg] webOS TV WEBOS22"
- id: arc_status
type: enum
values: [not_ready, eARC, ARC]
query_command: ARC_STATUS
description: ARC_STATUS returns "Arc State: not_ready / eARC / ARC"
- id: lamp_hours
type: string
query_command: LAMP_HOURS
description: LAMP_HOURS returns "Lamp hour: <value>"
- id: mac_address
type: object
query_command: GET_MACADDRESS
description: GET_MACADDRESS returns wired or wifi MAC
properties:
interface: enum
values: [wired, wifi]
- id: mute_state
type: enum
values: [on, off]
query_command: MUTE_STATE
- id: current_volume
type: integer
query_command: CURRENT_VOL
description: CURRENT_VOL returns current volume level
- id: ipcontrol_state
type: enum
values: [ON]
query_command: GET_IPCONTROL_STATE
description: GET_IPCONTROL_STATE returns ON if server healthy, otherwise timeout
Variables
# No persistent parameter storage beyond current state queries.
# UNRESOLVED: no discrete settable parameters documented as variables.
Events
# UNRESOLVED: no unsolicited event notifications documented in source.
Macros
# UNRESOLVED: no explicit multi-step macro sequences documented in source.
Safety
confirmation_required_for: []
interlocks:
- description: "TV does not support Always Ready. Power on from standby requires Wake-on-LAN magic packet to MAC address."
- description: "Solis does not support Always Ready Smart Home Cards; WoL required to power on."
# UNRESOLVED: no explicit safety warnings or interlock procedures in source beyond WoL notes.
Notes
- Commands composed of main command + sub-command/parameter. Example:
VOLUME_MUTE on,VOLUME_CONTROL 15,KEY_ACTION quickmenu. - Clear text messages terminated with
\r(0x0d). Padding required if message length not multiple of 16 bytes; padding value = number of bytes padded. - Encrypted messages prefixed with IV (16 bytes). IV itself encrypted using AES-128 ECB mode.
- Wake-on-LAN: magic packet = 6xFF + 16xMAC (102 bytes total). Port 4343 or any port. Broadcast IP or unicast IP both valid.
- "COLOUR" spelling used in PICTURE_COLOUR command (not "COLOR").
- PICTURE_MODE commands do not switch between SDR/HDR/Dolby Vision — content type is set by TV and source. Incompatible picture mode commands are ignored.
- Audio Equalizer requires Sound > Sound Mode Settings > Equalizer to be ON.
- APP_LAUNCH is recommended method for HDMI input selection.
- webOS app IDs documented include: com.webos.app.settings, com.webos.app.hdmi1-4, com.webos.app.lgchannels, youtube.leanback.v4, Netflix, and 60+ others.
Provenance
source_domains:
- help.snapone.com
source_urls:
- "https://help.snapone.com/sb-solis-ig/Content/Topics/IP%20Control%20Guide.htm"
retrieved_at: 2026-05-27T13:46:04.021Z
last_checked_at: 2026-10-07T13:09:01.064Z
Verification Summary
verdict: verified
checked_at: 2026-10-07T13:09:01.064Z
matched_actions: 57
action_count: 57
confidence: medium
summary: "All 57 action units match source commands with correct shapes, transport values are supported, and the source catalogue is fully covered. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "no explicit power-on command; must use Wake-on-LAN."
- "no discrete settable parameters documented as variables."
- "no unsolicited event notifications documented in source."
- "no explicit multi-step macro sequences documented in source."
- "no explicit safety warnings or interlock procedures in source beyond WoL notes."
- "port number for IP control server confirmed as 9761; no explicit statement of default or configurable port range."
- "no explicit statement of PSK refresh or re-enrollment procedure."
- "SDDP/SSDP discovery detailed but no command-based discovery protocol documented."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0