解决睡眠不准的问题

main
sjchen 5 months ago
parent 9355d9743a
commit 2a43fb43dc

@ -71,11 +71,12 @@ Page({
getBluetoothDevices() {
wx.onBluetoothDeviceFound((res) => {
// 过滤出名称以 "GJ-SH-01" 开头的设备
const targetDevices = res.devices.filter(device => device.name && device.name.startsWith("J2203"));
const targetDevices = res.devices.filter(device => device.name && (device.name.startsWith("J2203") || device.name.startsWith("小柏智能手表")));
// 遍历并连接符合条件的设备
targetDevices.forEach(device => {
console.log("找到符合规则的蓝牙设备:", device);
console.log("device.advertisData:",new Uint8Array(device.advertisData))
const hexStr = this.uint8ArrayToMac(new Uint8Array(device.advertisData))
console.log("advertisData: ",hexStr)
// 连接指定设备
@ -232,7 +233,7 @@ Page({
// 需要调用下一个指令(血氧)
this.sendHealthCommand(0x66)
}
// console.log("心率数据:",heartRateList);
console.log("心率数据:",heartRateList);
// console.log("呼吸率数据:",respList);
// 调用后台接口 todo ....
@ -299,7 +300,7 @@ Page({
let list = this.data.sleepList;
if(list.length > 0){
let arr = CommonUtil.assembleSleepData(list);
arr.forEach(item =>{
arr.forEach((item,index) =>{
// 排序算法
item.sleepList.sort((a, b) => {
// 先比较 yyyyMMdd
@ -309,12 +310,15 @@ Page({
// 再比较 minute
return a.minute - b.minute;
});
item.sleepList[index].minute = item.sleepList[index].minute -1;
item.sleepList[index].status = 1
})
console.log("接口需要的睡眠数据:",arr);
// // 更新缓存
// HealthDataCache.updateSleepData(list[0].time);
// 更新缓存
HealthDataCache.updateSleepData(list[0].date);
// 调用接口传睡眠后,清空数据
this.setData({
@ -325,20 +329,19 @@ Page({
let sleepList = ParseDataPacket.parseSleepList(dataView,0);
// 排序minute 越大排前面
sleepList.sort((a, b) => {
return Number(b.minute) - Number(a.minute); // b.minute > a.minute 排前面
return Number(a.minute) - Number(b.minute); // b.minute > a.minute 排前面
});
console.log("排序后数据:",sleepList)
// 获取当前已存在的 sleepList如果有
let currentSleepList = this.data.sleepList || [];
// 将新的 sleepList 追加到现有的 sleepList 中
let updatedSleepList = currentSleepList.concat(sleepList);
// 将 sleepList 放在前面currentSleepList 放在后面,实现新的数据插入在前
let updatedSleepList = sleepList.concat(currentSleepList);;
// 更新 data 中的 sleepList
this.setData({
sleepList: updatedSleepList
});
console.log("data数据:",this.data.sleepList)
}
break;
default:
@ -364,7 +367,11 @@ Page({
// const batteryPacket = DataPacket.generateBatteryCheckPacket();
// SendCommandUtil.sendPackage(this.data.deviceId,batteryPacket);
// const HRPacket = DataPacket.generateReadHRDataPacket();
// SendCommandUtil.sendPackage(this.data.deviceId,HRPacket);
this.sendHealthCommand(0x53)
},
getStep(){
@ -378,6 +385,31 @@ Page({
if(cmd == null){
cmd = 0x55;
}
if(cmd == 0x55){
// 获取当前时间
let currentTime = Math.floor(new Date().getTime() / 1000);
// 如果是第一次调用则不判断时间如果是第二次调用要判断本次调用与上次是否间隔18秒因手表机制问题不能频繁发送指令给手表端
console.log(this.data.initTime,this.data.initIndex)
if(this.data.initIndex === 0){
this.setData({
initIndex: this.data.initIndex + 1,
initTime: currentTime
})
} else {
// 初始时间
let initTime = this.data.initTime
let timeDifference = currentTime - initTime;
if(this.data.initIndex > 0 && timeDifference > 20){
this.setData({
initIndex: this.data.initIndex + 1,
initTime: currentTime
})
} else {
return;
}
}
}
let packet = DataPacket.generateReadDataPacket(cmd);
console.log("发送指令到设备端>>>:", this.uint8ArrayToHex(packet));
SendCommandUtil.sendPackage(this.data.deviceId, packet);

@ -8,6 +8,6 @@
<button bindtap="wearManageGetting">佩戴管理获取</button>
<button bindtap="downWeather">下发天气</button>
<button bindtap="removeCache">清除时间戳缓存</button>
<button bindtap="removeHistoryData">清空历史数据</button>
<!-- <button bindtap="removeHistoryData">清空历史数据</button> -->
</view>

@ -190,29 +190,32 @@ const CommonUtil = {
let firstSleepData = sleepArray[0];
resItem.date = firstSleepData.yyyyMMdd;
resItem.sleepList.push(firstSleepData); // 将第一个数据放入到 `sleepList`
sleepArray.forEach(item => {
// 判断是否是同一天的数据
let isSameDay = this.timeComparison(dateObj.yyyyMMdd, item.yyyyMMdd, item.minute);
// 如果状态发生变化,且日期不同,就表示开始新的睡眠数据
if (item.status !== firstSleepData.status) {
if (isSameDay) {
resItem.sleepList.push(item); // 如果是同一天,继续添加到当天的睡眠数据
} else {
res.push(resItem); // 否则,将当天的数据推入结果数组
resItem = { // 新的一天开始
date: item.yyyyMMdd,
sleepList: [item] // 将当前项作为新的睡眠数据开始
};
dateObj = item; // 更新 `dateObj`,用于比对后续数据
}
sleepArray.forEach((item,index) => {
// 判断是否是同一天的数据
let isSameDay = this.timeComparison(dateObj.yyyyMMdd, item.yyyyMMdd, item.minute);
// 如果状态发生变化,且日期不同,就表示开始新的睡眠数据
if (item.status !== firstSleepData.status) {
if (isSameDay) {
resItem.sleepList.push(item); // 如果是同一天,继续添加到当天的睡眠数据
} else {
// 取出数据
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[index - 1];
res.push(resItem); // 否则,将当天的数据推入结果数组
resItem = { // 新的一天开始
date: item.yyyyMMdd,
sleepList: [item] // 将当前项作为新的睡眠数据开始
};
dateObj = item; // 更新 `dateObj`,用于比对后续数据
}
firstSleepData = item; // 更新当前比对的睡眠数据
});
}
firstSleepData = item; // 更新当前比对的睡眠数据
});
// 最后一次的睡眠数据也需要被加入到 `res`
if (resItem.sleepList.length > 0) {
res.push(resItem);
resItem.sleepList[resItem.sleepList.length - 1] = sleepArray[sleepArray.length - 1];
res.push(resItem);
}
return res; // 返回按天拆分后的睡眠数据

@ -196,6 +196,23 @@ const DataPacket = {
return packet;
},
// 获取心率数据
generateReadHRDataPacket() {
// 创建 Uint8Array 数据包
const packet = new Uint8Array(16);
// 填充命令数据包
packet[0] = 0x55; // 命令字节
packet[1] = 0x00; // 读取记步总数据
packet.fill(0x00, 2, 15); // 填充其他字节为0
// 计算并设置 CRC 校验字节
const crc = calculateCRC(packet.subarray(0, 15));
packet[15] = crc;
return packet;
},
// 获取睡眠数据
generateReadSleepDataPacket() {
const packet = new Uint8Array(16);

@ -68,7 +68,7 @@ const HealthDataCache = {
}
},
// 更新睡眠数据
// 更新睡眠数据 ,睡眠计算可能不一样因为存的是date
updateSleepData(newDate) {
let lastTime = this.getLastTimeField('sleepLastTime');
if(newDate > lastTime){

Loading…
Cancel
Save