余位屏

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript"> 
        
var prop_FreeNum_post = 0x21; 
var prop_Content_post = 0x22; 
var event_ContentChanged_post = 0x06; 

var ALINK_PROP_POST_METHOD = 'thing.event.property.post'; 
var ALINK_EVENT_POST_HeartbeatNotification_METHOD = "thing.event.HeartbeatNotification.post"; 
var ALINK_EVENT_POST_ContentChanged_METHOD = "thing.event.ContentChanged.post"; 
var ALINK_SERVEICE_POST_DistributeFreeNum_METHOD = "thing.service.DistributeFreeNum"; 
var ALINK_SERVEICE_POST_DistributeContent_METHOD = "thing.service.DistributeContent"; 

function rawDataToProtocol(bytes) {
    var derective;
    var strBytes=byteToString(bytes);
    var jsonObj = JSON.parse(strBytes);
    var data = null;
    if (jsonObj.hasOwnProperty("data")) {
        data = jsonObj["data"];
        console.log("gbkHex="+data);
    }
    
    var jsonMap = new Object();
    var params = {};
    if(data==null){
        jsonMap['method'] = ALINK_EVENT_POST_HeartbeatNotification_METHOD;
        jsonMap['params'] = params;
    }else if(data=="Bg=="){
        jsonMap['method'] = ALINK_EVENT_POST_ContentChanged_METHOD;
        params['Content'] = "收到应答";
        params['ChangeTime'] ="0";    
       jsonMap['params'] = params;
    }else if(data=="/w=="){
        jsonMap['method'] = ALINK_EVENT_POST_ContentChanged_METHOD;
        params['Content'] = "收到应答";
        params['ChangeTime'] ="0";    
       jsonMap['params'] = params;
    }else{
        var cmd = jsonObj["cmd"];
        var bData = base64Decode(data);
        var uint8Array = new Uint8Array(bData.length);
        for (var i = 0; i < bData.length; i++) {
            uint8Array[i] = bData[i] & 0xff;
        }
        var dataView = new DataView(uint8Array.buffer, 0);
        derective = uint8Array[1];
        jsonMap['version'] = '1.0'; 
        
        if(cmd=="dData"){
            if(derective==prop_FreeNum_post){
                jsonMap['method'] = ALINK_PROP_POST_METHOD;
                jsonMap['id'] = "1";
                var count = "";
                for (var i = 15; i < bData.length-1; i++) {
                    count=count +String.fromCharCode(bData[i]);
                }
               params['FreeNum'] =parseInt(count);    
               jsonMap['params'] = params;
            }else if(derective==prop_Content_post){
                jsonMap['method'] = ALINK_PROP_POST_METHOD;
                var gbkHex = [];
                for (var i = 10; i < bData.length-1; i++) {
                    gbkHex=gbkHex.concat(bData[i]);
                }
                var gbkHexStr = Bytes2HexStr(gbkHex);
                params['Content'] = gbkHexStr;
               jsonMap['params'] = params;
            }else if(derective==event_ContentChanged_post){
                jsonMap['method'] = ALINK_EVENT_POST_ContentChanged_METHOD;
                var gbkHex = [];
                for (var i = 10; i < bData.length-1; i++) {
                    gbkHex=gbkHex.concat(bData[i]);
                }
                var gbkHexStr = Bytes2HexStr(gbkHex);
                params['Content'] = gbkHexStr;    
                params['ChangeTime'] ="0";    
               jsonMap['params'] = params;
            }
        }else if(cmd=="dHeartbeat"){
            jsonMap['method'] = ALINK_EVENT_POST_HeartbeatNotification_METHOD;
            jsonMap['params'] = params;
        }
    }
    return jsonMap;
}

function protocolToRawData(json) {
    var method = json['method'];
    var id = json['id'];
    var version = json['version'];
    var payloadArray = [];
    if (method == ALINK_PROP_POST_METHOD) 
    {
        payloadArray = payloadArray.concat([0x5D,0x0A,0x00]); 
    } else if (method ==  ALINK_SERVEICE_POST_DistributeFreeNum_METHOD) { 
        payloadArray = payloadArray.concat([0x5D,0x0A,0x00]); 
        var params = json['params'];
        var FreeNum = params["FreeNum"];
        FreeNum = "" + FreeNum;
        var chars = stringToChars(FreeNum);
        payloadArray=payloadArray.concat(stringToByte('{"cmd": "uData","mode":"RS485","baud":"19200","byteSize":"8","parity":"even","stopbits":"1","waitTime": "500","data":"'));
        var data1=[0x02,0x21,0x25,0x20,0x0C,0x35,0x20,0x22,0x35,0x27,0xD3,0xE0,0xCE,0xBB,0x3A];
        data1=data1.concat(chars);
        data1=data1.concat([0x03]);
        var count=data1.length-11+32;
        data1[9] = count;
        var base64Data1=base64Encode(data1);
        payloadArray=payloadArray.concat(stringToByte(base64Data1));
        payloadArray=payloadArray.concat(stringToByte('","data1":"'));
        var data2=[0x02,0x21,0x24,0x20,0x03];
        var base64Data2=base64Encode(data2);
        payloadArray=payloadArray.concat(stringToByte(base64Data2));
        payloadArray=payloadArray.concat(stringToByte('","rdata":"'));
        payloadArray=payloadArray.concat(stringToByte(base64Data1));
        payloadArray=payloadArray.concat(stringToByte('"}'));
     } else if (method ==  ALINK_SERVEICE_POST_DistributeContent_METHOD) {
        payloadArray = payloadArray.concat([0x5D,0x0A,0x00]); 
        var params = json['params'];
        var Content = params["Content"];
        var gbkbytes = HexString2Bytes(Content);
        
        payloadArray=payloadArray.concat(stringToByte('{"cmd": "uData","mode":"RS485","baud":"19200","byteSize":"8","parity":"even","stopbits":"1","waitTime": "500","data":"'));
        var data1=[0x02,0x22,0x25,0x20,0x0C,0x35,0x20,0x22,0x35,0x2A];
        data1=data1.concat(gbkbytes);
        data1=data1.concat([0x03]);
        var count=data1.length-11+32;
        data1[9] = count;
        var base64Data1=base64Encode(data1);
        payloadArray=payloadArray.concat(stringToByte(base64Data1));
        payloadArray=payloadArray.concat(stringToByte(base64Data1));
        payloadArray=payloadArray.concat(stringToByte('","data1":"'));
        var data2=[0x02,0x22,0x24,0x20,0x03];
        var base64Data2=base64Encode(data2);
        payloadArray=payloadArray.concat(stringToByte(base64Data2));
        payloadArray=payloadArray.concat(stringToByte('","rdata":"'));
        payloadArray=payloadArray.concat(stringToByte(base64Data1));
        payloadArray=payloadArray.concat(stringToByte('","rdata1":"'));
        var data3=[0x02,0x06,0x25,0x20,0x0C,0x35,0x20,0x22,0x35,0x2A];
        data3=data3.concat(gbkbytes);
        data3=data3.concat([0x03]);
        var count=data3.length-11+32;
        data3[9] = count;
        var base64Data3=base64Encode(data3);
        payloadArray=payloadArray.concat(stringToByte(base64Data3));
        payloadArray=payloadArray.concat(stringToByte('"}'));
    } else if(method ==  ALINK_EVENT_POST_ContentChanged_METHOD){
        payloadArray = payloadArray.concat([0x5D,0x0A,0x00]); 
    } else if(method ==  ALINK_EVENT_POST_HeartbeatNotification_METHOD){
        payloadArray = payloadArray.concat([0x5D,0x0A,0x00]); 
    }
    return payloadArray;
}

//以下是部分辅助函数
function buffer_uint8(value) {
    var uint8Array = new Uint8Array(1);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setUint8(0, value);
    return [].slice.call(uint8Array);
}
function buffer_int16(value) {
    var uint8Array = new Uint8Array(2);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setInt16(0, value);
    return [].slice.call(uint8Array);
}
function buffer_int32(value) {
    var uint8Array = new Uint8Array(4);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setInt32(0, value);
    return [].slice.call(uint8Array);
}

function buffer_float32(value) {
    var uint8Array = new Uint8Array(4);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setFloat32(0, value);
    return [].slice.call(uint8Array);
}

function stringToChars(str){
    var chars = [];
    for(var i=0;i<str.length;i++){
        chars=chars.concat(str.charCodeAt(i));
    }
    return chars;
}


function gbkEncode(str) {
  return str.replace(/./g, function (a) {
    var code = a.charCodeAt(0);
    if (isAscii(code)) {
      return encodeURIComponent(a);
    } else {
      var key = code.toString(16);
      if (key.length != 4)key = ('000' + key).match(/....$/)[0];
      return U2Ghash[key] || a;
    }
  });
}

function gbkDecode(str, callback) {
  return str.replace(/%[0-9A-F]{2}%[0-9A-F]{2}/g, function (a) {
    if (a in G2Uhash) {
      return String.fromCharCode('0x' + G2Uhash[a]);
    } else {
      return a;
    }
  }).replace(/%[\w]{2}/g, function (a) {

    return decodeURIComponent(a);

  });
}



 function stringToByte(str) {
    var bytes = new Array();
    var len, c;
    len = str.length;
    for(var i = 0; i < len; i++) {
        c = str.charCodeAt(i);
        if(c >= 0x010000 && c <= 0x10FFFF) {
            bytes.push(((c >> 18) & 0x07) | 0xF0);
            bytes.push(((c >> 12) & 0x3F) | 0x80);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if(c >= 0x000800 && c <= 0x00FFFF) {
            bytes.push(((c >> 12) & 0x0F) | 0xE0);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if(c >= 0x000080 && c <= 0x0007FF) {
            bytes.push(((c >> 6) & 0x1F) | 0xC0);
            bytes.push((c & 0x3F) | 0x80);
        } else {
            bytes.push(c & 0xFF);
        }
    }
    return bytes;


}
 
 
 function byteToString(arr) {
    if(typeof arr === 'string') {
        return arr;
    }
    var str = '',
        _arr = arr;
    for(var i = 0; i < _arr.length; i++) {
        var one = _arr[i].toString(2),
            v = one.match(/^1+?(?=0)/);
        if(v && one.length == 8) {
            var bytesLength = v[0].length;
            var store = _arr[i].toString(2).slice(7 - bytesLength);
            for(var st = 1; st < bytesLength; st++) {
                store += _arr[st + i].toString(2).slice(2);
            }
            str += String.fromCharCode(parseInt(store, 2));
            i += bytesLength - 1;
        } else {
            str += String.fromCharCode(_arr[i]);
        }
    }
    return str;
}


//16进制串转字节数组
function HexString2Bytes(str) {
  var pos = 0;
  var len = str.length;
  if (len % 2 != 0) {
    return null;
  }
  len /= 2;
  var arrBytes = new Array();
  for (var i = 0; i < len; i++) {
    var s = str.substr(pos, 2);
    var v = parseInt(s, 16);
    arrBytes.push(v);
    pos += 2;
  }
  return arrBytes;
}
function Bytes2Str(arr)
{
    var str = "";
    for(var i=0; i<arr.length; i++)
    {
       var tmp = arr[i].toString(16);
       if(tmp.length == 1)
       {
           tmp = "0" + tmp;
       }
       str += tmp;
    }
    return str;
}


function Bytes2HexStr(arr)
{
    var str = "";
    for(var i=0; i<arr.length; i++)
    {
       var tmp = arr[i].toString(16);
       if(tmp.length == 1)
       {
           tmp = "0" + tmp;
       }
       str += tmp;
    }
    return str;
}
 
function base64Encode(input) {
    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    while (i < input.length) {
        chr1 = input[i++];
        chr2 = input[i++];
        chr3 = input[i++];
        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;
        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }
        output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
    }
    return output;
}

function base64Decode(input) {
    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var output = [];
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;
    
    while(i<input.length){
        enc1 = _keyStr.indexOf(input.charAt(i++));
        enc2 = _keyStr.indexOf(input.charAt(i++));
        enc3 = _keyStr.indexOf(input.charAt(i++));
        enc4 = _keyStr.indexOf(input.charAt(i++));
        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;
        output = output.concat(chr1);
        if (enc3 != 64) {
            output = output.concat(chr2);
        }
        if (enc4 != 64) {
            output = output.concat(chr3);
        }
    }
    return output;
}



function encodeUtf8(text) {
    const code = encodeURIComponent(text);
    const bytes = [];
    for (var i = 0; i < code.length; i++) {
        const c = code.charAt(i);
        if (c === '%') {
            const hex = code.charAt(i + 1) + code.charAt(i + 2);
            const hexVal = parseInt(hex, 16);
            bytes.push(hexVal);
            i += 2;
        } else bytes.push(c.charCodeAt(0));
    }
    return bytes;
}

function decodeUtf8(bytes) {
    var encoded = "";
    for (var i = 0; i < bytes.length; i++) {
        encoded += '%' + bytes[i].toString(16);
    }
    return decodeURIComponent(encoded);
}




    window.onload=function(){


//7461223a224169456c49417731494349314b6450677a7273364d5441774d514d3d227d
   //var ss1=stringToByte('{"cmd":"dData","snr":"2018121400001","mode":"RS485","data":"AiElIAw1ICI1KdPgzrs6MTAwMQM="}');
   
       // var ssss1 = rawDataToProtocol(ss1)
        //console.log(ssss1);

//7b22636d64223a226444617461222c22736e72223a2232303138313231343030303031222c226d6f6465223a225253343835222c2264617461223a224169496c49417731494349314b383630774c532f7872793873386344227d
 //var ss2=stringToByte('{"cmd":"dData","snr":"2018121400001","mode":"RS485","data":"AiIlIAw1ICI1K860wLS/xry8s8cD"}');
   
        //var ssss2 = rawDataToProtocol(ss2)
        //console.log(ssss2);
        //7b22636d64223a226444617461222c22736e72223a2232303138313231343030303031222c226d6f6465223a225253343835222c2264617461223a224167596c49417731494349314b383630774c532f7872793873386344227d
 var ss22=stringToByte('{"cmd":"dData","snr":"2018121400001","mode":"RS485","data":"AgYlIAw1ICI1K860wLS/xry8s8cD"}');
   
        var ssss22 = rawDataToProtocol(ss22)
        console.log(ssss22);
        
        //7b22636d64223a226444617461222c22736e72223a2232303138313231343030303031222c226d6f6465223a225253343835222c2264617461223a2242673d3d227d
        //var ss3=stringToByte('{"cmd":"dData","snr":"2018121400001","mode":"RS485","data":"Bg=="}');
       //var ssss3 = rawDataToProtocol(ss3)
        //console.log(ssss3);

//7b22636d64223a2264486561727462656174222c22736e72223a2232303138313231343030303031222c226e616d65223a2230303030303030303030227d
    //var ss4=stringToByte('{"cmd":"dHeartbeat","snr":"2018121400001","name":"0000000000"}');
        //var ssss4 = rawDataToProtocol(ss4)
        //console.log(ssss4);


        var json={
    "aliyunPk": "1110040395217519",
    "device": {
        "activeTime": 1550480801000,
        "aliyunCommodityCode": "iothub_senior",
        "deviceKey": "Tb2D7lwqy1C6dUt7lAkZ",
        "deviceSecret": "***",
        "gmtCreate": 1550458407000,
        "gmtModified": 1550480800000,
        "id": 30062328,
        "iotId": "Tb2D7lwqy1C6dUt7lAkZ000100",
        "name": "d896e0ff00010b86",
        "productKey": "a1fAGvnduAT",
        "rbacTenantId": "A298D6EEC4754EFAA2AF6089BDA46AD3",
        "region": "cn-shanghai",
        "status": 1,
        "statusLast": 0,
        "thingType": "DEVICE"
    },
    "id": "260589046",
    "iotId": "Tb2D7lwqy1C6dUt7lAkZ000100",
    "method": "thing.service.DistributeFreeNum",
    "params": {
        "FreeNum": 1000
    }
};
         //var bytes = protocolToRawData(json)
        // var str2 = Bytes2Str(bytes);
         // console.log(bytes);
        //  console.log(str2);
          
         
        var json2={
    "aliyunPk": "1110040395217519",
    "device": {
        "activeTime": 1550480801000,
        "aliyunCommodityCode": "iothub_senior",
        "deviceKey": "Tb2D7lwqy1C6dUt7lAkZ",
        "deviceSecret": "***",
        "gmtCreate": 1550458407000,
        "gmtModified": 1550480800000,
        "id": 30062328,
        "iotId": "Tb2D7lwqy1C6dUt7lAkZ000100",
        "name": "d896e0ff00010b86",
        "productKey": "a1fAGvnduAT",
        "rbacTenantId": "A298D6EEC4754EFAA2AF6089BDA46AD3",
        "region": "cn-shanghai",
        "status": 1,
        "statusLast": 0,
        "thingType": "DEVICE"
    },
    "id": "260589046",
    "iotId": "Tb2D7lwqy1C6dUt7lAkZ000100",
    "method": "thing.service.DistributeContent",
    "params": {
        "Content": "C4B3C4B3CDA3B3B5B3A1A3ACBBB6D3AD"
    }
};
         //var bytes2 = protocolToRawData(json2)
        // var str22 = Bytes2Str(bytes2);
         // console.log(bytes2);
         // console.log(str22);


    }
        </script>
    </head>
    <body></body>
</html>

 

转载于:https://www.cnblogs.com/zclaude/p/10441938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值