fix: 优化连接设备时直接传递mac地址进行连接,避开不必要的搜索

This commit is contained in:
liyi 2025-09-19 11:28:52 +08:00
parent 9f79c6c712
commit f1285cb2e6
2 changed files with 27 additions and 22 deletions

View File

@ -66,6 +66,9 @@ export async function selectLock(params) {
*/
export async function openDoor(params) {
const {type} = params
// ⏱️ 记录开始时间
const startTime = Date.now();
log.info({
...new Result(
Result.Success.code,
@ -102,7 +105,8 @@ export async function openDoor(params) {
// 确认设备连接正常
if (!params.connected) {
const searchResult = await searchAndConnectDevice(this.lockInfo.bluetooth.bluetoothDeviceName)
const searchResult = await searchAndConnectDevice(this.lockInfo.bluetooth.bluetoothDeviceName, true, this.lockInfo.bluetooth.bluetoothDeviceId)
log.info({
...new Result(
searchResult.code,
@ -266,8 +270,16 @@ export async function openDoor(params) {
),
name: 'openDoor'
})
// 获取最终结果
const finalResult = this.getWriteResult(this.openDoor, params);
return this.getWriteResult(this.openDoor, params)
// ⏱️ 计算耗时
const endTime = Date.now();
const duration = endTime - startTime;
console.log(`开门耗时:${duration}`)
return finalResult;
}
/**

View File

@ -8,13 +8,18 @@ import {Result} from '../constant'
*/
// 查找设备并连接
export function searchAndConnectDevice(name, reset = true) {
export function searchAndConnectDevice(name, reset = true, deviceId = null) {
// 循环查找设备
let timer
// 超时计时器
let timeoutTimer
return new Promise(async resolve => {
// 如果提供了deviceId则直接连接
if (deviceId) {
const connectResult = await createBLEConnection(deviceId)
resolve(connectResult)
}
const result = await startBluetoothDevicesDiscovery()
if (result.code === Result.Success.code) {
let searchFlag = false
@ -189,28 +194,16 @@ export function createBLEConnection(deviceId, reconnectNumber = 0) {
res.data.serviceId,
res.data.notifyCharacteristicId
)
// 使用同步方法获取系统信息
const systemInfo = uni.getSystemInfoSync();
if (systemInfo.platform === 'android') {
// 如果是Android机型则设置BLE MTU
uni.setBLEMTU({
deviceId: deviceId,
mtu: 512,
fail: res => {
// console.log('mtu fail', res);
},
success: res => {
// console.log('mtu success', res);
}
});
} else {
// 对于非Android设备可以在这里添加其他逻辑或者直接忽略
// console.log('当前设备不是Android跳过设置BLE MTU');
}
resolve(res)
},
async fail(err) {
if (err.errno === 1500101) {
// 未初始化,初始化成功后在重连
const result = await openBluetoothAdapter()
if (result.code === Result.Success.code) {
resolve(await createBLEConnection(deviceId, reconnectNumber + 1))
}
}
if (err.errno === 1509007) {
const res = await getBLEDeviceServicesAndCharacteristics(deviceId)
await notifyBLECharacteristicValueChange(