Command line webOS remote for LGTVs. This tool uses a connection via websockets to port 3000 on newer LG TVs, there are other tools which use a restful connection to port 8080 however that port is closed on newer firmware versions.
My LG TV is now so out of date that largely what is developed here is tested, improved and debugged by the community. As it goes my TV works fine and I'm not the kind of person to create more unnecessary electrical waste than I need to so as long as my current TV works, it's largely down to you guys.
A big thanks for the contributions over the years too, lots of people have made lots of changes to this project over time, and it would only be as useful as it is with their help.
- 43LM6300PSB
- 43UN73003LC
- 43UJ630V-ZA
- 60UJ6300-UA
- HU80KG.AEU (CineBeam 4K)
- OLED48A2
- OLED55B7
- OLED55C9
- OLED55CX5LB
- OLED55CXAUA
- OLED65B9PUA
- OLED77CX9LA
- OLED77GX
- OLED48C1 (ssl)
- OLED42C2 (ssl)
- OLED48C2 (ssl)
- SK8500PLA
- SM9010PLA
- UF776V
- UF830V
- UH650V
- UU668V
- UJ6309
- UJ635V
- UJ6570
- UJ701V
- [please add more!]
Tested with python 3.9 on Debian Unstable. Tested with python 3.10 on Windows 10/11 Tested with 3.10 on WSL (Ubuntu 20.04) Tested with python 3.12 on macOS
All devices with firmware major version 4, product name "webOSTV 2.0"
lgtv scan lgtv auth <host> tv lgtv setDefault tv lgtv --name tv audioStatus lgtv --name tv audioVolume lgtv --name tv closeAlert <alertId> lgtv --name tv closeApp <appid> lgtv --name tv createAlert <message> <button> lgtv --name tv execute <command> lgtv --name tv getCursorSocket lgtv --name tv getForegroundAppInfo lgtv --name tv getPictureSettings lgtv --name tv getPowerState lgtv --name tv getSoundOutput lgtv --name tv getSystemInfo lgtv --name tv getTVChannel lgtv --name tv input3DOff lgtv --name tv input3DOn lgtv --name tv inputChannelDown lgtv --name tv inputChannelUp lgtv --name tv inputMediaFastForward lgtv --name tv inputMediaPause lgtv --name tv inputMediaPlay lgtv --name tv inputMediaRewind lgtv --name tv inputMediaStop lgtv --name tv listApps lgtv --name tv listLaunchPoints lgtv --name tv listChannels lgtv --name tv listInputs lgtv --name tv listServices lgtv --name tv mute <true|false> lgtv --name tv notification <message> lgtv --name tv notificationWithIcon <message> <url> lgtv --name tv off lgtv --name tv on lgtv --name tv openAppWithPayload <payload> lgtv --name tv openBrowserAt <url> lgtv --name tv openYoutubeId <videoid> lgtv --name tv openYoutubeURL <url> lgtv --name tv openYoutubeLegacyId <videoid> lgtv --name tv openYoutubeLegacyURL <url> lgtv --name tv sendButton <button> lgtv --name tv serialise lgtv --name tv setInput <input_id> lgtv --name tv setSoundOutput <tv_speaker|external_optical|external_arc|external_speaker|lineout|headphone|tv_external_speaker|tv_speaker_headphone|bt_soundbar> lgtv --name tv screenOff lgtv --name tv screenOn lgtv --name tv setTVChannel <channelId> lgtv --name tv setVolume <level> lgtv --name tv startApp <appid> lgtv --name tv swInfo lgtv --name tv volumeDown lgtv --name tv volumeUp Requires wakeonlan, websocket for python (python3-websocket for python3), and getmac. python-pip (python3-pip for python3) and git are required for the installation process.
python -m venv lgtv-venv source lgtv-venv/bin/activate pip install git+https://github.com/klattimer/LGWebOSRemote To install it system wide:
sudo mkdir -p /opt sudo python -m venv /opt/lgtv-venv source /opt/lgtv-venv/bin/activate sudo pip install git+https://github.com/klattimer/LGWebOSRemote or with pipx:
pipx install git+https://github.com/klattimer/LGWebOSRemote.git # Scan/Authenticate $ lgtv scan { "count": 1, "list": [ { "address": "192.168.1.31", "model": "UF830V", "uuid": "10f34f86-0664-f223-4b8f-d16a772d9baf" } ], "result": "ok" } $ lgtv auth 192.168.1.31 tv # At this point the TV will request pairing, follow the instructions on screen # Commands are basically $ lgtv --name TVNAME COMMAND COMMAND_ARGS $ lgtv --name tv on $ lgtv --name tv off # If you have the youtube plugin $ lgtv --name tv openYoutubeURL https://www.youtube.com/watch?v=dQw4w9WgXcQ # Otherwise, this works reasonably well $ lgtv --name tv openBrowserAt https://www.youtube.com/tv#/watch?v=dQw4w9WgXcQ # You can set the default TV so the `--name` argument can be skipped $ lgtv setDefault tv Starting 25th of January 2023 LG has deprecated insecure ws connections, ssl is now required. Because of this, should you wish to use it on newer firmware devices you can append the argument "ssl" at the back. It connects to 3001 with wss.
$ lgtv auth 192.168.1.31 tv $ lgtv --name tv off $ lgtv --name tv screenOff sendButton args: ['asterisk', 'back', 'blue', 'channel_down', 'channel_up', 'click', 'down', 'enter', 'exit', 'fast_forward', 'green', 'home', 'left', 'pause', 'play', 'red', 'rewind', 'right', 'stop', 'up', 'volume_down', 'volume_up', 'yellow']
You need to auth with the TV before being able to use the on command as it requires the mac address.
Implement the following features:
closeToast getSystemSettings I couldn't test youtube because it seems the app isn't installed and not available to download right now maybe they're updating it?