diff --git a/components/TextToHex/textToDotMatrixFor7305.vue b/components/TextToHex/textToDotMatrixFor7305.vue index 3c6fc5e..7160bf5 100644 --- a/components/TextToHex/textToDotMatrixFor7305.vue +++ b/components/TextToHex/textToDotMatrixFor7305.vue @@ -7,7 +7,7 @@ + + \ No newline at end of file diff --git a/pages/4877/BJQ4877.vue b/pages/4877/BJQ4877.vue new file mode 100644 index 0000000..9dba199 --- /dev/null +++ b/pages/4877/BJQ4877.vue @@ -0,0 +1,1592 @@ + + + + + \ No newline at end of file diff --git a/pages/6155/deviceDetail.vue b/pages/6155/deviceDetail.vue index e1daf46..e49632b 100644 --- a/pages/6155/deviceDetail.vue +++ b/pages/6155/deviceDetail.vue @@ -357,6 +357,7 @@ these.formData.img = device.devicePic; these.formData.id = device.id; these.formData.deviceId = f.deviceId; + these.formData.bleStatu = false; ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => { these.formData.bleStatu = true; }); @@ -514,11 +515,14 @@ return f; }, - bleValueNotify: function(receive, device, path,recArr) { + bleValueNotify: function(receive, device, path, recArr) { + if (receive.deviceId !== this.formData.deviceId) { + return; + } if (this.Status.pageHide) { return; } - let json = recei.ReceiveData(receive, device, path,recArr); + let json = recei.ReceiveData(receive, device, path, recArr); if (!json) { return; } @@ -571,6 +575,7 @@ borderColor: "#e034344d", buttonBgColor: "#E03434", buttonText: '去连接', + buttonTextColor: '#232323de', okCallback: function() { // console.log("1111"); uni.navigateTo({ @@ -1027,39 +1032,52 @@ this.Status.Pop.showPop = false; }, showPop: function(option) { - hideLoading(this); - let defaultCfg = { - showHeader: false, - headerTxt: "", - showHeader: false, - showCancel: false, - borderColor: '#BBE600', - buttonBgColor: '#BBE600', - okCallback: null, - cancelCallback: null, + let def = { + showPop: true, //是否显示弹窗 popType: 'custom', + bgColor: '#383934bd', + borderColor: '#BBE600', + textColor: '#ffffffde', + buttonBgColor: '#BBE600', + buttonTextColor: '#232323DE', + iconUrl: '', + message: '', buttonText: '确定', - clickEvt: '' - }; - if (!option) { + clickEvt: '', + visiblePrompt: false, + promptTitle: '', + modelValue: '', + visibleClose: false, + okCallback: null, + showSlot: false, + buttonCancelText: '', + showCancel: false, + } - } - let keys = Object.keys(option); - for (var i = 0; i < keys.length; i++) { - let key = keys[i]; - this.Status.Pop[key] = option[key]; - } - keys = Object.keys(defaultCfg); - for (var i = 0; i < keys.length; i++) { + let keys = Object.keys(def); + + for (let i = 0; i < keys.length; i++) { let key = keys[i]; if (key in option) { continue; } - this.Status.Pop[key] = defaultCfg[key]; + this.Status.Pop[key] = def[key]; + } + if (option) { + keys = Object.keys(option); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + + this.Status.Pop[key] = option[key]; + } } - this.Status.Pop.showPop = true; + if (!option.borderColor) { + option.borderColor = '#BBE600'; + option.buttonBgColor = '#BBE600'; + } + these.Status.Pop.showPop = true; }, sendUsr() { let f = this.getDevice(); diff --git a/pages/6331/BJQ6331.vue b/pages/6331/BJQ6331.vue index e30db6a..8a5fcc9 100644 --- a/pages/6331/BJQ6331.vue +++ b/pages/6331/BJQ6331.vue @@ -247,6 +247,7 @@ data() { return { Status: { + pageHide: false, showLightingSet: false, showVolumeSet: false, Pop: { @@ -675,6 +676,9 @@ }, bleValueNotify: function(receive, device, path) { //订阅消息 + if (receive.deviceId !== this.formData.deviceId) { + return; + } console.log("收到设备的数据", receive) let data = recei.ReceiveData(receive, device, pagePath); @@ -717,13 +721,13 @@ showBleUnConnect() { - these.showPop({ + this.showPop({ message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备", iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", borderColor: "#e034344d", buttonBgColor: "#E03434", buttonText: '去连接', - buttonTextColor: '#FFFFFFde', + buttonTextColor: '#232323de', okCallback: function() { uni.navigateTo({ @@ -731,7 +735,7 @@ events: { BindOver: function(data) { console.log(data) - these.formData.bleStatu=true; + these.formData.bleStatu = true; } }, success: function(res) { @@ -797,6 +801,7 @@ } }, showPop: function(option) { + hideLoading(this); let def = { showPop: true, //是否显示弹窗 popType: 'custom', @@ -807,14 +812,16 @@ buttonTextColor: '#232323DE', iconUrl: '', message: '', - buttonText: '', + buttonText: '确定', clickEvt: '', visiblePrompt: false, promptTitle: '', modelValue: '', visibleClose: false, okCallback: null, - showSlot: false + showSlot: false, + buttonCancelText: '', + showCancel: false, } let keys = Object.keys(def); @@ -824,14 +831,14 @@ if (key in option) { continue; } - these.Status.Pop[key] = def[key]; + this.Status.Pop[key] = def[key]; } if (option) { keys = Object.keys(option); for (let i = 0; i < keys.length; i++) { let key = keys[i]; - these.Status.Pop[key] = option[key]; + this.Status.Pop[key] = option[key]; } } diff --git a/pages/650/HBY650.vue b/pages/650/HBY650.vue index 7c95e0f..641c8a3 100644 --- a/pages/650/HBY650.vue +++ b/pages/650/HBY650.vue @@ -192,7 +192,7 @@ data() { return { Status: { - + pageHide: false, Pop: { showPop: false, //是否显示弹窗 popType: 'custom', @@ -345,10 +345,10 @@ these.formData.blename = f.name ? f.name : "Unname"; these.formData.deviceName = device.deviceName; these.formData.img = device.devicePic; - + these.formData.bleStatu = false; these.formData.deviceId = f.deviceId; - ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res=>{ - these.formData.bleStatu=true; + ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => { + these.formData.bleStatu = true; }); these.setBleFormData(); these.getDetail(); @@ -490,9 +490,12 @@ return className; }, - bleValueNotify: function(receive, device, path,recArr) { //订阅消息 + bleValueNotify: function(receive, device, path, recArr) { //订阅消息 + if (receive.deviceId !== this.formData.deviceId) { + return; + } console.log("收到设备的数据", receive) - let data = recei.ReceiveData(receive, device, pagePath,recArr); + let data = recei.ReceiveData(receive, device, pagePath, recArr); if (data) { if ("staBlue_picture" in data) { @@ -559,7 +562,7 @@ getDetail() { var that = this; usrApi.getDetail(this.device.id).then(res => { -console.log("res=",res); + console.log("res=", res); if (res && res.code == 200) { res = res.data; let personnelInfo = res.personnelInfo; @@ -684,7 +687,7 @@ console.log("res=",res); borderColor: "#e034344d", buttonBgColor: "#E03434", buttonText: '去连接', - buttonTextColor: '#FFFFFFde', + buttonTextColor: '#232323de', okCallback: function() { uni.navigateTo({ @@ -692,7 +695,7 @@ console.log("res=",res); events: { BindOver: function(data) { console.log(data) - these.formData.bleStatu=true; + these.formData.bleStatu = true; } }, success: function(res) { @@ -1261,17 +1264,47 @@ console.log("res=",res); } }, showPop: function(option) { + hideLoading(this); + let def = { + showPop: true, //是否显示弹窗 + popType: 'custom', + bgColor: '#383934bd', + borderColor: '#BBE600', + textColor: '#ffffffde', + buttonBgColor: '#BBE600', + buttonTextColor: '#232323DE', + iconUrl: '', + message: '', + buttonText: '确定', + clickEvt: '', + visiblePrompt: false, + promptTitle: '', + modelValue: '', + visibleClose: false, + okCallback: null, + showSlot: false, + buttonCancelText: '', + showCancel: false, + } - if (!option) { - option = { - a: 1 - }; - } - let keys = Object.keys(option); - for (var i = 0; i < keys.length; i++) { + let keys = Object.keys(def); + + for (let i = 0; i < keys.length; i++) { let key = keys[i]; - these.Status.Pop[key] = option[key]; + if (key in option) { + continue; + } + this.Status.Pop[key] = def[key]; } + if (option) { + keys = Object.keys(option); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + + this.Status.Pop[key] = option[key]; + } + } + if (!option.borderColor) { option.borderColor = '#BBE600'; option.buttonBgColor = '#BBE600'; diff --git a/pages/670/HBY670.vue b/pages/670/HBY670.vue index 86f66fb..120cf2c 100644 --- a/pages/670/HBY670.vue +++ b/pages/670/HBY670.vue @@ -523,6 +523,7 @@ these.formData['imei'] = these.device.deviceImei; } these.getDetail(); + these.formData.bleStatu = false; ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => { these.formData.bleStatu = true; }); @@ -530,10 +531,10 @@ }, onShow() { - this.Status.pageHide=false; + this.Status.pageHide = false; }, onHide: function() { - this.Status.pageHide=true; + this.Status.pageHide = true; }, onBackPress(e) { ble.removeReceiveCallback(pagePath); @@ -627,11 +628,12 @@ return; } this.showPop({ - message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备,取消"+(4-this.Status.bleLinkCnt)+"次后不再提醒", + message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备,取消" + (4 - this.Status.bleLinkCnt) + "次后不再提醒", iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", borderColor: "#e034344d", buttonBgColor: "#E03434", buttonText: '去连接', + buttonTextColor: '#232323de', showCancel: true, cancelCallback: () => { // this.closePop(); @@ -643,7 +645,7 @@ events: { BindOver: function(data) { console.log(data) - these.formData.bleStatu=true; + these.formData.bleStatu = true; } }, success: function(res) { @@ -982,9 +984,11 @@ this.refreshFormData(receiveData, 'auto'); return receiveData; }, - bleValueNotify: function(receive, device, path,recArr) { //订阅消息 - - let data = recei.ReceiveData(receive, device, pagePath,recArr); + bleValueNotify: function(receive, device, path, recArr) { //订阅消息 + if (receive.deviceId !== this.formData.deviceId) { + return; + } + let data = recei.ReceiveData(receive, device, pagePath, recArr); console.log("收到设备的数据", data) if (data) { if ("staBlue_picture" in data) { @@ -1394,12 +1398,12 @@ clearInterval(these.Status.staticWarn.inteval); these.Status.staticWarn.inteval = null; these.formData.qzwarn = false; - - if(this.Status.Pop.okCallback){ - these.CloseWarn(false); - these.formData.SOS = 'close'; + + if (this.Status.Pop.okCallback) { + these.CloseWarn(false); + these.formData.SOS = 'close'; } - + return; } these.Status.staticWarn.time = these.Status.staticWarn @@ -1432,9 +1436,10 @@ this.Status.staticWarn.time = 0; return; } - if (these.formData.qzwarn && these.Status.staticWarn.inteval && these.Status.staticWarn.time) { + if (these.formData.qzwarn && these.Status.staticWarn.inteval && these.Status.staticWarn + .time) { console.log("222222"); - this.Status.Pop.okCallback=null; + this.Status.Pop.okCallback = null; these.showQzWarn(sendRb); } else { sendRb(); @@ -2169,39 +2174,51 @@ }, showPop: function(option) { hideLoading(this); - let defaultCfg = { - showHeader: false, - headerTxt: "", - showHeader: false, - showCancel: false, - borderColor: '#BBE600', - buttonBgColor: '#BBE600', - okCallback: null, - cancelCallback: null, + let def = { + showPop: true, //是否显示弹窗 popType: 'custom', + bgColor: '#383934bd', + borderColor: '#BBE600', + textColor: '#ffffffde', + buttonBgColor: '#BBE600', + buttonTextColor: '#232323DE', + iconUrl: '', + message: '', buttonText: '确定', + clickEvt: '', + visiblePrompt: false, + promptTitle: '', + modelValue: '', + visibleClose: false, + okCallback: null, + showSlot: false, + buttonCancelText: '', showCancel: false, - buttonCancelText: '取消', - clickEvt: '' - }; - if (!option) { + } - } - let keys = Object.keys(option); - for (var i = 0; i < keys.length; i++) { - let key = keys[i]; - this.Status.Pop[key] = option[key]; - } - keys = Object.keys(defaultCfg); - for (var i = 0; i < keys.length; i++) { + let keys = Object.keys(def); + + for (let i = 0; i < keys.length; i++) { let key = keys[i]; if (key in option) { continue; } - this.Status.Pop[key] = defaultCfg[key]; + this.Status.Pop[key] = def[key]; + } + if (option) { + keys = Object.keys(option); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + + this.Status.Pop[key] = option[key]; + } } - this.Status.Pop.showPop = true; + if (!option.borderColor) { + option.borderColor = '#BBE600'; + option.buttonBgColor = '#BBE600'; + } + these.Status.Pop.showPop = true; }, sendUsr: function(ReSendNo) { @@ -2337,9 +2354,9 @@ // 获取当前行文字 const text = textLines[currentPacket - 1] || ''; let arr = gbk.encode(text) - console.log("arr=",arr); + console.log("arr=", arr); let gbkData = gbk.arr2hex(arr); - console.log("gbkData=",gbkData); + console.log("gbkData=", gbkData); // 构建数据包 const bufferSize = 5 + gbkData.length / 2; // 头部4字节 + 数据部分 diff --git a/pages/7305/BJQ7305.vue b/pages/7305/BJQ7305.vue index bcd738a..dc872dd 100644 --- a/pages/7305/BJQ7305.vue +++ b/pages/7305/BJQ7305.vue @@ -8,14 +8,14 @@ - {{ formData.battary }}% + {{formData.battary}}% 电量 - {{ formData.xuhang }} + {{formData.xuhang}} 续航时间 @@ -24,25 +24,25 @@ 蓝牙名称 - {{ formData.blename }} + {{formData.blename}} 设备名称 - {{ formData.deviceName }} + {{formData.deviceName}} 充电状态 - {{ formData.statu }} + {{formData.statu}} 蓝牙状态 - {{ formData.bleStatu ? '已连接' : '未连接' }} + {{formData.bleStatu?'已连接':'未连接'}} 灯光亮度 - {{ formData.liangDu }}% + {{formData.liangDu}}% @@ -59,7 +59,7 @@ 主灯模式 - {{ getMode }} + {{getMode}} + + + + + + + + + + + + - - 产品信息 - - - - 产品参数 - - - - 操作说明 - - - - 操作视频 - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/common/addBLE/LinkBle.vue b/pages/common/addBLE/LinkBle.vue index 36da350..b3d95a3 100644 --- a/pages/common/addBLE/LinkBle.vue +++ b/pages/common/addBLE/LinkBle.vue @@ -156,14 +156,39 @@ if (these.device.deviceId == receive.deviceId) { console.log("11111:", receive); these.device.imei = f.imei; - if (receive.bytes[0] == 0xFC || receive.str.indexOf('mac address:') == 0) { + let flag=false; + if (receive.bytes && receive.bytes.length && receive.bytes[0] == 0xFC) {//6155 7305 if (f && f.macAddress) { - these.device.macAddress = f.macAddress; - console.log("222222"); - these.Statu.isSearch = false; - these.initDevice(); + flag=true; + } + } + else if(receive.str.indexOf('mac address:') == 0){//650 670 + if (f && f.macAddress) { + flag=true; + } + } + else{ + try{ + let json=JSON.parse(receive.str); + let key = "sta_address"; + if (key in json) {//100 + if (f && f.macAddress) { + flag=true; + } + } + }catch(err){ + console.log("出现异常,",err); } } + + + if(flag){ + these.device.macAddress = f.macAddress; + console.log("222222"); + these.Statu.isSearch = false; + these.initDevice(); + } + } }, pagePath); eventChannel = this.getOpenerEventChannel(); diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index 914554d..e5ae397 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -27,7 +27,8 @@ - + @@ -172,73 +173,80 @@ let search = option.search; these = this; eventChannel = this.getOpenerEventChannel(); - // this.EquipMents = [{ - // "RSSI": -55, - // "advertisData": "", - // "advertisServiceUUIDs": [ - // "0000FFE0-0000-1000-8000-00805F9B34FB" - // ], - // "deviceId": "EBDA4E6F-3A28-FF65-A845-AE8CC7B78375", - // "name": "HBY670-BF74EA", - // "linkStatu": false - // }, - // { - // "RSSI": -61, - // "advertisData": "", - // "advertisServiceUUIDs": [ - // "0000FFE0-0000-1000-8000-00805F9B34FB" - // ], - // "deviceId": "469FB381-B47E-1E40-8073-EF50B5704AAB", - // "name": "EF4651", - // "linkStatu": false, - // "isTarget": true - // }, - // { - // "RSSI": -69, - // "advertisData": "", - // "advertisServiceUUIDs": [ - // "0000FFE0-0000-1000-8000-00805F9B34FB" - // ], - // "deviceId": "4F0DAC91-4391-CB07-905E-72D7F03EFCD3", - // "name": "4877-BF743D", - // "linkStatu": false - // } - // ]; + const systemInfo = uni.getSystemInfoSync(); + if (systemInfo.uniPlatform == 'web') { + this.EquipMents = [{ + "RSSI": -55, + "advertisData": "", + "advertisServiceUUIDs": [ + "0000FFE0-0000-1000-8000-00805F9B34FB" + ], + "deviceId": "EBDA4E6F-3A28-FF65-A845-AE8CC7B78375", + "name": "HBY670-BF74EA", + "linkStatu": false + }, + { + "RSSI": -61, + "advertisData": "", + "advertisServiceUUIDs": [ + "0000FFE0-0000-1000-8000-00805F9B34FB" + ], + "deviceId": "469FB381-B47E-1E40-8073-EF50B5704AAB", + "name": "EF4651", + "linkStatu": false, + "isTarget": true + }, + { + "RSSI": -69, + "advertisData": "", + "advertisServiceUUIDs": [ + "0000FFE0-0000-1000-8000-00805F9B34FB" + ], + "deviceId": "4F0DAC91-4391-CB07-905E-72D7F03EFCD3", + "name": "4877-BF743D", + "linkStatu": false + } + ]; + + + these.PairEquip = [this.EquipMents[0]]; + return; + } let StartSubsrib = () => { these.EquipMents = []; ble = bleTool.getBleTool(); //蓝牙不可用的回调 - ble.addStateBreakCallback(res=>{ + ble.addStateBreakCallback(res => { if (these.Status.isPageHidden) { return; } console.log("处理蓝牙不可用"); hideLoading(these); - these.PairEquip=[]; - these.EquipMents=[]; + these.PairEquip = []; + these.EquipMents = []; uni.showToast({ - icon:'fail', - title:'蓝牙已不可用' + icon: 'fail', + title: '蓝牙已不可用' }); these.showOpenSetting(); - - },pagePath); + + }, pagePath); //蓝牙再次可用的回调 - ble.addStateRecoveryCallback(res=>{ + ble.addStateRecoveryCallback(res => { if (these.Status.isPageHidden) { return; } uni.showToast({ - icon:'success', - title:'蓝牙恢复可用' + icon: 'success', + title: '蓝牙恢复可用' }); these.Status.BottomMenu.show = false; - these.EquipMents=[]; + these.EquipMents = []; these.refreshBleList(); - },pagePath); - + }, pagePath); + //蓝牙断开连接的回调 ble.addDisposeCallback(res => { if (these.Status.isPageHidden) { @@ -469,9 +477,9 @@ } hideLoading(these); - - eventChannel.emit('BindOver',these.device); - + + eventChannel.emit('BindOver', these.device); + ble.updateCache(); uni.navigateBack(); return true; @@ -941,4 +949,9 @@ color: #232323; } + + .filterNone { + filter: none !important; + -webkit-filter: none !important; + } \ No newline at end of file diff --git a/static/images/4877/4877equip.png b/static/images/4877/4877equip.png new file mode 100644 index 0000000..dff8be2 Binary files /dev/null and b/static/images/4877/4877equip.png differ diff --git a/static/images/4877/arrow.png b/static/images/4877/arrow.png new file mode 100644 index 0000000..1ae3719 Binary files /dev/null and b/static/images/4877/arrow.png differ diff --git a/static/images/4877/arrowActive.png b/static/images/4877/arrowActive.png new file mode 100644 index 0000000..1a59669 Binary files /dev/null and b/static/images/4877/arrowActive.png differ diff --git a/static/images/4877/arrowLR.png b/static/images/4877/arrowLR.png new file mode 100644 index 0000000..885e89a Binary files /dev/null and b/static/images/4877/arrowLR.png differ diff --git a/static/images/4877/arrowLRActive.png b/static/images/4877/arrowLRActive.png new file mode 100644 index 0000000..6d82055 Binary files /dev/null and b/static/images/4877/arrowLRActive.png differ diff --git a/static/images/4877/fan.png b/static/images/4877/fan.png new file mode 100644 index 0000000..7cbb21c Binary files /dev/null and b/static/images/4877/fan.png differ diff --git a/static/images/4877/fanActive.png b/static/images/4877/fanActive.png new file mode 100644 index 0000000..f501418 Binary files /dev/null and b/static/images/4877/fanActive.png differ diff --git a/static/images/4877/lightActive.png b/static/images/4877/lightActive.png new file mode 100644 index 0000000..46c41b7 Binary files /dev/null and b/static/images/4877/lightActive.png differ diff --git a/static/images/4877/lightt.png b/static/images/4877/lightt.png new file mode 100644 index 0000000..d8d42e2 Binary files /dev/null and b/static/images/4877/lightt.png differ diff --git a/static/images/4877/sg.png b/static/images/4877/sg.png new file mode 100644 index 0000000..f119272 Binary files /dev/null and b/static/images/4877/sg.png differ diff --git a/static/images/4877/sgActive.png b/static/images/4877/sgActive.png new file mode 100644 index 0000000..e276244 Binary files /dev/null and b/static/images/4877/sgActive.png differ diff --git a/static/images/common/close.png b/static/images/common/close.png new file mode 100644 index 0000000..75704fa Binary files /dev/null and b/static/images/common/close.png differ diff --git a/utils/BleHelper.js b/utils/BleHelper.js index ba87d86..7a861bd 100644 --- a/utils/BleHelper.js +++ b/utils/BleHelper.js @@ -33,15 +33,18 @@ class BleHelper { if (linkedDevices && linkedDevices.length && linkedDevices.length > 0) { // console.log("111111", linkedDevices); linkedDevices = linkedDevices.filter((v) => { - if(v){ + if (v) { v.Linked = false; v.notifyState = false; - } - return v?true:false; + } + return v ? true : false; }); } + const systemInfo = uni.getSystemInfoSync(); + + setTimeout(() => { this.OpenBlue().then(() => { @@ -55,8 +58,8 @@ class BleHelper { discovering: false, //蓝牙是否正在搜索 searchList: [], //已搜索到的设备列表, isSubscribe: false, //是否开启了订阅 - LinkedList: linkedDevices //已连接的设备列表 - + LinkedList: linkedDevices, //已连接的设备列表 + platform: systemInfo.uniPlatform } this.cfg = { onDeviceFound: [], //发现新设备的事件 @@ -169,7 +172,9 @@ class BleHelper { //连接所有已连接过的设备 linkAllDevices() { // console.log("模块启动时,自动连接已连接过的设备", this.data.LinkedList); - + if (this.data.platform == 'web') { + return; + } if (this.data.LinkedList && this.data.LinkedList.length > 0) { let flag = false; for (var i = 0; i < this.data.LinkedList.length; i++) { @@ -424,7 +429,12 @@ class BleHelper { //获取蓝牙适配器状态 CheckBlue() { - + if (this.data.platform == 'web') { + return Promise.resolve({ + available: true, + discovering: false + }); + } return new Promise((resolve, reject) => { if (this.data.available) { // console.log("蓝牙模块是可用状态"); @@ -463,6 +473,12 @@ class BleHelper { //打开蓝牙适配器 OpenBlue() { + if (this.data.platform == 'web') { + this.data.isOpenBlue = true; + this.data.available = true; + this.data.isSubscribe = true; + return Promise.resolve(true); + } var init = () => { return new Promise((resolve, reject) => { if (this.data.isOpenBlue) { @@ -678,6 +694,7 @@ class BleHelper { } let header = "mac address:"; + let isUpdate = false; if (str.indexOf(header) == 0) { //650以文本传输mac console.log("str=", str); this.data.LinkedList.find((v) => { @@ -698,10 +715,11 @@ class BleHelper { .macAddress) } }); - this.updateCache(); + isUpdate = true; + } - if (str.indexOf('imei:') == 0) { + if (str.indexOf('imei:') == 0) { //670以此方式传输imei let imei = str.split(':')[1]; @@ -709,9 +727,10 @@ class BleHelper { if (v.deviceId == receive .deviceId) { v.imei = imei; + isUpdate = true; } }); - this.updateCache(); + } @@ -725,17 +744,48 @@ class BleHelper { if (v.deviceId == receive .deviceId) { v.macAddress = mac; - // console.log("收到mac地址:", str) + isUpdate = true; } }); - this.updateCache(); + } } + + try { + let receivJson = JSON.parse(str); + let key = "sta_address"; //HBY100以此方式上传mac地址 + if (key in receivJson) { + this.data.LinkedList.find((v) => { + if (v.deviceId == receive + .deviceId) { + let macStr = receivJson[ + key]; + if (macStr.includes(':')) { + v.macAddress = macStr; + } else { + v.macAddress = macStr + .replace(/(.{2})/g, + '$1:').slice(0, + -1) + } + + isUpdate = true; + } + }); + + } + } catch (convertException) { + console.error("文本无法转json", convertException) + } + + if (isUpdate) { + this.updateCache(); + } // console.log("str1=", str); } catch (ex) { console.error("将数据转文本失败", ex); } - + try { console.log("11111"); let recData = { @@ -746,7 +796,7 @@ class BleHelper { str: str, hexs: hexs }; - console.log("监听到特征值:" + JSON.stringify(recData)); + console.log("监听到特征值:" + JSON.stringify(recData)); if (this.cfg.receivDataCallback) { if (this.cfg.receivDataCallback.length > 0) { @@ -771,10 +821,10 @@ class BleHelper { } }) } else { - console.log("无人订阅消息"); + console.log("无人订阅消息"); } } else { - console.log("无人订阅receivDataCallback,不处理数据"); + console.log("无人订阅receivDataCallback,不处理数据"); } } catch (ex) { console.error("处理订阅消息失败,ex=", ex); @@ -811,6 +861,14 @@ class BleHelper { } //关闭蓝牙适配器 CloseBlue() { + if (this.data.platform == 'web') { + this.data.available = false; + this.data.discovering = false; + this.data.isOpenBlue = false; + this.data.searchList = []; + + return Promise.resolve(); + } return new Promise((resolve, reject) => { this.data.available = false; this.data.discovering = false; @@ -842,6 +900,9 @@ class BleHelper { //开始搜索新设备 StartSearch() { + if (this.data.platform == 'web') { + return Promise.resolve({}); + } this.data.searchList = []; var these = this; //开始搜索 @@ -902,6 +963,9 @@ class BleHelper { //停止搜索 StopSearch() { + if (this.data.platform == 'web') { + return Promise.resolve(); + } let p1 = new Promise((resolve, reject) => { uni.stopBluetoothDevicesDiscovery({ success: (res) => { @@ -1225,8 +1289,8 @@ class BleHelper { } setTimeout(function() { startgetService(id); - - }, 100+repeatCnt*300); + + }, 100 + repeatCnt * 300); } }, fail: (ex) => { @@ -1341,7 +1405,9 @@ class BleHelper { //连接某个设备 LinkBlue(deviceId, targetServiceId, writeCharId, notifyCharId, maxRetries) { - + if (this.data.platform == 'web') { + return Promise.resolve(true); + } if (maxRetries === undefined) { maxRetries = 0; // 最大重试次数 } @@ -1414,11 +1480,11 @@ class BleHelper { // .LinkedList); // 处理 MTU 设置 - if (plus.os.name === 'Android') { + if (plus.os.name === 'Android') { this.setMtu(deviceId); - } - resolve(true); - + } + resolve(true); + }).catch((ex) => { reject(this.getError(ex)); }); @@ -1502,9 +1568,9 @@ class BleHelper { } - - setMtu(deviceId){ - let prom=new Promise((_succ,_err)=>{ + + setMtu(deviceId) { + let prom = new Promise((_succ, _err) => { uni.setBLEMTU({ deviceId: deviceId, mtu: 512, @@ -1514,12 +1580,13 @@ class BleHelper { }, fail: (ex) => { console.error( - "mtu设置失败",ex); - ex=this.getError(ex); + "mtu设置失败", ex); + ex = this.getError(ex); _err( ex ); // MTU设置失败不影响连接成功 - },complete(){ + }, + complete() { console.log("设置mtu完毕"); } }); @@ -1528,6 +1595,9 @@ class BleHelper { } //断开连接 disconnectDevice(deviceId) { + if (this.data.platform == 'web') { + return Promise.resolve(); + } var disconnect = (id) => { return new Promise((resolve, reject) => { uni.closeBLEConnection({ @@ -1546,16 +1616,7 @@ class BleHelper { } if (deviceId) { - disconnect(deviceId); - - this.data.LinkedList.find(v => { - if (v.deviceId === deviceId) { - return true; - } - return false; - }); - - return; + return disconnect(deviceId); } if (this.data.LinkedList.length > 0) { @@ -1567,27 +1628,34 @@ class BleHelper { } } - if (arr.length == 0) { - return; - } - - Promise.allSettled(arr).then((results) => { - results.forEach((result, index) => { - if (result.status === 'fulfilled') { - ////console.log(`第${index + 1}个Promise成功:`, result.value); - } else { - ////console.log(`第${index + 1}个Promise失败:`, result.reason.message); - } + if (arr.length) { + return new Promise((_succ, _err) => { + Promise.allSettled(arr).then((results) => { + results.forEach((result, index) => { + if (result.status === 'fulfilled') { + ////console.log(`第${index + 1}个Promise成功:`, result.value); + } else { + ////console.log(`第${index + 1}个Promise失败:`, result.reason.message); + } + }); + _succ() + }).catch((ex) => { + _err(); + }); }); - }); - - } else { - ////console.log("无已连接设备"); + } } + + return Promise.resolve(); + } //向蓝牙设备发送一个字符串的ASCII码 sendString(deviceid, str, writeServiceId, wirteCharactId, ms) { - if (str && str.length) { + if (str && typeof(str) == 'object') { + str = JSON.stringify(str); + } + if (str) { + let buffer = new ArrayBuffer(str.length); let dataView = new DataView(buffer); @@ -1627,7 +1695,9 @@ class BleHelper { } //向蓝牙设备发送数据,如果没连接将自动连接后再发 sendData(deviceid, buffer, writeServiceId, wirteCharactId, ms) { - + if (this.data.platform == 'web') { + return Promise.resolve("h5平台默认成功"); + } // console.log("deviceid=" + deviceid + ",writeServiceId=" + writeServiceId + ",wirteCharactId=" + // wirteCharactId + ",timeout=" + ms) if (ms === undefined) { diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 1f9552c..3897d3f 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -5,7 +5,9 @@ class BleReceive { '/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/670/HBY670': this.Receive_670.bind(this), + '/pages/4877/BJQ4877': this.Receive_4877.bind(this), + '/pages/100/HBY100': this.Receive_4877.bind(this) }; } @@ -490,6 +492,36 @@ class BleReceive { } } + Receive_4877(receive,f,path,recArr){ + let receiveData={}; + + try { + + console.log("str=",receive.str); + receiveData = JSON.parse(receive.str); + + let recCnt = recArr.find(v => { + return v.key.replaceAll('/', '').toLowerCase() == f.device.detailPageUrl + .replaceAll('/', '').toLowerCase(); + }); + if (!recCnt) { + if (receiveData.sta_PowerPercent<=20) { + uni.showModal({ + title: "提示", + content: "设备电量低", + showCancel: false + }); + } + } + } catch (error) { + receiveData = {}; + console.log("文本解析失败",error) + } + return receiveData; + + } + + } diff --git a/utils/Common.js b/utils/Common.js index db0ae79..5fa6c55 100644 --- a/utils/Common.js +++ b/utils/Common.js @@ -280,5 +280,33 @@ export default { } } return arr; + }, + //10进制转换为16进制字符串 + decimalToHexLittleEndian(num, byteCount,revers) { + // 处理负数(如果需要支持负数,可先转为补码) + if (num < 0) { + num = 0xFFFFFFFF + num + 1; + } + + // 转为16进制,去除前缀0x,转为大写 + let hex = num.toString(16).toUpperCase(); + + // 计算需要补充的0的数量,确保每个字节占2位 + let padLength = (byteCount || Math.ceil(hex.length / 2) * 2) - hex.length; + if (padLength > 0) { + hex = '0'.repeat(padLength) + hex; + } + + // 分割为字节数组(每2位一个字节) + const bytes = []; + for (let i = 0; i < hex.length; i += 2) { + bytes.push(hex.substr(i, 2)); + } + + // 是否反转字节顺序(低位在前)并拼接 + if(revers){ + return bytes.reverse().join(''); + } + return bytes.join(''); } } \ No newline at end of file