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-controlBefore 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
82888using 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 |