<!DOCTYPE html> <html> <head> <script type="text/javascript"> var prop_MagneticState_BatteryLevel_post = 0x01; //车位状态 电池电量 属性 var event_AbnormalAlarm_post = 0x02; //告警 离线事件 var event_Error_post = 0x03; //故障 事件 var ALINK_PROP_POST_METHOD = 'thing.event.property.post'; var ALINK_EVENT_POST_AbnormalAlarm_METHOD = "thing.event.AbnormalAlarm.post"; var ALINK_EVENT_POST_Error_METHOD = "thing.event.Error.post"; function rawDataToProtocol(bytes) { var derective; var uint8Array = new Uint8Array(bytes.length); for (var i = 0; i < bytes.length; i++) { uint8Array[i] = bytes[i] & 0xff; } var dataView = new DataView(uint8Array.buffer, 0); var jsonMap = new Object(); var sn1=''+(dataView.getInt8(4)& 0xff).toString(16); if(sn1.length==1){ sn1='0'+sn1; } var sn2=''+(dataView.getInt8(5)& 0xff).toString(16); if(sn2.length==1){ sn2='0'+sn2; } var sn3=''+(dataView.getInt8(6)& 0xff).toString(16); if(sn3.length==1){ sn3='0'+sn3; } var sn4=''+(dataView.getInt8(7)& 0xff).toString(16); if(sn4.length==1){ sn4='0'+sn4; } var sn5=''+(dataView.getInt8(8)& 0xff).toString(16); if(sn5.length==1){ sn5='0'+sn5; } var sn6=''+(dataView.getInt8(9)& 0xff).toString(16); if(sn6.length==1){ sn6='0'+sn6; } var sn7=''+(dataView.getInt8(10)& 0xff).toString(16); if(sn7.length==1){ sn7='0'+sn7; } var sn8=''+(dataView.getInt8(11)& 0xff).toString(16); if(sn8.length==1){ sn8='0'+sn8; } var sn9=''+(dataView.getInt8(12)& 0xff).toString(16); if(sn9.length==1){ sn9='0'+sn9; } var sn10=''+(dataView.getInt8(13)& 0xff).toString(16); if(sn10.length==1){ sn10='0'+sn10; } var sn11=''+(dataView.getInt8(14)& 0xff).toString(16); if(sn11.length==1){ sn11='0'+sn11; } var sn12=''+(dataView.getInt8(15)& 0xff).toString(16); if(sn12.length==1){ sn12='0'+sn12; } derective = uint8Array[3]; //jsonMap['iotId'] = sn1+sn2+sn3+sn4+sn5+sn6+sn7+sn8+sn9+sn10+sn11+sn12; //设备sn if (derective == prop_MagneticState_BatteryLevel_post ) { jsonMap['method'] = ALINK_PROP_POST_METHOD; jsonMap['version'] = '1.0'; var id1 =dataView.getInt8(16); var id2 =dataView.getInt8(17); var id3 =dataView.getInt8(18); var id4 =dataView.getInt8(19); jsonMap['id'] = '' + id1 + id2 + id3 + id4; var params = {}; if(uint8Array[20]==0X00){ params['MagneticState'] = 0; }else{ params['MagneticState'] = 1; } params['BatteryLevel'] =dataView.getInt8(21); jsonMap['params'] = params; }else if(derective ==event_AbnormalAlarm_post){ jsonMap['method'] = ALINK_EVENT_POST_AbnormalAlarm_METHOD; jsonMap['version'] = '1.0'; var params = {}; params['AlarmType'] =dataView.getInt8(16); jsonMap['params'] = params; } else if(derective ==event_Error_post){ jsonMap['method'] = ALINK_EVENT_POST_Error_METHOD; jsonMap['version'] = '1.0'; var params = {}; params['ErrorCode'] =dataView.getInt8(16); jsonMap['params'] = params; } return jsonMap; } function protocolToRawData(json) { var payloadArray = [0x5D,0x0A,0x00,0xA5,0xAA,0x01,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); } //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; } window.onload=function(){ var ss1=HexString2Bytes('A5AA1301303132333435363738393031000000010064'); var sss1 = rawDataToProtocol(ss1) console.log(sss1); var ss2=HexString2Bytes('A5AA0E0230313233343536373839303100'); var sss2 = rawDataToProtocol(ss2) console.log(sss2); var ss3=HexString2Bytes('A5AA0E0330313233343536373839303100'); var sss3 = rawDataToProtocol(ss3) console.log(sss3); var json={ "method":"thing.event.property.post", // 'derective':0X03, // 'sn':'4057941a2d820000', // 'serialNumber':'8a567e4d', // 'check':'0X567e', // "id":"12345", // "version":"1.0", // "code":200, // "data":{} }; var bytes = protocolToRawData(json) var str2 = Bytes2Str(bytes); console.log(bytes); console.log(str2); } </script> </head> <body></body> </html>