TR-064 - UPnP/IGD for node.js
npm install @seydx/tr064TR-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: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/AVM_TR-064_first_steps.pdf
npm install tr-064
s simpleConnect to the device and read a Service.
`javascript`
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);
});
}
});
`javascript`
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.
`javascript
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 deviceport
* - port of the device(standard: 49000)callback
* - (err, device)
Initialize the TR - 064 IGD controller
* host - hostname of the deviceport
* - 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
* name - Argumentname for Actionvalue
* - Argumentvalue for Actioncallback
* - (err, result)
`javascript`
service.actions.SetEnable([{ name: 'NewEnable', value: '1' }], function(err, result) {
console.log(result);
});
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