-
Notifications
You must be signed in to change notification settings - Fork 23
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
bikerp
committed
Dec 30, 2015
1 parent
771239c
commit cbd02ad
Showing
4 changed files
with
443 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/** | ||
* Tool for reading data from D-Link DSP-W215 Home Smart Plug. | ||
* | ||
* Usage: enter your PIN code to LOGIN_PWD, change value of HNAP_URL according to your device settings. | ||
* | ||
* @type {exports|module.exports} | ||
*/ | ||
var soapclient = require('./js/soapclient'); | ||
var fs = require('fs'); | ||
|
||
var OUTPUT_FILE = "result.txt"; | ||
var LOGIN_USER = "admin"; | ||
var LOGIN_PWD = "<PIN CODE>"; | ||
var HNAP_URL = "http://192.168.1.128/HNAP1"; | ||
var POLLING_INTERVAL = 10000; | ||
|
||
var login = soapclient.login(LOGIN_USER, LOGIN_PWD, HNAP_URL); | ||
|
||
login.done(function () { | ||
read(); | ||
}); | ||
|
||
function read() { | ||
soapclient.sendCommand("GetCurrentPowerConsumption", "CurrentConsumption", 1).done(function (power) { | ||
soapclient.sendCommand("GetCurrentTemperature", "CurrentTemperature", 2).done(function (temperature) { | ||
console.log(new Date().toLocaleString(), power, temperature); | ||
save(power,temperature); | ||
setTimeout(function () { | ||
read(); | ||
}, POLLING_INTERVAL); | ||
}); | ||
}) | ||
} | ||
|
||
function save(power, temperature){ | ||
fs.writeFile(OUTPUT_FILE, new Date().toLocaleString()+";"+power+";"+temperature+"\r\n",{flag:"a"}, function(err){ | ||
if(err) throw err; | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,268 @@ | ||
|
||
/* | ||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message | ||
* Digest Algorithm, as defined in RFC 1321. | ||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 | ||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | ||
* Distributed under the BSD License | ||
* See http://pajhome.org.uk/crypt/md5 for more info. | ||
*/ | ||
|
||
/* | ||
* Configurable variables. You may need to tweak these to be compatible with | ||
* the server-side, but the defaults work in most cases. | ||
*/ | ||
|
||
/* | ||
* These are the functions you'll usually want to call | ||
* They take string arguments and return either hex or base-64 encoded strings | ||
*/ | ||
|
||
exports.hex_hmac_md5=function(k, d) | ||
{ | ||
return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); | ||
}; | ||
|
||
|
||
/* | ||
* Calculate the HMAC-MD5, of a key and some data (raw strings) | ||
*/ | ||
function rstr_hmac_md5(key, data) | ||
{ | ||
var bkey = rstr2binl(key); | ||
if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8); | ||
|
||
var ipad = Array(16), opad = Array(16); | ||
for(var i = 0; i < 16; i++) | ||
{ | ||
ipad[i] = bkey[i] ^ 0x36363636; | ||
opad[i] = bkey[i] ^ 0x5C5C5C5C; | ||
} | ||
|
||
var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); | ||
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128)); | ||
} | ||
|
||
/* | ||
* Convert a raw string to a hex string | ||
*/ | ||
function rstr2hex(input) | ||
{ | ||
var hexcase=0; | ||
try { hexcase } catch(e) { hexcase=0; } | ||
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; | ||
var output = ""; | ||
var x; | ||
for(var i = 0; i < input.length; i++) | ||
{ | ||
x = input.charCodeAt(i); | ||
output += hex_tab.charAt((x >>> 4) & 0x0F) | ||
+ hex_tab.charAt( x & 0x0F); | ||
} | ||
return output; | ||
} | ||
|
||
/* | ||
* Encode a string as utf-8. | ||
* For efficiency, this assumes the input is valid utf-16. | ||
*/ | ||
function str2rstr_utf8(input) | ||
{ | ||
var output = ""; | ||
var i = -1; | ||
var x, y; | ||
|
||
while(++i < input.length) | ||
{ | ||
/* Decode utf-16 surrogate pairs */ | ||
x = input.charCodeAt(i); | ||
y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0; | ||
if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) | ||
{ | ||
x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); | ||
i++; | ||
} | ||
|
||
/* Encode output as utf-8 */ | ||
if(x <= 0x7F) | ||
output += String.fromCharCode(x); | ||
else if(x <= 0x7FF) | ||
output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), | ||
0x80 | ( x & 0x3F)); | ||
else if(x <= 0xFFFF) | ||
output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), | ||
0x80 | ((x >>> 6 ) & 0x3F), | ||
0x80 | ( x & 0x3F)); | ||
else if(x <= 0x1FFFFF) | ||
output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), | ||
0x80 | ((x >>> 12) & 0x3F), | ||
0x80 | ((x >>> 6 ) & 0x3F), | ||
0x80 | ( x & 0x3F)); | ||
} | ||
return output; | ||
} | ||
|
||
/* | ||
* Convert a raw string to an array of little-endian words | ||
* Characters >255 have their high-byte silently ignored. | ||
*/ | ||
function rstr2binl(input) | ||
{ | ||
var output = Array(input.length >> 2); | ||
for(var i = 0; i < output.length; i++) | ||
output[i] = 0; | ||
for(var i = 0; i < input.length * 8; i += 8) | ||
output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); | ||
return output; | ||
} | ||
|
||
/* | ||
* Convert an array of little-endian words to a string | ||
*/ | ||
function binl2rstr(input) | ||
{ | ||
var output = ""; | ||
for(var i = 0; i < input.length * 32; i += 8) | ||
output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); | ||
return output; | ||
} | ||
|
||
/* | ||
* Calculate the MD5 of an array of little-endian words, and a bit length. | ||
*/ | ||
function binl_md5(x, len) | ||
{ | ||
/* append padding */ | ||
x[len >> 5] |= 0x80 << ((len) % 32); | ||
x[(((len + 64) >>> 9) << 4) + 14] = len; | ||
|
||
var a = 1732584193; | ||
var b = -271733879; | ||
var c = -1732584194; | ||
var d = 271733878; | ||
|
||
for(var i = 0; i < x.length; i += 16) | ||
{ | ||
var olda = a; | ||
var oldb = b; | ||
var oldc = c; | ||
var oldd = d; | ||
|
||
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); | ||
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); | ||
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); | ||
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); | ||
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); | ||
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); | ||
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); | ||
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); | ||
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); | ||
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); | ||
c = md5_ff(c, d, a, b, x[i+10], 17, -42063); | ||
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); | ||
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); | ||
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); | ||
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); | ||
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); | ||
|
||
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); | ||
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); | ||
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); | ||
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); | ||
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); | ||
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); | ||
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); | ||
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); | ||
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); | ||
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); | ||
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); | ||
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); | ||
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); | ||
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); | ||
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); | ||
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); | ||
|
||
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); | ||
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); | ||
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); | ||
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); | ||
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); | ||
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); | ||
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); | ||
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); | ||
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); | ||
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); | ||
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); | ||
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); | ||
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); | ||
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); | ||
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); | ||
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); | ||
|
||
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); | ||
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); | ||
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); | ||
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); | ||
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); | ||
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); | ||
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); | ||
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); | ||
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); | ||
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); | ||
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); | ||
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); | ||
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); | ||
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); | ||
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); | ||
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); | ||
|
||
a = safe_add(a, olda); | ||
b = safe_add(b, oldb); | ||
c = safe_add(c, oldc); | ||
d = safe_add(d, oldd); | ||
} | ||
return Array(a, b, c, d); | ||
} | ||
|
||
/* | ||
* These functions implement the four basic operations the algorithm uses. | ||
*/ | ||
function md5_cmn(q, a, b, x, s, t) | ||
{ | ||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); | ||
} | ||
function md5_ff(a, b, c, d, x, s, t) | ||
{ | ||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); | ||
} | ||
function md5_gg(a, b, c, d, x, s, t) | ||
{ | ||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); | ||
} | ||
function md5_hh(a, b, c, d, x, s, t) | ||
{ | ||
return md5_cmn(b ^ c ^ d, a, b, x, s, t); | ||
} | ||
function md5_ii(a, b, c, d, x, s, t) | ||
{ | ||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); | ||
} | ||
|
||
/* | ||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally | ||
* to work around bugs in some JS interpreters. | ||
*/ | ||
function safe_add(x, y) | ||
{ | ||
var lsw = (x & 0xFFFF) + (y & 0xFFFF); | ||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16); | ||
return (msw << 16) | (lsw & 0xFFFF); | ||
} | ||
|
||
/* | ||
* Bitwise rotate a 32-bit number to the left. | ||
*/ | ||
function bit_rol(num, cnt) | ||
{ | ||
return (num << cnt) | (num >>> (32 - cnt)); | ||
} |
Oops, something went wrong.