update:修改productkey
parent
1bd2a9ac9d
commit
b5d60b6611
|
@ -1,159 +1,238 @@
|
||||||
!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);
|
!function (n) {
|
||||||
var md5=this.md5;
|
"use strict";
|
||||||
|
|
||||||
function isServerId(clientId){
|
function d(n, t) {
|
||||||
return JSON.parse(component.getCompMqttClientIdList()).indexOf(clientId) > -1
|
var r = (65535 & n) + (65535 & t);
|
||||||
|
return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
|
||||||
|
}
|
||||||
|
|
||||||
|
function f(n, t, r, e, o, u) {
|
||||||
|
return d((u = d(d(t, n), d(e, u))) << o | u >>> 32 - o, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
function l(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & r | ~t & e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function g(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & e | r & ~e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function v(n, t, r, e, o, u, c) {
|
||||||
|
return f(t ^ r ^ e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function m(n, t, r, e, o, u, c) {
|
||||||
|
return f(r ^ (t | ~e), n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function c(n, t) {
|
||||||
|
var r, e, o, u;
|
||||||
|
n[t >> 5] |= 128 << t % 32, n[14 + (t + 64 >>> 9 << 4)] = t;
|
||||||
|
for (var c = 1732584193, f = -271733879, i = -1732584194, a = 271733878, h = 0; h < n.length; h += 16) c = l(r = c, e = f, o = i, u = a, n[h], 7, -680876936), a = l(a, c, f, i, n[h + 1], 12, -389564586), i = l(i, a, c, f, n[h + 2], 17, 606105819), f = l(f, i, a, c, n[h + 3], 22, -1044525330), c = l(c, f, i, a, n[h + 4], 7, -176418897), a = l(a, c, f, i, n[h + 5], 12, 1200080426), i = l(i, a, c, f, n[h + 6], 17, -1473231341), f = l(f, i, a, c, n[h + 7], 22, -45705983), c = l(c, f, i, a, n[h + 8], 7, 1770035416), a = l(a, c, f, i, n[h + 9], 12, -1958414417), i = l(i, a, c, f, n[h + 10], 17, -42063), f = l(f, i, a, c, n[h + 11], 22, -1990404162), c = l(c, f, i, a, n[h + 12], 7, 1804603682), a = l(a, c, f, i, n[h + 13], 12, -40341101), i = l(i, a, c, f, n[h + 14], 17, -1502002290), c = g(c, f = l(f, i, a, c, n[h + 15], 22, 1236535329), i, a, n[h + 1], 5, -165796510), a = g(a, c, f, i, n[h + 6], 9, -1069501632), i = g(i, a, c, f, n[h + 11], 14, 643717713), f = g(f, i, a, c, n[h], 20, -373897302), c = g(c, f, i, a, n[h + 5], 5, -701558691), a = g(a, c, f, i, n[h + 10], 9, 38016083), i = g(i, a, c, f, n[h + 15], 14, -660478335), f = g(f, i, a, c, n[h + 4], 20, -405537848), c = g(c, f, i, a, n[h + 9], 5, 568446438), a = g(a, c, f, i, n[h + 14], 9, -1019803690), i = g(i, a, c, f, n[h + 3], 14, -187363961), f = g(f, i, a, c, n[h + 8], 20, 1163531501), c = g(c, f, i, a, n[h + 13], 5, -1444681467), a = g(a, c, f, i, n[h + 2], 9, -51403784), i = g(i, a, c, f, n[h + 7], 14, 1735328473), c = v(c, f = g(f, i, a, c, n[h + 12], 20, -1926607734), i, a, n[h + 5], 4, -378558), a = v(a, c, f, i, n[h + 8], 11, -2022574463), i = v(i, a, c, f, n[h + 11], 16, 1839030562), f = v(f, i, a, c, n[h + 14], 23, -35309556), c = v(c, f, i, a, n[h + 1], 4, -1530992060), a = v(a, c, f, i, n[h + 4], 11, 1272893353), i = v(i, a, c, f, n[h + 7], 16, -155497632), f = v(f, i, a, c, n[h + 10], 23, -1094730640), c = v(c, f, i, a, n[h + 13], 4, 681279174), a = v(a, c, f, i, n[h], 11, -358537222), i = v(i, a, c, f, n[h + 3], 16, -722521979), f = v(f, i, a, c, n[h + 6], 23, 76029189), c = v(c, f, i, a, n[h + 9], 4, -640364487), a = v(a, c, f, i, n[h + 12], 11, -421815835), i = v(i, a, c, f, n[h + 15], 16, 530742520), c = m(c, f = v(f, i, a, c, n[h + 2], 23, -995338651), i, a, n[h], 6, -198630844), a = m(a, c, f, i, n[h + 7], 10, 1126891415), i = m(i, a, c, f, n[h + 14], 15, -1416354905), f = m(f, i, a, c, n[h + 5], 21, -57434055), c = m(c, f, i, a, n[h + 12], 6, 1700485571), a = m(a, c, f, i, n[h + 3], 10, -1894986606), i = m(i, a, c, f, n[h + 10], 15, -1051523), f = m(f, i, a, c, n[h + 1], 21, -2054922799), c = m(c, f, i, a, n[h + 8], 6, 1873313359), a = m(a, c, f, i, n[h + 15], 10, -30611744), i = m(i, a, c, f, n[h + 6], 15, -1560198380), f = m(f, i, a, c, n[h + 13], 21, 1309151649), c = m(c, f, i, a, n[h + 4], 6, -145523070), a = m(a, c, f, i, n[h + 11], 10, -1120210379), i = m(i, a, c, f, n[h + 2], 15, 718787259), f = m(f, i, a, c, n[h + 9], 21, -343485551), c = d(c, r), f = d(f, e), i = d(i, o), a = d(a, u);
|
||||||
|
return [c, f, i, a]
|
||||||
|
}
|
||||||
|
|
||||||
|
function i(n) {
|
||||||
|
for (var t = "", r = 32 * n.length, e = 0; e < r; e += 8) t += String.fromCharCode(n[e >> 5] >>> e % 32 & 255);
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function a(n) {
|
||||||
|
var t = [];
|
||||||
|
for (t[(n.length >> 2) - 1] = void 0, e = 0; e < t.length; e += 1) t[e] = 0;
|
||||||
|
for (var r = 8 * n.length, e = 0; e < r; e += 8) t[e >> 5] |= (255 & n.charCodeAt(e / 8)) << e % 32;
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function e(n) {
|
||||||
|
for (var t, r = "0123456789abcdef", e = "", o = 0; o < n.length; o += 1) t = n.charCodeAt(o), e += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
function r(n) {
|
||||||
|
return unescape(encodeURIComponent(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
function o(n) {
|
||||||
|
return i(c(a(n = r(n)), 8 * n.length))
|
||||||
|
}
|
||||||
|
|
||||||
|
function u(n, t) {
|
||||||
|
return function (n, t) {
|
||||||
|
var r, e = a(n), o = [], u = [];
|
||||||
|
for (o[15] = u[15] = void 0, 16 < e.length && (e = c(e, 8 * n.length)), r = 0; r < 16; r += 1) o[r] = 909522486 ^ e[r], u[r] = 1549556828 ^ e[r];
|
||||||
|
return t = c(o.concat(a(t)), 512 + 8 * t.length), i(c(u.concat(t), 640))
|
||||||
|
}(r(n), r(t))
|
||||||
|
}
|
||||||
|
|
||||||
|
function t(n, t, r) {
|
||||||
|
return t ? r ? u(t, n) : e(u(t, n)) : r ? o(n) : e(o(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
"function" == typeof define && define.amd ? define(function () {
|
||||||
|
return t
|
||||||
|
}) : "object" == typeof module && module.exports ? module.exports = t : n.md5 = t
|
||||||
|
}(this);
|
||||||
|
var md5 = this.md5;
|
||||||
|
|
||||||
|
function isServerId(clientId) {
|
||||||
|
return JSON.parse(component.getCompMqttClientIdList()).indexOf(clientId) > -1
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPkDn(clientId){
|
function getPkDn(clientId) {
|
||||||
var arr=clientId.split("_");
|
var arr = clientId.split("_");
|
||||||
return {
|
return {
|
||||||
pk:arr[0],
|
pk: arr[0],
|
||||||
dn:arr[1]
|
dn: arr[1]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function auth(head,type,payload){
|
function auth(head, type, payload) {
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type:"serverAuth",
|
type: "serverAuth",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var arr= payload.clientid.split("_");
|
var arr = payload.clientid.split("_");
|
||||||
if(arr.length<3){
|
if (arr.length < 3) {
|
||||||
throw new Error("incorrect clientid:" + payload.clientid);
|
throw new Error("incorrect clientid:" + payload.clientid);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[0];
|
var pk = arr[0];
|
||||||
var dn=arr[1];
|
var dn = arr[1];
|
||||||
var model=arr[2];
|
var model = arr[2];
|
||||||
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+payload.clientid);
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
if(pwd!=payload.password){
|
var pwd = md5(product.productSecret + payload.clientid);
|
||||||
throw new Error("incorrect password:" + pwd);
|
|
||||||
|
if (pwd.toLocaleLowerCase() != payload.password.toLocaleLowerCase()) {
|
||||||
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
model:model
|
model: model
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function acl(head,type,payload){
|
function acl(head, type, payload) {
|
||||||
var _topic = payload.topic;
|
var _topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// 客户端订阅处理
|
// 客户端订阅处理
|
||||||
if (/^\/sys\/.+\/.+\/c\/#/i.test(_topic)) {
|
if (/^\/sys\/.+\/.+\/c\/#/i.test(_topic)) {
|
||||||
return subscribe(head,type,payload);
|
return subscribe(head, type, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 服务端订阅处理
|
// 服务端订阅处理
|
||||||
if (/^\/sys\/.+\/.+\/s\/.*/i.test(_topic)) {
|
if (/^\/sys\/.+\/.+\/s\/.*/i.test(_topic)) {
|
||||||
return subscribe(head,type,payload);
|
return subscribe(head, type, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function register(head,type,payload){
|
function register(head, type, payload) {
|
||||||
var auth= payload;
|
var auth = payload;
|
||||||
var arr= auth.clientid.split("_");
|
var arr = auth.clientid.split("_");
|
||||||
if(arr.length<3){
|
if (arr.length < 3) {
|
||||||
throw new Error("incorrect clientid:" + auth.clientid);
|
throw new Error("incorrect clientid:" + auth.clientid);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[0];
|
var pk = arr[0];
|
||||||
var dn=arr[1];
|
var dn = arr[1];
|
||||||
var model=arr[2];
|
var model = arr[2];
|
||||||
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+auth.clientid);
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
if(pwd!=auth.password){
|
var pwd = md5(product.productSecret + auth.clientid);
|
||||||
throw new Error("incorrect password:" + pwd);
|
|
||||||
|
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
||||||
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
model:model
|
model: model
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function subRegister(topic,parent, payload){
|
function subRegister(topic, parent, payload) {
|
||||||
if(!topic){
|
if (!topic) {
|
||||||
throw new Error("topic is blank")
|
throw new Error("topic is blank")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var params= payload.params;
|
var params = payload.params;
|
||||||
|
|
||||||
var reply=
|
var reply =
|
||||||
{
|
{
|
||||||
productKey: parent.productKey,
|
productKey: parent.productKey,
|
||||||
deviceName: parent.deviceName,
|
deviceName: parent.deviceName,
|
||||||
mid: "0",
|
mid: "0",
|
||||||
content:{
|
content: {
|
||||||
topic: topic.replace("/s/","/c/")+"_reply",
|
topic: topic.replace("/s/", "/c/") + "_reply",
|
||||||
payload: JSON.stringify({
|
payload: JSON.stringify({
|
||||||
id: payload.id,
|
id: payload.id,
|
||||||
code: 0,
|
code: 0,
|
||||||
data: {
|
data: {
|
||||||
"productKey":params.productKey,
|
"productKey": params.productKey,
|
||||||
"deviceName":params.deviceName
|
"deviceName": params.deviceName
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:parent.productKey,
|
productKey: parent.productKey,
|
||||||
deviceName:parent.deviceName,
|
deviceName: parent.deviceName,
|
||||||
subDevices:[{
|
subDevices: [{
|
||||||
productKey:params.productKey,
|
productKey: params.productKey,
|
||||||
deviceName:params.deviceName,
|
deviceName: params.deviceName,
|
||||||
model:params.model
|
model: params.model
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
action:{
|
action: {
|
||||||
type:"ack",
|
type: "ack",
|
||||||
content:JSON.stringify(reply)
|
content: JSON.stringify(reply)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnect(head,type,payload){
|
function disconnect(head, type, payload) {
|
||||||
var clientId = payload.clientid
|
var clientId = payload.clientid
|
||||||
var device=getPkDn(clientId);
|
var device = getPkDn(clientId);
|
||||||
return {
|
return {
|
||||||
type:"state",
|
type: "state",
|
||||||
data:{
|
data: {
|
||||||
productKey:device.pk,
|
productKey: device.pk,
|
||||||
deviceName:device.dn,
|
deviceName: device.dn,
|
||||||
state:"offline"
|
state: "offline"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect(head,type,payload) {
|
function connect(head, type, payload) {
|
||||||
var clientId = payload.clientid
|
var clientId = payload.clientid
|
||||||
var device = getPkDn(clientId);
|
var device = getPkDn(clientId);
|
||||||
return {
|
return {
|
||||||
|
@ -166,56 +245,56 @@ function connect(head,type,payload) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function unsubscribe(head,type,payload){
|
function unsubscribe(head, type, payload) {
|
||||||
var topic = payload.topic;
|
var topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic: "+topic)
|
throw new Error("incorrect topic: " + topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"state",
|
type: "state",
|
||||||
data:{
|
data: {
|
||||||
productKey: pk,
|
productKey: pk,
|
||||||
deviceName: dn,
|
deviceName: dn,
|
||||||
state:"offline"
|
state: "offline"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function subscribe(head,type,payload){
|
function subscribe(head, type, payload) {
|
||||||
var topic = payload.topic;
|
var topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic: "+topic)
|
throw new Error("incorrect topic: " + topic)
|
||||||
}
|
}
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "state",
|
type: "state",
|
||||||
|
@ -228,84 +307,84 @@ function subscribe(head,type,payload){
|
||||||
}
|
}
|
||||||
|
|
||||||
var messageHandler = {
|
var messageHandler = {
|
||||||
"/sys/client/connected":connect,
|
"/sys/client/connected": connect,
|
||||||
"/sys/client/disconnected":disconnect,
|
"/sys/client/disconnected": disconnect,
|
||||||
"/mqtt/auth":auth,
|
"/mqtt/auth": auth,
|
||||||
"/mqtt/acl":acl,
|
"/mqtt/acl": acl,
|
||||||
"/sys/session/subscribed":subscribe,
|
"/sys/session/subscribed": subscribe,
|
||||||
"/sys/session/unsubscribed":unsubscribe
|
"/sys/session/unsubscribed": unsubscribe
|
||||||
}
|
}
|
||||||
|
|
||||||
//必须提供onReceive方法
|
//必须提供onReceive方法
|
||||||
this.onReceive=function(head,type,payload){
|
this.onReceive = function (head, type, payload) {
|
||||||
payload=JSON.parse(payload);
|
payload = JSON.parse(payload);
|
||||||
|
|
||||||
var result = {};
|
var result = {};
|
||||||
var topic = head.topic;
|
var topic = head.topic;
|
||||||
if(!topic) {
|
if (!topic) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fun = messageHandler[topic];
|
var fun = messageHandler[topic];
|
||||||
|
|
||||||
if(fun){
|
if (fun) {
|
||||||
return fun(head,type,payload)
|
return fun(head, type, payload)
|
||||||
}else{
|
} else {
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic: "+topic)
|
throw new Error("incorrect topic: " + topic)
|
||||||
}
|
}
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
//子设备注册
|
//子设备注册
|
||||||
if(topic.endsWith('/register')){
|
if (topic.endsWith('/register')) {
|
||||||
return subRegister(topic,{productKey:pk,deviceName:dn}, payload);
|
return subRegister(topic, {productKey: pk, deviceName: dn}, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
//数据上报
|
//数据上报
|
||||||
var reply=
|
var reply =
|
||||||
{
|
{
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
mid:payload.id,
|
mid: payload.id,
|
||||||
content:{
|
content: {
|
||||||
topic:topic.replace("/s/","/c/")+"_reply",
|
topic: topic.replace("/s/", "/c/") + "_reply",
|
||||||
payload:JSON.stringify({
|
payload: JSON.stringify({
|
||||||
id:payload.id,
|
id: payload.id,
|
||||||
method: payload.method+"_reply",
|
method: payload.method + "_reply",
|
||||||
code:0,
|
code: 0,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var action={};
|
var action = {};
|
||||||
if(!topic.endsWith("_reply")){
|
if (!topic.endsWith("_reply")) {
|
||||||
//需要回复的消息
|
//需要回复的消息
|
||||||
action={
|
action = {
|
||||||
type:"ack",
|
type: "ack",
|
||||||
content:JSON.stringify(reply)
|
content: JSON.stringify(reply)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"report",
|
type: "report",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
mid:payload.id,
|
mid: payload.id,
|
||||||
content:{
|
content: {
|
||||||
topic:topic,
|
topic: topic,
|
||||||
payload:payload
|
payload: payload
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
action:action
|
action: action
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onRegistered=function(regInfo,result){
|
this.onRegistered = function (regInfo, result) {
|
||||||
}
|
}
|
|
@ -122,10 +122,13 @@ function register(payload) {
|
||||||
var pk = arr[0];
|
var pk = arr[0];
|
||||||
var dn = arr[1];
|
var dn = arr[1];
|
||||||
var model = arr[2];
|
var model = arr[2];
|
||||||
var pwd = md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU" + auth.clientid);
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
|
var pwd = md5(product.productSecret + auth.clientid);
|
||||||
|
|
||||||
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
||||||
throw new Error("incorrect password");
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "register",
|
type: "register",
|
||||||
data: {
|
data: {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"productKey": "xpsYHExTKPFaQMS7",
|
"productKey": "xpsYHExTKPFaQMS7",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "调光灯",
|
"name": "调光灯",
|
||||||
"category": "light",
|
"category": "light",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -11,6 +12,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "hdX3PCMcFrCYpesJ",
|
"productKey": "hdX3PCMcFrCYpesJ",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"code": "hdX3PCMcFrCYpesJ",
|
"code": "hdX3PCMcFrCYpesJ",
|
||||||
"name": "智能风扇",
|
"name": "智能风扇",
|
||||||
"category": "fan",
|
"category": "fan",
|
||||||
|
@ -21,6 +23,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "hbtgIA0SuVw9lxjB",
|
"productKey": "hbtgIA0SuVw9lxjB",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "GW01网关",
|
"name": "GW01网关",
|
||||||
"category": "gateway",
|
"category": "gateway",
|
||||||
"nodeType": 0,
|
"nodeType": 0,
|
||||||
|
@ -32,6 +35,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "eDhXKwEzwFybM5R7",
|
"productKey": "eDhXKwEzwFybM5R7",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "三路开关",
|
"name": "三路开关",
|
||||||
"category": "switch",
|
"category": "switch",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -43,6 +47,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "cGCrkK7Ex4FESAwe",
|
"productKey": "cGCrkK7Ex4FESAwe",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "插座",
|
"name": "插座",
|
||||||
"category": "SmartPlug",
|
"category": "SmartPlug",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -54,6 +59,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "Rf4QSjbm65X45753",
|
"productKey": "Rf4QSjbm65X45753",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "一路开关",
|
"name": "一路开关",
|
||||||
"category": "switch",
|
"category": "switch",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -65,6 +71,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "PN3EDmkBZDD8whDd",
|
"productKey": "PN3EDmkBZDD8whDd",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "门磁",
|
"name": "门磁",
|
||||||
"category": "door",
|
"category": "door",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -75,6 +82,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "N523nWsCiG3CAn6X",
|
"productKey": "N523nWsCiG3CAn6X",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "ZGW01",
|
"name": "ZGW01",
|
||||||
"category": "gateway",
|
"category": "gateway",
|
||||||
"nodeType": 0,
|
"nodeType": 0,
|
||||||
|
@ -86,6 +94,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "Eit3kmGJtxSHfCKT",
|
"productKey": "Eit3kmGJtxSHfCKT",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "燃气表",
|
"name": "燃气表",
|
||||||
"category": "meter",
|
"category": "meter",
|
||||||
"nodeType": 2,
|
"nodeType": 2,
|
||||||
|
@ -96,6 +105,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "DSGxxKk6E8mmDk6C",
|
"productKey": "DSGxxKk6E8mmDk6C",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "通断器",
|
"name": "通断器",
|
||||||
"category": "switch",
|
"category": "switch",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -107,6 +117,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "D8c5pXFmt2KJDxNm",
|
"productKey": "D8c5pXFmt2KJDxNm",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "四路场景面板",
|
"name": "四路场景面板",
|
||||||
"category": "switch",
|
"category": "switch",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -116,6 +127,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "AWcJnf7ymGSkaz5M",
|
"productKey": "AWcJnf7ymGSkaz5M",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "smart pulg",
|
"name": "smart pulg",
|
||||||
"category": "SmartPlug",
|
"category": "SmartPlug",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -127,6 +139,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "6kYp6jszrDns2yh4",
|
"productKey": "6kYp6jszrDns2yh4",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "温湿度传感器",
|
"name": "温湿度传感器",
|
||||||
"category": "sensor",
|
"category": "sensor",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -136,6 +149,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "bGdZt8ffBETtsirm",
|
"productKey": "bGdZt8ffBETtsirm",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "新风",
|
"name": "新风",
|
||||||
"category": "FreshAir",
|
"category": "FreshAir",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
@ -145,6 +159,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "BRD3x4fkKxkaxXFt",
|
"productKey": "BRD3x4fkKxkaxXFt",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "智能电表采集器",
|
"name": "智能电表采集器",
|
||||||
"category": "gateway",
|
"category": "gateway",
|
||||||
"nodeType": 0,
|
"nodeType": 0,
|
||||||
|
@ -154,6 +169,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"productKey": "PwMfpXmp4ZWkGahn",
|
"productKey": "PwMfpXmp4ZWkGahn",
|
||||||
|
"productSecret": "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"name": "智能电表",
|
"name": "智能电表",
|
||||||
"category": "SmartMeter",
|
"category": "SmartMeter",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
|
|
|
@ -77,9 +77,6 @@ public interface Constants {
|
||||||
*/
|
*/
|
||||||
Long TOP_PARENT_ID = 0L;
|
Long TOP_PARENT_ID = 0L;
|
||||||
|
|
||||||
|
|
||||||
String PRODUCT_SECRET = "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU";
|
|
||||||
|
|
||||||
String ACCOUNT_SECRET = "3n1z33kzvpgz1foijpkepyd3e8tw84us";
|
String ACCOUNT_SECRET = "3n1z33kzvpgz1foijpkepyd3e8tw84us";
|
||||||
|
|
||||||
String CACHE_PRODUCT = "product_cache";
|
String CACHE_PRODUCT = "product_cache";
|
||||||
|
|
|
@ -165,7 +165,8 @@ public class DeviceBehaviourService {
|
||||||
if (deviceInfo == null) {
|
if (deviceInfo == null) {
|
||||||
throw new BizException(ErrCode.DEVICE_NOT_FOUND);
|
throw new BizException(ErrCode.DEVICE_NOT_FOUND);
|
||||||
}
|
}
|
||||||
if (!Constants.PRODUCT_SECRET.equals(productSecret)) {
|
Product product = getProductKey(productKey);
|
||||||
|
if (!product.getProductSecret().equals(productSecret)) {
|
||||||
throw new BizException(ErrCode.PRODUCT_SECRET_ERROR);
|
throw new BizException(ErrCode.PRODUCT_SECRET_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,14 +285,18 @@ public class DeviceBehaviourService {
|
||||||
deviceOtaInfoTemp.setProductKey(message.getProductKey());
|
deviceOtaInfoTemp.setProductKey(message.getProductKey());
|
||||||
DeviceOtaInfo deviceOtaInfo = deviceOtaInfoData.findOneByCondition(DeviceOtaInfo.builder()
|
DeviceOtaInfo deviceOtaInfo = deviceOtaInfoData.findOneByCondition(DeviceOtaInfo.builder()
|
||||||
.taskId(message.getMid())
|
.taskId(message.getMid())
|
||||||
.productKey(message.getProductKey())
|
.productKey(message.getProductKey())
|
||||||
.deviceName(message.getDeviceName())
|
.deviceName(message.getDeviceName())
|
||||||
.deviceId(message.getDeviceId()).build());
|
.deviceId(message.getDeviceId()).build());
|
||||||
if (Objects.nonNull(deviceOtaInfo)) {
|
if (Objects.nonNull(deviceOtaInfo)) {
|
||||||
deviceOtaInfo.setStep(deviceOtaInfoTemp.getStep());
|
deviceOtaInfo.setStep(deviceOtaInfoTemp.getStep());
|
||||||
}else{
|
} else {
|
||||||
deviceOtaInfo = deviceOtaInfoTemp;
|
deviceOtaInfo = deviceOtaInfoTemp;
|
||||||
}
|
}
|
||||||
deviceOtaInfoData.save(deviceOtaInfo);
|
deviceOtaInfoData.save(deviceOtaInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Product getProductKey(String productKey) {
|
||||||
|
return productData.findByProductKey(productKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,156 +1,240 @@
|
||||||
!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);
|
!function (n) {
|
||||||
var md5=this.md5;
|
"use strict";
|
||||||
|
|
||||||
function isServerId(clientId){
|
function d(n, t) {
|
||||||
return JSON.parse(component.getCompMqttClientIdList()).indexOf(clientId) > -1
|
var r = (65535 & n) + (65535 & t);
|
||||||
|
return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
|
||||||
|
}
|
||||||
|
|
||||||
|
function f(n, t, r, e, o, u) {
|
||||||
|
return d((u = d(d(t, n), d(e, u))) << o | u >>> 32 - o, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
function l(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & r | ~t & e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function g(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & e | r & ~e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function v(n, t, r, e, o, u, c) {
|
||||||
|
return f(t ^ r ^ e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function m(n, t, r, e, o, u, c) {
|
||||||
|
return f(r ^ (t | ~e), n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function c(n, t) {
|
||||||
|
var r, e, o, u;
|
||||||
|
n[t >> 5] |= 128 << t % 32, n[14 + (t + 64 >>> 9 << 4)] = t;
|
||||||
|
for (var c = 1732584193, f = -271733879, i = -1732584194, a = 271733878, h = 0; h < n.length; h += 16) c = l(r = c, e = f, o = i, u = a, n[h], 7, -680876936), a = l(a, c, f, i, n[h + 1], 12, -389564586), i = l(i, a, c, f, n[h + 2], 17, 606105819), f = l(f, i, a, c, n[h + 3], 22, -1044525330), c = l(c, f, i, a, n[h + 4], 7, -176418897), a = l(a, c, f, i, n[h + 5], 12, 1200080426), i = l(i, a, c, f, n[h + 6], 17, -1473231341), f = l(f, i, a, c, n[h + 7], 22, -45705983), c = l(c, f, i, a, n[h + 8], 7, 1770035416), a = l(a, c, f, i, n[h + 9], 12, -1958414417), i = l(i, a, c, f, n[h + 10], 17, -42063), f = l(f, i, a, c, n[h + 11], 22, -1990404162), c = l(c, f, i, a, n[h + 12], 7, 1804603682), a = l(a, c, f, i, n[h + 13], 12, -40341101), i = l(i, a, c, f, n[h + 14], 17, -1502002290), c = g(c, f = l(f, i, a, c, n[h + 15], 22, 1236535329), i, a, n[h + 1], 5, -165796510), a = g(a, c, f, i, n[h + 6], 9, -1069501632), i = g(i, a, c, f, n[h + 11], 14, 643717713), f = g(f, i, a, c, n[h], 20, -373897302), c = g(c, f, i, a, n[h + 5], 5, -701558691), a = g(a, c, f, i, n[h + 10], 9, 38016083), i = g(i, a, c, f, n[h + 15], 14, -660478335), f = g(f, i, a, c, n[h + 4], 20, -405537848), c = g(c, f, i, a, n[h + 9], 5, 568446438), a = g(a, c, f, i, n[h + 14], 9, -1019803690), i = g(i, a, c, f, n[h + 3], 14, -187363961), f = g(f, i, a, c, n[h + 8], 20, 1163531501), c = g(c, f, i, a, n[h + 13], 5, -1444681467), a = g(a, c, f, i, n[h + 2], 9, -51403784), i = g(i, a, c, f, n[h + 7], 14, 1735328473), c = v(c, f = g(f, i, a, c, n[h + 12], 20, -1926607734), i, a, n[h + 5], 4, -378558), a = v(a, c, f, i, n[h + 8], 11, -2022574463), i = v(i, a, c, f, n[h + 11], 16, 1839030562), f = v(f, i, a, c, n[h + 14], 23, -35309556), c = v(c, f, i, a, n[h + 1], 4, -1530992060), a = v(a, c, f, i, n[h + 4], 11, 1272893353), i = v(i, a, c, f, n[h + 7], 16, -155497632), f = v(f, i, a, c, n[h + 10], 23, -1094730640), c = v(c, f, i, a, n[h + 13], 4, 681279174), a = v(a, c, f, i, n[h], 11, -358537222), i = v(i, a, c, f, n[h + 3], 16, -722521979), f = v(f, i, a, c, n[h + 6], 23, 76029189), c = v(c, f, i, a, n[h + 9], 4, -640364487), a = v(a, c, f, i, n[h + 12], 11, -421815835), i = v(i, a, c, f, n[h + 15], 16, 530742520), c = m(c, f = v(f, i, a, c, n[h + 2], 23, -995338651), i, a, n[h], 6, -198630844), a = m(a, c, f, i, n[h + 7], 10, 1126891415), i = m(i, a, c, f, n[h + 14], 15, -1416354905), f = m(f, i, a, c, n[h + 5], 21, -57434055), c = m(c, f, i, a, n[h + 12], 6, 1700485571), a = m(a, c, f, i, n[h + 3], 10, -1894986606), i = m(i, a, c, f, n[h + 10], 15, -1051523), f = m(f, i, a, c, n[h + 1], 21, -2054922799), c = m(c, f, i, a, n[h + 8], 6, 1873313359), a = m(a, c, f, i, n[h + 15], 10, -30611744), i = m(i, a, c, f, n[h + 6], 15, -1560198380), f = m(f, i, a, c, n[h + 13], 21, 1309151649), c = m(c, f, i, a, n[h + 4], 6, -145523070), a = m(a, c, f, i, n[h + 11], 10, -1120210379), i = m(i, a, c, f, n[h + 2], 15, 718787259), f = m(f, i, a, c, n[h + 9], 21, -343485551), c = d(c, r), f = d(f, e), i = d(i, o), a = d(a, u);
|
||||||
|
return [c, f, i, a]
|
||||||
|
}
|
||||||
|
|
||||||
|
function i(n) {
|
||||||
|
for (var t = "", r = 32 * n.length, e = 0; e < r; e += 8) t += String.fromCharCode(n[e >> 5] >>> e % 32 & 255);
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function a(n) {
|
||||||
|
var t = [];
|
||||||
|
for (t[(n.length >> 2) - 1] = void 0, e = 0; e < t.length; e += 1) t[e] = 0;
|
||||||
|
for (var r = 8 * n.length, e = 0; e < r; e += 8) t[e >> 5] |= (255 & n.charCodeAt(e / 8)) << e % 32;
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function e(n) {
|
||||||
|
for (var t, r = "0123456789abcdef", e = "", o = 0; o < n.length; o += 1) t = n.charCodeAt(o), e += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
function r(n) {
|
||||||
|
return unescape(encodeURIComponent(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
function o(n) {
|
||||||
|
return i(c(a(n = r(n)), 8 * n.length))
|
||||||
|
}
|
||||||
|
|
||||||
|
function u(n, t) {
|
||||||
|
return function (n, t) {
|
||||||
|
var r, e = a(n), o = [], u = [];
|
||||||
|
for (o[15] = u[15] = void 0, 16 < e.length && (e = c(e, 8 * n.length)), r = 0; r < 16; r += 1) o[r] = 909522486 ^ e[r], u[r] = 1549556828 ^ e[r];
|
||||||
|
return t = c(o.concat(a(t)), 512 + 8 * t.length), i(c(u.concat(t), 640))
|
||||||
|
}(r(n), r(t))
|
||||||
|
}
|
||||||
|
|
||||||
|
function t(n, t, r) {
|
||||||
|
return t ? r ? u(t, n) : e(u(t, n)) : r ? o(n) : e(o(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
"function" == typeof define && define.amd ? define(function () {
|
||||||
|
return t
|
||||||
|
}) : "object" == typeof module && module.exports ? module.exports = t : n.md5 = t
|
||||||
|
}(this);
|
||||||
|
var md5 = this.md5;
|
||||||
|
|
||||||
|
function isServerId(clientId) {
|
||||||
|
return JSON.parse(component.getCompMqttClientIdList()).indexOf(clientId) > -1
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPkDn(clientId){
|
function getPkDn(clientId) {
|
||||||
var arr=clientId.split("_");
|
var arr = clientId.split("_");
|
||||||
return {
|
return {
|
||||||
pk:arr[0],
|
pk: arr[0],
|
||||||
dn:arr[1]
|
dn: arr[1]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function auth(head,type,payload){
|
function auth(head, type, payload) {
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type:"serverAuth",
|
type: "serverAuth",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var arr= payload.clientid.split("_");
|
var arr = payload.clientid.split("_");
|
||||||
if(arr.length<3){
|
if (arr.length < 3) {
|
||||||
throw new Error("incorrect clientid:" + payload.clientid);
|
throw new Error("incorrect clientid:" + payload.clientid);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[0];
|
var pk = arr[0];
|
||||||
var dn=arr[1];
|
var dn = arr[1];
|
||||||
var model=arr[2];
|
var model = arr[2];
|
||||||
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+payload.clientid);
|
|
||||||
if(pwd!=payload.password){
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
throw new Error("incorrect password:" + pwd);
|
var pwd = md5(product.productSecret + payload.clientid);
|
||||||
|
|
||||||
|
if (pwd.toLocaleLowerCase() != payload.password.toLocaleLowerCase()) {
|
||||||
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
model:model
|
model: model
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function acl(head,type,payload){
|
function acl(head, type, payload) {
|
||||||
var _topic = payload.topic;
|
var _topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^\/sys\/.+\/.+\/c\/#/i.test(_topic)) {
|
if (/^\/sys\/.+\/.+\/c\/#/i.test(_topic)) {
|
||||||
return subscribe(head,type,payload);
|
return subscribe(head, type, payload);
|
||||||
}
|
}
|
||||||
if (/^\/sys\/.+\/.+\/s\/.*/i.test(_topic)) {
|
if (/^\/sys\/.+\/.+\/s\/.*/i.test(_topic)) {
|
||||||
return subscribe(head,type,payload);
|
return subscribe(head, type, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function register(head,type,payload){
|
function register(head, type, payload) {
|
||||||
var auth= payload;
|
var auth = payload;
|
||||||
var arr= auth.clientid.split("_");
|
var arr = auth.clientid.split("_");
|
||||||
if(arr.length<3){
|
if (arr.length < 3) {
|
||||||
throw new Error("incorrect clientid:" + auth.clientid);
|
throw new Error("incorrect clientid:" + auth.clientid);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[0];
|
var pk = arr[0];
|
||||||
var dn=arr[1];
|
var dn = arr[1];
|
||||||
var model=arr[2];
|
var model = arr[2];
|
||||||
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+auth.clientid);
|
|
||||||
if(pwd!=auth.password){
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
throw new Error("incorrect password:" + pwd);
|
var pwd = md5(product.productSecret + auth.clientid);
|
||||||
|
|
||||||
|
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
||||||
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
model:model
|
model: model
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function subRegister(topic,parent, payload){
|
function subRegister(topic, parent, payload) {
|
||||||
if(!topic){
|
if (!topic) {
|
||||||
throw new Error("topic is blank")
|
throw new Error("topic is blank")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var params= payload.params;
|
var params = payload.params;
|
||||||
|
|
||||||
var reply=
|
var reply =
|
||||||
{
|
{
|
||||||
productKey: parent.productKey,
|
productKey: parent.productKey,
|
||||||
deviceName: parent.deviceName,
|
deviceName: parent.deviceName,
|
||||||
mid: "0",
|
mid: "0",
|
||||||
content:{
|
content: {
|
||||||
topic: topic.replace("/s/","/c/")+"_reply",
|
topic: topic.replace("/s/", "/c/") + "_reply",
|
||||||
payload: JSON.stringify({
|
payload: JSON.stringify({
|
||||||
id: payload.id,
|
id: payload.id,
|
||||||
code: 0,
|
code: 0,
|
||||||
data: {
|
data: {
|
||||||
"productKey":params.productKey,
|
"productKey": params.productKey,
|
||||||
"deviceName":params.deviceName
|
"deviceName": params.deviceName
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"register",
|
type: "register",
|
||||||
data:{
|
data: {
|
||||||
productKey:parent.productKey,
|
productKey: parent.productKey,
|
||||||
deviceName:parent.deviceName,
|
deviceName: parent.deviceName,
|
||||||
subDevices:[{
|
subDevices: [{
|
||||||
productKey:params.productKey,
|
productKey: params.productKey,
|
||||||
deviceName:params.deviceName,
|
deviceName: params.deviceName,
|
||||||
model:params.model
|
model: params.model
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
action:{
|
action: {
|
||||||
type:"ack",
|
type: "ack",
|
||||||
content:JSON.stringify(reply)
|
content: JSON.stringify(reply)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnect(head,type,payload){
|
function disconnect(head, type, payload) {
|
||||||
var clientId = payload.clientid
|
var clientId = payload.clientid
|
||||||
var device=getPkDn(clientId);
|
var device = getPkDn(clientId);
|
||||||
return {
|
return {
|
||||||
type:"state",
|
type: "state",
|
||||||
data:{
|
data: {
|
||||||
productKey:device.pk,
|
productKey: device.pk,
|
||||||
deviceName:device.dn,
|
deviceName: device.dn,
|
||||||
state:"offline"
|
state: "offline"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect(head,type,payload) {
|
function connect(head, type, payload) {
|
||||||
var clientId = payload.clientid
|
var clientId = payload.clientid
|
||||||
var device = getPkDn(clientId);
|
var device = getPkDn(clientId);
|
||||||
return {
|
return {
|
||||||
|
@ -163,56 +247,56 @@ function connect(head,type,payload) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function unsubscribe(head,type,payload){
|
function unsubscribe(head, type, payload) {
|
||||||
var topic = payload.topic;
|
var topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic: "+topic)
|
throw new Error("incorrect topic: " + topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"state",
|
type: "state",
|
||||||
data:{
|
data: {
|
||||||
productKey: pk,
|
productKey: pk,
|
||||||
deviceName: dn,
|
deviceName: dn,
|
||||||
state:"offline"
|
state: "offline"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function subscribe(head,type,payload){
|
function subscribe(head, type, payload) {
|
||||||
var topic = payload.topic;
|
var topic = payload.topic;
|
||||||
|
|
||||||
if(isServerId(payload.clientid)){
|
if (isServerId(payload.clientid)) {
|
||||||
return {
|
return {
|
||||||
type: "acl",
|
type: "acl",
|
||||||
data:{
|
data: {
|
||||||
productKey:"pd",
|
productKey: "pd",
|
||||||
deviceName:"dn",
|
deviceName: "dn",
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic: "+topic)
|
throw new Error("incorrect topic: " + topic)
|
||||||
}
|
}
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "state",
|
type: "state",
|
||||||
|
@ -225,31 +309,29 @@ function subscribe(head,type,payload){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var messageHandler = {
|
var messageHandler = {
|
||||||
"/sys/client/connected":connect,
|
"/sys/client/connected": connect,
|
||||||
"/sys/client/disconnected":disconnect,
|
"/sys/client/disconnected": disconnect,
|
||||||
"/mqtt/auth":auth,
|
"/mqtt/auth": auth,
|
||||||
"/mqtt/acl":acl,
|
"/mqtt/acl": acl,
|
||||||
"/sys/session/subscribed":subscribe,
|
"/sys/session/subscribed": subscribe,
|
||||||
"/sys/session/unsubscribed":unsubscribe
|
"/sys/session/unsubscribed": unsubscribe
|
||||||
}
|
}
|
||||||
|
|
||||||
//必须提供onReceive方法
|
//必须提供onReceive方法
|
||||||
this.onReceive=function(head,type,payload){
|
this.onReceive = function (head, type, payload) {
|
||||||
payload=JSON.parse(payload);
|
payload = JSON.parse(payload);
|
||||||
|
|
||||||
print("======================================================================= ");
|
print("======================================================================= ");
|
||||||
print("【message from】: " + (isServerId(payload.clientid)?"Server":"Device") );
|
print("【message from】: " + (isServerId(payload.clientid) ? "Server" : "Device"));
|
||||||
print("onReceive head: "+JSON.stringify(head));
|
print("onReceive head: " + JSON.stringify(head));
|
||||||
print("onReceive type: "+JSON.stringify(type));
|
print("onReceive type: " + JSON.stringify(type));
|
||||||
print("onReceive payload: "+ JSON.stringify(payload));
|
print("onReceive payload: " + JSON.stringify(payload));
|
||||||
//print("onReceive compMqttClientIdList: "+ component.getCompMqttClientIdList());
|
//print("onReceive compMqttClientIdList: "+ component.getCompMqttClientIdList());
|
||||||
|
|
||||||
var result = {};
|
var result = {};
|
||||||
var topic = head.topic;
|
var topic = head.topic;
|
||||||
if(!topic) {
|
if (!topic) {
|
||||||
|
|
||||||
print("【result】: " + JSON.stringify(result));
|
print("【result】: " + JSON.stringify(result));
|
||||||
print("======================================================================= ");
|
print("======================================================================= ");
|
||||||
|
@ -259,23 +341,20 @@ this.onReceive=function(head,type,payload){
|
||||||
var fun = messageHandler[topic];
|
var fun = messageHandler[topic];
|
||||||
|
|
||||||
|
|
||||||
|
if (fun) {
|
||||||
if(fun){
|
result = fun(head, type, payload)
|
||||||
result = fun(head,type,payload)
|
} else {
|
||||||
}
|
var arr = topic.split('/');
|
||||||
else{
|
if (arr.length < 6) {
|
||||||
var arr= topic.split('/');
|
throw new Error("incorrect topic: " + topic)
|
||||||
if(arr.length<6){
|
|
||||||
throw new Error("incorrect topic: "+topic)
|
|
||||||
}
|
}
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
|
|
||||||
//子设备注册
|
//子设备注册
|
||||||
if(topic.endsWith('/register')){
|
if (topic.endsWith('/register')) {
|
||||||
result = subRegister(topic,{productKey:pk,deviceName:dn}, payload);
|
result = subRegister(topic, {productKey: pk, deviceName: dn}, payload);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
//数据上报
|
//数据上报
|
||||||
result = {
|
result = {
|
||||||
type: "report",
|
type: "report",
|
||||||
|
@ -298,5 +377,5 @@ this.onReceive=function(head,type,payload){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onRegistered=function(regInfo,result){
|
this.onRegistered = function (regInfo, result) {
|
||||||
}
|
}
|
|
@ -1,12 +1,87 @@
|
||||||
!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);
|
!function (n) {
|
||||||
var md5=this.md5;
|
"use strict";
|
||||||
/**
|
|
||||||
网关上线
|
|
||||||
订阅:/sys/hbtgIA0SuVw9lxjB/AA:BB:CC:DD:10/c/#
|
|
||||||
|
|
||||||
子设备注册:
|
function d(n, t) {
|
||||||
/sys/hbtgIA0SuVw9lxjB/AA:BB:CC:DD:10/s/register
|
var r = (65535 & n) + (65535 & t);
|
||||||
{
|
return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
|
||||||
|
}
|
||||||
|
|
||||||
|
function f(n, t, r, e, o, u) {
|
||||||
|
return d((u = d(d(t, n), d(e, u))) << o | u >>> 32 - o, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
function l(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & r | ~t & e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function g(n, t, r, e, o, u, c) {
|
||||||
|
return f(t & e | r & ~e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function v(n, t, r, e, o, u, c) {
|
||||||
|
return f(t ^ r ^ e, n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function m(n, t, r, e, o, u, c) {
|
||||||
|
return f(r ^ (t | ~e), n, t, o, u, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
function c(n, t) {
|
||||||
|
var r, e, o, u;
|
||||||
|
n[t >> 5] |= 128 << t % 32, n[14 + (t + 64 >>> 9 << 4)] = t;
|
||||||
|
for (var c = 1732584193, f = -271733879, i = -1732584194, a = 271733878, h = 0; h < n.length; h += 16) c = l(r = c, e = f, o = i, u = a, n[h], 7, -680876936), a = l(a, c, f, i, n[h + 1], 12, -389564586), i = l(i, a, c, f, n[h + 2], 17, 606105819), f = l(f, i, a, c, n[h + 3], 22, -1044525330), c = l(c, f, i, a, n[h + 4], 7, -176418897), a = l(a, c, f, i, n[h + 5], 12, 1200080426), i = l(i, a, c, f, n[h + 6], 17, -1473231341), f = l(f, i, a, c, n[h + 7], 22, -45705983), c = l(c, f, i, a, n[h + 8], 7, 1770035416), a = l(a, c, f, i, n[h + 9], 12, -1958414417), i = l(i, a, c, f, n[h + 10], 17, -42063), f = l(f, i, a, c, n[h + 11], 22, -1990404162), c = l(c, f, i, a, n[h + 12], 7, 1804603682), a = l(a, c, f, i, n[h + 13], 12, -40341101), i = l(i, a, c, f, n[h + 14], 17, -1502002290), c = g(c, f = l(f, i, a, c, n[h + 15], 22, 1236535329), i, a, n[h + 1], 5, -165796510), a = g(a, c, f, i, n[h + 6], 9, -1069501632), i = g(i, a, c, f, n[h + 11], 14, 643717713), f = g(f, i, a, c, n[h], 20, -373897302), c = g(c, f, i, a, n[h + 5], 5, -701558691), a = g(a, c, f, i, n[h + 10], 9, 38016083), i = g(i, a, c, f, n[h + 15], 14, -660478335), f = g(f, i, a, c, n[h + 4], 20, -405537848), c = g(c, f, i, a, n[h + 9], 5, 568446438), a = g(a, c, f, i, n[h + 14], 9, -1019803690), i = g(i, a, c, f, n[h + 3], 14, -187363961), f = g(f, i, a, c, n[h + 8], 20, 1163531501), c = g(c, f, i, a, n[h + 13], 5, -1444681467), a = g(a, c, f, i, n[h + 2], 9, -51403784), i = g(i, a, c, f, n[h + 7], 14, 1735328473), c = v(c, f = g(f, i, a, c, n[h + 12], 20, -1926607734), i, a, n[h + 5], 4, -378558), a = v(a, c, f, i, n[h + 8], 11, -2022574463), i = v(i, a, c, f, n[h + 11], 16, 1839030562), f = v(f, i, a, c, n[h + 14], 23, -35309556), c = v(c, f, i, a, n[h + 1], 4, -1530992060), a = v(a, c, f, i, n[h + 4], 11, 1272893353), i = v(i, a, c, f, n[h + 7], 16, -155497632), f = v(f, i, a, c, n[h + 10], 23, -1094730640), c = v(c, f, i, a, n[h + 13], 4, 681279174), a = v(a, c, f, i, n[h], 11, -358537222), i = v(i, a, c, f, n[h + 3], 16, -722521979), f = v(f, i, a, c, n[h + 6], 23, 76029189), c = v(c, f, i, a, n[h + 9], 4, -640364487), a = v(a, c, f, i, n[h + 12], 11, -421815835), i = v(i, a, c, f, n[h + 15], 16, 530742520), c = m(c, f = v(f, i, a, c, n[h + 2], 23, -995338651), i, a, n[h], 6, -198630844), a = m(a, c, f, i, n[h + 7], 10, 1126891415), i = m(i, a, c, f, n[h + 14], 15, -1416354905), f = m(f, i, a, c, n[h + 5], 21, -57434055), c = m(c, f, i, a, n[h + 12], 6, 1700485571), a = m(a, c, f, i, n[h + 3], 10, -1894986606), i = m(i, a, c, f, n[h + 10], 15, -1051523), f = m(f, i, a, c, n[h + 1], 21, -2054922799), c = m(c, f, i, a, n[h + 8], 6, 1873313359), a = m(a, c, f, i, n[h + 15], 10, -30611744), i = m(i, a, c, f, n[h + 6], 15, -1560198380), f = m(f, i, a, c, n[h + 13], 21, 1309151649), c = m(c, f, i, a, n[h + 4], 6, -145523070), a = m(a, c, f, i, n[h + 11], 10, -1120210379), i = m(i, a, c, f, n[h + 2], 15, 718787259), f = m(f, i, a, c, n[h + 9], 21, -343485551), c = d(c, r), f = d(f, e), i = d(i, o), a = d(a, u);
|
||||||
|
return [c, f, i, a]
|
||||||
|
}
|
||||||
|
|
||||||
|
function i(n) {
|
||||||
|
for (var t = "", r = 32 * n.length, e = 0; e < r; e += 8) t += String.fromCharCode(n[e >> 5] >>> e % 32 & 255);
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function a(n) {
|
||||||
|
var t = [];
|
||||||
|
for (t[(n.length >> 2) - 1] = void 0, e = 0; e < t.length; e += 1) t[e] = 0;
|
||||||
|
for (var r = 8 * n.length, e = 0; e < r; e += 8) t[e >> 5] |= (255 & n.charCodeAt(e / 8)) << e % 32;
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
function e(n) {
|
||||||
|
for (var t, r = "0123456789abcdef", e = "", o = 0; o < n.length; o += 1) t = n.charCodeAt(o), e += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
function r(n) {
|
||||||
|
return unescape(encodeURIComponent(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
function o(n) {
|
||||||
|
return i(c(a(n = r(n)), 8 * n.length))
|
||||||
|
}
|
||||||
|
|
||||||
|
function u(n, t) {
|
||||||
|
return function (n, t) {
|
||||||
|
var r, e = a(n), o = [], u = [];
|
||||||
|
for (o[15] = u[15] = void 0, 16 < e.length && (e = c(e, 8 * n.length)), r = 0; r < 16; r += 1) o[r] = 909522486 ^ e[r], u[r] = 1549556828 ^ e[r];
|
||||||
|
return t = c(o.concat(a(t)), 512 + 8 * t.length), i(c(u.concat(t), 640))
|
||||||
|
}(r(n), r(t))
|
||||||
|
}
|
||||||
|
|
||||||
|
function t(n, t, r) {
|
||||||
|
return t ? r ? u(t, n) : e(u(t, n)) : r ? o(n) : e(o(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
"function" == typeof define && define.amd ? define(function () {
|
||||||
|
return t
|
||||||
|
}) : "object" == typeof module && module.exports ? module.exports = t : n.md5 = t
|
||||||
|
}(this);
|
||||||
|
var md5 = this.md5;
|
||||||
|
/**
|
||||||
|
网关上线
|
||||||
|
订阅:/sys/hbtgIA0SuVw9lxjB/AA:BB:CC:DD:10/c/#
|
||||||
|
|
||||||
|
子设备注册:
|
||||||
|
/sys/hbtgIA0SuVw9lxjB/AA:BB:CC:DD:10/s/register
|
||||||
|
{
|
||||||
"id": "6",
|
"id": "6",
|
||||||
"params":{
|
"params":{
|
||||||
"productKey":"Rf4QSjbm65X45753",
|
"productKey":"Rf4QSjbm65X45753",
|
||||||
|
@ -14,138 +89,139 @@ var md5=this.md5;
|
||||||
"model":"S1"
|
"model":"S1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
子设备上线
|
子设备上线
|
||||||
订阅:/sys/Rf4QSjbm65X45753/ABC12400001/c/#
|
订阅:/sys/Rf4QSjbm65X45753/ABC12400001/c/#
|
||||||
|
|
||||||
数据上报:
|
数据上报:
|
||||||
/sys/Rf4QSjbm65X45753/ABC12400001/s/event/property/post
|
/sys/Rf4QSjbm65X45753/ABC12400001/s/event/property/post
|
||||||
{
|
{
|
||||||
"id": "6",
|
"id": "6",
|
||||||
"params":{
|
"params":{
|
||||||
"powerstate": 1
|
"powerstate": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var registered={};
|
var registered = {};
|
||||||
|
|
||||||
function getPkDn(clientId){
|
function getPkDn(clientId) {
|
||||||
var arr=clientId.split("|")[0].split("&");
|
var arr = clientId.split("|")[0].split("&");
|
||||||
|
|
||||||
if(arr.length<2){
|
if (arr.length < 2) {
|
||||||
throw new Error("incorrect clientid");
|
throw new Error("incorrect clientid");
|
||||||
}
|
}
|
||||||
var model="";
|
var model = "";
|
||||||
if(arr.length3=2){
|
if (arr.length3 = 2) {
|
||||||
model=arr[2];
|
model = arr[2];
|
||||||
}
|
}
|
||||||
return {
|
|
||||||
pk:arr[0],
|
|
||||||
dn:arr[1],
|
|
||||||
model: model
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function register(payload){
|
|
||||||
var auth= JSON.parse(payload);
|
|
||||||
// 兼容ali
|
|
||||||
var device= getPkDn(auth.clientid);
|
|
||||||
|
|
||||||
var pwd=md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU"+auth.clientid);
|
|
||||||
// if(pwd.toLocaleLowerCase()!=auth.password.toLocaleLowerCase()){
|
|
||||||
// throw new Error("incorrect password");
|
|
||||||
// }
|
|
||||||
return {
|
|
||||||
type:"register",
|
|
||||||
data:{
|
|
||||||
productKey:device.pk,
|
|
||||||
deviceName:device.dn,
|
|
||||||
model:device.model
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function subRegister(topic,parent,payload){
|
|
||||||
var params= payload.params;
|
|
||||||
var reply=
|
|
||||||
{
|
|
||||||
productKey:parent.productKey,
|
|
||||||
deviceName:parent.deviceName,
|
|
||||||
mid:"0",
|
|
||||||
content:{
|
|
||||||
topic:topic.replace("/s/","/c/")+"_reply",
|
|
||||||
payload:JSON.stringify({
|
|
||||||
id:"0",
|
|
||||||
code:0,
|
|
||||||
data:{
|
|
||||||
"productKey":params.productKey,
|
|
||||||
"deviceName":params.deviceName
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
type:"register",
|
|
||||||
data:{
|
|
||||||
productKey:parent.productKey,
|
|
||||||
deviceName:parent.deviceName,
|
|
||||||
subDevices:[{
|
|
||||||
productKey:params.productKey,
|
|
||||||
deviceName:params.deviceName,
|
|
||||||
model:params.model
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
action:{
|
|
||||||
type:"ack",
|
|
||||||
content:JSON.stringify(reply)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function deviceStateChange(head,clientId,state){
|
|
||||||
var topic=head.topic;
|
|
||||||
var device=getPkDn(clientId);
|
|
||||||
|
|
||||||
var arr= topic.split('/');
|
|
||||||
if(arr.length<6){
|
|
||||||
throw new Error("incorrect topic")
|
|
||||||
}
|
|
||||||
|
|
||||||
var pk=arr[2];
|
|
||||||
var dn=arr[3];
|
|
||||||
return {
|
|
||||||
type:"state",
|
|
||||||
data:{
|
|
||||||
productKey:pk,
|
|
||||||
deviceName:dn,
|
|
||||||
state:state,
|
|
||||||
parent:{
|
|
||||||
productKey:device.pk,
|
|
||||||
deviceName:device.dn,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function disconnect(clientId){
|
|
||||||
var device=getPkDn(clientId);
|
|
||||||
return {
|
|
||||||
type:"state",
|
|
||||||
data:{
|
|
||||||
productKey:device.pk,
|
|
||||||
deviceName:device.dn,
|
|
||||||
state:"offline"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ignore(){
|
|
||||||
return {
|
return {
|
||||||
|
pk: arr[0],
|
||||||
|
dn: arr[1],
|
||||||
|
model: model
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function register(payload) {
|
||||||
|
var auth = JSON.parse(payload);
|
||||||
|
// 兼容ali
|
||||||
|
var device = getPkDn(auth.clientid);
|
||||||
|
|
||||||
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
|
var pwd = md5(product.productSecret + auth.clientid);
|
||||||
|
|
||||||
|
/*if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
||||||
|
throw new Error("incorrect password");
|
||||||
|
}*/
|
||||||
|
return {
|
||||||
|
type: "register",
|
||||||
|
data: {
|
||||||
|
productKey: device.pk,
|
||||||
|
deviceName: device.dn,
|
||||||
|
model: device.model
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function subRegister(topic, parent, payload) {
|
||||||
|
var params = payload.params;
|
||||||
|
var reply =
|
||||||
|
{
|
||||||
|
productKey: parent.productKey,
|
||||||
|
deviceName: parent.deviceName,
|
||||||
|
mid: "0",
|
||||||
|
content: {
|
||||||
|
topic: topic.replace("/s/", "/c/") + "_reply",
|
||||||
|
payload: JSON.stringify({
|
||||||
|
id: "0",
|
||||||
|
code: 0,
|
||||||
|
data: {
|
||||||
|
"productKey": params.productKey,
|
||||||
|
"deviceName": params.deviceName
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: "register",
|
||||||
|
data: {
|
||||||
|
productKey: parent.productKey,
|
||||||
|
deviceName: parent.deviceName,
|
||||||
|
subDevices: [{
|
||||||
|
productKey: params.productKey,
|
||||||
|
deviceName: params.deviceName,
|
||||||
|
model: params.model
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
action: {
|
||||||
|
type: "ack",
|
||||||
|
content: JSON.stringify(reply)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function deviceStateChange(head, clientId, state) {
|
||||||
|
var topic = head.topic;
|
||||||
|
var device = getPkDn(clientId);
|
||||||
|
|
||||||
|
var arr = topic.split('/');
|
||||||
|
if (arr.length < 6) {
|
||||||
|
throw new Error("incorrect topic")
|
||||||
|
}
|
||||||
|
|
||||||
|
var pk = arr[2];
|
||||||
|
var dn = arr[3];
|
||||||
|
return {
|
||||||
|
type: "state",
|
||||||
|
data: {
|
||||||
|
productKey: pk,
|
||||||
|
deviceName: dn,
|
||||||
|
state: state,
|
||||||
|
parent: {
|
||||||
|
productKey: device.pk,
|
||||||
|
deviceName: device.dn,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function aliDeviceInfoUpdate(pk, dn, payload){
|
function disconnect(clientId) {
|
||||||
|
var device = getPkDn(clientId);
|
||||||
|
return {
|
||||||
|
type: "state",
|
||||||
|
data: {
|
||||||
|
productKey: device.pk,
|
||||||
|
deviceName: device.dn,
|
||||||
|
state: "offline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ignore() {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
function aliDeviceInfoUpdate(pk, dn, payload) {
|
||||||
return ignore();
|
return ignore();
|
||||||
// return {
|
// return {
|
||||||
// type:"report",
|
// type:"report",
|
||||||
|
@ -164,87 +240,87 @@ function aliDeviceInfoUpdate(pk, dn, payload){
|
||||||
|
|
||||||
//必须提供onReceive方法
|
//必须提供onReceive方法
|
||||||
// todo: if else改成map
|
// todo: if else改成map
|
||||||
this.onReceive=function(head,type,payload){
|
this.onReceive = function (head, type, payload) {
|
||||||
if(type=='auth'){
|
if (type == 'auth') {
|
||||||
return register(payload);
|
return register(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type=='subscribe'){
|
if (type == 'subscribe') {
|
||||||
return deviceStateChange(head,payload,'online');
|
return deviceStateChange(head, payload, 'online');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type=='unsubscribe'){
|
if (type == 'unsubscribe') {
|
||||||
return deviceStateChange(head,payload,'offline');
|
return deviceStateChange(head, payload, 'offline');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type=='disconnect'){
|
if (type == 'disconnect') {
|
||||||
return disconnect(payload);
|
return disconnect(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
var topic=head['topic'];
|
var topic = head['topic'];
|
||||||
if(!topic){
|
if (!topic) {
|
||||||
throw new Error("topic is blank")
|
throw new Error("topic is blank")
|
||||||
}
|
}
|
||||||
|
|
||||||
var arr= topic.split('/');
|
var arr = topic.split('/');
|
||||||
if(arr.length<6){
|
if (arr.length < 6) {
|
||||||
throw new Error("incorrect topic")
|
throw new Error("incorrect topic")
|
||||||
}
|
}
|
||||||
var pk=arr[2];
|
var pk = arr[2];
|
||||||
var dn=arr[3];
|
var dn = arr[3];
|
||||||
payload=JSON.parse(payload);
|
payload = JSON.parse(payload);
|
||||||
|
|
||||||
//子设备注册
|
//子设备注册
|
||||||
if(topic.endsWith('/register')){
|
if (topic.endsWith('/register')) {
|
||||||
return subRegister(topic,{productKey:pk,deviceName:dn},payload);
|
return subRegister(topic, {productKey: pk, deviceName: dn}, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 阿里设备信息上传
|
// 阿里设备信息上传
|
||||||
// Received message:{"id": "1", "version": "1.0", "params": [{"domain": "SYSTEM", "attrKey": "SYS_SDK_LANGUAGE", "attrValue": "Python"}, {"domain": "SYSTEM", "attrKey": "SYS_LP_SDK_VERSION", "attrValue": "1.0.0"}, {"domain": "SYSTEM", "attrKey": "SYS_SDK_IF_INFO", "attrValue": "Eth|03ACDEFF0032|Eth|03ACDEFF0031"}], "method": "thing.deviceinfo.update"}, with QoS AT_MOST_ONCE
|
// Received message:{"id": "1", "version": "1.0", "params": [{"domain": "SYSTEM", "attrKey": "SYS_SDK_LANGUAGE", "attrValue": "Python"}, {"domain": "SYSTEM", "attrKey": "SYS_LP_SDK_VERSION", "attrValue": "1.0.0"}, {"domain": "SYSTEM", "attrKey": "SYS_SDK_IF_INFO", "attrValue": "Eth|03ACDEFF0032|Eth|03ACDEFF0031"}], "method": "thing.deviceinfo.update"}, with QoS AT_MOST_ONCE
|
||||||
// topic":"/sys/JfGrfkfPXpBCEb6k/test_sc_001/thing/deviceinfo/update
|
// topic":"/sys/JfGrfkfPXpBCEb6k/test_sc_001/thing/deviceinfo/update
|
||||||
if(topic.endsWith("/thing/deviceinfo/update")){
|
if (topic.endsWith("/thing/deviceinfo/update")) {
|
||||||
return aliDeviceInfoUpdate(pk, dn, payload);
|
return aliDeviceInfoUpdate(pk, dn, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
//数据上报
|
//数据上报
|
||||||
var reply=
|
var reply =
|
||||||
{
|
{
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
mid:payload.id,
|
mid: payload.id,
|
||||||
content:{
|
content: {
|
||||||
topic:topic.replace("/s/","/c/")+"_reply",
|
topic: topic.replace("/s/", "/c/") + "_reply",
|
||||||
payload:JSON.stringify({
|
payload: JSON.stringify({
|
||||||
id:payload.id,
|
id: payload.id,
|
||||||
method: payload.method+"_reply",
|
method: payload.method + "_reply",
|
||||||
code:0,
|
code: 0,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var action={};
|
var action = {};
|
||||||
if(!topic.endsWith("_reply")){
|
if (!topic.endsWith("_reply")) {
|
||||||
//需要回复的消息
|
//需要回复的消息
|
||||||
action={
|
action = {
|
||||||
type:"ack",
|
type: "ack",
|
||||||
content:JSON.stringify(reply)
|
content: JSON.stringify(reply)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type:"report",
|
type: "report",
|
||||||
data:{
|
data: {
|
||||||
productKey:pk,
|
productKey: pk,
|
||||||
deviceName:dn,
|
deviceName: dn,
|
||||||
mid:payload.id,
|
mid: payload.id,
|
||||||
content:{
|
content: {
|
||||||
topic:topic,
|
topic: topic,
|
||||||
payload:payload.params
|
payload: payload.params
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
action:action
|
action: action
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.onRegistered=function(regInfo,result){
|
this.onRegistered = function (regInfo, result) {
|
||||||
}
|
}
|
|
@ -122,7 +122,10 @@ function register(payload) {
|
||||||
var pk = arr[0];
|
var pk = arr[0];
|
||||||
var dn = arr[1];
|
var dn = arr[1];
|
||||||
var model = arr[2];
|
var model = arr[2];
|
||||||
var pwd = md5("xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU" + auth.clientid);
|
|
||||||
|
var product = deviceBehaviour.getProductKey(pk)
|
||||||
|
var pwd = md5(product.productSecret + auth.clientid);
|
||||||
|
|
||||||
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
if (pwd.toLocaleLowerCase() != auth.password.toLocaleLowerCase()) {
|
||||||
throw new Error("incorrect password");
|
throw new Error("incorrect password");
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,10 @@ public class TransparentTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("start gateway ");
|
log.info("start gateway ");
|
||||||
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB",
|
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB", "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST:GW:T0001");
|
"TEST:GW:T0001");
|
||||||
|
|
||||||
gateway.addSubDevice("",
|
gateway.addSubDevice("hbtgIA0SuVw9lxjB", "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST_LIGHT_0001",
|
"TEST_LIGHT_0001",
|
||||||
"M1");
|
"M1");
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ public class TransparentTest {
|
||||||
//设备上线后添加上报定时任务
|
//设备上线后添加上报定时任务
|
||||||
ReportTask reportTask = new ReportTask(gateway.getClient());
|
ReportTask reportTask = new ReportTask(gateway.getClient());
|
||||||
reportTask.addTask(String.format("/sys/%s/%s/s/event/rawReport",
|
reportTask.addTask(String.format("/sys/%s/%s/s/event/rawReport",
|
||||||
pk, device.getDeviceName()),
|
pk, device.getDeviceName()),
|
||||||
() -> {
|
() -> {
|
||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
request.setId(UUID.randomUUID().toString());
|
request.setId(UUID.randomUUID().toString());
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class ConnectionTest {
|
||||||
int finalI = i;
|
int finalI = i;
|
||||||
executor.submit(() -> {
|
executor.submit(() -> {
|
||||||
log.info("start gateway " + (finalI + 1));
|
log.info("start gateway " + (finalI + 1));
|
||||||
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB",
|
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB","xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST:GW:T" + StringUtils.leftPad(finalI + "", 6, "0"));
|
"TEST:GW:T" + StringUtils.leftPad(finalI + "", 6, "0"));
|
||||||
|
|
||||||
// gateway.addSubDevice("Rf4QSjbm65X45753",
|
// gateway.addSubDevice("Rf4QSjbm65X45753",
|
||||||
|
|
|
@ -51,14 +51,14 @@ public class ReportTest {
|
||||||
int finalI = i;
|
int finalI = i;
|
||||||
executor.submit(() -> {
|
executor.submit(() -> {
|
||||||
log.info("start gateway " + (finalI + 1));
|
log.info("start gateway " + (finalI + 1));
|
||||||
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB",
|
Gateway gateway = new Gateway("hbtgIA0SuVw9lxjB", "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST:GW:" + StringUtils.leftPad(finalI + "", 6, "0"));
|
"TEST:GW:" + StringUtils.leftPad(finalI + "", 6, "0"));
|
||||||
|
|
||||||
gateway.addSubDevice("Rf4QSjbm65X45753",
|
gateway.addSubDevice("Rf4QSjbm65X45753", "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST_SW_" + StringUtils.leftPad(finalI + "", 6, "0"),
|
"TEST_SW_" + StringUtils.leftPad(finalI + "", 6, "0"),
|
||||||
"S01");
|
"S01");
|
||||||
|
|
||||||
gateway.addSubDevice("cGCrkK7Ex4FESAwe",
|
gateway.addSubDevice("cGCrkK7Ex4FESAwe", "xdkKUymrEGSCYWswqCvSPyRSFvH5j7CU",
|
||||||
"TEST_SC_" + StringUtils.leftPad(finalI + "", 6, "0"),
|
"TEST_SC_" + StringUtils.leftPad(finalI + "", 6, "0"),
|
||||||
"S01");
|
"S01");
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ public class ReportTest {
|
||||||
//设备上线后添加上报定时任务
|
//设备上线后添加上报定时任务
|
||||||
ReportTask reportTask = new ReportTask(gateway.getClient());
|
ReportTask reportTask = new ReportTask(gateway.getClient());
|
||||||
reportTask.addTask(String.format("/sys/%s/%s/s/event/property/post",
|
reportTask.addTask(String.format("/sys/%s/%s/s/event/property/post",
|
||||||
pk, device.getDeviceName()),
|
pk, device.getDeviceName()),
|
||||||
() -> {
|
() -> {
|
||||||
Request request = new Request();
|
Request request = new Request();
|
||||||
request.setId(UUID.randomUUID().toString());
|
request.setId(UUID.randomUUID().toString());
|
||||||
|
|
|
@ -20,6 +20,8 @@ public class Device {
|
||||||
|
|
||||||
protected String productKey;
|
protected String productKey;
|
||||||
|
|
||||||
|
private String productSecret ;
|
||||||
|
|
||||||
protected String deviceName;
|
protected String deviceName;
|
||||||
|
|
||||||
private String model;
|
private String model;
|
||||||
|
|
|
@ -49,8 +49,8 @@ public class Gateway extends Device {
|
||||||
|
|
||||||
private boolean isConnecting;
|
private boolean isConnecting;
|
||||||
|
|
||||||
public Gateway(String productKey, String deviceName) {
|
public Gateway(String productKey, String productSecret, String deviceName) {
|
||||||
super(productKey, deviceName, "GW01");
|
super(productKey, productSecret, deviceName, "GW01");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
|
@ -74,7 +74,7 @@ public class Gateway extends Device {
|
||||||
isConnecting = true;
|
isConnecting = true;
|
||||||
MqttClientOptions options = new MqttClientOptions();
|
MqttClientOptions options = new MqttClientOptions();
|
||||||
options.setUsername(this.deviceName);
|
options.setUsername(this.deviceName);
|
||||||
options.setPassword(DigestUtils.md5Hex(Constants.PRODUCT_SECRET + clientId));
|
options.setPassword(DigestUtils.md5Hex(getProductSecret() + clientId));
|
||||||
options.setCleanSession(true);
|
options.setCleanSession(true);
|
||||||
options.setKeepAliveInterval(30);
|
options.setKeepAliveInterval(30);
|
||||||
options.setClientId(clientId);
|
options.setClientId(clientId);
|
||||||
|
@ -134,8 +134,8 @@ public class Gateway extends Device {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSubDevice(String productKey, String deviceName, String model) {
|
public void addSubDevice(String productKey, String productSecret, String deviceName, String model) {
|
||||||
subDevices.add(new Device(productKey, deviceName, model));
|
subDevices.add(new Device(productKey, productSecret, deviceName, model));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDeviceOnline(Consumer<Device> listener) {
|
public void onDeviceOnline(Consumer<Device> listener) {
|
||||||
|
|
Loading…
Reference in New Issue