Home

Awesome

<h1 align="center"> samsung-tv-remote </h1> <p align="center"> <i>📺 NodeJS module to remotely control Samsung SmartTV starting from 2016.</i><br/> </p> <p align="center"> <a href="https://www.npmjs.com/package/samsung-tv-remote"> <img src="https://img.shields.io/npm/v/samsung-tv-remote.svg?color=blue&logo=npm" alt="npm version" /></a> <a href="https://npmcharts.com/compare/samsung-tv-remote?minimal=true"> <img src="https://img.shields.io/npm/dw/samsung-tv-remote.svg?color=7986CB&logo=npm" alt="npm donwloads" /></a> <a href="https://github.com/badisi/samsung-tv-remote/blob/main/LICENSE"> <img src="https://img.shields.io/npm/l/samsung-tv-remote.svg?color=ff69b4" alt="license" /></a> </p> <p align="center"> <a href="https://github.com/badisi/samsung-tv-remote/blob/main/CONTRIBUTING.md#-submitting-a-pull-request-pr"> <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome" /></a> </p> <hr/>

Features

✅ Support Samsung SmartTV from 2016+<br/> ✅ Wake TV from sleep mode thanks to Wake-on-LAN (WoL)<br/> ✅ Send one or multiple keys at once to the TV<br/> ✅ 241 known keys already predefined<br/>

Installation

npm install samsung-tv-remote --save
yarn add samsung-tv-remote

Usage

Example

/** CommonJS */
// const { SamsungTvRemote, Keys } = require('samsung-tv-remote');

/** ESM / Typescript */
import { SamsungTvRemote, Keys } from 'samsung-tv-remote';

const main = async () => {
    const remote = new SamsungTvRemote({
        ip: '192.168.1.111',
        mac: 'fc:03:9f:0d:72:37'
    });
    await remote.wakeTV();
    await remote.sendKey(Keys.KEY_DOWN);
    await remote.sendKeys([Keys.KEY_POWER]);
};
main().catch(console.error);

Options

interface SamsungTvRemoteOptions {
    /**
     * IP address of the TV.
     */
    ip: string;

    /**
     * MAC address of the TV.
     * Required only when using the 'wakeTV()' api.
     *
     * @default 00:00:00:00:00:00
     */
    mac?: string,

    /**
     * Name under which the TV will recognize your program.
     * - It will be displayed on TV, the first time you run your program, as a 'device' trying to connect.
     * - It will also be used by this library to persist a token on the operating system running your program,
     *   so that no further consent are asked by the TV after the first run.
     *
     * @default SamsungTvRemote
     */
    name?: string,

    /**
     * Port address used for remote control emulation protocol.
     * Different ports are used in different TV models.
     * It could be: 55000 (legacy), 8001 (2016+) or 8002 (2018+).
     *
     * @default 8002
     */
    port?: number,

    /**
     * Milliseconds before the connection to the TV times out.
     *
     * @default 1000
     */
    timeout?: number;

    /**
     * Enables more detailed output.
     *
     * @default false
     */
    debug?: boolean;
}

Apis

class SamsungTvRemote {
    /**
     * Turn the TV on or awaken it from sleep mode (also called WoL - Wake-on-LAN).
     * The mac address option is required in this case.
     */
    wakeTV(): Promise<void>;

    /**
     * Send a key to the TV.
     */
    sendKey(key: Keys): Promise<void>;

    /**
     * Send multiple keys to the TV.
     */
    sendKeys(key: Keys[]): Promise<void>;
}

FAQ

I'm getting a TypeError: bufferUtil.mask is not a function

Under the hood, this library is using ws package and also bufferutil to enhance ws' performances.

Since bufferutil is a binary addon, it may or may not be installed correctly on your current platform due to potential incompatibilities.

In such cases, using the environment variable WS_NO_BUFFER_UTIL=1 will be necessary to resolve the issue.

You can read more here.

Development

See the developer docs.

Contributing

> Want to Help ?

Want to file a bug, contribute some code or improve documentation ? Excellent!

But please read up first on the guidelines for contributing, and learn about submission process, coding rules and more.

> Code of Conduct

Please read and follow the Code of Conduct and help me keep this project open and inclusive.