0.4.1 • Published 5 years ago

@nicolaischmid/tr064 v0.4.1

Weekly downloads
1
License
Apache-2.0
Repository
github
Last release
5 years ago

tr-064

TR-064 - UPnP/IGD for node.js

Description

A library to interact with routers and other network devices. Tested and designd for Fritz.Box routers.

This library is capable of:

  • Supports the UPnP, IGD and PMR (Samsung TV) Protocol
  • Read and configure Services
  • Authentication with username/password or password only
  • SSL encryption
  • Transactions
  • Subscribe to Events with included EventServer

More info about TR-064: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/AVM_TR-064_first_steps.pdf

Install

It`s simple

Connect to the device and read a Service.

var tr = require('tr-064');
var tr064 = new tr.TR064();
tr064.initTR064Device('fritz.box', 49000, function(err, device) {
  if (!err) {
    var wanip = device.services['urn:dslforum-org:service:WANIPConnection:1'];
    wanip.actions.GetInfo(function(err, result) {
      console.log(result);
    });
  }
});

Save communication (SSL Encryption, Authentication)

var tr = require('tr-064');
var tr064 = new tr.TR064();
tr064.initTR064Device('fritz.box', 49000, function(err, device) {
  if (!err) {
    device.startEncryptedCommunication(function(err, sslDev) {
      if (!err) {
        sslDev.login([USER], [PASSWORD]);
        var wanip = sslDev.services['urn:dslforum-org:service:WANIPConnection:1'];
        wanip.actions.GetInfo(function(err, result) {
          console.log(result);
        });
      }
    });
  }
});

List All Services and Variables

Get the info from both protocols.

var tr = require('tr-064');
var tr064 = new tr.TR064();
tr064.initTR064Device('fritz.box', 49000, function(err, device) {
  if (!err) {
    console.log('Found device! - TR-064');
    showDevice(device);
  }
});

tr064.initIGDDevice('fritz.box', 49000, function(err, device) {
  if (!err) {
    console.log('Found device! - IGD');
    showDevice(device);
  }
});

var showDevice = function(device) {
  console.log('=== ' + device.meta.friendlyName + ' ===');
  device.meta.servicesInfo.forEach(function(serviceType) {
    var service = device.services[serviceType];
    console.log('  ---> ' + service.meta.serviceType + ' <---');
    service.meta.actionsInfo.forEach(function(action) {
      console.log('   # ' + action.name + '()');
      action.inArgs.forEach(function(arg) {
        console.log('     IN : ' + arg);
      });
      action.outArgs.forEach(function(arg) {
        console.log('     OUT: ' + arg);
      });
    });
  });
};

Methods

initTR064Device(host, port, callback)

Initialize the TR - 064 UPnP controller

  • host - hostname of the device
  • port - port of the device(standard: 49000)
  • callback - (err, device)

initIGDDevice(host, port, callback)

Initialize the TR - 064 IGD controller

  • host - hostname of the device
  • port - port of the device(standard: 49000)
  • callback - (err, device)

device.startEncryptedCommunication(caFile,callback)

Starts SSL encrypted Communication

  • caFile - Filename of custom .pem file (Optional)
  • callback - (err, device)

device.stopEncryptedCommunication()

Stops SSL encrypted Communication

device.login(user,password)

Configure device to use authentication for every request

  • user - Username (Optional, default device user is used instead)
  • password - Device password

device.logout()

Configure device to not use authentication

device.startTransaction(callback)

Starts a 'device-side' transaction

  • callback - (err, device)

device.stopTransaction()

Ends the current transaction

device.meta

Array with all info about services and actions

device.servicesService Identifier

Gets the specified service form the device

  • Service Identifier - usually in the form of: urn:dslforum-org:service:XXX:1

service.actions.XXX({name: 'xx', value: 'xx'}, callback)

  • name - Argumentname for Action
  • value - Argumentvalue for Action
  • callback - (err, result)
service.actions.SetEnable([{ name: 'NewEnable', value: '1' }], function(err, result) {
  console.log(result);
});

Contributing

Feel free to provide PRs with updates to this package. But please follow these steps:

  • Fork it
  • Add your changes
  • Format your code: yarn format
  • Commit your changes, while adhearing to the Angular commit convention.
  • Submit your PR
0.4.4

5 years ago

0.4.1

6 years ago

0.4.0

6 years ago