Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Badisi/samsung-tv-remote

📺 NodeJS module to remotely control Samsung SmartTV starting from 2016
https://github.com/Badisi/samsung-tv-remote

nodejs remote-control samsung smarttv

Last synced: about 1 month ago
JSON representation

📺 NodeJS module to remotely control Samsung SmartTV starting from 2016

Awesome Lists containing this project

README

        


samsung-tv-remote


📺 NodeJS module to remotely control Samsung SmartTV starting from 2016.



npm version


npm donwloads


license



PRs welcome


## Features

✅ Support **Samsung SmartTV** from `2016+`

✅ Wake TV from sleep mode thanks to `Wake-on-LAN (WoL)`

✅ Send `one` or `multiple` keys at once to the TV

✅ [`241`](https://github.com/badisi/samsung-tv-remote/blob/main/src/keys.ts) known keys already predefined

## Installation

```sh
npm install samsung-tv-remote --save
```

```sh
yarn add samsung-tv-remote
```

## Usage

__Example__

```ts
/** 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__

```ts
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__

```ts
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;

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

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

## FAQ

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

Under the hood, this library is using [ws](https://github.com/websockets/ws) package and also [bufferutil](https://github.com/websockets/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](https://github.com/websockets/ws/blob/master/doc/ws.md#ws_no_buffer_util).

## Development

See the [developer docs][developer].

## 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][contributing], and learn about submission process, coding rules and more.

#### > Code of Conduct

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

[clipreview]: https://github.com/badisi/samsung-tv-remote/blob/main/cli_preview.png
[developer]: https://github.com/badisi/samsung-tv-remote/blob/main/DEVELOPER.md
[contributing]: https://github.com/badisi/samsung-tv-remote/blob/main/CONTRIBUTING.md
[codeofconduct]: https://github.com/badisi/samsung-tv-remote/blob/main/CODE_OF_CONDUCT.md