diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 4a511cb..aec8ca6 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -2,87 +2,83 @@ class BleReceive { constructor() { this.StorageKey = "linkedDevices"; this.HandlerMap = { - '/pages/6155/deviceDetail': this.Receive_6155.bind(this), - '/pages/7305/BJQ7305': this.Receive_6155.bind(this), - '/pages/650/HBY650': this.Receive_650.bind(this), - '/pages/670/HBY670': this.Receive_670.bind(this) + '/pages/6155/deviceDetail': this.Receive_6155.bind(this), + '/pages/7305/BJQ7305': this.Receive_6155.bind(this), + '/pages/650/HBY650': this.Receive_650.bind(this), + '/pages/670/HBY670': this.Receive_670.bind(this) }; } + - getCurrentPagePath() { - - const pages = getCurrentPages(); - - if (pages.length === 0) { - console.log("pages.length=0"); - return ""; - } - - const currentPage = pages[pages.length - 1]; - console.log("currentPage=", currentPage.route); - return currentPage.route; - } - - - setBleFormData(data,f) { - if(data){ - let linkedList=uni.getStorageSync(this.StorageKey); - if(!linkedList){ + setBleFormData(data, f) { + if (data) { + let linkedList = uni.getStorageSync(this.StorageKey); + if (!linkedList) { return; } - linkedList.find((v)=>{ - if(f.deviceId==v.deviceId){ - let keys=Object.keys(data); - keys.forEach((key)=>{ - if(!v.formData){ - v.formData={}; + linkedList.find((v) => { + if (f.deviceId == v.deviceId) { + let keys = Object.keys(data); + keys.forEach((key) => { + if (!v.formData) { + v.formData = {}; } - if(!f.formData){ - f.formData={}; + if (!f.formData) { + f.formData = {}; } - v.formData[key]=data[key]; - f.formData[key]=data[key]; + v.formData[key] = data[key]; + f.formData[key] = data[key]; }); - - uni.setStorageSync(this.StorageKey,linkedList); + + uni.setStorageSync(this.StorageKey, linkedList); } }); } - - } - - - ReceiveData(receive,f,path,recArr) { - if(f && f.macAddress && f.device && f.device.id){ - let handler = this.HandlerMap[f.device.detailPageUrl]; - if(handler){ - let data=handler(receive, f, path, recArr); - return data; - }else{ - console.log("已收到消息,但无指定处理程序",receive); - } - - }else{ - console.log("已收到该消息,但无法处理",receive); - } - - return receive; - + } - Receive_650(receive,f,path,recArr) { - console.log("通用程序正在处理650的数据",receive); - + + ReceiveData(receive, f, path, recArr) { + if (f && f.macAddress && f.device && f.device.id) { + let handler = null; + let keys = Object.keys(this.HandlerMap); + for (let index = 0; index < keys.length; index++) { + let key = keys[index].replaceAll('/', '').toLowerCase(); + let devKey = f.device.detailPageUrl ? f.device.detailPageUrl.replaceAll('/', '').toLowerCase() : ''; + if (key == devKey) { + handler = this.HandlerMap[keys[index]]; + break; + } + } + + if (handler) { + let data = handler(receive, f, path, recArr); + return data; + } else { + console.log("已收到消息,但无指定处理程序", receive); + } + + } else { + console.log("已收到该消息,但无法处理", receive); + } + + return receive; + + } + + Receive_650(receive, f, path, recArr) { + console.log("通用程序正在处理650的数据", receive); + var parseData = () => { let bytes = receive.bytes; if (bytes[0] == 0x55) { - + try { - + let staticLevelByte = bytes[1]; let staticLevelText = '未知'; let modeCurr = ""; - + switch (staticLevelByte) { case 0x65: staticLevelText = '高档'; @@ -101,12 +97,12 @@ class BleReceive { modeCurr = "close"; break; } - + // 解析照明档位 let lightingLevelByte = bytes[2]; let lightingLevelText = lightingLevelByte === 0x6e ? '开启' : '关闭'; - - + + // 解析剩余照明时间(第三和第四字节,大端序) let lightingTime = (bytes[3] << 8) | bytes[4]; let hours = Math.floor(lightingTime / 60); @@ -120,7 +116,7 @@ class BleReceive { } else { xuhang = `${hours}小时${remainingMinutes}分`; } - + // 解析剩余电量 let batteryLevelByte = bytes[5]; // 电量百分比范围检查 @@ -141,100 +137,99 @@ class BleReceive { iswarn = true; warn = '非常强预警'; } - - let formData={}; + + let formData = {}; formData.battary = batteryLevel; formData.xuhang = xuhang; formData.cMode = lightingLevelByte === 0x6e; formData.modeCurr = modeCurr; formData.warnLevel = warn; formData.iswarn = iswarn; - this.setBleFormData(formData,f); - - let route=this.getCurrentPagePath(); - console.log("f=",f); - console.log("route="+route); - if (iswarn && f.detailPageUrl.indexOf(route)==-1 ) { - uni.showModal({ - content:"环境存在漏电电源", - title:"警告", - success(res){ - if(res.confirm){ - - if(f){ - uni.navigateTo({ - url: f.detailPageUrl, - events: { - ack: function(data) {} - }, - success: (res) => { - res.eventChannel.emit('detailData', { - data: f, - deviceType: '', - apiType: 'listA' - }); - } - }); - } + this.setBleFormData(formData, f); + + let recCnt = recArr.find(v => { + return v.key.replaceAll('/', '').toLowerCase() == f.device.detailPageUrl + .replaceAll('/', '').toLowerCase(); + }); + if (!recCnt) { + + if (iswarn) { + uni.showModal({ + content: "环境存在漏电电源", + title: "警告", + success(res) { + if (res.confirm) { + + if (f) { + uni.navigateTo({ + url: f.detailPageUrl, + events: { + ack: function(data) {} + }, + success: (res) => { + res.eventChannel.emit('detailData', { + data: f, + deviceType: '', + apiType: 'listA' + }); + } + }); + } + } } - } - }) - }else{ - console.log("当前全局不处理此消息"); + }) + } } return formData; } catch (error) { return null; } } - + if (receive.str) { try { - + let str = receive.str; - + if (str.indexOf('mac address:') == 0) { - let formData={}; + let formData = {}; formData.macAddress = str.split(':')[1]; - this.setBleFormData(formData,f); + this.setBleFormData(formData, f); return formData; - } - else{ - let receiveData={a:1}; + } else { + let receiveData = { + a: 1 + }; try { - let json=JSON.parse(str); - - if("staBlue_picture" in json){ + let json = JSON.parse(str); + + if ("staBlue_picture" in json) { //重发图片 console.log("收到重新发送图片的命令"); - receiveData=json; - } - else if("staBlue_text" in json){ + receiveData = json; + } else if ("staBlue_text" in json) { //重发文本 console.log("收到重新发送文本的命令"); - receiveData=json; - } - else if("staBlue_vidio" in json){ + receiveData = json; + } else if ("staBlue_vidio" in json) { //重发视频 console.log("收到重新发送视频的命令"); - receiveData=json; - } - else if("staBlue" in json){ - if(json.staBlue=="finish"){ + receiveData = json; + } else if ("staBlue" in json) { + if (json.staBlue == "finish") { console.log("收到设备回复,全部传输完成"); - receiveData=json; + receiveData = json; } - - } - else{ - receiveData={}; + + } else { + receiveData = {}; console.log("无法解析该文本"); } - - - + + + } catch (error) { - receiveData={}; + receiveData = {}; console.log("文本解析失败") } return receiveData; @@ -244,53 +239,54 @@ class BleReceive { return null; } } - + } - - let data=parseData(receive.bytes); - console.log("data=",data); + + let data = parseData(receive.bytes); + console.log("data=", data); return data; - + } - Receive_670(receive,f,path,recArr){ - console.log("pagh=",path); - var todo = (bytes) =>{ + Receive_670(receive, f, path, recArr) { + console.log("pagh=", path); + var todo = (bytes) => { // console.log("todo",receive); let receiveData = {}; if (bytes[0] == 0x55) { try { - // console.log("todo"); + // console.log("todo"); // 跳过帧头(第一个字节),从第二个字节开始解析 let staticLevelByte = bytes[1]; let staticLevelText = ''; switch (staticLevelByte) { - case 0x65: - staticLevelText = 'hight'; - break - case 0x66: - staticLevelText = 'center'; - break - case 0x67: - staticLevelText = 'low'; - break - case 0x64: - staticLevelText = 'close'; - break + case 0x65: + staticLevelText = 'hight'; + break + case 0x66: + staticLevelText = 'center'; + break + case 0x67: + staticLevelText = 'low'; + break + case 0x64: + staticLevelText = 'close'; + break } - // console.log("todo"); + // console.log("todo"); // 解析照明档位 let lightingLevelByte = bytes[2]; - let lightingLevelText = lightingLevelByte === 0x6d ? 'hight': lightingLevelByte === 0x6e ? 'low': 'close'; - + let lightingLevelText = lightingLevelByte === 0x6d ? 'hight' : lightingLevelByte === 0x6e ? + 'low' : 'close'; + // 解析剩余照明时间(第三和第四字节,小端序) let lightingTime = (bytes[3] << 8) | bytes[4]; - + // 解析剩余电量 // 电量百分比范围检查 let batteryLevelByte = bytes[5]; - + let batteryLevel = Math.max(0, Math.min(100, batteryLevelByte)); - // console.log("todo"); + // console.log("todo"); let warn = bytes[6]; if (warn == 0x00) { warn = 'none'; @@ -303,35 +299,36 @@ class BleReceive { } else if (warn == 0x04) { warn = 'veryhight'; } - - let staticWarn = bytes[7] == 0x01;//静止报警 + + let staticWarn = bytes[7] == 0x01; //静止报警 let fourGStrenth = bytes[8]; //4g信号强度 let sosTxt = bytes[9] == 0x00 ? 'close' : bytes[9] == 0x01 ? 'sg' : 'rb'; - // console.log("todo"); + // console.log("todo"); receiveData.modeCurr = staticLevelText; receiveData.lightCurr = lightingLevelText; - receiveData.xuhang = lightingTime ; + receiveData.xuhang = lightingTime; receiveData.battary = batteryLevel; receiveData.warnLevel = warn; receiveData.staticWarn = staticWarn; receiveData.fourGStrenth = fourGStrenth; - receiveData.SOS=sosTxt; - - this.setBleFormData(receiveData,f); - console.log("recArr=",recArr); - let recCnt=recArr.find(v=>{ - return v.key == f.device.detailPageUrl; + receiveData.SOS = sosTxt; + + this.setBleFormData(receiveData, f); + console.log("recArr=", recArr); + let recCnt = recArr.find(v => { + return v.key.replaceAll('/', '').toLowerCase() == f.device.detailPageUrl + .replaceAll('/', '').toLowerCase(); }); - if(!recCnt){ + if (!recCnt) { if (this.formData.staticWarn) { //有静止报警 - uni.showModal({ - title:"警告", - content:"设备静止报警中", - showCancel:false - }); + uni.showModal({ + title: "警告", + content: "设备静止报警中", + showCancel: false + }); } } - } catch(error) { + } catch (error) { console.log('数据解析错误:', error); } // console.log("todo"); @@ -345,11 +342,11 @@ class BleReceive { } if (str.indexOf('mac address:') == 0) { receiveData.macAddress = str.split(':').slice(1).join(":"); - console.log('收到mac地址:', +this.receiveData.macAddress); + console.log('收到mac地址:', +this.receiveData.macAddress); } else if (str.indexOf('imei:') == 0) { receiveData.imei = str.split(':')[1]; console.log('收到IEMI:', +this.receiveData.macAddress); - + } else if (str.indexOf('longitude:') == 0) { receiveData.Lon = str.split(':')[1]; console.log('收到经度:', +this.receiveData.macAddress); @@ -359,61 +356,58 @@ class BleReceive { } else { try { // console.log("str=",str); - let json=JSON.parse(str); - if("staBlue_picture" in json){ + let json = JSON.parse(str); + if ("staBlue_picture" in json) { //重发图片 console.log("收到重新发送图片的命令"); - receiveData=json; - } - else if("staBlue_text" in json){ + receiveData = json; + } else if ("staBlue_text" in json) { //重发文本 console.log("收到重新发送文本的命令"); - receiveData=json; - } - else if("staBlue_vidio" in json){ + receiveData = json; + } else if ("staBlue_vidio" in json) { //重发视频 console.log("收到重新发送视频的命令"); - receiveData=json; - } - else if("staBlue" in json){ - if(json.staBlue=="finish"){ + receiveData = json; + } else if ("staBlue" in json) { + if (json.staBlue == "finish") { console.log("收到设备回复,全部传输完成"); - receiveData=json; + receiveData = json; } - - } - else{ - receiveData={}; + + } else { + receiveData = {}; console.log("无法解析该文本"); } - - - + + + } catch (error) { - receiveData={}; + receiveData = {}; // console.log("文本解析失败",error) } } - } catch(ex) { - receiveData={}; + } catch (ex) { + receiveData = {}; console.log('将数据转文本失败', ex); } } // console.log("todo",receiveData); - this.setBleFormData(receiveData,f); + this.setBleFormData(receiveData, f); return receiveData; } - - - let data=todo(receive.bytes); - + + + let data = todo(receive.bytes); + return data; } - Receive_6155(receive,f,path,recArr) { - let bytes=receive.bytes; + + Receive_6155(receive, f, path, recArr) { + let bytes = receive.bytes; if (bytes[0] == 0xFB && bytes[1] == 0x64 && bytes.length >= 8) { try { - + let staticLevelByte = bytes[2]; let getName = function(type) { let name = ""; @@ -437,20 +431,20 @@ class BleReceive { return name; } let staticLevelText = getName(staticLevelByte); - + // 解析照明档位 let lightingLevelByte = bytes[3]; let lightingLevelText = getName(lightingLevelByte); - - + + // 解析剩余电量 let batteryLevelByte = bytes[4]; // 电量百分比范围检查 let batteryLevel = Math.max(0, Math.min(100, batteryLevelByte)); - - - - + + + + //充电状态 let warn = bytes[5]; if (warn == 0x00) { @@ -458,28 +452,40 @@ class BleReceive { } else if (warn == 0x01) { warn = '充电中'; } - + // 解析剩余照明时间(第三和第四字节,小端序) let lightingTime = ""; let HH = Math.max(0, Math.min(100, bytes[6])); let mm = Math.max(0, Math.min(100, bytes[7])); lightingTime = HH + "小时" + mm + "分钟"; - let formData={}; + let formData = {}; formData.mode = staticLevelText; formData.fuMode = lightingLevelText; - formData.battary = batteryLevel; + formData.battary = 20; // batteryLevel; formData.statu = warn; formData.xuhang = lightingTime; - - if (batteryLevel <= 20) { - uni.showModal({ - content:"设备电量低", - title:"提示" - }); - + + batteryLevel = 20; + console.log("recArr=", recArr); + + let recCnt = recArr.find(v => { + + return v.key.replaceAll('/', '').toLowerCase() === f.device.detailPageUrl.replaceAll( + '/', '').toLowerCase(); + }); + if (!recCnt) { + if (batteryLevel <= 20) { + + uni.showModal({ + content: "设备电量低", + title: "提示" + }); + } } - this.setBleFormData(formData,f); - return formData; + + + this.setBleFormData(formData, f); + return formData; } catch (error) { console.log('数据解析错误:', error); }