1
0
forked from dyf/APP

Compare commits

..

3 Commits

13 changed files with 364 additions and 297 deletions

View File

@ -107,6 +107,6 @@
justify-content: space-between;
align-items: center;
font-size: 28rpx;
color: #FFFFFF;
color: #FFFFFFde;
}
</style>

View File

@ -58,7 +58,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF');//this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -73,31 +73,49 @@
// 逐行处理
for (let y = 0; y < 16; y++) {
let byte1 = 0,
byte2 = 0;
let byte1 = '',
byte2 = '';
// 每行16个像素分为两个字节
for (let x = 0; x < 16; x++) {
// 计算像素在imageData中的索引 (RGBA格式)
let index = (y * 16 + x) * 4;
let red = imageData[index];
let index = (y * 16 + x) * 4;
let r = imageData[index];
let g = imageData[index+1];
let b = imageData[index+2];
let gray = (r + g + b) / 3;
let bit = gray < 255 ? '1' : '0';
// 黑色像素R值较低视为1白色视为0
let isBlack = red < 128;
if (x < 8) {
// 第一个字节左8位
if (isBlack) {
byte1 |= 0x80 >> x; // 从左到右设置位
}
byte1+=bit;
} else {
// 第二个字节右8位
if (isBlack) {
byte2 |= 0x80 >> (x - 8);
}
byte2+=bit;
}
// let red = imageData[index];
// // 黑色像素R值较低视为1白色视为0
// let isBlack = red < 128;
// if (x < 8) {
// // 第一个字节左8位
// if (isBlack) {
// byte1 |= 0x80 >> x; // 从左到右设置位
// }
// } else {
// // 第二个字节右8位
// if (isBlack) {
// byte2 |= 0x80 >> (x - 8);
// }
// }
}
byte1=parseInt(byte1,2);
byte2=parseInt(byte2,2);
// 将字节转换为两位十六进制字符串
matrix.push('0x' + byte1.toString(16).padStart(2, '0').toUpperCase());
matrix.push('0x' + byte2.toString(16).padStart(2, '0').toUpperCase());
@ -118,7 +136,7 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000');//this.color
ctx.setTextBaseline('middle');
ctx.setFontSize(this.fontSize);
ctx.font = `${this.fontSize}px "PingFang SC", PingFang SC, Arial, sans-serif`;

View File

@ -60,7 +60,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF'); //this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -81,7 +81,7 @@
this.clearCanvas();
// 绘制一个测试字符来预热字体和画布
this.ctx.setFillStyle(this.color);
this.ctx.setFillStyle('#000000'); //this.color
this.ctx.setFontSize(this.fontSize);
this.ctx.font = `${this.fontSize}px "PingFangBold", "PingFang SC", Arial, sans-serif`;
this.ctx.setTextBaseline('middle');
@ -125,39 +125,38 @@
async drawAndGetPixels() {
// 第一次调用时先预热画布解决APP重新打开后第一次获取数据不完整的问题
// await this.warmupCanvas();
let convertCharToMatrix = function(imageData) {
let convertCharToMatrix=function(imageData) {
debugger;
// console.log("imgData=",imageData)
let matrix = [];
// 逐行处理
for (let y = 0; y < 16; y++) {
let byte1 = 0,
byte2 = 0;
let byte1 = '',
byte2 = '';
// 每行16个像素分为两个字节
for (let x = 0; x < 16; x++) {
// 计算像素在imageData中的索引 (RGBA格式)
let index = (y * 16 + x) * 4;
let red = imageData[index];
// 黑色像素R值较低视为1白色视为0
let isBlack = red < 128;
let index = (y * 16 + x) * 4;
let r = imageData[index];
let g = imageData[index+1];
let b = imageData[index+2];
let gray = (r + g + b) / 3;
let bit = gray < 255 ? '1' : '0';
if (x < 8) {
// 第一个字节左8位
if (isBlack) {
byte1 |= 0x80 >> x; // 从左到右设置位
}
byte1+=bit;
} else {
// 第二个字节右8位
if (isBlack) {
byte2 |= 0x80 >> (x - 8);
byte2+=bit;
}
}
}
byte1=parseInt(byte1,2);
byte2=parseInt(byte2,2);
// 将字节转换为两位十六进制字符串
matrix.push('0x' + byte1.toString(16).padStart(2, '0').toUpperCase());
matrix.push('0x' + byte2.toString(16).padStart(2, '0').toUpperCase());
@ -166,7 +165,8 @@
return matrix;
}
let drawTxt=async (textLine)=> {
let drawTxt = async (textLine) => {
debugger;
let result = {};
let ctx = this.ctx;
@ -179,11 +179,11 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000'); //this.color
ctx.setTextBaseline('middle');
// ctx.setTextAlign('center')
ctx.setFontSize(this.fontSize);
ctx.font = `${this.fontSize}px "PingFangBold", "PingFang SC", Arial, sans-serif`;
ctx.font = `${this.fontSize}px "PingFang SC","PingFangBold", Arial, sans-serif`;
// 4. 绘制当前行文本
let currentX = 0;
@ -207,7 +207,7 @@
height: this.currentCanvasHeight,
success: res => {
result={
result = {
line: textLine,
pixelData: res.data,
width: this.currentCanvasWidth,
@ -228,7 +228,7 @@
let arr = [];
// 循环处理每行文本
for (let i = 0; i < this.validTxts.length; i++) {
debugger;
debugger;
let linePixls = [];
let item = this.validTxts[i];

View File

@ -70,7 +70,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF');//this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -87,7 +87,7 @@
this.clearCanvas();
// 绘制一个测试字符来预热字体和画布
this.ctx.setFillStyle(this.color);
this.ctx.setFillStyle('#000000');//this.color
this.ctx.setFontSize(this.fontSize);
this.ctx.font = `${this.fontSize}px "PingFangBold","PingFang SC", Arial, sans-serif`;
this.ctx.setTextBaseline('middle');
@ -212,7 +212,7 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000');//this.color
ctx.setTextBaseline('middle');
// ctx.setTextAlign('center')
ctx.setFontSize(this.fontSize);

View File

@ -58,7 +58,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF');//this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -100,10 +100,19 @@
for (let x = 0; x < 16; x++) {
// 计算像素在imageData中的索引 (RGBA格式)
let index = (y * 16 + x) * 4;
let red = imageData[index];
// let red = imageData[index];
let r = imageData[index];
let g = imageData[index+1];
let b = imageData[index+2];
let gray = (r + g + b) / 3;
let bit = gray < 255 ? '1' : '0';
// 黑色像素R值较低视为1白色视为0
let isBlack = red < 128 ? 1 : 0;
let isBlack =gray < 255 ? 1 : 0;// red < 128 ? 1 : 0;
arr.push(isBlack);
}
@ -154,7 +163,7 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000');//this.color
ctx.setTextBaseline('middle');
// ctx.setTextAlign('center')
ctx.setFontSize(this.fontSize);

View File

@ -65,7 +65,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF');//this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -82,9 +82,9 @@
this.currentCanvasWidth = 16;
this.currentCanvasHeight = 16;
this.clearCanvas();
this.ctx.setFillStyle(this.color);
this.ctx.setFillStyle('#000000');//this.color
this.ctx.setFontSize(this.fontSize);
this.ctx.font = `${this.fontSize}px "PingFangBold", "PingFang SC", Arial, sans-serif`;
this.ctx.font = `${this.fontSize}px "PingFang SC","PingFangBold", Arial, sans-serif`;
this.ctx.setTextBaseline('middle');
this.ctx.fillText('测', 0, 8);
@ -158,12 +158,20 @@
// pixels.push(R < 128 ? 1 : 0);
const R = imageData[i];
const G = imageData[i + 1];
const B = imageData[i + 2];
const gray = 0.299 * R + 0.587 * G + 0.114 * B; // 灰度转换
pixels.push(gray < 128 ? 1 : 0);
// const R = imageData[i];
// const G = imageData[i + 1];
// const B = imageData[i + 2];
// const gray = 0.299 * R + 0.587 * G + 0.114 * B; // 灰度转换
// pixels.push(gray < 128 ? 1 : 0);
let r = imageData[i];
let g = imageData[i+1];
let b = imageData[i+2];
let gray = (r + g + b) / 3;
let bit = gray < 255 ? 1 : 0;
pixels.push(bit);
}
const lowBytes = new Array(charWidth).fill(0);
@ -197,11 +205,11 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000');//this.color
ctx.setTextBaseline('middle');
// ctx.setTextAlign('center')
ctx.setFontSize(this.fontSize);
ctx.font = `${this.fontSize}px "PingFangBold", "PingFang SC", Arial, sans-serif`;
ctx.font = `${this.fontSize}px "PingFang SC","PingFangBold", Arial, sans-serif`;
// 4. 绘制当前行文本
debugger;

View File

@ -59,7 +59,7 @@
* 清除Canvas内容
*/
clearCanvas() {
this.ctx.setFillStyle(this.bgColor);
this.ctx.setFillStyle('#FFFFFF');//this.bgColor
this.ctx.fillRect(0, 0, this.currentCanvasWidth, this.currentCanvasHeight);
},
@ -105,10 +105,18 @@
let G = imageData[index+1];
let B = imageData[index]+2;
// let r = imageData[i];
// let g = imageData[i+1];
// let b = imageData[i+2];
let gray = (R + G + B) / 3;
let bit = gray < 255 ? 1 : 0;
// 黑色像素R值较低视为1白色视为0
let isBlack = R < 128 ? 1 : 0;
arr.push(isBlack);
// let isBlack = R < 128 ? 1 : 0;
arr.push(bit);
}
}
@ -159,11 +167,11 @@
this.clearCanvas();
// 3. 设置文字样式
ctx.setFillStyle(this.color);
ctx.setFillStyle('#000000');//this.color
ctx.setTextBaseline('middle');
// ctx.setTextAlign('center')
ctx.setFontSize(this.fontSize);
ctx.font = `${this.fontSize}px "PingFangBold", "PingFang SC", Arial, sans-serif`;
ctx.font = `${this.fontSize}px PingFangBold", "PingFang SC", Arial, sans-serif`;
// 4. 绘制当前行文本
let currentX = 0;

View File

@ -39,7 +39,7 @@
</view>
</view>
<view class="warnnig" :class="formData.sta_ShakeBit!==0 ?'':'displayNone'">
<view class="warnnig" :class="formData.sta_ShakeBit!=0 ?'':'displayNone'">
<view>{{formData.sta_ShakeBit==3?'设备疑似受到外力碰撞':'设备声光报警中'}}</view>
<view @click.stop="SOSToggle()">
<uni-icons type="closeempty" color="#FFFFFFde" size="16"></uni-icons>
@ -1418,7 +1418,7 @@
console.error("出现错误", ex)
});
}
let msg = val == 1 ? '确定开启声光报警' : '确定关闭声光报警';
let msg = val == 1 ? '确定开启声光报警' : '确定解除声光报警';
showPop({
message: msg,

View File

@ -58,6 +58,12 @@
{{getbleStatu}}
</text>
</view>
<view class="info-row" v-if="itemInfo.deviceMac" @click="bleStatuToggle">
<text class="info-label">充电状态</text>
<text class="info-value status-running" >
{{deviceInfo.chargeState != 0?'充电中':'未充电'}}
</text>
</view>
<view class="info-row">
<text class="info-label" style="display: flex; align-items: center;">定位信息</text>
<view class="info-value status-running" @click="gpsPosition(deviceInfo)">
@ -73,7 +79,7 @@
</view>
</view>
</view>
<view class="callpolice" v-if="deviceInfo.onlineStatus == 1 && deviceInfo.alarmStatus == 1">
<view class="callpolice" v-if="deviceInfo.alarmStatus == 1">
<view class="">设备强制报警中</view>
<view>
<uni-icons type="closeempty" size="15" color="rgba(255, 255, 255, 0.9)"
@ -436,6 +442,52 @@
}
},
methods: {
onReceive(deviceState){//蓝牙/Mq通用消息处理
switch (deviceState[0]) {
// 1设备切换灯光实时返回
case 1:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.sliderValue = deviceState[2];
this.deviceInfo.batteryRemainingTime = deviceState[3];
break;
// 12为设备实时上报
case 12:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.isLaserOn = deviceState[2] === 1; //第3位表示当时激光灯档位
this.currentlaserMode = this.isLaserOn ? "开启" : "关闭";
if (this.deviceInfo) {
this.deviceInfo.batteryPercentage = deviceState[3]; //第4位电量百分比
this.deviceInfo.chargeState = deviceState[4]; //第5位为充电状态0没有充电1正在充电2为已充满
this.deviceInfo.batteryRemainingTime = deviceState[5]; //第6位200代表电池剩余续航时间200分钟
}
setTimeout(() => {
if (this.deviceInfo.batteryPercentage < 20 &&
this.deviceInfo.chargeState == 0) {
this.popupType = 'bettery';
this.popupMessage = '请及时充电';
this.showPopupFlag = true;
}
if (this.apiType === 'listA') {
this.fetchDeviceDetail(data.data.id)
} else {
// 分享权限详情
this.fetchSharedDeviceDetail(data.data.id)
}
}, 10000);
// 上报电量,在列表里面同步
uni.$emit('deviceStatusUpdate', {
message: parsedMessage,
timestamp: new Date().getTime()
});
break;
default:
console.log('未知的 deviceState 类型:', deviceState[0]);
}
},
bleStatuToggle() {
let f = this.getDevice();
if (!f) {
@ -532,11 +584,9 @@
}
let data = rec.ReceiveData(receive, device, pagePath, recArr);
console.log("蓝牙收到消息", data)
this.receivData(data);
this.onReceive(data.state);
},
receivData(data) {
},
bleStateBreak() {
if (this.Status.pageHide) {
return;
@ -1566,6 +1616,7 @@
// this.popupConfirmText="";
},
OpenWarn(val){//开启/解除强制报警
debugger;
const topic = `B/${this.itemInfo.deviceImei}`;
let message={"instruct":[7,val,0,0,0,0]};
message=JSON.stringify(message);
@ -1575,6 +1626,8 @@
});
if(flag){
this.itemInfo.alarmStatus=val;
}else{
MsgError("操作没有成功",'确定',this);
}
this.showPopupFlag = false;
@ -1644,11 +1697,11 @@
// 3.解除告警状态
const registerRes = await deviceSendAlarmMessage(data);
if (registerRes.code !== 200) {
uni.showToast({
title: registerRes.msg,
icon: 'none'
})
// uni.showToast({
// title: registerRes.msg,
// icon: 'none'
// })
this.OpenWarn(0);
return
}
this.itemInfo.alarmStatus=0;
@ -1908,53 +1961,8 @@
const deviceState = parsedMessage.state; // 直接取 state 数组
// 切换主灯光模式,亮度值设备同步
if (!deviceState) return;
// 1设备切换灯光实时返回
switch (deviceState[0]) {
case 1:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.sliderValue = deviceState[2];
this.deviceInfo.batteryRemainingTime = deviceState[3];
break;
// 12为设备实时上报
case 12:
this.currentMainMode = this.getMainLightModeLabel(
deviceState[
1]);
this.isLaserOn = deviceState[2] === 1; //第3位表示当时激光灯档位
this.currentlaserMode = this.isLaserOn ? "开启" : "关闭";
if (this.deviceInfo) {
this.deviceInfo.batteryPercentage = deviceState[
3]; //第4位电量百分比
this.deviceInfo.chargeState = deviceState[
4]; //第5位为充电状态0没有充电1正在充电2为已充满
this.deviceInfo.batteryRemainingTime = deviceState[
5]; //第6位200代表电池剩余续航时间200分钟
}
setTimeout(() => {
if (this.deviceInfo.batteryPercentage < 20 &&
this.deviceInfo.chargeState == 0) {
this.popupType = 'bettery';
this.popupMessage = '请及时充电';
this.showPopupFlag = true;
}
if (this.apiType === 'listA') {
this.fetchDeviceDetail(data.data.id)
} else {
// 分享权限详情
this.fetchSharedDeviceDetail(data.data.id)
}
}, 10000);
// 上报电量,在列表里面同步
uni.$emit('deviceStatusUpdate', {
message: parsedMessage,
timestamp: new Date().getTime()
});
break;
default:
console.log('未知的 deviceState 类型:', deviceState[0]);
}
this.onReceive(deviceState);
} catch (error) {
console.log('解析MQTT消息失败:', error, '原始消息:', payload);
}

View File

@ -482,20 +482,20 @@
ble.addStateBreakCallback(() => {
uni.showModal({
title: '提示',
content: '蓝牙不可用'
});
MsgError('蓝牙不可用','',these);
these.EquipMents.filter((v, i) => {
these.$set(these.EquipMents[i], 'link', false);
});
}, pagePath);
ble.addStateRecoveryCallback(() => {
uni.showModal({
title: '提示',
content: '蓝牙恢复可用'
});
MsgSuccess('蓝牙恢复可用','',these,()=>{
MsgClear(these);
})
},
pagePath);
@ -568,7 +568,7 @@
plus.runtime.openURL('weixin://', (err) => {
MsgError("打开微信失败,请手动打开微信粘贴");
MsgError("打开微信失败,请手动打开微信,发送至'文件传输助手'");
});
},
fail(ex){
@ -805,10 +805,8 @@
let json = getUrlParams(res.result);
if (!json.key) {
uni.showModal({
title: '错误',
content: "无效的二维码"
})
MsgError('无效的二维码','',these);
return;
}
this.scanKey = json.key;
@ -1050,9 +1048,8 @@
these.sendEquipToMq();
}).catch(ex => {
console.log("ex=", ex)
uni.showModal({
content: "连接失败:" + ex.msg
});
MsgError("连接失败:" + ex.msg,'',these);
hideLoading(these);
});
}

View File

@ -134,6 +134,9 @@
</view>
<!-- 蒙板用于点击任意位置关闭悬浮的菜单 -->
<view class="mask" v-show="showTooltip||showshare" @click.stop="closePopMenu"></view>
<MsgBox ref="msgPop" />
</view>
</template>
@ -772,7 +775,8 @@
this.downCallback();
});
ble = bleTool.getBleTool();
recei = BleReceive.getBleReceive();
console.log("this=",this);
recei = BleReceive.getBleReceive(this);
//蓝牙连接成功的回调
ble.addRecoveryCallback((res) => {
// console.log("蓝牙连接成功的回调");
@ -799,8 +803,9 @@
//接收到消息的回调
ble.addReceiveCallback((receive, device, path, recArr) => {
// console.error("首页收到消息了");
recei.ReceiveData(receive, device, path, recArr);
console.error("首页收到消息了");
let json=recei.ReceiveData(receive, device, path, recArr);
console.error("消息内容",json);
this.updateBleStatu();
}, pagePath);

View File

@ -22,9 +22,6 @@ const serviceDic = [ //合作供应商的蓝牙主服务
class BleHelper {
constructor() {
this.StorageKey = "linkedDevices";
recei = receivTool.getBleReceive();
this.init();
}
init() {
@ -41,16 +38,12 @@ class BleHelper {
if (!v) return false;
v.Linked = false;
v.notifyState = false;
return !!v.device;
return v.device;
});
}
const systemInfo = uni.getSystemInfoSync();
this.data = {
isOpenBlue: false, //蓝牙模块是否开启
available: false, //蓝牙状态是否可用
@ -71,17 +64,7 @@ class BleHelper {
stateRecoveryCallback: [], //蓝牙适配器恢复可用事件
stateBreakCallback: [] //蓝牙适配器不可用事件
}
//蓝牙模块不再订阅,改到首页订阅
// this.addReceiveCallback((receive, f, path, recArr) => {
// recei.ReceiveData(receive, f, path, recArr);
// }, "BleReceiveData");
// setTimeout(() => {
// this.OpenBlue().then(() => {
// this.linkAllDevices();
// });
// }, 10);
this.dic = {
errRemarks: [{
@ -668,7 +651,7 @@ class BleHelper {
BleReceive() {
uni.onBLECharacteristicValueChange((receive) => {
//订阅消息
console.log("收到订阅消息", receive);
// console.log("收到订阅消息", receive);
let f = this.data.LinkedList.find((v) => {
return v.deviceId == receive.deviceId;
})

View File

@ -1,8 +1,20 @@
import Common from '@/utils/Common.js'
import { parseBleData } from '@/api/100J/HBY100-J.js'
import {
parseBleData
} from '@/api/100J/HBY100-J.js'
import {
MsgSuccess,
MsgError,
MsgClose,
MsgWarning,
showPop,
MsgClear,
MsgInfo
} from '@/utils/MsgPops.js';
class BleReceive {
constructor() {
constructor(_ref) {
this.ref = _ref;
this.StorageKey = "linkedDevices";
this.HandlerMap = {
'/pages/6155/deviceDetail': this.Receive_6155.bind(this),
@ -13,10 +25,11 @@ class BleReceive {
'/pages/4877/BJQ4877': this.Receive_4877.bind(this),
'/pages/100/HBY100': this.Receive_100.bind(this),
'/pages/102/HBY102': this.Receive_102.bind(this),
'/pages/6170/deviceControl/index':this.Receive_6170.bind(this),
'/pages/6170/deviceControl/index': this.Receive_6170.bind(this),
'/pages/100J/HBY100-J': this.Receive_100J.bind(this),
'/pages/6075J/BJQ6075J':this.Receive_6075.bind(this)
'/pages/6075J/BJQ6075J': this.Receive_6075.bind(this)
};
}
@ -63,7 +76,7 @@ class BleReceive {
return receive;
}
if (f && f.macAddress && f.device && f.device.id) {
if (fReady) {
let handler = null;
let keys = Object.keys(this.HandlerMap);
let devKey = f.device.detailPageUrl ? f.device.detailPageUrl.replace(/\//g, '').toLowerCase() : '';
@ -89,7 +102,7 @@ class BleReceive {
} else {
// 100J AE30 二进制帧在 f 不完整时已在上方 parseBleData此处不再误报「无法处理」
if (!is100JAe30) {
console.log("已收到该消息,但无法处理", receive, "f:", f);
console.error("已收到该消息,但无法处理", receive, "f:", f);
}
}
@ -187,33 +200,26 @@ class BleReceive {
.replace(/\//g, "").toLowerCase();
});
if (!recCnt) {
if (iswarn) {
uni.showModal({
content: "'" + f.device.deviceName + "'环境存在漏电电源",
title: "警告",
success(res) {
if (res.confirm) {
let msg = [];
if (f) {
uni.navigateTo({
url: f.detailPageUrl,
events: {
ack: function(data) {}
},
success: (res) => {
res.eventChannel.emit('detailData', {
data: f,
deviceType: '',
apiType: 'listA'
});
if (formData.battary <= 20) {
msg.push("设备'" + f.device.deviceName + "'电量低");
}
if (iswarn) {
msg.push("设备'" + f.device.deviceName + "'环境存在漏电电源");
}
if (this.ref && msg.length>0) {
if (msg.length > 0) {
msg = msg.join(',');
MsgError("'" + f.device.deviceName + "'环境存在漏电电源", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
})
}
}
return formData;
} catch (error) {
@ -362,15 +368,24 @@ class BleReceive {
if (staticWarn) { //有静止报警
msgs.push("静止报警中");
}
if (receiveData.battary <= 20) {
msg.push("设备'" + f.device.deviceName + "'电量低");
}
if (msgs.length > 0) {
msgs = "设备'" + f.device.deviceName + msgs.join(";");
uni.showModal({
title: "警告",
content: msgs,
showCancel: false
msgs = msgs.join(";");
if (this.ref) {
MsgError(msgs, '', this.ref, () => {
MsgClear(this.ref);
});
}
// uni.showModal({
// title: "警告",
// content: msgs,
// showCancel: false
// });
}
}
} catch (error) {
console.error('数据解析错误:', error);
@ -514,14 +529,15 @@ class BleReceive {
});
if (!recCnt) {
if (batteryLevel <= 20) {
// 会弹出两个框,暂且注释掉这段代码
uni.showModal({
content: "设备'" + f.device.deviceName + "'电量低",
title: "提示"
if (batteryLevel <= 20 && warn == 0x00) {
if (this.ref) {
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
return formData;
} catch (error) {
@ -613,15 +629,19 @@ class BleReceive {
});
console.log("formData=",formData)
if (!recCnt) {
if (batteryLevel <= 20) {
// 会弹出两个框,暂且注释掉这段代码
uni.showModal({
content: "设备'" + f.device.deviceName + "'电量低",
title: "提示"
console.log("11111");
if (formData.battary <= 20 && bytes[5] == 0x00) {
console.log("2222")
if (this.ref) {
console.log("3333333");
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
return formData;
} catch (error) {
@ -646,12 +666,14 @@ class BleReceive {
});
if (!recCnt) {
if (receiveData.sta_PowerPercent <= 20) {
uni.showModal({
title: "提示",
content: "设备'" + f.device.deviceName + "'电量低",
showCancel: false
if (this.ref) {
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
} catch (error) {
receiveData = {};
@ -674,13 +696,17 @@ class BleReceive {
.replace(/\//g, "").toLowerCase();
});
if (!recCnt) {
if (receiveData.sta_battery <= 20) {
uni.showModal({
title: "提示",
content: "设备'" + f.device.deviceName + "'电量低",
showCancel: false
if (receiveData.sta_battery <= 20 && (receiveData.sta_system != '1' || receiveData.sta_system !=
'3')) {
if (this.ref) {
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
} catch (error) {
receiveData = {};
@ -695,19 +721,22 @@ class BleReceive {
try {
if (!receive.bytes || receive.bytes.length < 3) return receiveData;
// 与 HBY100-J 页 bleValueNotify 共用 notify避免 parseBleData 执行两次重复日志、FB05 双次 resolve、onNotify 双次
const parsed = parseBleData(receive.bytes, { skipSideEffects: true });
const parsed = parseBleData(receive.bytes, {
skipSideEffects: true
});
if (!parsed) return receiveData;
if (parsed.longitude !== undefined) receiveData.longitude = parsed.longitude;
if (parsed.latitude !== undefined) receiveData.latitude = parsed.latitude;
if (parsed.batteryPercentage !== undefined) receiveData.batteryPercentage = parsed.batteryPercentage;
if (parsed.batteryRemainingTime !== undefined) receiveData.batteryRemainingTime = parsed.batteryRemainingTime;
if (parsed.batteryRemainingTime !== undefined) receiveData.batteryRemainingTime = parsed
.batteryRemainingTime;
} catch (e) {
console.log('[100J] BleReceive 解析失败', e);
}
return receiveData;
}
Receive_6170(receive, f, path, recArr) {
Receive_6170(receive, f, path, recArr) {
let receiveData = {};
try {
@ -721,20 +750,19 @@ Receive_6170(receive, f, path, recArr) {
.replace(/\//g, "").toLowerCase();
});
if (!recCnt) {
if (receiveData.sta_PowerPercent <= 20) {
uni.showModal({
title: "提示",
content: "设备'" + f.device.deviceName + "'电量低",
showCancel: false
let deviceState = receiveData.state;
if (deviceState && deviceState instanceof Array) {
if (deviceState[0] == 12 && deviceState[3] <= 20 && deviceState[4] == 0) {
if (this.ref) {
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
}
}
} catch (error) {
receiveData = {};
@ -758,18 +786,21 @@ Receive_6170(receive, f, path, recArr) {
.replace(/\//g, "").toLowerCase();
});
if (!recCnt) {
if (receiveData.sta_PowerPercent <= 20) {
uni.showModal({
title: "提示",
content: "设备'" + f.device.deviceName + "'电量低",
showCancel: false
});
let msgs = [];
if (receiveData.sta_PowerPercent <= 20 && receiveData.sta_charge == 0) {
msgs.push("设备'" + f.device.deviceName + "'电量低");
}
if (receiveData.sta_Intrusion === 1) {
uni.showModal({
title: "提示",
content: "闯入报警中",
showCancel: false
msgs.push("设备'" + f.device.deviceName + "'闯入报警中");
}
if (this.ref && msg.length>0) {
msgs = msgs.join(",");
MsgError(msgs, '', this.ref, () => {
MsgClear(this.ref);
});
}
@ -814,9 +845,9 @@ Receive_6170(receive, f, path, recArr) {
let dev = arr.find(v => {
if (v.linkId == f.linkId) {
let vl = v.linkEqs.find(cvl => {
if(cvl.linkMac === receiveData.sta_tomac){
v.read=false;
cvl.linkTime=time;
if (cvl.linkMac === receiveData.sta_tomac) {
v.read = false;
cvl.linkTime = time;
return true;
}
return false;
@ -911,7 +942,7 @@ Receive_6170(receive, f, path, recArr) {
}
Receive_6075(receive,f,path,recArr){
Receive_6075(receive, f, path, recArr) {
let receiveData = {};
try {
@ -922,17 +953,15 @@ Receive_6170(receive, f, path, recArr) {
return v.key.replace(/\//g, "").toLowerCase() == f.device.detailPageUrl
.replace(/\//g, "").toLowerCase();
});
if (!recCnt) {
// if (receiveData.sta_PowerPercent <= 20) {
// uni.showModal({
// title: "提示",
// content: "设备'" + f.device.deviceName + "'电量低",
// showCancel: false
// });
// }
if (!recCnt && this.ref) {
if (receiveData.sta_PowerPercent <= 20 && (receiveData.sta_system != 3 || receiveData.sta_system !=1)) {
MsgError("设备'" + f.device.deviceName + "'电量低", '', this.ref, () => {
MsgClear(this.ref);
});
}
}
} catch (error) {
receiveData = {};
@ -947,10 +976,12 @@ Receive_6170(receive, f, path, recArr) {
let receiveInstance = null;
export default {
getBleReceive: function(found, receive) {
getBleReceive: function(_ref) {
console.log("_ref=",_ref);
if (!receiveInstance) {
receiveInstance = new BleReceive();
receiveInstance = new BleReceive(_ref);
}else{
console.log("使用现有实例receiveInstance")
}
return receiveInstance;
}