npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lgtv-ip-control

v4.3.0

Published

IP Control module for 2018+ LG TVs

Downloads

361

Readme

LG TV IP Control

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. A non-encrypted mode is provided for older models, but hasn't been tested.

This library is not provided by LG, and it is not a complete implementation for every TV model.

Check compatibility and TV setup instructions on the root's README.md.

Requirements

  • Node 16+ (at least ES2017)
  • NPM or Yarn Classic

Installation

# Using NPM
npm install lgtv-ip-control


# Using Yarn
yarn add lgtv-ip-control

Usage

Here's a very basic example of how to control the TV:

import { Inputs, LGTV } from 'lgtv-ip-control';

const lgtv = new LGTV('192.168.1.100', '1a:2b:3c:4d:5e:6f', 'KEY1C0DE');

lgtv
  .connect()
  .then(async () => {
    console.log('Disconnect now');
    await new Promise((resolve) => setTimeout(resolve, 5000));
    console.log('Unmutting...');
    await lgtv.setVolumeMute(false);
    console.log('Select HDMI1 input...');
    await lgtv.setInput(Inputs.hdmi1);
    console.log('Done!');
  })
  // Log any errors
  .catch(console.error)
  // Tries disconnecting once done
  .finally(() => lgtv.disconnect());

To use import, you need to make sure to save the file as .mjs or to specify "type": "module" on your package.json. Learn more about Node.js' support for ESM.

Otherwise replace the first line with:

const { Inputs, LGTV } = require('lgtv-ip-control');

new LGTV()

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.
   * If not provided, uses clear text, but is required by most models.
   */
  'KEY1C0DE',

  /**
   * Additional options (optional)
   *
   * See src/constants/DefaultSettings.ts file.
   */
  {
    ...DefaultSettings,
  },
);

.connect(): Promise<void>

Connects to the TV using TCP.

Required before sending any commands.

await lgtv.connect();

.disconnect(): void

Disconnects from the TV.

lgtv.disconnect();

.getCurrentApp(): Promise<Apps | string | null>

Gets the current app. May be one of the Apps enum or an arbitrary string if the app type is unknown. Might return null if the TV is powered off but still responding.

const currentApp = await lgtv.getCurrentApp();

.getCurrentVolume(): Promise<number>

Gets the current volume as an integer from 0 to 100.

const currentVolume = await lgtv.getCurrentVolume();

.getIpControlState(): Promise<boolean>

Gets the ip control state.

const ipControlState = await lgtv.getIpControlState();

.getMacAddress(type: 'wired' | 'wifi'): Promise<string>

Gets the MAC address by network interface.

const macAddress = await lgtv.getMacAddress('wired');

.getMuteState(): Promise<boolean>

Gets the mute state.

const muteState = await lgtv.getMuteState();

.getPowerState(): Promise<PowerStates>

Gets the current TV power state.

Because the TV might be offline, you should call this function before calling .connect(), otherwise you can get a TimeoutError.

const powerState = await lgtv.getPowerState();

See PowerStates for available states.

.powerOff(): Promise<void>

Powers the TV off.

await lgtv.powerOff();

.powerOn(): void

Powers the TV on, using Wake On Lan. Requires MAC address to be set when creating the LGTV instance.

lgtv.powerOn();

.powerOnAndConnect(): Promise<void>

Powers the TV on, using Wake On Lan, and connects to it. Requires MAC address to be set when creating the LGTV instance. Returns a promise that resolves once the connection is established, or rejects after a number of retries.

await lgtv.powerOnAndConnect();

.sendKey(key: Keys): Promise<void>

Sends a key, as if it was pressed on the TV remote control.

await lgtv.sendKey(Keys.menu);

See Keys for available keys.

.setEnergySaving(level: EnergySavingLevels): Promise<void>

Sets the current energy saving level. Note that screenOff is known not to work for some models.

await lgtv.setEnergySaving(EnergySavingLevels.maximum);

See EnergySavingLevels for available levels.

.setInput(input: Inputs): Promise<void>

Sets the current TV input.

await lgtv.setInput(Inputs.hdmi1);

See Inputs for available inputs.

.setVolume(volume: number): Promise<void>

Sets the volume level as an integer from 0 to 100.

await lgtv.setVolume(15);

.setVolumeMute(isMuted: boolean): Promise<void>

Sets the volume mute state.

await lgtv.setVolumeMute(false);

.setScreenMute(mode: ScreenMuteModes): Promise<void>

Sets the current screen mute mode. This can be used to either completely blank the screen or just blank the video feed while leaving the OSD visible. Returns a promise.

await lgtv.setScreenMute(ScreenMuteModes.screenmuteon);

See ScreenMuteModes for available modes.

Available Lists

EnergySavingLevels

| Key | Brightness Level | | --------- | ---------------- | | auto | Automatic | | screenOff | Screen Off | | maximum | Low | | medium | Medium | | minimum | High | | off | Maximum |

Inputs

| 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 |

Keys

| 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 |

PowerStates

| Key | State | | ------- | -------------------------------------------- | | on | The TV is on and responding to connections | | off | The TV is off or powering off | | unknown | The state of the TV is unknown, possibly off |

ScreenMuteModes

| Key | Effect | | ------------ | ------------------------ | | screenMuteOn | Blank screen | | videoMuteOn | Blank video, OSD visible | | allMuteOff | Normal Operation |