This is a JS library that implements TCP network control for LG TVs manufactured since 2018. It utilizes encryption rules based on a guide found on the internet.
This is not provided by LG, and it is not a complete implementation for every TV model.
Requirements
- LG TV (tested on model OLED65B9PUA)
- Node 12+ (at least ES2017)
Installing
# Using NPM
npm install lgtv-ip-control
# Using Yarn
yarn add lgtv-ip-control
Before anything, you need to enable Network IP Control, which is very easy:
- Open the "All Settings" menu on the TV
- Using the remote arrows, navigate to "Connection". For some TVs, this may say "Network" instead.
- Quickly, press
82888
using the remote numeric buttons - Note the MAC IP addresses for reference and library configuration
- Turn "Network IP Control" on
- Click "Generate Keycode", and take note of the 8 characters code displayed on the message for reference and library configuration. You can generate a new code at any time
- If you want to be able to turn the TV on, turn "Wake On LAN" on
Here's a very basic example of how to control the TV:
const tv = new LGTV('192.168.1.100', '1a:2b:3c:4d:5e:6f', 'KEY1C0DE');
tv.connect()
.then(async () => {
console.log('Unmutting...');
await tv.setVolumeMute(false);
console.log('Setting volume to 15...');
await tv.setVolume(50);
console.log('Done!');
})
.catch(console.error);
Returns a new instance to control a TV.
const lgtv = new LGTV(
/**
* TV IP Address
*/
'192.168.1.100',
/**
* TV MAC Address for being able to turn the TV on remotely, `null` otherwise
*/
'1a:2b:3c:4d:5e:6f',
/**
* Encryption Keycode, as generated during "Setting Up the TV" above
*/
'KEY1C0DE',
/**
* Additional options (optional)
*
* See src/constants/DefaultSettings.ts file.
*/
{
...DefaultSettings,
}
);
Connects to the TV using HTTP. Returns a promise.
Required before sending any commands.
await lgtv.connect();
Disconnects from the TV. Returns a promise.
await lgtv.disconnect();
Gets the current app. Returns a promise.
const currentApp = await lgtv.getCurrentApp();
Gets the current volume. Returns a promise.
const currentVolume = await lgtv.getCurrentVolume();
Gets the ip control state. Returns a promise.
const ipControlState = await lgtv.getIpControlState();
Gets the mac address by type. Returns a promise.
const macAddress = await lgtv.getMacAddress('wired');
Gets the mute state. Returns a promise.
const muteState = await lgtv.getMuteState();
Powers the TV off. Returns a promise.
await lgtv.powerOff();
Powers the TV on, using Wake On Lan. Requires MAC address to be set when
creating the LGTV
instance.
Returns nothing.
lgtv.powerOn();
Sends a key
, as if it was pressed on the TV remote control. Returns a promise.
await lgtv.sendKey(Keys.menu);
See Keys
for available keys.
Sets the current energy saving level. Returns a promise.
await lgtv.setEnergySaving(EnergySavingLevels.maximum);
See EnergySavingLevels
for available levels.
Sets the current TV input. Returns a promise.
await lgtv.setInput(Inputs.hdmi1);
See Inputs
for available inputs.
Sets the volume level, from 0
to 100
. Returns a promise.
await lgtv.setVolume(15);
Sets the volume mute state. Returns a promise.
await lgtv.setVolumeMute(false);
Key | Brightness Level |
---|---|
auto | Automatic |
screenOff | Screen Off |
maximum | Low |
medium | Medium |
minimum | High |
off | Maximum |
Key | Input |
---|---|
dtv | Digital TV |
atv | Analog TV |
cadtv | Cable Digital TV |
catv | Cable TV |
av | AV Composite |
component | Component |
hdmi1 | HDMI 1 |
hdmi2 | HDMI 2 |
hdmi3 | HDMI 3 |
hdmi4 | HDMI 4 |
Key | Remote Button |
---|---|
arrowDown | Arrow Down |
arrowLeft | Arrow Left |
arrowRight | Arrow Right |
arrowUp | Arrow Up |
aspectRatio | Aspect Ratio Toggle |
audioMode | Audio Mode Toggle |
back | Back |
blueButton | Blue Button |
captionSubtitle | – |
channelDown | Channel Down |
channelList | Channel List |
channelUp | Channel Up |
deviceInput | Device Input Toggle |
energySaving | Energy Saving Toggle |
fastForward | – |
greenButton | Green Button |
home | Home |
info | Info |
liveTV | Live TV |
menu | Open Menu |
number0 | Number 0 |
number1 | Number 1 |
number2 | Number 2 |
number3 | Number 3 |
number4 | Number 4 |
number5 | Number 5 |
number6 | Number 6 |
number7 | Number 7 |
number8 | Number 8 |
number9 | Number 9 |
ok | Ok |
play | – |
previousChannel | Previous Channel |
programGuide | Show Program Guide |
record | – |
redButton | Red Button |
rewind | – |
sleepTimer | Sleep Timer Toggle |
userGuide | Open User Guide |
videoMode | Video Mode Toggle |
volumeDown | Volume Down |
volumeMute | Mute Toggle |
volumeUp | Volume Up |
yellowButton | Yellow Button |