Skip to content

feat: add SSAP driver for LG webOS TV control#3

Open
ha7rock wants to merge 1 commit into
ythx-101:mainfrom
ha7rock:feat/ssap-driver
Open

feat: add SSAP driver for LG webOS TV control#3
ha7rock wants to merge 1 commit into
ythx-101:mainfrom
ha7rock:feat/ssap-driver

Conversation

@ha7rock

@ha7rock ha7rock commented Apr 9, 2026

Copy link
Copy Markdown

Summary

Add SSAP protocol driver for controlling LG webOS TVs via WebSocket.

What's included

  • drivers/ssap.py — Full SSAP implementation over TLS WebSocket (port 3001)
  • devices/tv/lg-webos.yaml — Updated default port to 3001 (TLS), newer TVs don't support plain WS on port 3000
  • drivers/__init__.py — Registered ssap protocol in driver registry
  • .gitignore — Added ssap_keys.json

Features

  • Pairing: First connection shows accept prompt on TV, saves client key for future use
  • Power: Wake-on-LAN + SSAP power off
  • Audio: Volume up/down, set volume (0-100), mute toggle
  • Apps: Launch apps by ID, list installed apps
  • Media: Play/pause controls
  • Input: Switch HDMI inputs
  • Screenshot: Capture TV screen image
  • Fire-and-forget: Volume and play/pause commands don't wait for response

Tested on

  • LG OLED77C5PCA (webOS 24) — port 3001 TLS only
  • LG OLED42C4PCA (webOS 24) — port 3001 TLS only

Dependencies

  • websockets — for SSAP WebSocket connection
  • wakeonlan — for power on via WOL (optional)

- New SSAP protocol driver (drivers/ssap.py) using TLS WebSocket (port 3001)
- Supports: power on/off (WOL), volume, mute, launch apps, list apps,
  play/pause, switch input, set volume, screenshot
- Auto-pairing with client key persistence in ~/.lan-control/ssap_keys.json
- Fire-and-forget mode for volume/playback commands
- Updated lg-webos.yaml: default to TLS port 3001 (port 3000 ws unavailable on newer TVs)
- Registered SSAP protocol in drivers/__init__.py
- Added ssap_keys.json to .gitignore
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant