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 🙏

© 2025 – Pkg Stats / Ryan Hefner

directv-remote-minor

v0.1.0

Published

Manipulate DirecTV STBs over their REST API, including minor channels

Downloads

5

Readme

directv-remote

Node.js module for manipulating DirecTV STBs (Set Top Boxes) over their REST API

Setup

Install from npm:

npm install directv-remote

For full functionality make sure to enable external device access on your cable box:

Menu > Settings > Whole-Home > External Device > Allow

Usage Notes

See the API spec below for actual usage examples.

Instantiate a Remote class using the IP address of a valid STB, then call any of the Remote's functions to actually talk to the box.

Functions can be called with or without callback functions. If you choose to forego a callback function, it's output will be logged to the console instead of returned.

If you choose not to pass in an optional parameter but are still using the callback function, you'll need to pass undefined in place of the missing param. I plan to refactor to remove this annoyance, but as of now it's not a priority.

There is a Mocha test suite in the test.js file, that consists of a number of integration tests. These tests require a Whole-Home DVR setup (Genie STBs) and actually send commands to the boxes while expecting real responses. This is also a good example of this library's functionality.

API

DirecTV.validateIP(ipAddr, callback)

Verify that an IP address is in fact that of a valid DirecTV Set Top Box.

The parameter ipAddr is required and expected to be a string.

No arguments other than a possible exception are given to the completion callback. If err is undefined, this it is a valid Set Top Box.

Example:

var DirecTV = require('directv-remote');
var ipAddr = '192.168.1.103';

DirecTV.validateIP(ipAddr, function(err) {
    if (err) return console.log(err);
    console.log(ipAddr, 'is a valid STB');
});

// returns '192.168.1.103 is a valid STB'

DirecTV.Remote(ipAddr)

Instantiates a DirecTV Remote object. The resulting object will be referred to as Remote from here forward.

The parameter ipAddr is required and expected to be a string.

Example:

// Create a new Remote
var Remote = new DirecTV.Remote(ipAddr);

Remote.getOptions([callback])

Lists the available endpoints on the system.

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getOptions(function(err,response) {
    if (err) return console.log(err);
    console.log(response);
});

// has the same effect as

Remote.getOptions();

// for compactness, callback functions will not be shown in the rest of the examples

Remote.getLocations([type], [callback])

Returns an array of the networked Set Top Boxes.

The parameter type is an optional parameter. The documentation labels it as an int and during my testing the only values that don't return Forbidden are 0 and 1. With Whole-Home DVR (Genie STBs) enabled in my house, passing 1 shows currently offline STBs.

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getLocations(1);

Remote.getSerialNum([clientAddr], [callback])

Returns the serial number of the Set Top Box.

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getSerialNum('88F7C7DA0264');

Remote.getVersion([callback])

Returns Set Top Box version information as well as a systemTime property, which is the current epoch timestamp.

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getVersion();

Remote.getMode([clientAddr], [callback])

Returns the mode that the Set Top Box is currently operating in. It seems this returned mode property reflects the status active (0) or inactive (1), though this isn't documented behavior.

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getMode('88f7c7da1456');

Remote.processKey(key, [clientAddr], [callback])

Send standard remote control key presses to the STB.

The parameter key is a required string value, that corresponds to buttons on the remote, such as: format, power, rew, pause, play, stop, ffwd, replay, advance, record, guide, active, list, exit, up, down, select, left, right, back, menu, info, red, green, yellow, blue, chanup, chandown, prev, 1, 2, 3, 4, 5, 6, 7, 8, 9, dash, 0, enter

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.processKey('guide', '88F7C7DA0264');

Remote.processCommand(cmd, [callback])

Send command request to the STB.

The parameter cmd is a required hex value, such as:

| Command | Definition | |---------|------------| | FA81 | Standby | | FA82 | Active | | FA83 | GetPrimaryStatus | | FA84 | GetCommandVersion | | FA87 | GetCurrentChannel | | FA90 | GetSignalQuality | | FA91 | GetCurrentTime | | FA92 | GetUserCommand | | FA93 | EnableUserEntry | | FA94 | DisableUserEntry | | FA95 | GetReturnValue | | FA96 | Reboot | | FAA5 | SendUserCommand | | FAA6 | OpenUserChannel | | FA9A | GetTuner | | FA8A | GetPrimaryStatusMT | | FA8B | GetCurrentChannelMT | | FA9D | GetSignalQualityMT | | FA9F | OpenUserChannelMT |

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.processCommand('FA91')

Remote.getProgInfo(channel, [startTime], [clientAddr], [callback])

Returns program information for the specified channel, time and STB.

The parameter channel is required and is an int.

The optional parameter startTime is an epoch timestamp int, the default if not provided is now.

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getProgInfo(300, 1416999600)

// returns info about the program airing on channel 300 at 1416999600

Remote.getTuned([clientAddr], [callback])

Returns information about the program currently being viewed.

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.getTuned()

Remote.tune(channel, [clientAddr], [callback])

Tunes the STB to a specific channel.

The parameter channel is required and is an int.

The parameter clientAddr is an optional string used to specify a separate networked STB. This is the same clientAddr referenced in the response from getLocations().

The optional callback function accepts two parameters, an error and the response. If the optional callback parameter is not provided, then the response or error are simply printed to the console upon completion.

Example:

Remote.tune(299, '88F7C7DA0264')

Credit

This code is loosely based on the research done by Jeremy Whitlock for his directv-remote-api project. It has been rewritten from the ground up to work on Node.js, without the jQuery and Underscore.js deps.

To-Do List

  • implement key holds
  • write better API examples that show manipulation of returned data
  • refactor to combine the multiple parameters of each function into an options object