dialog-router-api
Version:
A wrapper to connect with and query the API on the Huawei 4G routers provided by Dialog Axiata
192 lines (164 loc) • 5.58 kB
Markdown
# huawei-router-api
A wrapper to connect with and query the API on the Huawei 4G routers (notably the Huawei B315) and any other supporting models.
## Installation
npm install dialog-router-api --save
## Notes
I was messing about with the web-admin panel of the router and found that it was merely a client side web-page/site that communicates with a backend API via AJAX requests.
There's a lot more to the router's API than just the ones I've been able to provide here, Some of the functions of API require you to login, and currently ~~this doesn't seem to work at all with mine, even with the offical [Huawei Android App](https://play.google.com/store/apps/details?id=com.huawei.mw&hl=en). (router is locked down by Dialog? Different firmware?)~~ thanks to [Rolf Sormo](https://github.com/rolfsormo) for his implementation of the [login feature](https://github.com/ishan-marikar/dialog-router-api/pull/2), it seems to work.
Thanks to [Henrik S Pedersen](http://blog.hsp.dk/php-api-huawei-e5180-router/) and [Hacker Ramblings](https://blog.hqcodeshop.fi/archives/259-Huawei-E5186-AJAX-API.html) for posting their findings on the internet.
## Usage
```js
var router = require('dialog-router-api').create({
gateway: '192.168.8.1'
// The IP address of your router, can be found by doing
// ipconfig on windows or netstat -r on linux (right under 'Gateway')
});
router.getToken(function(error, token) {
router.getBasicSettings(token, function(error, response){
console.log(response);
});
});
```
## API
### getToken(error, token)
Responds with a token and a cookie used by the following methods to authenticate and communicate with the API.
```js
{ cookies: 'SessionID=nOintv3yIw1utMbHCcZh063IcJKtcV4rVAoSBDNTc+NJIixBN7ukOg8MSaGf+Fck2uiBmmozJ5go63Hs8/wm44ySCrluICP6rsmzVvFzJHXFmrMm4NV0fi8NmJk+QVHY',
token: '34/Z8of05pVMyK7+SL81x6XgWx28r/ny'
}
```
### login(token, username, password, callback)
Logins in to the router with the provided credentials.
### getMonthStatistics(token, callback)
Responds with the monthly statistics (as shown on the admin dashboard of the router).
```js
{
CurrentMonthDownload: [ '5222230621' ],
// in bytes
CurrentMonthUpload: [ '302853159' ],
// in bytes
MonthDuration: [ '209127' ],
// in seconds, I assume
MonthLastClearTime: [ '2016-2-16' ]
// in light-years (jk)
}
```
### getCurrentPLMN
Should respond with the Public Land Mobile Network Information, but in my case, it does not.
```js
{
State: [ '0' ],
FullName: [ '41311' ],
ShortName: [ '41311' ],
Numeric: [ '41311' ],
// What the fuck?
Rat: [ '7' ]
}
```
### getSignal(token, callback)
Responds with the signal strengths of the router
```js
{
pci: [ '367' ],
sc: [ '' ],
cell_id: [ '292609' ],
rsrq: [ '-7dB' ],
rsrp: [ '-93dBm' ],
rssi: [ '-65dBm' ],
sinr: [ '14dB' ],
rscp: [ '' ],
ecio: [ '' ],
mode: [ '7' ]
}
```
### getStatus(token, callback)
Responds with the basic status information of the router.
```js
{
ConnectionStatus: [ '901' ],
WifiConnectionStatus: [ '' ],
SignalStrength: [ '' ],
SignalIcon: [ '4' ],
CurrentNetworkType: [ '19' ],
CurrentServiceDomain: [ '2' ],
RoamingStatus: [ '0' ],
BatteryStatus: [ '' ],
BatteryLevel: [ '' ],
BatteryPercent: [ '' ],
simlockStatus: [ '0' ],
WanIPAddress: [ '' ],
WanIPv6Address: [ '' ],
PrimaryDns: [ '' ],
SecondaryDns: [ '' ],
PrimaryIPv6Dns: [ '' ],
SecondaryIPv6Dns: [ '' ],
CurrentWifiUser: [ '1' ],
TotalWifiUser: [ '32' ],
currenttotalwifiuser: [ '32' ],
ServiceStatus: [ '2' ],
SimStatus: [ '1' ],
WifiStatus: [ '1' ],
CurrentNetworkTypeEx: [ '101' ],
maxsignal: [ '5' ],
wifiindooronly: [ '0' ],
wififrequence: [ '0' ],
classify: [ 'cpe' ],
flymode: [ '0' ],
cellroam: [ '1' ],
voice_busy: [ '0' ]
}
```
### getTrafficStatistics(token, callback)
Reponds with the total traffic statistics of the router.
```js
{
CurrentConnectTime: [ '7994' ],
CurrentUpload: [ '7534237' ],
CurrentDownload: [ '69825936' ],
CurrentDownloadRate: [ '64' ],
CurrentUploadRate: [ '130' ],
TotalUpload: [ '304369972' ],
TotalDownload: [ '5243043843' ],
TotalConnectTime: [ '215501' ],
showtraffic: [ '1' ]
}
```
### getBasicSettings(token, callback)
Responds with the basic settings of the router.
```js
{ WifiSsid: [ 'Dialog 4G' ],
WifiChannel: [ '6' ],
WifiHide: [ '1' ],
WifiCountry: [ 'US' ],
WifiMode: [ 'b/g/n' ],
WifiRate: [ '0' ],
WifiTxPwrPcnt: [ '100' ],
WifiMaxAssoc: [ '32' ],
WifiEnable: [ '1' ],
WifiFrgThrshld: [ '2346' ],
WifiRtsThrshld: [ '2347' ],
WifiDtmIntvl: [ '1' ],
WifiBcnIntvl: [ '100' ],
WifiWme: [ '1' ],
WifiPamode: [ '0' ],
WifiIsolate: [ '0' ],
WifiProtectionmode: [ '1' ],
Wifioffenable: [ '1' ],
Wifiofftime: [ '600' ],
wifibandwidth: [ '0' ],
wifiautocountryswitch: [ '0' ],
wifiantennanum: [ '2' ],
wifiguestofftime: [ '0' ],
WifiRestart: [ '0' ] }
```
## Tests
```HUAWEI_GW_IP=192.168.8.1 HUAWEI_GW_PASSWORD=abc123 HUAWEI_GW_USERNAME=admin npm test```
You most likely need to set your device IP and the admin credentials on the command-line like in this example.
## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
## Contributors
- [Rolf Sormo](https://github.com/rolfsormo)
## Bugs
Plenty. If you find any, please do let me know. I also don't mind pull-requests, so if you want to contribute, please do. c:
## Release History
- 0.1.0 Initial release