TR-064 - UPnP/IGD for node.js
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: http://www.avm.de/de/Extern/files/tr-064/AVM_TR-064_first_steps.pdf
npm install @solo-md/tr-064
Connect to the device and read a Service.
var tr = require("@solo-md/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);
       });
    }
});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);
                });
            }
        });
    }
});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);
            });
        });
    });
}Initialize the TR - 064 UPnP controller
- host- hostname of the device
- port- port of the device(standard: 49000)
- callback- (err, device)
Initialize the TR - 064 IGD controller
- host- hostname of the device
- port- port of the device(standard: 49000)
- callback- (err, device)
Starts SSL encrypted Communication
- caFile- Filename of custom .pem file (Optional)
- callback- (err, device)
Stops SSL encrypted Communication
Configure device to use authentication for every request
- user- Username (Optional, default device user is used instead)
- password- Device password
Configure device to not use authentication
Starts a 'device-side' transaction
- callback- (err, device)
Ends the current transaction
Array with all info about services and actions
Gets the specified service form the device
- Service Identifier- usually in the form of: urn:dslforum-org:service:XXX:1
- args- Array of args to configure or read a service.
- callback- (err, result)