@jiabaida/tools 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/cjs/core/BleApiManager.js +1 -1
  2. package/dist/cjs/core/BleCmdAnalysis/BaseParamProtocol.js +1 -1
  3. package/dist/cjs/core/BleCmdAnalysis/BleCmdAnalysis.js +1 -1
  4. package/dist/cjs/core/BleCmdAnalysis/BleCmdDD.js +1 -1
  5. package/dist/cjs/core/BleCmdAnalysis/BleCmdDDA4.js +1 -1
  6. package/dist/cjs/core/BleCmdAnalysis/BleCmdFFAA.js +1 -1
  7. package/dist/cjs/core/BleCmdAnalysis/readAndSetParam.js +1 -1
  8. package/dist/cjs/core/BleDataProcess.js +1 -1
  9. package/dist/cjs/core/OtaUpgrade.js +1 -1
  10. package/dist/cjs/core/mqttServer.js +1 -1
  11. package/dist/cjs/core/tcpServer.js +1 -1
  12. package/dist/cjs/index.js +1 -1
  13. package/dist/esm/core/BleApiManager.js +1 -1
  14. package/dist/esm/core/BleCmdAnalysis/BaseParamProtocol.js +1 -1
  15. package/dist/esm/core/BleCmdAnalysis/BleCmdAnalysis.js +1 -1
  16. package/dist/esm/core/BleCmdAnalysis/BleCmdDD.js +1 -1
  17. package/dist/esm/core/BleCmdAnalysis/BleCmdDDA4.js +1 -1
  18. package/dist/esm/core/BleCmdAnalysis/BleCmdFFAA.js +1 -1
  19. package/dist/esm/core/BleCmdAnalysis/BleCmdHVES.js +1 -1
  20. package/dist/esm/core/BleCmdAnalysis/readAndSetParam.js +1 -1
  21. package/dist/esm/core/BleDataProcess.js +1 -1
  22. package/dist/esm/core/OtaUpgrade.js +1 -1
  23. package/dist/esm/core/mqttServer.js +1 -1
  24. package/dist/esm/core/tcpServer.js +1 -1
  25. package/dist/esm/index.js +1 -1
  26. package/package.json +1 -1
  27. package/src/core/BleApiManager.js +33 -15
  28. package/src/core/BleCmdAnalysis/BaseParamProtocol.js +59 -34
  29. package/src/core/BleCmdAnalysis/BleCmdAnalysis.js +58 -2
  30. package/src/core/BleCmdAnalysis/BleCmdDD.js +16 -6
  31. package/src/core/BleCmdAnalysis/BleCmdDDA4.js +154 -227
  32. package/src/core/BleCmdAnalysis/BleCmdFFAA.js +1 -0
  33. package/src/core/BleCmdAnalysis/readAndSetParam.js +45 -17
  34. package/src/core/BleDataProcess.js +15 -11
  35. package/src/core/OtaUpgrade.js +356 -356
  36. package/src/core/mqttServer.js +58 -7
  37. package/src/core/tcpServer.js +76 -38
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var vue=require("vue"),BleDataProcess=require("./BleDataProcess.js"),commonfun=require("./commonfun.js");const serviceId="0000FF00-0000-1000-8000-00805F9B34FB",{isAndroid:isAndroid,isIOS:isIOS}=commonfun.getOS(),bluetoothAdapterState=vue.ref({available:!1,discovering:!1});exports.isInit=!1;const enhanceDevice=device=>{const adv=device?.advertisData;if(!adv)return null;if(adv){const advHex=Array.prototype.map.call(new Uint8Array(adv),o=>("00"+o.toString(16)).slice(-2)).join("").toUpperCase();let macAddr=advHex.slice(0,12).toUpperCase(),arr=macAddr.match(/(.{2})/g);const flag=macAddr.slice(-4);"C1A4"!=flag&&"C2A5"!=flag&&"C2A8"!=flag||arr.reverse(),macAddr=arr.join(":"),device.hasFound=!0;const moduleType=advHex.slice(12,16),socHex=advHex.slice(16,18),soc=socHex||0==socHex?BleDataProcess.hexToDecimal(socHex):"",productType=advHex.slice(18,20);let protocolVersion=advHex.slice(20,22);if(protocolVersion){const v=BleDataProcess.hexToDecimal(protocolVersion);macAddr.startsWith("A5:C2")&&v<=35&&(protocolVersion="01")}const appkeyStatus=advHex.slice(22,24),tempVoltage=advHex.slice(24,26),voltage=tempVoltage||0==tempVoltage?BleDataProcess.hexToDecimal(tempVoltage):"",tempCurrent=advHex.slice(26,28),current=tempCurrent||0==tempCurrent?BleDataProcess.hexToDecimal(tempCurrent):"",broadcastLen=advHex.length/2,isNewAppKey=advHex.length>=24;device={...device,macAddr:macAddr,moduleType:moduleType,soc:soc,productType:productType,advHex:advHex,protocolVersion:protocolVersion,appkeyStatus:appkeyStatus,broadcastLen:broadcastLen,isNewAppKey:isNewAppKey,voltage:voltage,current:current}}return device},checkBluetoothStatus=async(successCallback=()=>{})=>new Promise((resolve,reject)=>{uni.openBluetoothAdapter({success:async res=>{successCallback&&successCallback(res),resolve(res)},fail:err=>{console.log("openBluetoothAdapter fail4-----",err),err&&3==err?.errno&&reject({code:105,message:"请授权微信位置信息和蓝牙权限"}),err&&103==err?.errno&&reject({code:106,message:"请授权蓝牙和位置权限,并重启小程序"}),reject({code:102,message:"当前手机蓝牙不可用,请检查手机蓝牙状态"})}})}),checkLocationStatus=async(successCallback=()=>{})=>{const timeoutPromise=new Promise((resolve,reject)=>{setTimeout(()=>{reject({code:101,message:"网络信号差或连接异常,请检查网络情况"})},1e4)}),locationPromise=new Promise((resolve,reject)=>{uni.getLocation({type:"wgs84",success:res=>{console.log("位置信息-----------",res),resolve(res)},fail:err=>{console.log("位置信息err",err),err&&103==err?.errno&&reject({code:103,message:"请授权小程序位置信息权限, 并重启小程序。"}),err&&2==err?.errCode&&reject({code:101,message:"网络信号差或连接异常,请检查网络情况"}),reject({code:104,message:"请授权微信位置信息权限, 并重启小程序。"})}})});return Promise.race([locationPromise,timeoutPromise]).then(async res=>await checkBluetoothStatus(successCallback))},getBluetoothPermission=async(successCallback=()=>{})=>{try{return isAndroid?await checkLocationStatus(successCallback):await checkBluetoothStatus(successCallback)}catch(error){throw console.error("初始化蓝牙失败:",error),error}},startDevicesDiscovery=async(allowDuplicatesKey=!0)=>new Promise((resolve,reject)=>{bluetoothAdapterState.value.discovering?reject(new Error("蓝牙设备搜索已在进行中")):uni.startBluetoothDevicesDiscovery({services:[serviceId],allowDuplicatesKey:allowDuplicatesKey,success:async res=>{console.log("广播设备 success",res),resolve(res)},fail:err=>{console.log("广播设备 fail",err),reject(err)}})}),onBluetoothDeviceFound=async()=>{uni.onBluetoothDeviceFound(characteristic=>{console.log("setBluetoothDeviceFound",characteristic);const device=enhanceDevice(characteristic.devices[0]);device&&commonfun.eventBus.emit("setBluetoothDeviceFound",device)})},onFoundDevice=callback=>{commonfun.eventBus.on("setBluetoothDeviceFound",callback)},onBluetoothAdapterStateChange=async()=>{uni.onBluetoothAdapterStateChange(res=>{console.log("onBluetoothAdapterStateChange监听蓝牙适配器变化",res),bluetoothAdapterState.value=res})},onBLECharacteristicValueChange=async()=>{uni.onBLECharacteristicValueChange(characteristic=>{const decimalArr=BleDataProcess.ab2decimalArr(characteristic.value);console.warn("decimalArr: 监听到的回复-------------------",decimalArr),commonfun.eventBus.emit("setBleChangedCharacteristicValue",characteristic)})},onBLEConnectionStateChange=async()=>{uni.onBLEConnectionStateChange(characteristic=>{console.log("onBLEConnectionStateChange",characteristic),commonfun.eventBus.emit("setBleChangedConnectionState",characteristic)})},createBLEConnection=async(deviceId,timeout=1e4)=>new Promise((resolve,reject)=>{console.log(deviceId,"点击的设备信息"),uni.createBLEConnection({deviceId:deviceId,timeout:timeout,success:res=>{console.log(res,"连接成功"),resolve(!0)},fail:err=>{console.log(err,"Connection"),-1==(err.code||err.errCode)?resolve(!0):reject(err)}})}),withRetry=async(asyncOperation,maxRetries=20,retryInterval=100,type)=>new Promise((resolve,reject)=>{let retryCount=0;const attempt=async()=>{try{const result=await asyncOperation();resolve(result)}catch(error){if(retryCount>=maxRetries)return void reject(new Error(`${type}失败,${error.message} (已重试${maxRetries}次)`));retryCount++,console.warn(`${type}失败,第${retryCount}次重试:`,error.message),setTimeout(attempt,retryInterval)}};attempt()}),getBLEDeviceServices=deviceId=>withRetry(async()=>{const res=await new Promise((resolve,reject)=>{uni.getBLEDeviceServices({deviceId:deviceId,success:resolve,fail:reject})});if(console.log("获取蓝牙服务成功:",res),0===res.services.length)throw new Error("未找到蓝牙服务");return await getBLEDeviceCharacteristics(deviceId),res.services},20,100,"获取蓝牙服务"),getBLEDeviceCharacteristics=async deviceId=>withRetry(async()=>{const res=await new Promise((resolve,reject)=>{uni.getBLEDeviceCharacteristics({deviceId:deviceId,serviceId:serviceId,success:resolve,fail:reject})});return console.log("获取特征值成功:",res),res.characteristics},20,100,"获取蓝牙特征值"),notify=async deviceId=>new Promise((resolve,reject)=>{uni.notifyBLECharacteristicValueChange({deviceId:deviceId,serviceId:serviceId,characteristicId:"0000FF01-0000-1000-8000-00805F9B34FB",state:!0,success:res=>{console.log("订阅===========",res),resolve(res)},fail:reject})}),foundScanDevice=async(result,connectFn)=>{const deviceList=[];await startDevicesDiscovery(isIOS),onFoundDevice(device=>{deviceList.push(device);const findDevice=device.macAddr===result||device.name===result;findDevice?(scanTimeout&&(clearTimeout(scanTimeout),scanTimeout=null),uni.stopBluetoothDevicesDiscovery(),connectFn(findDevice)):console.log("未找到设备,继续搜索中...")});let scanTimeout=setTimeout(async()=>{try{console.log("stopBluetoothDevicesDiscovery",deviceList),uni.stopBluetoothDevicesDiscovery();const findDevice=deviceList.find(device=>device.macAddr===result||device.name===result);connectFn(findDevice)}finally{}},5e3)};exports.checkBluetoothStatus=checkBluetoothStatus,exports.checkLocationStatus=checkLocationStatus,exports.connectAsync=async(deviceId,timeout=1e4)=>new Promise(async(resolve,reject)=>{try{await createBLEConnection(deviceId,timeout),await getBLEDeviceServices(deviceId),await notify(deviceId),resolve(!0)}catch(error){console.log("error: ",error),reject(error)}}),exports.createBLEConnection=createBLEConnection,exports.disConnect=deviceId=>new Promise((resolve,reject)=>{uni.closeBLEConnection({deviceId:deviceId,success:res=>{resolve(res),console.log(res,"断开连接成功")},fail:err=>{reject(err),console.log(err,"err 断开连接")}})}),exports.enhanceDevice=enhanceDevice,exports.foundScanDevice=foundScanDevice,exports.getBLEDeviceCharacteristics=getBLEDeviceCharacteristics,exports.getBLEDeviceServices=getBLEDeviceServices,exports.getBluetoothAdapterState=async()=>new Promise((resolve,reject)=>{uni.getBluetoothAdapterState({success:res=>{console.log("getBluetoothAdapterState success",res),resolve(res)},fail:err=>{console.log("getBluetoothAdapterState fail",err),reject(err)}})}),exports.getBluetoothPermission=getBluetoothPermission,exports.initBle=async()=>await getBluetoothPermission(()=>{console.log("初始化蓝牙成功initBluetoothSuccessCb1");try{if(exports.isInit)return;onBluetoothDeviceFound(),onBLECharacteristicValueChange(),onBLEConnectionStateChange(),onBluetoothAdapterStateChange(),exports.isInit=!0}catch(error){throw error}}),exports.notify=notify,exports.onBLECharacteristicValueChange=onBLECharacteristicValueChange,exports.onBLEConnectionStateChange=onBLEConnectionStateChange,exports.onBleChangedConnectionState=callback=>{commonfun.eventBus.on("setBleChangedConnectionState",callback)},exports.onBluetoothAdapterStateChange=onBluetoothAdapterStateChange,exports.onBluetoothDeviceFound=onBluetoothDeviceFound,exports.onFoundDevice=onFoundDevice,exports.scanHandle=(historyConnectedList=[],connectFn=device=>{},failScanFn=err=>{})=>{uni.scanCode({scanType:["barCode","qrCode"],success:async({result:result})=>{console.log("扫描内容: "+result);let searchKey=result;try{const formatMacAddress=mac=>mac.replace(/(.{2})/g,"$1:").slice(0,-1).toUpperCase();let isMac=!1;result.includes("?qrCodeInfo=")?(searchKey=result.split("?qrCodeInfo=")[1],searchKey.includes(":")?(searchKey=searchKey.slice(-17).toUpperCase(),isMac=!0):(searchKey=searchKey.slice(-12),searchKey=formatMacAddress(searchKey),isMac=!0)):17===result.length&&result.includes(":")?(searchKey=result.toUpperCase(),isMac=!0):12===result.length&&(searchKey=formatMacAddress(result),isMac=!0);const matchedHistoryDevice=historyConnectedList.find(item=>item.macAddr==searchKey);if(matchedHistoryDevice)return void connectFn(matchedHistoryDevice);isAndroid&&isMac?connectFn({deviceId:searchKey,macAddr:searchKey,name:searchKey}):foundScanDevice(searchKey,connectFn)}catch(error){console.log(error)}},complete:err=>{},fail:err=>{console.log("scanCode err",err),failScanFn(err)}})},exports.startDevicesDiscovery=startDevicesDiscovery,exports.stopBluetoothDevicesDiscovery=async()=>(bluetoothAdapterState.value={available:bluetoothAdapterState.value.available,discovering:!1},new Promise((resolve,reject)=>{uni.stopBluetoothDevicesDiscovery({success:res=>{console.log("停止广播设备 success",res),resolve(res)},fail:err=>{console.log("停止广播设备 fail",err),reject(err)},complete:res=>{console.log("停止广播设备 取消订阅"),commonfun.eventBus.off("setBluetoothDeviceFound")}})}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var vue=require("vue"),BleDataProcess=require("./BleDataProcess.js"),commonfun=require("./commonfun.js"),tcpServer=require("./tcpServer.js"),mqttServer=require("./mqttServer.js");const serviceId="0000FF00-0000-1000-8000-00805F9B34FB",{isAndroid:isAndroid,isIOS:isIOS}=commonfun.getOS(),bluetoothAdapterState=vue.ref({available:!1,discovering:!1});exports.isInit=!1;const enhanceDevice=device=>{const adv=device?.advertisData;if(!adv)return null;if(adv){const advHex=Array.prototype.map.call(new Uint8Array(adv),o=>("00"+o.toString(16)).slice(-2)).join("").toUpperCase();let macAddr=advHex.slice(0,12).toUpperCase(),arr=macAddr.match(/(.{2})/g);const flag=macAddr.slice(-4);"C1A4"!=flag&&"C2A5"!=flag&&"C2A8"!=flag||arr.reverse(),macAddr=arr.join(":"),device.hasFound=!0;const moduleType=advHex.slice(12,16),socHex=advHex.slice(16,18),soc=socHex||0==socHex?BleDataProcess.hexToDecimal(socHex):"",productType=advHex.slice(18,20);let protocolVersion=advHex.slice(20,22);if(protocolVersion){const v=BleDataProcess.hexToDecimal(protocolVersion);macAddr.startsWith("A5:C2")&&v<=35&&(protocolVersion="01")}const appkeyStatus=advHex.slice(22,24),tempVoltage=advHex.slice(24,26),voltage=tempVoltage||0==tempVoltage?BleDataProcess.hexToDecimal(tempVoltage):"",tempCurrent=advHex.slice(26,28),current=tempCurrent||0==tempCurrent?BleDataProcess.hexToDecimal(tempCurrent):"",broadcastLen=advHex.length/2,isNewAppKey=advHex.length>=24;device={...device,macAddr:macAddr,moduleType:moduleType,soc:soc,productType:productType,advHex:advHex,protocolVersion:protocolVersion,appkeyStatus:appkeyStatus,broadcastLen:broadcastLen,isNewAppKey:isNewAppKey,voltage:voltage,current:current}}return device},checkBluetoothStatus=async(successCallback=()=>{})=>new Promise((resolve,reject)=>{uni.openBluetoothAdapter({success:async res=>{successCallback&&successCallback(res),resolve(res)},fail:err=>{console.log("openBluetoothAdapter fail4-----",err),err&&3==err?.errno&&reject({code:105,message:"请授权微信位置信息和蓝牙权限"}),err&&103==err?.errno&&reject({code:106,message:"请授权蓝牙和位置权限,并重启小程序"}),reject({code:102,message:"当前手机蓝牙不可用,请检查手机蓝牙状态"})}})}),checkLocationStatus=async(successCallback=()=>{})=>{const timeoutPromise=new Promise((resolve,reject)=>{setTimeout(()=>{reject({code:101,message:"网络信号差或连接异常,请检查网络情况"})},1e4)}),locationPromise=new Promise((resolve,reject)=>{uni.getLocation({type:"wgs84",success:res=>{console.log("位置信息-----------",res),resolve(res)},fail:err=>{console.log("位置信息err",err),err&&103==err?.errno&&reject({code:103,message:"请授权小程序位置信息权限, 并重启小程序。"}),err&&2==err?.errCode&&reject({code:101,message:"网络信号差或连接异常,请检查网络情况"}),reject({code:104,message:"请授权微信位置信息权限, 并重启小程序。"})}})});return Promise.race([locationPromise,timeoutPromise]).then(async res=>await checkBluetoothStatus(successCallback))},getBluetoothPermission=async(successCallback=()=>{})=>{try{return isAndroid?await checkLocationStatus(successCallback):await checkBluetoothStatus(successCallback)}catch(error){throw console.error("初始化蓝牙失败:",error),error}},startDevicesDiscovery=async(allowDuplicatesKey=!0)=>new Promise((resolve,reject)=>{bluetoothAdapterState.value.discovering?reject(new Error("蓝牙设备搜索已在进行中")):uni.startBluetoothDevicesDiscovery({services:[serviceId],allowDuplicatesKey:allowDuplicatesKey,success:async res=>{console.log("广播设备 success",res),resolve(res)},fail:err=>{console.log("广播设备 fail",err),reject(err)}})}),onBluetoothDeviceFound=async()=>{uni.onBluetoothDeviceFound(characteristic=>{console.log("setBluetoothDeviceFound",characteristic);const device=enhanceDevice(characteristic.devices[0]);device&&commonfun.eventBus.emit("setBluetoothDeviceFound",device)})},onFoundDevice=callback=>{commonfun.eventBus.on("setBluetoothDeviceFound",callback)},onBluetoothAdapterStateChange=async()=>{uni.onBluetoothAdapterStateChange(res=>{console.log("onBluetoothAdapterStateChange监听蓝牙适配器变化",res),bluetoothAdapterState.value=res})},onBLECharacteristicValueChange=async()=>{uni.onBLECharacteristicValueChange(characteristic=>{const decimalArr=BleDataProcess.ab2decimalArr(characteristic.value);console.warn("decimalArr: 监听到的回复-------------------",decimalArr),commonfun.eventBus.emit("setBleChangedCharacteristicValue",characteristic)})},onBLEConnectionStateChange=async()=>{uni.onBLEConnectionStateChange(characteristic=>{console.log("onBLEConnectionStateChange",characteristic),commonfun.eventBus.emit("setBleChangedConnectionState",characteristic),characteristic.connected||(mqttServer.mqttServer.closeMqttByDeviceId(characteristic.deviceId),tcpServer.tcpServer.closeTcpSocket(characteristic.deviceId))})},createBLEConnection=async(deviceId,timeout=1e4)=>new Promise((resolve,reject)=>{console.log(deviceId,"点击的设备信息"),uni.createBLEConnection({deviceId:deviceId,timeout:timeout,success:res=>{console.log(res,"连接成功"),resolve(!0)},fail:err=>{console.log(err,"Connection"),-1==(err.code||err.errCode)?resolve(!0):reject(err)}})}),withRetry=async(asyncOperation,maxRetries=20,retryInterval=100,type)=>new Promise((resolve,reject)=>{let retryCount=0;const attempt=async()=>{try{const result=await asyncOperation();resolve(result)}catch(error){if(retryCount>=maxRetries)return void reject(new Error(`${type}失败,${error.message} (已重试${maxRetries}次)`));retryCount++,console.warn(`${type}失败,第${retryCount}次重试:`,error.message),setTimeout(attempt,retryInterval)}};attempt()}),getBLEDeviceServices=deviceId=>withRetry(async()=>{const res=await new Promise((resolve,reject)=>{uni.getBLEDeviceServices({deviceId:deviceId,success:resolve,fail:reject})});if(console.log("获取蓝牙服务成功:",res),0===res.services.length)throw new Error("未找到蓝牙服务");return await getBLEDeviceCharacteristics(deviceId),res.services},10,300,"获取蓝牙服务"),getBLEDeviceCharacteristics=async deviceId=>withRetry(async()=>{const res=await new Promise((resolve,reject)=>{uni.getBLEDeviceCharacteristics({deviceId:deviceId,serviceId:serviceId,success:resolve,fail:reject})});return console.log("获取特征值成功:",res),res.characteristics},10,300,"获取蓝牙特征值"),notify=async deviceId=>new Promise((resolve,reject)=>{uni.notifyBLECharacteristicValueChange({deviceId:deviceId,serviceId:serviceId,characteristicId:"0000FF01-0000-1000-8000-00805F9B34FB",state:!0,success:res=>{console.log("订阅===========",res),resolve(res)},fail:reject})}),foundScanDevice=async(result,connectFn)=>{const deviceList=[];await startDevicesDiscovery(isIOS),onFoundDevice(device=>{deviceList.push(device);const findDevice=device.macAddr===result||device.name===result;findDevice?(scanTimeout&&(clearTimeout(scanTimeout),scanTimeout=null),uni.stopBluetoothDevicesDiscovery(),connectFn(findDevice)):console.log("未找到设备,继续搜索中...")});let scanTimeout=setTimeout(async()=>{try{console.log("stopBluetoothDevicesDiscovery",deviceList),uni.stopBluetoothDevicesDiscovery();const findDevice=deviceList.find(device=>device.macAddr===result||device.name===result);connectFn(findDevice)}finally{}},5e3)};exports.checkBluetoothStatus=checkBluetoothStatus,exports.checkLocationStatus=checkLocationStatus,exports.connectAsync=async(deviceId,timeout=1e4)=>new Promise(async(resolve,reject)=>{try{await createBLEConnection(deviceId,timeout),await new Promise(resolve=>setTimeout(resolve,800)),await getBLEDeviceServices(deviceId),await notify(deviceId),resolve(!0)}catch(error){console.log("error: ",error),reject(error)}}),exports.createBLEConnection=createBLEConnection,exports.disConnect=deviceId=>new Promise((resolve,reject)=>{uni.closeBLEConnection({deviceId:deviceId,success:res=>{resolve(res),console.log(res,"断开连接成功")},fail:err=>{reject(err),console.log(err,"err 断开连接")}})}),exports.enhanceDevice=enhanceDevice,exports.foundScanDevice=foundScanDevice,exports.getBLEDeviceCharacteristics=getBLEDeviceCharacteristics,exports.getBLEDeviceServices=getBLEDeviceServices,exports.getBluetoothAdapterState=async()=>new Promise((resolve,reject)=>{uni.getBluetoothAdapterState({success:res=>{console.log("getBluetoothAdapterState success",res),resolve(res)},fail:err=>{console.log("getBluetoothAdapterState fail",err),reject(err)}})}),exports.getBluetoothPermission=getBluetoothPermission,exports.initBle=async()=>await getBluetoothPermission(()=>{console.log("初始化蓝牙成功initBluetoothSuccessCb1");try{if(exports.isInit)return;onBluetoothDeviceFound(),onBLECharacteristicValueChange(),onBLEConnectionStateChange(),onBluetoothAdapterStateChange(),exports.isInit=!0}catch(error){throw error}}),exports.notify=notify,exports.onBLECharacteristicValueChange=onBLECharacteristicValueChange,exports.onBLEConnectionStateChange=onBLEConnectionStateChange,exports.onBleChangedConnectionState=callback=>{commonfun.eventBus.on("setBleChangedConnectionState",callback)},exports.onBluetoothAdapterStateChange=onBluetoothAdapterStateChange,exports.onBluetoothDeviceFound=onBluetoothDeviceFound,exports.onFoundDevice=onFoundDevice,exports.scanHandle=(historyConnectedList=[],connectFn=device=>{},failScanFn=err=>{})=>{uni.scanCode({scanType:["barCode","qrCode"],autoZoom:!1,success:async({result:result})=>{console.log("扫描内容: "+result);let searchKey=result;try{const formatMacAddress=mac=>mac.replace(/(.{2})/g,"$1:").slice(0,-1).toUpperCase();let isMac=!1;result.includes("?qrCodeInfo=")?(searchKey=result.split("?qrCodeInfo=")[1],searchKey.includes(":")?(searchKey=searchKey.slice(-17).toUpperCase(),isMac=!0):(searchKey=searchKey.slice(-12),searchKey=formatMacAddress(searchKey),isMac=!0)):17===result.length&&result.includes(":")?(searchKey=result.toUpperCase(),isMac=!0):12===result.length&&(searchKey=formatMacAddress(result),isMac=!0);const matchedHistoryDevice=historyConnectedList.find(item=>item.macAddr==searchKey);if(matchedHistoryDevice)return void connectFn(matchedHistoryDevice);isAndroid&&isMac?connectFn({deviceId:searchKey,macAddr:searchKey,name:searchKey}):foundScanDevice(searchKey,connectFn)}catch(error){console.log(error)}},complete:err=>{},fail:err=>{console.log("scanCode err",err),failScanFn(err)}})},exports.startDevicesDiscovery=startDevicesDiscovery,exports.stopBluetoothDevicesDiscovery=async()=>(bluetoothAdapterState.value={available:bluetoothAdapterState.value.available,discovering:!1},new Promise((resolve,reject)=>{uni.stopBluetoothDevicesDiscovery({success:res=>{console.log("停止广播设备 success",res),resolve(res)},fail:err=>{console.log("停止广播设备 fail",err),reject(err)},complete:res=>{console.log("停止广播设备 取消订阅"),commonfun.eventBus.off("setBluetoothDeviceFound")}})}));
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),baseParamsJson=require("../dataJson/baseParamsJson.js"),BleCmdDD=require("./BleCmdDD.js"),readAndSetParam=require("./readAndSetParam.js");function format(value,n=1,offset=0,scope=0){if(!value)return null;value=value.map(el=>{const hexValue=BleDataProcess.decimalToHex(el);return console.log("el: ------------",hexValue),hexValue});const v=parseInt(value.join(""),16)*n+offset;if(null==scope)return v;const formatted=v.toFixed(scope);return Number(formatted)}function formatTemp(arr){if(!arr)return null;let string="0x"+toHexString(arr),value=parseInt(string,16);return value=(value-2731)/10,Number(value)}function formatBinary(arr){if(!arr)return null;return arr.map(num=>num.toString(2).padStart(8,"0")).join("").split("").map(Number).reverse()}const sendCmdSeq=async(datasInfo,chipType,deviceId,params)=>{let index=0;for(chipType||await BleCmdDD.enterFactory(deviceId);index<params.length;){const item=params[index];try{const basedata=await readAndSetParam.getSysParamCmd(chipType,deviceId,item,!1);datasInfo[item.key]=basedata,index++}catch(error){console.error(`获取参数 ${item.key} 失败:`,error),index++}}chipType||await BleCmdDD.readExistFactory(deviceId)};let crsDivisor=.1;const getBaseInfo=async datas=>{try{console.log("datas: ",datas);const barCode=getCharCodeConnect(datas?.barCode),manufacturer=getCharCodeConnect(datas?.manufacturer),model=getCharCodeConnect(datas?.model),bmsModel=getCharCodeConnect(datas?.bmsModel,!0),producedDate=function(content){if(!content)return null;let arr=content.splice(0,2),string="0x";return arr.forEach(el=>{string+=BleDataProcess.decimalToHex(el)}),console.log(string,"string日期"),`${2e3+(string>>9)}-${string>>5&15}-${31&string}`}(datas?.producedDate);return{barCode:barCode,manufacturer:manufacturer,model:model,bmsModel:bmsModel,producedDate:producedDate,bmsAddr:function(content){if(!content)return null;return console.log(content,"content======"),toHexString(content.splice(0,12))}(datas?.bmsAddr)}}catch(error){console.error("error: ",error)}},getCharCodeConnect=(content,clearZero=!1)=>{if(console.log("content: ---------------",content),!content)return null;const length=content[0];let arr=content.splice(1,length);if(clearZero)for(;0===arr[arr.length-1];)arr.pop();return console.log("arr: -------------------",arr),String.fromCharCode(...arr)};function toHexString(arr){let string="";return arr.forEach(el=>{string+=BleDataProcess.decimalToHex(el)}),string}const getCapInfo=async datas=>{console.log("datas: ",datas);let normCap=null;if(datas.normCap&&datas.normCap.length>=4){console.log("normCap原始数据: ",datas.normCap);const lowBytes=datas.normCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];console.log("normCap lowValue: ",lowValue);const highBytes=datas.normCap.slice(2,4),highValue=highBytes[0]<<8|highBytes[1];console.log("normCap highValue: ",highValue);const totalValue=highValue<<16|lowValue;console.log("normCap totalValue: ",totalValue),normCap=Number((.01*totalValue).toFixed(2)),console.log("normCap最终值: ",normCap)}else if(datas.normCap&&datas.normCap.length>=2){const lowBytes=datas.normCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];normCap=Number((.01*lowValue).toFixed(2))}const cycleCap=format(datas.cycleCap,.01,0,2);let fullCap=null;if(datas.fullCap&&datas.fullCap.length>=4){console.log("fullCap原始数据: ",datas.fullCap);const lowBytes=datas.fullCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];console.log("fullCap lowValue: ",lowValue);const highBytes=datas.fullCap.slice(2,4),highValue=highBytes[0]<<8|highBytes[1];console.log("fullCap highValue: ",highValue);const totalValue=highValue<<16|lowValue;console.log("fullCap totalValue: ",totalValue),fullCap=Number((.01*totalValue).toFixed(2)),console.log("fullCap最终值: ",fullCap)}else if(datas.fullCap&&datas.fullCap.length>=2){const lowBytes=datas.fullCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];fullCap=Number((.01*lowValue).toFixed(2))}return{normCap:normCap,cycleCap:cycleCap,fullCap:fullCap}},getVoltageInfo=async(datas,chipType)=>{console.log("datas: ",datas);const allOvervoltageProtect=format(datas.allOvervoltageProtect,.01,0,3),allOverpressureRecovery=format(datas.allOverpressureRecovery,.01,0,3),allLowvoltageProtect=format(datas.allLowvoltageProtect,.01,0,3),allLowvoltageRecover=format(datas.allLowvoltageRecover,.01,0,3),singleOvervoltageProtect=format(datas.singleOvervoltageProtect,.001,0,3),singleOverpressureRecovery=format(datas.singleOverpressureRecovery,.001,0,3),singleLowvoltageProtect=format(datas.singleLowvoltageProtect,.001,0,3),singleLowvoltageRecover=format(datas.singleLowvoltageRecover,.001,0,3),hardwareOV=format(datas.hardwareOV,.001,0,3),hardwareUV=format(datas.hardwareUV,.001,0,3);let singleOverpressureDelay=null,singleLowvoltageDelayed=null,allLowvoltageDelay=null,allOverpressureDelay=null;return chipType?(singleOverpressureDelay=format(datas.singleOverpressureDelay,1),singleLowvoltageDelayed=format(datas.singleLowvoltageDelayed,1),allLowvoltageDelay=format(datas.allLowvoltageDelay,1),allOverpressureDelay=format(datas.allOverpressureDelay,1)):(singleLowvoltageDelayed=datas.singleLowvoltageDelayed[0],singleOverpressureDelay=datas.singleLowvoltageDelayed[1],allLowvoltageDelay=datas.allLowvoltageDelay[0],allOverpressureDelay=datas.allLowvoltageDelay[1]),{allOvervoltageProtect:allOvervoltageProtect,allOverpressureRecovery:allOverpressureRecovery,allLowvoltageProtect:allLowvoltageProtect,allLowvoltageRecover:allLowvoltageRecover,singleOvervoltageProtect:singleOvervoltageProtect,singleOverpressureRecovery:singleOverpressureRecovery,singleLowvoltageProtect:singleLowvoltageProtect,singleLowvoltageRecover:singleLowvoltageRecover,singleOverpressureDelay:singleOverpressureDelay,singleLowvoltageDelayed:singleLowvoltageDelayed,hardwareOV:hardwareOV,hardwareUV:hardwareUV,allLowvoltageDelay:allLowvoltageDelay,allOverpressureDelay:allOverpressureDelay}},getCurrentInfo=async(datas,chipType)=>{console.log("datas: ",datas);const occhg=format(datas.occhg,.01,0,3),dischargeOvercurrentProtect=(datas.dischargeOvercurrentProtect||0==datas.dischargeOvercurrentProtect)&&Number((.01*(format(datas.dischargeOvercurrentProtect,1,0,3)-65536)).toFixed(3));let chargeOvercurrentDelay=null,chargeOvercurrentRecoverDelay=null,dischargeOvercurrentDelay=null,dischargeOvercurrentRecoverDelay=null,shortcircuiProtectRecoverDelay=null,leve2OvercurrentDelay=0,level2OvercurrentProtect=0,shortcircuiProtect=0,shortcircuiProtectDelay=0,level2OvercurrentProtectV=null,overAndUnderDelay=0;return chipType?(chargeOvercurrentDelay=format(datas.chargeOvercurrentDelay,1),chargeOvercurrentRecoverDelay=format(datas.chargeOvercurrentRecoverDelay,1),dischargeOvercurrentDelay=format(datas.dischargeOvercurrentDelay,1),dischargeOvercurrentRecoverDelay=format(datas.dischargeOvercurrentRecoverDelay,1),shortcircuiProtectRecoverDelay=format(datas.shortcircuiProtectRecoverDelay,1),level2OvercurrentProtect=getNewProtectAndDelay(datas.level2OvercurrentProtect).value1,leve2OvercurrentDelay=getNewProtectAndDelay(datas.level2OvercurrentProtect).value2,shortcircuiProtect=getNewProtectAndDelay(datas.level2OvercurrentProtectV).value1,shortcircuiProtectDelay=getNewProtectAndDelay(datas.level2OvercurrentProtectV).value2):(chargeOvercurrentDelay=datas.chargeOvercurrentDelay[0],chargeOvercurrentRecoverDelay=datas.chargeOvercurrentDelay[1],dischargeOvercurrentDelay=datas.dischargeOvercurrentDelay[0],dischargeOvercurrentRecoverDelay=datas.dischargeOvercurrentDelay[1],overAndUnderDelay=datas.shortcircuiProtectRecoverDelay[0],shortcircuiProtectRecoverDelay=datas.shortcircuiProtectRecoverDelay[1],level2OvercurrentProtectV=getOldProtectAndDelay(datas.level2OvercurrentProtect).double,shortcircuiProtect=getOldProtectAndDelay(datas.level2OvercurrentProtect).value1,shortcircuiProtectDelay=getOldProtectAndDelay(datas.level2OvercurrentProtect).value2,level2OvercurrentProtect=getOldProtectAndDelay(datas.level2OvercurrentProtect).value3,leve2OvercurrentDelay=getOldProtectAndDelay(datas.level2OvercurrentProtect).value4),{occhg:occhg,dischargeOvercurrentProtect:dischargeOvercurrentProtect,chargeOvercurrentDelay:chargeOvercurrentDelay,chargeOvercurrentRecoverDelay:chargeOvercurrentRecoverDelay,dischargeOvercurrentDelay:dischargeOvercurrentDelay,dischargeOvercurrentRecoverDelay:dischargeOvercurrentRecoverDelay,leve2OvercurrentDelay:leve2OvercurrentDelay,level2OvercurrentProtectV:level2OvercurrentProtectV,shortcircuiProtectRecoverDelay:shortcircuiProtectRecoverDelay,shortcircuiProtect:shortcircuiProtect,shortcircuiProtectDelay:shortcircuiProtectDelay,level2OvercurrentProtect:level2OvercurrentProtect,overAndUnderDelay:overAndUnderDelay}};function getNewProtectAndDelay(arr){if(2!==arr?.length)return{value1:0,value2:0};let resultArray=arr.map(num=>num.toString(2).padStart(8,"0")).join("").split("").map(Number),arr1=resultArray.slice(8,12),arr2=resultArray.slice(12);return{value1:parseInt(arr1.join(""),2),value2:parseInt(arr2.join(""),2)}}function getOldProtectAndDelay(arr){if(2!==arr?.length)return{double:!1,value1:0,value2:0,value3:0,value4:0};const binaryString=arr.map(num=>num.toString(2).padStart(8,"0")).join("");console.log("【解析硬件过流及短路】",binaryString);const resultArray=binaryString.split("").map(Number),arr1=[0,...resultArray.slice(5,8)],arr2=resultArray.slice(1,5),arr3=resultArray.slice(12),arr4=resultArray.slice(8,12),value1=parseInt(arr1.join(""),2),value2=parseInt(arr2.join(""),2),value3=parseInt(arr3.join(""),2),value4=parseInt(arr4.join(""),2);return{double:1===resultArray[0],value1:value1,value2:value2,value3:value3,value4:value4}}const getTempInfo=(datas,chipType)=>{console.log("datas: ",datas);const chargeHightempProtect=formatTemp(datas.chargeHightempProtect),chargeHightempRecover=formatTemp(datas.chargeHightempRecover),chargeLowtempProtect=formatTemp(datas.chargeLowtempProtect),chargeLowtempRecover=formatTemp(datas.chargeLowtempRecover),dischargingHightempProtect=formatTemp(datas.dischargingHightempProtect),dischargingHightempRecover=formatTemp(datas.dischargingHightempRecover),dischargingLowtempProtect=formatTemp(datas.dischargingLowtempProtect),dischargingLowtempRecover=formatTemp(datas.dischargingLowtempRecover),overtempProtect=formatTemp(datas.overtempProtect),overtempRecover=formatTemp(datas.overtempRecover);let chargeHightempDelay=null,chargeLowtempDelay=null,dischargingHightempDelay=null,dischargingLowtempDelay=null;return chipType?(chargeHightempDelay=format(datas.chargeHightempDelay,1),chargeLowtempDelay=format(datas.chargeLowtempDelay,1),dischargingHightempDelay=format(datas.dischargingHightempDelay,1),dischargingLowtempDelay=format(datas.dischargingLowtempDelay,1)):(chargeHightempDelay=datas.chargeLowtempDelay[1],chargeLowtempDelay=datas.chargeLowtempDelay[0],dischargingHightempDelay=datas.dischargingLowtempDelay[1],dischargingLowtempDelay=datas.dischargingLowtempDelay[0]),{chargeHightempProtect:chargeHightempProtect,chargeHightempRecover:chargeHightempRecover,chargeLowtempProtect:chargeLowtempProtect,chargeLowtempRecover:chargeLowtempRecover,dischargingHightempProtect:dischargingHightempProtect,dischargingHightempRecover:dischargingHightempRecover,dischargingLowtempProtect:dischargingLowtempProtect,dischargingLowtempRecover:dischargingLowtempRecover,chargeHightempDelay:chargeHightempDelay,chargeLowtempDelay:chargeLowtempDelay,dischargingHightempDelay:dischargingHightempDelay,dischargingLowtempDelay:dischargingLowtempDelay,overtempProtect:overtempProtect,overtempRecover:overtempRecover}},getEqualizerFunInfo=datas=>({equalizingVoltage:format(datas.equalizingVoltage,.001,0,3),accuracyEqualization:format(datas.accuracyEqualization,1,0,2)}),getcapVolInfoInfo=datas=>({fullVolt:format(datas.fullVolt,.001,0,3),emptyVolt:format(datas.emptyVolt,.001,0,3),voltage10p:format(datas.voltage10p,.001,0,3),voltage20p:format(datas.voltage20p,.001,0,3),voltage30p:format(datas.voltage30p,.001,0,3),voltage40p:format(datas.voltage40p,.001,0,3),voltage50p:format(datas.voltage50p,.001,0,3),voltage60p:format(datas.voltage60p,.001,0,3),voltage70p:format(datas.voltage70p,.001,0,3),voltage80p:format(datas.voltage80p,.001,0,3),voltage90p:format(datas.voltage90p,.001,0,3),voltage100p:format(datas.voltage100p,.001,0,3)}),getFuncAndTempFuncInfo=datas=>{const binaryFuncArr=formatBinary(datas.func),binaryTempArr=formatBinary(datas.tempFunc),func={};baseParamsJson.funcJson.forEach((item,index)=>{item.key&&(func[item.key]=binaryFuncArr[index])});const tempFunc={};return baseParamsJson.tempFuncJson.forEach((item,index)=>{item.key&&(tempFunc[item.key]=binaryTempArr[index])}),{func:func,tempFunc:tempFunc}},splitNumberTo1Byte=(combined=0)=>({val1:255&(combined=Number(combined)),val2:combined>>8&255}),getSystemInfo=datas=>{const serialNumber=format(datas.serialNumber,1),cycleCount=format(datas.cycleCount,1),strCount=format(datas.strCount,1),rsnsValue=format(datas.rsnsValue,crsDivisor,0,2),param1911=splitNumberTo1Byte(format(datas.param1911)).val1,param1912=splitNumberTo1Byte(format(datas.param1911)).val2,param1981=splitNumberTo1Byte(format(datas.param1981)).val1,param1982=splitNumberTo1Byte(format(datas.param1981)).val2;return{serialNumber:serialNumber,cycleCount:cycleCount,strCount:strCount,rsnsValue:rsnsValue,param1911:param1911,param1912:param1912,param1951:splitNumberTo1Byte(format(datas.param1951)).val1,param1952:splitNumberTo1Byte(format(datas.param1951)).val2,param1981:param1981,param1982:param1982}};exports.getBaseInfo=getBaseInfo,exports.getBaseParams=async(chipType,deviceData,index,paramObj)=>{console.log("chipType: ",chipType);const deviceId=deviceData?.deviceId,protocolVersion=deviceData?.protocolVersion||"00";console.warn("protocolVersion: ",protocolVersion);const v=BleDataProcess.hexToDecimal(protocolVersion);(2==v||v>=20&&v<80)&&(crsDivisor=.01),console.log("v: ",v);try{let dataInfo={};switch(index){case 1:let datasInfo1={};return await sendCmdSeq(datasInfo1,chipType,deviceId,baseParamsJson.batteryInfoJson(crsDivisor)),dataInfo=getBaseInfo(datasInfo1),dataInfo;case 2:let datasInfo2={};if(chipType){const normCapLow=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:0,paramLength:2}),normCapHigh=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:155,paramLength:2});console.log("normCapLow: ",normCapLow,"normCapHigh: ",normCapHigh),datasInfo2.normCap=[...normCapLow?.slice(0,2)||[],...normCapHigh?.slice(0,2)||[]];const cycleCapData=await readAndSetParam.getSysParamCmd(chipType,deviceId,baseParamsJson.capInfoJson[1]);datasInfo2.cycleCap=cycleCapData?.slice(0,2);const fullCapLow=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:112,paramLength:2}),fullCapHigh=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:156,paramLength:2});console.log("fullCapLow: ",fullCapLow,"fullCapHigh: ",fullCapHigh),datasInfo2.fullCap=[...fullCapLow?.slice(0,2)||[],...fullCapHigh?.slice(0,2)||[]]}else await sendCmdSeq(datasInfo2,chipType,deviceId,baseParamsJson.capInfoJson);return dataInfo=getCapInfo(datasInfo2),dataInfo;case 3:let datasInfo3={};if(chipType){let vindex=baseParamsJson.voltageInfoJson.findIndex(el=>16==el.paramNo);console.log("vindex: ------------",vindex);let vindex1=baseParamsJson.voltageInfoJson.findIndex(el=>48==el.paramNo),vindex2=baseParamsJson.voltageInfoJson.findIndex(el=>38==el.paramNo);const voltageData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex],paramLength:16}),voltageData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex1],paramLength:8}),voltageData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex2],paramLength:4});console.log("voltageData: ",voltageData),datasInfo3.allOvervoltageProtect=voltageData?.slice(0,2),datasInfo3.allOverpressureRecovery=voltageData?.slice(2,4),datasInfo3.allLowvoltageProtect=voltageData?.slice(4,6),datasInfo3.allLowvoltageRecover=voltageData?.slice(6,8),datasInfo3.singleOvervoltageProtect=voltageData?.slice(8,10),datasInfo3.singleOverpressureRecovery=voltageData?.slice(10,12),datasInfo3.singleLowvoltageProtect=voltageData?.slice(12,14),datasInfo3.singleLowvoltageRecover=voltageData?.slice(14,16),datasInfo3.allLowvoltageDelay=voltageData1?.slice(0,2),datasInfo3.allOverpressureDelay=voltageData1?.slice(2,4),datasInfo3.singleLowvoltageDelayed=voltageData1?.slice(4,6),datasInfo3.singleOverpressureDelay=voltageData1?.slice(6,8),datasInfo3.hardwareOV=voltageData2?.slice(0,2),datasInfo3.hardwareUV=voltageData2?.slice(2,4)}else await sendCmdSeq(datasInfo3,chipType,deviceId,baseParamsJson.voltageInfoJson);return dataInfo=getVoltageInfo(datasInfo3,chipType),dataInfo;case 4:let datasInfo4={};if(chipType){let cindex=baseParamsJson.currentInfoJson.findIndex(el=>24==el.paramNo),cindex1=baseParamsJson.currentInfoJson.findIndex(el=>52==el.paramNo),cindex2=baseParamsJson.currentInfoJson.findIndex(el=>40==el.paramNo);const currentData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex],paramLength:4}),currentData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex1],paramLength:8}),currentData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex2],paramLength:8});console.log("currentData: ",currentData),datasInfo4.occhg=currentData?.slice(0,2),datasInfo4.dischargeOvercurrentProtect=currentData?.slice(2,4),datasInfo4.chargeOvercurrentDelay=currentData1?.slice(0,2),datasInfo4.chargeOvercurrentRecoverDelay=currentData1?.slice(2,4),datasInfo4.dischargeOvercurrentDelay=currentData1?.slice(4,6),datasInfo4.dischargeOvercurrentRecoverDelay=currentData1?.slice(6,8),datasInfo4.level2OvercurrentProtect=currentData2?.slice(0,2),datasInfo4.level2OvercurrentProtectV=currentData2?.slice(2,4),datasInfo4.shortcircuiProtectRecoverDelay=currentData2?.slice(6,8)}else await sendCmdSeq(datasInfo4,chipType,deviceId,baseParamsJson.currentInfoJson);return dataInfo=getCurrentInfo(datasInfo4,chipType),dataInfo;case 5:let datasInfo5={};if(chipType){let tindex=baseParamsJson.tempInfoJson.findIndex(el=>8==el.paramNo),tindex1=baseParamsJson.tempInfoJson.findIndex(el=>44==el.paramNo),tindex2=baseParamsJson.tempInfoJson.findIndex(el=>202==el.paramNo);const tempData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex],paramLength:16}),tempData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex1],paramLength:8}),tempData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex2],paramLength:4});console.log("tempData: ",tempData,tempData2),datasInfo5.chargeHightempProtect=tempData?.slice(0,2),datasInfo5.chargeHightempRecover=tempData?.slice(2,4),datasInfo5.chargeLowtempProtect=tempData?.slice(4,6),datasInfo5.chargeLowtempRecover=tempData?.slice(6,8),datasInfo5.dischargingHightempProtect=tempData?.slice(8,10),datasInfo5.dischargingHightempRecover=tempData?.slice(10,12),datasInfo5.dischargingLowtempProtect=tempData?.slice(12,14),datasInfo5.dischargingLowtempRecover=tempData?.slice(14,16),datasInfo5.chargeLowtempDelay=tempData1?.slice(0,2),datasInfo5.chargeHightempDelay=tempData1?.slice(2,4),datasInfo5.dischargingLowtempDelay=tempData1?.slice(4,6),datasInfo5.dischargingHightempDelay=tempData1?.slice(6,8),datasInfo5.overtempProtect=tempData2?.slice(0,2),datasInfo5.overtempRecover=tempData2?.slice(2,4)}else await sendCmdSeq(datasInfo5,chipType,deviceId,baseParamsJson.tempInfoJson);return dataInfo=getTempInfo(datasInfo5,chipType),dataInfo;case 6:let datasInfo6={};if(chipType){const equalizerFunData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.equalizerFunJson[0],paramLength:4});console.log("equalizerFunData: ",equalizerFunData),datasInfo6.equalizingVoltage=equalizerFunData?.slice(0,2),datasInfo6.accuracyEqualization=equalizerFunData?.slice(2,4)}else await sendCmdSeq(datasInfo6,chipType,deviceId,baseParamsJson.equalizerFunJson);return dataInfo=getEqualizerFunInfo(datasInfo6),dataInfo;case 7:let datasInfo7={};if(chipType){let capVolIndex=baseParamsJson.capVolInfoJson.findIndex(el=>34==el.paramNo),capVolIndex1=baseParamsJson.capVolInfoJson.findIndex(el=>106==el.paramNo);const capVolInfoData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[0],paramLength:4}),capVolInfoData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[capVolIndex],paramLength:8}),capVolInfoData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[capVolIndex1],paramLength:12});console.log("capVolInfoData: ",capVolInfoData),datasInfo7.fullVolt=capVolInfoData?.slice(0,2),datasInfo7.emptyVolt=capVolInfoData?.slice(2,4),datasInfo7.voltage80p=capVolInfoData1?.slice(0,2),datasInfo7.voltage60p=capVolInfoData1?.slice(2,4),datasInfo7.voltage40p=capVolInfoData1?.slice(4,6),datasInfo7.voltage20p=capVolInfoData1?.slice(6,8),datasInfo7.voltage90p=capVolInfoData2?.slice(0,2),datasInfo7.voltage70p=capVolInfoData2?.slice(2,4),datasInfo7.voltage50p=capVolInfoData2?.slice(4,6),datasInfo7.voltage30p=capVolInfoData2?.slice(6,8),datasInfo7.voltage10p=capVolInfoData2?.slice(8,10),datasInfo7.voltage100p=capVolInfoData2?.slice(10,12)}else await sendCmdSeq(datasInfo7,chipType,deviceId,baseParamsJson.capVolInfoJson);return dataInfo=getcapVolInfoInfo(datasInfo7,chipType),dataInfo;case 9:let datasInfo9={};if(chipType){const funcAndTempFuncData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.funcAndTempFuncJson[0],paramLength:4});console.log("funcAndTempFuncData: ",funcAndTempFuncData),datasInfo9.func=funcAndTempFuncData?.slice(0,2),datasInfo9.tempFunc=funcAndTempFuncData?.slice(2,4)}else await sendCmdSeq(datasInfo9,chipType,deviceId,baseParamsJson.funcAndTempFuncJson);return dataInfo=getFuncAndTempFuncInfo(datasInfo9),dataInfo;case 10:let datasInfo10={};return await sendCmdSeq(datasInfo10,chipType,deviceId,baseParamsJson.systemJson),dataInfo=getSystemInfo(datasInfo10),dataInfo;case 11:const counts=await BleCmdDD.getProtectCountCmd(deviceId);return console.log("counts: ",counts),counts;default:if(!paramObj)return null;let defaultDataInfo={};const onedata=await readAndSetParam.getSysParamCmd(chipType,deviceId,paramObj);return defaultDataInfo[paramObj.key]=onedata?.slice(0,2),defaultDataInfo}}catch(error){throw console.error("error: 读系统参数报错 getBaseParams",error),error}},exports.getResistance=async(chipType,deviceId)=>{try{const rsnsValue=await readAndSetParam.getSysParamCmd(chipType,deviceId,baseParamsJson.systemJson[2]);return format(rsnsValue,crsDivisor,0,2)}catch(error){throw console.error("error: 读检流阻值报错 getResistance",error),error}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),baseParamsJson=require("../dataJson/baseParamsJson.js"),BleCmdDD=require("./BleCmdDD.js"),readAndSetParam=require("./readAndSetParam.js");function format(value,n=1,offset=0,scope=0){if(!value)return null;value=value.map(el=>{const hexValue=BleDataProcess.decimalToHex(el);return console.log("el: ------------",hexValue),hexValue});const v=parseInt(value.join(""),16)*n+offset;if(null==scope)return v;const formatted=v.toFixed(scope);return Number(formatted)}function formatTemp(arr){if(!arr)return null;let string="0x"+toHexString(arr),value=parseInt(string,16);return value=(value-2731)/10,Number(value)}function formatBinary(arr){if(!arr)return null;return arr.map(num=>num.toString(2).padStart(8,"0")).join("").split("").map(Number).reverse()}const sendCmdSeq=async(datasInfo,chipType,deviceId,params)=>{if(datasInfo&&deviceId&&Array.isArray(params)){chipType||await BleCmdDD.enterFactory(deviceId);for(const item of params)if(item?.key)try{const baseData=await readAndSetParam.getSysParamCmd(chipType,deviceId,item,!1);datasInfo[item.key]=baseData}catch(err){console.error(`获取参数失败 [${item.key}]:`,err)}chipType||await BleCmdDD.readExistFactory(deviceId)}else console.error("sendCmdSeq 参数异常")};let crsDivisor=.1;const getBaseInfo=async datas=>{try{console.log("datas: ",datas);const barCode=getCharCodeConnect(datas?.barCode),manufacturer=getCharCodeConnect(datas?.manufacturer),model=getCharCodeConnect(datas?.model),bmsModel=getCharCodeConnect(datas?.bmsModel,!0),producedDate=function(content){if(!content)return null;let arr=content.splice(0,2),string="0x";return arr.forEach(el=>{string+=BleDataProcess.decimalToHex(el)}),console.log(string,"string日期"),`${2e3+(string>>9)}-${string>>5&15}-${31&string}`}(datas?.producedDate);return{barCode:barCode,manufacturer:manufacturer,model:model,bmsModel:bmsModel,producedDate:producedDate,bmsAddr:function(content){if(!content)return null;return console.log(content,"content======"),toHexString(content.splice(0,12))}(datas?.bmsAddr)}}catch(error){console.error("error: ",error)}},getCharCodeConnect=(content,clearZero=!1)=>{if(console.log("content: ---------------",content),!content)return null;const length=content[0];let arr=content.splice(1,length);if(clearZero)for(;0===arr[arr.length-1];)arr.pop();return console.log("arr: -------------------",arr),String.fromCharCode(...arr)};function toHexString(arr){let string="";return arr.forEach(el=>{string+=BleDataProcess.decimalToHex(el)}),string}const getCapInfo=async datas=>{console.log("datas: ",datas);let normCap=null;if(datas.normCap&&datas.normCap.length>=4){console.log("normCap原始数据: ",datas.normCap);const lowBytes=datas.normCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];console.log("normCap lowValue: ",lowValue);const highBytes=datas.normCap.slice(2,4),highValue=highBytes[0]<<8|highBytes[1];console.log("normCap highValue: ",highValue);const totalValue=highValue<<16|lowValue;console.log("normCap totalValue: ",totalValue),normCap=Number((.01*totalValue).toFixed(2)),console.log("normCap最终值: ",normCap)}else if(datas.normCap&&datas.normCap.length>=2){const lowBytes=datas.normCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];normCap=Number((.01*lowValue).toFixed(2))}const cycleCap=format(datas.cycleCap,.01,0,2);let fullCap=null;if(datas.fullCap&&datas.fullCap.length>=4){console.log("fullCap原始数据: ",datas.fullCap);const lowBytes=datas.fullCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];console.log("fullCap lowValue: ",lowValue);const highBytes=datas.fullCap.slice(2,4),highValue=highBytes[0]<<8|highBytes[1];console.log("fullCap highValue: ",highValue);const totalValue=highValue<<16|lowValue;console.log("fullCap totalValue: ",totalValue),fullCap=Number((.01*totalValue).toFixed(2)),console.log("fullCap最终值: ",fullCap)}else if(datas.fullCap&&datas.fullCap.length>=2){const lowBytes=datas.fullCap.slice(0,2),lowValue=lowBytes[0]<<8|lowBytes[1];fullCap=Number((.01*lowValue).toFixed(2))}return{normCap:normCap,cycleCap:cycleCap,fullCap:fullCap}},getVoltageInfo=async(datas,chipType)=>{console.log("datas: ",datas);const allOvervoltageProtect=format(datas.allOvervoltageProtect,.01,0,3),allOverpressureRecovery=format(datas.allOverpressureRecovery,.01,0,3),allLowvoltageProtect=format(datas.allLowvoltageProtect,.01,0,3),allLowvoltageRecover=format(datas.allLowvoltageRecover,.01,0,3),singleOvervoltageProtect=format(datas.singleOvervoltageProtect,.001,0,3),singleOverpressureRecovery=format(datas.singleOverpressureRecovery,.001,0,3),singleLowvoltageProtect=format(datas.singleLowvoltageProtect,.001,0,3),singleLowvoltageRecover=format(datas.singleLowvoltageRecover,.001,0,3),hardwareOV=format(datas.hardwareOV,.001,0,3),hardwareUV=format(datas.hardwareUV,.001,0,3);let singleOverpressureDelay=null,singleLowvoltageDelayed=null,allLowvoltageDelay=null,allOverpressureDelay=null;return chipType?(singleOverpressureDelay=format(datas.singleOverpressureDelay,1),singleLowvoltageDelayed=format(datas.singleLowvoltageDelayed,1),allLowvoltageDelay=format(datas.allLowvoltageDelay,1),allOverpressureDelay=format(datas.allOverpressureDelay,1)):(singleLowvoltageDelayed=datas.singleLowvoltageDelayed[0],singleOverpressureDelay=datas.singleLowvoltageDelayed[1],allLowvoltageDelay=datas.allLowvoltageDelay[0],allOverpressureDelay=datas.allLowvoltageDelay[1]),{allOvervoltageProtect:allOvervoltageProtect,allOverpressureRecovery:allOverpressureRecovery,allLowvoltageProtect:allLowvoltageProtect,allLowvoltageRecover:allLowvoltageRecover,singleOvervoltageProtect:singleOvervoltageProtect,singleOverpressureRecovery:singleOverpressureRecovery,singleLowvoltageProtect:singleLowvoltageProtect,singleLowvoltageRecover:singleLowvoltageRecover,singleOverpressureDelay:singleOverpressureDelay,singleLowvoltageDelayed:singleLowvoltageDelayed,hardwareOV:hardwareOV,hardwareUV:hardwareUV,allLowvoltageDelay:allLowvoltageDelay,allOverpressureDelay:allOverpressureDelay}},getCurrentInfo=async(datas,chipType)=>{console.log("datas: ",datas);const occhg=format(datas.occhg,.01,0,3),dischargeOvercurrentProtect=(datas.dischargeOvercurrentProtect||0==datas.dischargeOvercurrentProtect)&&Number((.01*(format(datas.dischargeOvercurrentProtect,1,0,3)-65536)).toFixed(3));let chargeOvercurrentDelay=null,chargeOvercurrentRecoverDelay=null,dischargeOvercurrentDelay=null,dischargeOvercurrentRecoverDelay=null,shortcircuiProtectRecoverDelay=null,leve2OvercurrentDelay=0,level2OvercurrentProtect=0,shortcircuiProtect=0,shortcircuiProtectDelay=0,level2OvercurrentProtectV=null,overAndUnderDelay=0;return chipType?(chargeOvercurrentDelay=format(datas.chargeOvercurrentDelay,1),chargeOvercurrentRecoverDelay=format(datas.chargeOvercurrentRecoverDelay,1),dischargeOvercurrentDelay=format(datas.dischargeOvercurrentDelay,1),dischargeOvercurrentRecoverDelay=format(datas.dischargeOvercurrentRecoverDelay,1),shortcircuiProtectRecoverDelay=format(datas.shortcircuiProtectRecoverDelay,1),level2OvercurrentProtect=getNewProtectAndDelay(datas.level2OvercurrentProtect).value1,leve2OvercurrentDelay=getNewProtectAndDelay(datas.level2OvercurrentProtect).value2,shortcircuiProtect=getNewProtectAndDelay(datas.level2OvercurrentProtectV).value1,shortcircuiProtectDelay=getNewProtectAndDelay(datas.level2OvercurrentProtectV).value2):(chargeOvercurrentDelay=datas.chargeOvercurrentDelay[0],chargeOvercurrentRecoverDelay=datas.chargeOvercurrentDelay[1],dischargeOvercurrentDelay=datas.dischargeOvercurrentDelay[0],dischargeOvercurrentRecoverDelay=datas.dischargeOvercurrentDelay[1],overAndUnderDelay=datas.shortcircuiProtectRecoverDelay[0],shortcircuiProtectRecoverDelay=datas.shortcircuiProtectRecoverDelay[1],level2OvercurrentProtectV=getOldProtectAndDelay(datas.level2OvercurrentProtect).double,shortcircuiProtect=getOldProtectAndDelay(datas.level2OvercurrentProtect).value1,shortcircuiProtectDelay=getOldProtectAndDelay(datas.level2OvercurrentProtect).value2,level2OvercurrentProtect=getOldProtectAndDelay(datas.level2OvercurrentProtect).value3,leve2OvercurrentDelay=getOldProtectAndDelay(datas.level2OvercurrentProtect).value4),{occhg:occhg,dischargeOvercurrentProtect:dischargeOvercurrentProtect,chargeOvercurrentDelay:chargeOvercurrentDelay,chargeOvercurrentRecoverDelay:chargeOvercurrentRecoverDelay,dischargeOvercurrentDelay:dischargeOvercurrentDelay,dischargeOvercurrentRecoverDelay:dischargeOvercurrentRecoverDelay,leve2OvercurrentDelay:leve2OvercurrentDelay,level2OvercurrentProtectV:level2OvercurrentProtectV,shortcircuiProtectRecoverDelay:shortcircuiProtectRecoverDelay,shortcircuiProtect:shortcircuiProtect,shortcircuiProtectDelay:shortcircuiProtectDelay,level2OvercurrentProtect:level2OvercurrentProtect,overAndUnderDelay:overAndUnderDelay}};function getNewProtectAndDelay(arr){if(2!==arr?.length)return{value1:0,value2:0};let resultArray=arr.map(num=>num.toString(2).padStart(8,"0")).join("").split("").map(Number),arr1=resultArray.slice(8,12),arr2=resultArray.slice(12);return{value1:parseInt(arr1.join(""),2),value2:parseInt(arr2.join(""),2)}}function getOldProtectAndDelay(arr){if(2!==arr?.length)return{double:!1,value1:0,value2:0,value3:0,value4:0};const binaryString=arr.map(num=>num.toString(2).padStart(8,"0")).join("");console.log("【解析硬件过流及短路】",binaryString);const resultArray=binaryString.split("").map(Number),arr1=[0,...resultArray.slice(5,8)],arr2=resultArray.slice(1,5),arr3=resultArray.slice(12),arr4=resultArray.slice(8,12),value1=parseInt(arr1.join(""),2),value2=parseInt(arr2.join(""),2),value3=parseInt(arr3.join(""),2),value4=parseInt(arr4.join(""),2);return{double:1===resultArray[0],value1:value1,value2:value2,value3:value3,value4:value4}}const getTempInfo=(datas,chipType)=>{console.log("datas: ",datas);const chargeHightempProtect=formatTemp(datas.chargeHightempProtect),chargeHightempRecover=formatTemp(datas.chargeHightempRecover),chargeLowtempProtect=formatTemp(datas.chargeLowtempProtect),chargeLowtempRecover=formatTemp(datas.chargeLowtempRecover),dischargingHightempProtect=formatTemp(datas.dischargingHightempProtect),dischargingHightempRecover=formatTemp(datas.dischargingHightempRecover),dischargingLowtempProtect=formatTemp(datas.dischargingLowtempProtect),dischargingLowtempRecover=formatTemp(datas.dischargingLowtempRecover),overtempProtect=formatTemp(datas.overtempProtect),overtempRecover=formatTemp(datas.overtempRecover);let chargeHightempDelay=null,chargeLowtempDelay=null,dischargingHightempDelay=null,dischargingLowtempDelay=null;return chipType?(chargeHightempDelay=format(datas.chargeHightempDelay,1),chargeLowtempDelay=format(datas.chargeLowtempDelay,1),dischargingHightempDelay=format(datas.dischargingHightempDelay,1),dischargingLowtempDelay=format(datas.dischargingLowtempDelay,1)):(chargeHightempDelay=datas.chargeLowtempDelay[1],chargeLowtempDelay=datas.chargeLowtempDelay[0],dischargingHightempDelay=datas.dischargingLowtempDelay[1],dischargingLowtempDelay=datas.dischargingLowtempDelay[0]),{chargeHightempProtect:chargeHightempProtect,chargeHightempRecover:chargeHightempRecover,chargeLowtempProtect:chargeLowtempProtect,chargeLowtempRecover:chargeLowtempRecover,dischargingHightempProtect:dischargingHightempProtect,dischargingHightempRecover:dischargingHightempRecover,dischargingLowtempProtect:dischargingLowtempProtect,dischargingLowtempRecover:dischargingLowtempRecover,chargeHightempDelay:chargeHightempDelay,chargeLowtempDelay:chargeLowtempDelay,dischargingHightempDelay:dischargingHightempDelay,dischargingLowtempDelay:dischargingLowtempDelay,overtempProtect:overtempProtect,overtempRecover:overtempRecover}},getEqualizerFunInfo=datas=>({equalizingVoltage:format(datas.equalizingVoltage,.001,0,3),accuracyEqualization:format(datas.accuracyEqualization,1,0,2)}),getcapVolInfoInfo=datas=>({fullVolt:format(datas.fullVolt,.001,0,3),emptyVolt:format(datas.emptyVolt,.001,0,3),voltage10p:format(datas.voltage10p,.001,0,3),voltage20p:format(datas.voltage20p,.001,0,3),voltage30p:format(datas.voltage30p,.001,0,3),voltage40p:format(datas.voltage40p,.001,0,3),voltage50p:format(datas.voltage50p,.001,0,3),voltage60p:format(datas.voltage60p,.001,0,3),voltage70p:format(datas.voltage70p,.001,0,3),voltage80p:format(datas.voltage80p,.001,0,3),voltage90p:format(datas.voltage90p,.001,0,3),voltage100p:format(datas.voltage100p,.001,0,3)}),getFuncAndTempFuncInfo=datas=>{const binaryFuncArr=formatBinary(datas.func),binaryTempArr=formatBinary(datas.tempFunc),func={};baseParamsJson.funcJson.forEach((item,index)=>{item.key&&(func[item.key]=binaryFuncArr[index])});const tempFunc={};return baseParamsJson.tempFuncJson.forEach((item,index)=>{item.key&&(tempFunc[item.key]=binaryTempArr[index])}),{func:func,tempFunc:tempFunc}},splitNumberTo1Byte=(combined=0)=>({val1:255&(combined=Number(combined)),val2:combined>>8&255}),getSystemInfo=datas=>{const serialNumber=format(datas.serialNumber,1),cycleCount=format(datas.cycleCount,1),strCount=format(datas.strCount,1),rsnsValue=format(datas.rsnsValue,crsDivisor,0,2),param1911=splitNumberTo1Byte(format(datas.param1911)).val1,param1912=splitNumberTo1Byte(format(datas.param1911)).val2,param1981=splitNumberTo1Byte(format(datas.param1981)).val1,param1982=splitNumberTo1Byte(format(datas.param1981)).val2;return{serialNumber:serialNumber,cycleCount:cycleCount,strCount:strCount,rsnsValue:rsnsValue,param1911:param1911,param1912:param1912,param1951:splitNumberTo1Byte(format(datas.param1951)).val1,param1952:splitNumberTo1Byte(format(datas.param1951)).val2,param1981:param1981,param1982:param1982}};exports.getBaseInfo=getBaseInfo,exports.getBaseParams=async(chipType,deviceData,index,paramObj)=>{console.log("chipType: ",chipType);const deviceId=deviceData?.deviceId,protocolVersion=deviceData?.protocolVersion||"00";console.warn("protocolVersion: ",protocolVersion);const v=BleDataProcess.hexToDecimal(protocolVersion);(2==v||v>=20&&v<80)&&(crsDivisor=.01),console.log("v: ",v);try{let dataInfo={};switch(index){case 1:let datasInfo1={};return await sendCmdSeq(datasInfo1,chipType,deviceId,baseParamsJson.batteryInfoJson(crsDivisor)),dataInfo=getBaseInfo(datasInfo1),dataInfo;case 2:let datasInfo2={};const productType=deviceData.productType,isBalanceDevice="12"===productType;if(console.log("productType",productType,isBalanceDevice),chipType)if(isBalanceDevice){const normCapLow=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:0,paramLength:2}),normCapHigh=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:155,paramLength:2});console.log("normCapLow: ",normCapLow,"normCapHigh: ",normCapHigh),datasInfo2.normCap=[...normCapLow?.slice(0,2)||[],...normCapHigh?.slice(0,2)||[]];const cycleCapData=await readAndSetParam.getSysParamCmd(chipType,deviceId,baseParamsJson.capInfoJson[1]);datasInfo2.cycleCap=cycleCapData?.slice(0,2);const fullCapLow=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:112,paramLength:2}),fullCapHigh=await readAndSetParam.getSysParamCmd(chipType,deviceId,{paramNo:156,paramLength:2});console.log("fullCapLow: ",fullCapLow,"fullCapHigh: ",fullCapHigh),datasInfo2.fullCap=[...fullCapLow?.slice(0,2)||[],...fullCapHigh?.slice(0,2)||[]]}else{const capData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capInfoJson[0],paramLength:4});console.warn("capData: ",capData),datasInfo2.normCap=capData?.slice(0,2),datasInfo2.cycleCap=capData?.slice(2,4);const capData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,baseParamsJson.capInfoJson[2]);datasInfo2.fullCap=capData2?.slice(0,2)}else await sendCmdSeq(datasInfo2,chipType,deviceId,baseParamsJson.capInfoJson);return dataInfo=getCapInfo(datasInfo2),dataInfo;case 3:let datasInfo3={};if(chipType){let vindex=baseParamsJson.voltageInfoJson.findIndex(el=>16==el.paramNo);console.log("vindex: ------------",vindex);let vindex1=baseParamsJson.voltageInfoJson.findIndex(el=>48==el.paramNo),vindex2=baseParamsJson.voltageInfoJson.findIndex(el=>38==el.paramNo);const voltageData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex],paramLength:16}),voltageData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex1],paramLength:8}),voltageData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.voltageInfoJson[vindex2],paramLength:4});console.log("voltageData: ",voltageData),datasInfo3.allOvervoltageProtect=voltageData?.slice(0,2),datasInfo3.allOverpressureRecovery=voltageData?.slice(2,4),datasInfo3.allLowvoltageProtect=voltageData?.slice(4,6),datasInfo3.allLowvoltageRecover=voltageData?.slice(6,8),datasInfo3.singleOvervoltageProtect=voltageData?.slice(8,10),datasInfo3.singleOverpressureRecovery=voltageData?.slice(10,12),datasInfo3.singleLowvoltageProtect=voltageData?.slice(12,14),datasInfo3.singleLowvoltageRecover=voltageData?.slice(14,16),datasInfo3.allLowvoltageDelay=voltageData1?.slice(0,2),datasInfo3.allOverpressureDelay=voltageData1?.slice(2,4),datasInfo3.singleLowvoltageDelayed=voltageData1?.slice(4,6),datasInfo3.singleOverpressureDelay=voltageData1?.slice(6,8),datasInfo3.hardwareOV=voltageData2?.slice(0,2),datasInfo3.hardwareUV=voltageData2?.slice(2,4)}else await sendCmdSeq(datasInfo3,chipType,deviceId,baseParamsJson.voltageInfoJson);return dataInfo=getVoltageInfo(datasInfo3,chipType),dataInfo;case 4:let datasInfo4={};if(chipType){let cindex=baseParamsJson.currentInfoJson.findIndex(el=>24==el.paramNo),cindex1=baseParamsJson.currentInfoJson.findIndex(el=>52==el.paramNo),cindex2=baseParamsJson.currentInfoJson.findIndex(el=>40==el.paramNo);const currentData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex],paramLength:4}),currentData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex1],paramLength:8}),currentData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.currentInfoJson[cindex2],paramLength:8});console.log("currentData: ",currentData),datasInfo4.occhg=currentData?.slice(0,2),datasInfo4.dischargeOvercurrentProtect=currentData?.slice(2,4),datasInfo4.chargeOvercurrentDelay=currentData1?.slice(0,2),datasInfo4.chargeOvercurrentRecoverDelay=currentData1?.slice(2,4),datasInfo4.dischargeOvercurrentDelay=currentData1?.slice(4,6),datasInfo4.dischargeOvercurrentRecoverDelay=currentData1?.slice(6,8),datasInfo4.level2OvercurrentProtect=currentData2?.slice(0,2),datasInfo4.level2OvercurrentProtectV=currentData2?.slice(2,4),datasInfo4.shortcircuiProtectRecoverDelay=currentData2?.slice(6,8)}else await sendCmdSeq(datasInfo4,chipType,deviceId,baseParamsJson.currentInfoJson);return dataInfo=getCurrentInfo(datasInfo4,chipType),dataInfo;case 5:let datasInfo5={};if(chipType){let tindex=baseParamsJson.tempInfoJson.findIndex(el=>8==el.paramNo),tindex1=baseParamsJson.tempInfoJson.findIndex(el=>44==el.paramNo),tindex2=baseParamsJson.tempInfoJson.findIndex(el=>202==el.paramNo);const tempData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex],paramLength:16}),tempData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex1],paramLength:8}),tempData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.tempInfoJson[tindex2],paramLength:4});console.log("tempData: ",tempData,tempData2),datasInfo5.chargeHightempProtect=tempData?.slice(0,2),datasInfo5.chargeHightempRecover=tempData?.slice(2,4),datasInfo5.chargeLowtempProtect=tempData?.slice(4,6),datasInfo5.chargeLowtempRecover=tempData?.slice(6,8),datasInfo5.dischargingHightempProtect=tempData?.slice(8,10),datasInfo5.dischargingHightempRecover=tempData?.slice(10,12),datasInfo5.dischargingLowtempProtect=tempData?.slice(12,14),datasInfo5.dischargingLowtempRecover=tempData?.slice(14,16),datasInfo5.chargeLowtempDelay=tempData1?.slice(0,2),datasInfo5.chargeHightempDelay=tempData1?.slice(2,4),datasInfo5.dischargingLowtempDelay=tempData1?.slice(4,6),datasInfo5.dischargingHightempDelay=tempData1?.slice(6,8),datasInfo5.overtempProtect=tempData2?.slice(0,2),datasInfo5.overtempRecover=tempData2?.slice(2,4)}else await sendCmdSeq(datasInfo5,chipType,deviceId,baseParamsJson.tempInfoJson);return dataInfo=getTempInfo(datasInfo5,chipType),dataInfo;case 6:let datasInfo6={};if(chipType){const equalizerFunData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.equalizerFunJson[0],paramLength:4});console.log("equalizerFunData: ",equalizerFunData),datasInfo6.equalizingVoltage=equalizerFunData?.slice(0,2),datasInfo6.accuracyEqualization=equalizerFunData?.slice(2,4)}else await sendCmdSeq(datasInfo6,chipType,deviceId,baseParamsJson.equalizerFunJson);return dataInfo=getEqualizerFunInfo(datasInfo6),dataInfo;case 7:let datasInfo7={};if(chipType){let capVolIndex=baseParamsJson.capVolInfoJson.findIndex(el=>34==el.paramNo),capVolIndex1=baseParamsJson.capVolInfoJson.findIndex(el=>106==el.paramNo);const capVolInfoData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[0],paramLength:4}),capVolInfoData1=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[capVolIndex],paramLength:8}),capVolInfoData2=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.capVolInfoJson[capVolIndex1],paramLength:12});console.log("capVolInfoData: ",capVolInfoData),datasInfo7.fullVolt=capVolInfoData?.slice(0,2),datasInfo7.emptyVolt=capVolInfoData?.slice(2,4),datasInfo7.voltage80p=capVolInfoData1?.slice(0,2),datasInfo7.voltage60p=capVolInfoData1?.slice(2,4),datasInfo7.voltage40p=capVolInfoData1?.slice(4,6),datasInfo7.voltage20p=capVolInfoData1?.slice(6,8),datasInfo7.voltage90p=capVolInfoData2?.slice(0,2),datasInfo7.voltage70p=capVolInfoData2?.slice(2,4),datasInfo7.voltage50p=capVolInfoData2?.slice(4,6),datasInfo7.voltage30p=capVolInfoData2?.slice(6,8),datasInfo7.voltage10p=capVolInfoData2?.slice(8,10),datasInfo7.voltage100p=capVolInfoData2?.slice(10,12)}else await sendCmdSeq(datasInfo7,chipType,deviceId,baseParamsJson.capVolInfoJson);return dataInfo=getcapVolInfoInfo(datasInfo7,chipType),dataInfo;case 9:let datasInfo9={};if(chipType){const funcAndTempFuncData=await readAndSetParam.getSysParamCmd(chipType,deviceId,{...baseParamsJson.funcAndTempFuncJson[0],paramLength:4});console.log("funcAndTempFuncData: ",funcAndTempFuncData),datasInfo9.func=funcAndTempFuncData?.slice(0,2),datasInfo9.tempFunc=funcAndTempFuncData?.slice(2,4)}else await sendCmdSeq(datasInfo9,chipType,deviceId,baseParamsJson.funcAndTempFuncJson);return dataInfo=getFuncAndTempFuncInfo(datasInfo9),dataInfo;case 10:let datasInfo10={};return await sendCmdSeq(datasInfo10,chipType,deviceId,baseParamsJson.systemJson),dataInfo=getSystemInfo(datasInfo10),dataInfo;case 11:const counts=await BleCmdDD.getProtectCountCmd(deviceId);return console.log("counts: ",counts),counts;default:if(!paramObj)return null;let defaultDataInfo={};const onedata=await readAndSetParam.getSysParamCmd(chipType,deviceId,paramObj);return defaultDataInfo[paramObj.key]=onedata?.slice(0,2),defaultDataInfo}}catch(error){throw console.error("error: 读系统参数报错 getBaseParams",error),error}},exports.getResistance=async(chipType,deviceId)=>{try{const rsnsValue=await readAndSetParam.getSysParamCmd(chipType,deviceId,baseParamsJson.systemJson[2]);return format(rsnsValue,crsDivisor,0,2)}catch(error){throw console.error("error: 读检流阻值报错 getResistance",error),error}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),commonfun=require("../commonfun.js");async function _writeAsync(deviceId,value){return console.log("deviceId, value: ",deviceId,value),!(!deviceId||!value)&&new Promise(resolve=>{const{isAndroid:isAndroid,isIOS:isIOS}=commonfun.getOS(),platform=commonfun.getPlatform();console.log("platform: ",platform),console.log("isAndroid, isIOS: ",isAndroid,isIOS);const writeType="mp-weixin"===platform||isAndroid?"writeNoResponse":"write";console.log("writeType: ",writeType),uni.writeBLECharacteristicValue({deviceId:deviceId,serviceId:"0000FF00-0000-1000-8000-00805F9B34FB",characteristicId:"0000FF02-0000-1000-8000-00805F9B34FB",writeType:writeType,value:value,success:res=>{console.error("res: 写入成功",res),resolve(!0)},fail:e=>{console.error("写入失败",e),resolve(!1)}}),isIOS&&setTimeout(()=>resolve(!0),50)})}exports.getData=async(deviceId,{command:command,commandVerifyHandler:commandVerifyHandler=hexArr=>({verified:!1,pkgLen:null}),pkgVerifyHandler:pkgVerifyHandler=pkg=>({verified:!1}),maxRetries:maxRetries=2,retryInterval:retryInterval=300},tag="")=>{if(!deviceId)throw new Error("deviceId is required");if(!command||command.length<=0)throw new Error("command is required");return new Promise((resolve,reject)=>{let isCompleted=!1,timeoutId=null,responsed=!1,len=null,pkg=[];const cmdContent=BleDataProcess.hexArr2ab(command),cleanup=()=>{isCompleted||(isCompleted=!0,clearTimeout(timeoutId),commonfun.eventBus.off("setBleChangedCharacteristicValue",dataHandler))},dataHandler=payload=>{if(!payload||payload.deviceId!==deviceId||!payload.value)return;const hexArr=BleDataProcess.ab2decimalArr(payload.value);if(console.log("hexArr: ",hexArr),console.warn(tag,"接收到数据:",BleDataProcess.hexArr2string(hexArr)),0!==hexArr.length){if(null===len){const{verified:verified,pkgLen:pkgLen}=commandVerifyHandler(hexArr);console.log("指令验证结果:",{verified:verified,pkgLen:pkgLen}),verified&&(len=pkgLen)}if(len){if(pkg=[...pkg,...hexArr],console.log("当前数据包:",pkg,`长度: ${pkg.length}/${len}`),pkg.length>=len){pkg=pkg.slice(0,len);const{verified:verified}=pkgVerifyHandler(pkg);console.log("数据包验证结果:",{verified:verified}),verified?(responsed=!0,cleanup(),resolve([...pkg])):(len=null,pkg=[])}}else pkg=[]}},writeToDevice=async(attempt=1)=>{try{console.warn(tag,`第${attempt}次写入指令:`,command.join("").replace(/0x/g,"").toUpperCase());const writeSucceed=await async function(deviceId,value){return console.log("value: ",value),console.log("deviceId: ",deviceId),!(!deviceId||!value)&&new Promise(async resolve=>{const n=Math.ceil(value.byteLength/20);let res;for(let i=0;i<n;i++){const _value=value.slice(20*i,20*(i+1));if(console.log("分包写入_value: ",_value),await BleDataProcess.sleep(150),res=await _writeAsync(deviceId,_value),console.log(`分包写入结果 ${i+1}/${n} : ${res}`),!res)return resolve(!1)}resolve(res)})}(deviceId,cmdContent);if(console.warn(tag,`第${attempt}次写入结果:`,writeSucceed?"成功":"失败"),!writeSucceed)return void(attempt<maxRetries?setTimeout(()=>writeToDevice(attempt+1),retryInterval):(cleanup(),resolve(null)));await BleDataProcess.sleep(retryInterval),!responsed&&attempt<maxRetries?(console.log(tag,`未收到响应,准备第${attempt+1}次重试`),writeToDevice(attempt+1)):responsed||(console.warn(tag,`达到最大重试次数(${maxRetries}),未收到响应`),cleanup(),resolve(null))}catch(error){console.error(tag,"写入过程发生错误:",error),cleanup(),reject(error)}};timeoutId=setTimeout(()=>{console.warn(tag,"操作超时"),cleanup(),resolve(null)},(maxRetries+2)*retryInterval),commonfun.eventBus.on("setBleChangedCharacteristicValue",dataHandler),writeToDevice().catch(error=>{cleanup(),reject(error)})})},exports.setMTUAsync=(deviceId,mtu=512,delay=2500)=>new Promise((resolve,reject)=>{try{if(commonfun.getOS().isIOS)return resolve(!0);setTimeout(async()=>{await uni.setBLEMTU({deviceId:deviceId,mtu:mtu}),resolve(!0)},delay)}catch(error){console.error(error),reject(error)}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),commonfun=require("../commonfun.js"),mqttServer=require("../mqttServer.js");const BLE_COMMAND_QUEUE=new Map,BLE_COMMAND_RUNNING=new Set,runNextBleCommand=async queueKey=>{if(BLE_COMMAND_RUNNING.has(queueKey))return;const queue=BLE_COMMAND_QUEUE.get(queueKey)||[];if(0===queue.length)return void BLE_COMMAND_QUEUE.delete(queueKey);BLE_COMMAND_RUNNING.add(queueKey);const currentTask=queue[0];try{const result=await currentTask.task();currentTask.resolve(result)}catch(error){currentTask.reject(error)}finally{const currentQueue=BLE_COMMAND_QUEUE.get(queueKey)||[];currentQueue.shift(),BLE_COMMAND_RUNNING.delete(queueKey),0===currentQueue.length?BLE_COMMAND_QUEUE.delete(queueKey):runNextBleCommand(queueKey)}};async function _writeAsync(deviceId,value){return console.log("deviceId, value: ",deviceId,value),!(!deviceId||!value)&&new Promise(resolve=>{const{isAndroid:isAndroid,isIOS:isIOS}=commonfun.getOS(),platform=commonfun.getPlatform();console.log("platform: ",platform),console.log("isAndroid, isIOS: ",isAndroid,isIOS);const writeType="mp-weixin"===platform||isAndroid?"writeNoResponse":"write";console.log("writeType: ",writeType),uni.writeBLECharacteristicValue({deviceId:deviceId,serviceId:"0000FF00-0000-1000-8000-00805F9B34FB",characteristicId:"0000FF02-0000-1000-8000-00805F9B34FB",writeType:writeType,value:value,success:res=>{console.error("res: 写入成功",res),resolve(!0)},fail:e=>{console.error("写入失败",e),resolve(!1)}}),isIOS&&setTimeout(()=>resolve(!0),50)})}exports.getData=async(deviceId,{command:command,commandVerifyHandler:commandVerifyHandler=hexArr=>({verified:!1,pkgLen:null}),pkgVerifyHandler:pkgVerifyHandler=pkg=>({verified:!1}),maxRetries:maxRetries=2,retryInterval:retryInterval=300},tag="")=>{if(!deviceId)throw new Error("deviceId is required");if(!command||command.length<=0)throw new Error("command is required");return((deviceId,task)=>{const queueKey=deviceId||"__default__";return new Promise((resolve,reject)=>{const queue=BLE_COMMAND_QUEUE.get(queueKey)||[];queue.push({task:task,resolve:resolve,reject:reject}),BLE_COMMAND_QUEUE.set(queueKey,queue),runNextBleCommand(queueKey)})})(deviceId,()=>new Promise((resolve,reject)=>{let isCompleted=!1,timeoutId=null,responsed=!1,len=null,pkg=[];const cmdContent=BleDataProcess.hexArr2ab(command),cleanup=()=>{isCompleted||(isCompleted=!0,clearTimeout(timeoutId),commonfun.eventBus.off("setBleChangedCharacteristicValue",dataHandler))},dataHandler=payload=>{if(!payload||payload.deviceId!==deviceId||!payload.value)return;const hexArr=BleDataProcess.ab2decimalArr(payload.value);if(console.log("hexArr: ",hexArr),console.warn(tag,"接收到数据:",BleDataProcess.hexArr2string(hexArr)),0!==hexArr.length){if(null===len){const{verified:verified,pkgLen:pkgLen}=commandVerifyHandler(hexArr);console.log("指令验证结果:",{verified:verified,pkgLen:pkgLen}),verified&&(len=pkgLen)}if(len){if(pkg=[...pkg,...hexArr],console.log("当前数据包:",pkg,`长度: ${pkg.length}/${len}`),pkg.length>=len){pkg=pkg.slice(0,len);const{verified:verified}=pkgVerifyHandler(pkg);if(console.log("数据包验证结果:",{verified:verified}),verified){responsed=!0,cleanup();const value=[...pkg].map(o=>`00${o.toString(16)}`.slice(-2)).join(""),cmdCode=mqttServer.mqttServer.currentCommand;value&&cmdCode&&(0===mqttServer.mqttServer.setPassthroughType&&mqttServer.mqttServer.publishPassthroughHandle({value:value,cmdCode:cmdCode},deviceId),mqttServer.mqttServer.setPassthroughType=0),resolve([...pkg])}else len=null,pkg=[]}}else pkg=[]}},writeToDevice=async(attempt=1)=>{try{console.warn(tag,`第${attempt}次写入指令:`,command.join("").replace(/0x/g,"").toUpperCase());const writeSucceed=await async function(deviceId,value){return console.log("value: ",value),console.log("deviceId: ",deviceId),!(!deviceId||!value)&&new Promise(async resolve=>{const n=Math.ceil(value.byteLength/20);let res;for(let i=0;i<n;i++){const _value=value.slice(20*i,20*(i+1));if(console.log("分包写入_value: ",_value),await BleDataProcess.sleep(150),res=await _writeAsync(deviceId,_value),console.log(`分包写入结果 ${i+1}/${n} : ${res}`),!res)return resolve(!1)}resolve(res)})}(deviceId,cmdContent);if(console.warn(tag,`第${attempt}次写入结果:`,writeSucceed?"成功":"失败"),!writeSucceed)return void(attempt<maxRetries?setTimeout(()=>writeToDevice(attempt+1),retryInterval):(cleanup(),resolve(null)));await BleDataProcess.sleep(retryInterval),!responsed&&attempt<maxRetries?(console.log(tag,`未收到响应,准备第${attempt+1}次重试`),writeToDevice(attempt+1)):responsed||(console.warn(tag,`达到最大重试次数(${maxRetries}),未收到响应`),cleanup(),resolve(null))}catch(error){console.error(tag,"写入过程发生错误:",error),cleanup(),reject(error)}};timeoutId=setTimeout(()=>{console.warn(tag,"操作超时"),cleanup(),resolve(null)},(maxRetries+2)*retryInterval),commonfun.eventBus.on("setBleChangedCharacteristicValue",dataHandler),writeToDevice().catch(error=>{cleanup(),reject(error)})}))},exports.setMTUAsync=(deviceId,mtu=512,delay=2500)=>new Promise((resolve,reject)=>{try{if(commonfun.getOS().isIOS)return resolve(!0);setTimeout(async()=>{await uni.setBLEMTU({deviceId:deviceId,mtu:mtu}),resolve(!0)},delay)}catch(error){console.error(error),reject(error)}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdAnalysis=require("./BleCmdAnalysis.js"),BleCmdFFAA=require("./BleCmdFFAA.js"),readAndSetParam=require("./readAndSetParam.js");const set_PlanCMD_DD=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"PlanCMD_DD");if(data){const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3);result={data:data,dataStr:dataStr,status:BleDataProcess.hex2string(data[2]),len:data[3],content:content}}else result={status:0,content:[]}}catch(error){console.error(error)}return result},get3B3CAsync=async deviceId=>{const addressCode=["0x00","0x00","0x00","0x00","0x00","0x00","0x00","0x00"],commandCode=["0x01"],data=[],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCrc16modbusCheck([...addressCode,...commandCode,...dataLength,...data],!1),command=["0x3b","0x3c",...addressCode,...commandCode,...dataLength,...data,...check,"0x0d"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:59==hexArr[0]&&60==hexArr[1],pkgLen:hexArr[11]+15}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrc16modbusCheck(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"3B3C")},resolve3B3C=data=>{if(!data)return null;let result={dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[10]),addr:BleDataProcess.hexArr2string(data.slice(2,10))};const content=data.slice(12,data.length-3);for(;content.length>0;){const[v1,v2,...v]=content.splice(0,content[1]+2);if(1==v1&&(result.productFlag=BleDataProcess.hex2string(v1),result.productLen=v2,v)){const[productType,frontType,protocolV,level]=v.map(o=>BleDataProcess.hex2string(o));Object.assign(result,{productType:productType,frontType:frontType,protocolV:protocolV,level:level})}2==v1&&(result.hardwareFlag=BleDataProcess.hex2string(v1),result.hardwareLen=v2,result.hardwareV=BleDataProcess.hexArr2Assic(v)),3==v1&&(result.sofewareFlag=BleDataProcess.hex2string(v1),result.sofewareLen=v2,result.sofewareV=BleDataProcess.hexArr2Assic(v)),4==v1&&(result.pcbFlag=BleDataProcess.hex2string(v1),result.pcbLen=v2,result.pcbContent=BleDataProcess.hexArr2Assic(v))}return result},getDDA503Async=async deviceId=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x03","0x00","0xff","0xfd","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&3==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_03");return hex?resolveDDA503(hex):null},resolveDDA503=data=>{if(!data)return null;const cmdResp03=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3),binArr=data[24].toString(2).padStart(8,"0").split("").reverse(),BC1=(data[16]<<8|data[17]).toString(2).padStart(16,"0").split("").reverse();console.log("BC1: ",BC1);const BC2=(data[18]<<8|data[19]).toString(2).padStart(16,"0").split("").reverse(),balances=BC1.concat(BC2);console.warn("BC: ---------------",balances);const fet=data[24],chargeSwitch=!!Number(binArr[0]),dischargeSwitch=!!Number(binArr[1]),BMSVersion=BleDataProcess.decimalToHex(data[22]),humidityIndex=2*data[26]+27,humidity=data[humidityIndex],n=Number(binArr[7])||136==humidity?10:100,totalVoltage=Number((((data[4]<<8)+(255&data[5]))/100).toFixed(2));let current=(data[6]<<8)+(255&data[7]);current=current>32768?(current-65536)/n:current/n;const electricity=Number(current.toFixed(2)),power=Number((totalVoltage*electricity).toFixed(2)),soc=data[23]??0,seriesNum=data[25]??0,volumeHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9]),surplusCapacity=Number((BleDataProcess.hexToDecimal(volumeHex)/n).toFixed(2)),normCapHex=BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),normCap=Number((BleDataProcess.hexToDecimal(normCapHex)/n).toFixed(2)),cycleHex=BleDataProcess.decimalToHex(data[12])+BleDataProcess.decimalToHex(data[13]),cycleIndex=BleDataProcess.hexToDecimal(cycleHex),fccHex=BleDataProcess.decimalToHex(data[humidityIndex+3])+BleDataProcess.decimalToHex(data[humidityIndex+4]),fullChargeCapacity=Number((BleDataProcess.hexToDecimal(fccHex)/n).toFixed(2)),SOH=cycleIndex<=100?100:Math.min(100,fullChargeCapacity/normCap*100),heatingState=!!Number(binArr[4])||!!Number(binArr[3]);let heatingCurrent=null;const hasHeatingCurrent=data[3]+7>=humidityIndex+9+4+1,hasEquilCurrent=data[3]+7>=humidityIndex+7+4+1;if(heatingState&&hasHeatingCurrent){const i=humidityIndex+9;heatingCurrent=heatingCurrent=((data[i]<<8|data[i+1])/100).toFixed(2)}let equilibriumCurrent=null;if(hasEquilCurrent){const i=humidityIndex+7;let equilCurrent=(data[i]<<8)+(255&data[i+1]);equilCurrent=equilCurrent>32768?(equilCurrent-65536)/1e3:equilCurrent/1e3,equilibriumCurrent=Number(equilCurrent.toFixed(2))}const isFactoryMode=!!Number(binArr[6]),equilibriumStatus=!(0===data[16]&&0===data[17]),protectStatus=!(0===data[20]&&0===data[21]),protectStateHex=BleDataProcess.decimalToHex(data[20])+BleDataProcess.decimalToHex(data[21]),protVal=BleDataProcess.hexToDecimal(protectStateHex);let alarmIndex=2*data[26]+28,alarmStateHex=BleDataProcess.decimalToHex(data[alarmIndex])+BleDataProcess.decimalToHex(data[alarmIndex+1]),alarmsState=BleDataProcess.hexToDecimal(alarmStateHex);const ntcNums=255&data[26],temperaturesList=Array.from({length:ntcNums},(_,i)=>((256*(255&data[26+2*i+1])+(255&data[26+2*i+2])-2731)/10).toFixed(1)),fahTempList=[];temperaturesList.forEach(el=>{const value=1.8*Number(el)+32;fahTempList.push(value.toFixed(1))});const temperatures=temperaturesList.map((item,index)=>({name:index+1,value:item})),hasProtocol=data[3]+7>=humidityIndex+11+3+1,protocolVersion=data[humidityIndex+11];return{cmdResp03:cmdResp03,status:BleDataProcess.hex2string(data[2]),len:data[3],softwareV:BleDataProcess.hex2string(content[18]),balances:balances,BMSVersion:BMSVersion,soc:soc,normCap:normCap,surplusCapacity:surplusCapacity,totalVoltage:totalVoltage,electricity:electricity,power:power,cycleIndex:cycleIndex,equilibriumStatus:equilibriumStatus,chargeSwitch:chargeSwitch,dischargeSwitch:dischargeSwitch,temperatures:temperatures,humidity:humidity,protectStatus:protectStatus,fullChargeCapacity:fullChargeCapacity,SOH:SOH,heatingState:heatingState,heatingCurrent:heatingCurrent,equilibriumCurrent:equilibriumCurrent,isFactoryMode:isFactoryMode,protVal:protVal,alarmsState:alarmsState,ntcNums:ntcNums,temperaturesList:temperaturesList,fahTempList:fahTempList,fet:fet,seriesNum:seriesNum,hasProtocol:hasProtocol,protocolVersion:protocolVersion}},resolveDDA504=(data,dataScope)=>{if(console.log("data: ",data),!data)return null;const cmdResp04=BleDataProcess.hexArr2string(data),voltageList=[];for(let index=4;index<parseInt(data[3])+4;index+=2){let voltageHex=BleDataProcess.decimalToHex(data[index])+BleDataProcess.decimalToHex(data[index+1]),voltage=BleDataProcess.hexToDecimal(voltageHex);voltageList.push(Number(voltage))}let highestVoltage=null,lowestVoltage=null,averageVoltage=null,dropoutVoltage=null;if(voltageList.length>0){highestVoltage=Math.max(...voltageList),lowestVoltage=Math.min(...voltageList);averageVoltage=voltageList.reduce((acc,cur)=>acc+cur,0)/voltageList.length;const dropout=highestVoltage-lowestVoltage,precision=dataScope?3:2;highestVoltage=Number((highestVoltage/1e3).toFixed(precision)),lowestVoltage=Number((lowestVoltage/1e3).toFixed(precision)),averageVoltage=Number((averageVoltage/1e3).toFixed(precision)),dropoutVoltage=Number((dropout/1e3).toFixed(precision))}voltageList.forEach((v,i)=>{let newV=v/1e3;voltageList[i]=Number(newV.toFixed(dataScope?3:2))});const voltageSeries=voltageList.map((item,index)=>({name:index+1,value:item}));return{cmdResp04:cmdResp04,voltageList:voltageList,voltageSeries:voltageSeries,highestVoltage:highestVoltage,lowestVoltage:lowestVoltage,averageVoltage:averageVoltage,dropoutVoltage:dropoutVoltage}},resolveDDA500=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],type:data[5]}},getDD5AFBAsync=async(deviceId,type,value)=>{const _command=["0xFB","0x02",type,value],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&251==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_FB")},resolveBaseDD=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3);return{dataStr:dataStr,status:BleDataProcess.hex2string(data[2]),len:data[3],content:content}},getDDA505Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x05","0x00","0xff","0xfb","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&5==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_05"),resolveDDA505=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],hardwareV:BleDataProcess.hexArr2Assic(data.slice(4,data.length-3))}},resolveProtections=binary=>{const arr=binary.split("").reverse(),map=["device.0041","device.0042","device.0043","device.0044","device.0045","device.0046","device.0047","device.0048","device.0049","device.0050","device.0051","device.0052","device.0053","device.0054","device.0055","device.00551"];let _arr=[],_indexs=[];for(let i=0;i<arr.length;i++)1==arr[i]&&(_arr.push(map[i]),_indexs.push(i));return{_arr:_arr,_indexs:_indexs}};exports.activateAsync=async deviceId=>{try{const startTime=+new Date;let acStatus=!1;const mosRes=await readAndSetParam.controlSwitch(deviceId,"0x00",!0,!0),disChargMOSRes=mosRes?.dataStr,disChargEndTime=+new Date,activeHex=await getDD5AFBAsync(deviceId,"0x05","0x01"),activeResult=resolveBaseDD(activeHex);console.log("激活指令结果: ",{activeHex:activeHex,activeResult:activeResult});const activeRes=activeResult?.dataStr;let endTime=+new Date,baseInfo=null,voltageInfo=null,steps=[];if("00"==activeResult?.status)steps.push(4),acStatus=!0;else if("81"==activeResult?.status||"84"==activeResult?.status)"00"==mosRes?.status?(acStatus=!0,steps.push(5)):(acStatus=!1,steps.push(10));else if("82"==activeResult?.status||"83"==activeResult?.status)acStatus=!1,steps.push(6);else if(!activeResult||null==activeResult){await BleDataProcess.sleep(300);const baseInfo=await getDDA503Async(deviceId);baseInfo?.dischargeSwitch?(acStatus=!0,steps.push(7)):(acStatus=!1,steps.push(8)),endTime=+new Date}return{disChargMOSRes:disChargMOSRes,activeHex:activeHex,activeRes:activeRes,baseInfo:baseInfo,voltageInfo:voltageInfo,startTime:startTime,disChargEndTime:disChargEndTime,endTime:endTime,acStatus:acStatus,steps:steps}}catch(error){return console.log("🚀 ~ BleApiManager ~ activateAsync ~ error:",error),null}},exports.enterFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A00025678FF3077"),exports.existFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A01022828ffad77"),exports.get3B3CAsync=get3B3CAsync,exports.get3B3CInfo=({deviceId:deviceId,macAddr:macAddr,moduleType:moduleType,productType:productType})=>new Promise(async(resolve,reject)=>{let reportData={macAddr:macAddr,moduleTypeKey:moduleType,productKey:productType},_3b3c=null,_dda5_03=null,_dda5_05=null,_ffaa_80=null;try{if(!deviceId)throw new Error("deviceId required");const _ffaa_80_hex=await BleCmdFFAA.getFFAA80Async(deviceId,"AT^VERSION?");_ffaa_80=BleCmdFFAA.resolveFFAA80(_ffaa_80_hex),console.warn("Report-3B3C _ffaa_80 ",{_ffaa_80_hex:_ffaa_80_hex,_ffaa_80:_ffaa_80}),_ffaa_80&&(reportData.moduleVersion=_ffaa_80?.moduleVersion);const _3b3c_hex=await get3B3CAsync(deviceId);if(_3b3c=resolve3B3C(_3b3c_hex),console.warn("Report-3B3C _3b3c ",{_3b3c_hex:_3b3c_hex,_3b3c:_3b3c}),_3b3c)reportData.cmdContent=_3b3c?.dataStr;else{const _dda5_03_hex=await getDDA503Async(deviceId);_dda5_03=resolveDDA503(_dda5_03_hex),console.warn("Report-3B3C _dda5_03 ",{_dda5_03_hex:_dda5_03_hex,_dda5_03:_dda5_03}),_dda5_03&&(reportData.bmsVersion=_dda5_03?.softwareV);const _dda5_05_hex=await getDDA505Async(deviceId);_dda5_05=resolveDDA505(_dda5_05_hex),console.warn("Report-3B3C _dda5_05 ",{_dda5_05_hex:_dda5_05_hex,_dda5_05:_dda5_05}),_dda5_05&&(reportData.bmsSn=_dda5_05?.hardwareV)}resolve({reportData:reportData,_3b3c:_3b3c,_dda5_03:_dda5_03,_dda5_05:_dda5_05,_ffaa_80:_ffaa_80})}catch(error){reject(error)}}),exports.getChipTypeAsync=async deviceId=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x00","0x00","0x00","0x00","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&0==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_00");return hex?resolveDDA500(hex):null},exports.getDD5A0AAsync=async(deviceId,value)=>{const _command=["0x0A","0x02",...BleDataProcess.stringToTwoHexArray(value)],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&10==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_0A_${value}`)},exports.getDD5A0EAsync=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x0E","0x02","0x81","0x18","0xFF","0x57","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&14==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_0E_复位"),exports.getDD5A17Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x17","0x02","0x00","0x01","0xFF","0xE6","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&23==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_17-清除电池循环次数"),exports.getDD5AAllAsync=async(deviceId,path,lengthHex,values,type)=>{const _command=[path,lengthHex,...values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_${path}_${type}`)},exports.getDD5AE0Async=async(deviceId,value)=>{const hex=100*value,hexStr=BleDataProcess.decimalToHex(hex,4),_values=[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`],_command=["0xE0","0x02",..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.warn("=======CCCCCCC=SET===",{value:value,hex:hex,hexStr:hexStr,_values:_values,_command:_command,checks:checks,command:command}),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&224==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E0")},exports.getDD5AE1Async=async(deviceId,value)=>{const _command=["0xE1","0x02","0x00",value],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&225==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E1")},exports.getDD5AE4Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0x5a","0xe4","0x02","0x18","0x81","0xfe","0x81","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&228==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E4"),exports.getDD5AFAAsync=async(deviceId,value)=>{const hex=100*value,hexStr=BleDataProcess.decimalToHex(hex,4),_command=["0xFA","0x05","0x00","0x70","0x01",...[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_FA")},exports.getDD5AFBAsync=getDD5AFBAsync,exports.getDDA4F0Async=async deviceId=>{const command=["0xDD","0xA4","0xF0","0x00"],checks=BleDataProcess.generateCrcCheckSum(command.slice(2)),fullCommand=[...command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:fullCommand,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&240==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA4_F0")},exports.getDDA503Async=getDDA503Async,exports.getDDA504Async=async(deviceId,dataScope)=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x04","0x00","0xff","0xfc","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&4==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_04");return hex?resolveDDA504(hex,dataScope):null},exports.getDDA505Async=getDDA505Async,exports.getDDA506Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x06","0x00","0xff","0xfa","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&6==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_06"),exports.getDDA507Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0xA5","0x07","0x00","0xFF","0xF9","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&7==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_07历史运行履历总数"),exports.getDDA508Async=async(deviceId,i=0)=>{const _command=["0x08",`0x${i.toString(16).padStart(2,0)}`],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&8==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_08读取履历详情")},exports.getDDA5DCAsync=deviceId=>{const _command=["0xDE","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&222==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_DC")},exports.getDDA5FAAsync=async(deviceId,paramNo,length)=>{const _values=[...paramNo,length],_command=["0xFA",BleDataProcess.decimalToHex(_values.length),..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"READ_DDA5_FA")},exports.getDDA5OldAsync=async(deviceId,path)=>{const values=[path,"0x00"],checks=BleDataProcess.generateCrcCheckSum(values),command=["0xDD","0xa5",...values,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_读旧协议读参")},exports.getProtectCountCmd=async deviceId=>{const data=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0xaa","0x00","0xff","0x56","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&170==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA5_AA保护次数"),arr=[];for(let i=4;i<data.length-4;i+=2){const offset=i;console.log("offset",offset);let value=((255&data[offset])<<8)+(255&data[offset+1]);arr.push(value)}return arr},exports.readExistFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A01020000FFFD77"),exports.resetCapacity=deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x0A","0x02","0x01","0x00","0xFF","0xF3","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&10==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_0A"),exports.resolve3B3C=resolve3B3C,exports.resolveBMSCmd=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3]}},exports.resolveBaseDD=resolveBaseDD,exports.resolveDD5A0A=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),statusDec=data[2],len=data[3],succeeded=0===statusDec;return{dataStr:dataStr,status:BleDataProcess.hex2string(statusDec),len:len,succeeded:succeeded,message:succeeded?"CMD_EXEC_SUCCESS":"CMD_EXEC_FAIL"}},exports.resolveDDA4F0=data=>{if(!data)return null;if(240==data[1]&&4==data[3]){const runTime=data[4]<<24|data[5]<<16|data[6]<<8|data[7];return{runTime:runTime,runTimeHour:(runTime/3600).toFixed(2),raw:BleDataProcess.hexArr2string(data)}}return null},exports.resolveDDA500=resolveDDA500,exports.resolveDDA503=resolveDDA503,exports.resolveDDA504=resolveDDA504,exports.resolveDDA505=resolveDDA505,exports.resolveDDA506=data=>{if(!data)return null;if(6==data[1]&&0==data[2]&&6==data[3]){const seconds=BleDataProcess.fromBCD(data[4]),minutes=BleDataProcess.fromBCD(data[5]),hours=BleDataProcess.fromBCD(data[6]),day=BleDataProcess.fromBCD(data[7]),month=BleDataProcess.fromBCD(data[8]),timeStr=`${2e3+BleDataProcess.fromBCD(data[9])}-${String(month).padStart(2,0)}-${String(day).padStart(2,0)} ${String(hours).padStart(2,0)}:${String(minutes).padStart(2,0)}:${String(seconds).padStart(2,0)}`;return console.log("timeStr: ",timeStr,BleDataProcess.isWithin30Minutes(timeStr)),BleDataProcess.isWithin30Minutes(timeStr)}return!1},exports.resolveDDA508=data=>{if(!data)return null;if(!data)return null;const hexArr=data.map(o=>o.toString(16).padStart(2,"0").toUpperCase()),f=s=>parseInt(s,16),fet=data[40].toString(2).padStart(8,"0").split("").reverse(),protection=f(hexArr[23]+hexArr[22]).toString(2).padStart(16,"0"),n=Number(fet[7])?10:100;let current=(hexArr[16]<<8)+(255&hexArr[17]);current=current>32768?(current-65536)/n:current/n;const electricity=Number(current.toFixed(2)),sysTime=65536*data[30]+256*data[31]+data[32];console.log("hexArr[30], hexArr[31], hexArr[32]",hexArr[30],hexArr[31],hexArr[32]),console.warn("sysTime: ",sysTime);const reportTime=65536*data[11]+256*data[12]+data[13];console.log("data[11], data[12], data[13]",data[11],data[12],data[13]),console.warn("reportTime: ",reportTime);const time=60*Math.abs(sysTime-reportTime)*1e3;console.warn("time: ",time);const timestamp=(new Date).getTime()-time;return console.warn("new Date().getTime(): ",(new Date).getTime()),{dataStr:hexArr.join(""),status:BleDataProcess.hex2string(data[2]),len:data[3],total:f(hexArr[4]+hexArr[5]),page:f(hexArr[6]+hexArr[7]),type:data[8],sysTime:sysTime,timestamp:timestamp,sumV:(f(hexArr[15]+hexArr[14])/100).toFixed(2),sumE:electricity,restC:(f(hexArr[19]+hexArr[18])/n).toFixed(2),designC:(f(hexArr[21]+hexArr[20])/n).toFixed(2),protections:resolveProtections(protection)._arr,protectionIndex:resolveProtections(protection)._indexs,tH:((f(hexArr[27]+hexArr[26])-2731)/10).toFixed(2),tL:((f(hexArr[29]+hexArr[28])-2731)/10).toFixed(2),vH:(f(hexArr[35]+hexArr[34])/1e3).toFixed(3),vL:(f(hexArr[37]+hexArr[36])/1e3).toFixed(3),nH:f(hexArr[38]),nL:f(hexArr[39]),fet:fet.join("")}},exports.resolveDDA5DC=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),status=BleDataProcess.hex2string(data[2]),len=255&data[3],resistances_milliohm=[];for(let i=4;i<4+len;i+=2){const value=((255&data[i])<<8)+(255&data[i+1]);resistances_milliohm.push(value)}console.log("均衡线电阻(mΩ): ",resistances_milliohm,data);let maxResistance=null,minResistance=null,avgResistance=null;resistances_milliohm.length&&(maxResistance=Math.max(...resistances_milliohm),minResistance=Math.min(...resistances_milliohm),avgResistance=resistances_milliohm.reduce((a,c)=>a+c,0)/resistances_milliohm.length);const resistances_ohm=resistances_milliohm.map(v=>Number((v/1e3).toFixed(3))),resistancesSeries=resistances_ohm.map((v,idx)=>({name:idx+1,value:v}));return{dataStr:dataStr,status:status,len:len,resistances_milliohm:resistances_milliohm,resistances_ohm:resistances_ohm,maxResistance_milliohm:maxResistance,minResistance_milliohm:minResistance,avgResistance_milliohm:avgResistance,maxResistance_ohm:null!=maxResistance?Number((maxResistance/1e3).toFixed(3)):null,minResistance_ohm:null!=minResistance?Number((minResistance/1e3).toFixed(3)):null,avgResistance_ohm:null!=avgResistance?Number((avgResistance/1e3).toFixed(3)):null,resistancesSeries:resistancesSeries}},exports.resolveDDA5FA=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],type:data[5],value:data.slice(7,-3)}},exports.resolveProtections=resolveProtections,exports.sendBMSAsync=async(deviceId,values)=>{const command=values.match(/[0-9a-fA-F]{2}/g)?.map(item=>`0x${item}`)||[];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==command[2],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_${command[2]}`)},exports.setDD5AE3sync=async deviceId=>{const now=new Date,year=now.getFullYear(),month=now.getMonth()+1,day=now.getDate(),hours=now.getHours(),minutes=now.getMinutes(),seconds=now.getSeconds(),content=["0xE3","0x07","0x06",...[BleDataProcess.toBCD(seconds),BleDataProcess.toBCD(minutes),128|BleDataProcess.toBCD(hours),BleDataProcess.toBCD(day),BleDataProcess.toBCD(month),BleDataProcess.toBCD(year-2e3)].map(b=>"0x"+b.toString(16).padStart(2,"0"))],checks=BleDataProcess.generateCrcCheckSum(content),command=["0xDD","0x5A",...content,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&227==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"SET_DDA5_E3")},exports.setDDA5FAAsync=async(deviceId,paramNo,valueLength,content)=>{const _values=[...paramNo,valueLength,...content],_command=["0xFA",BleDataProcess.decimalToHex(_values.length),..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"SET_DDA5_FA")},exports.setDDA5OldAsync=async(deviceId,path,value,type="")=>{const values=[path,"0x02",...value],checks=BleDataProcess.generateCrcCheckSum(values),command=["0xDD","0x5A",...values,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA5_写旧协议读参"+type)},exports.set_PlanCMD_3B3C=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:59==hexArr[0]&&60==hexArr[1],pkgLen:hexArr[11]+15}),pkgVerifyHandler:pkg=>({verified:!0})},"PlanCMD_3B3C");if(data){const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(12,data.length-3);result={dataStr:dataStr,status:128==data[10]?1:0,addr:BleDataProcess.hexArr2string(data.slice(2,10)),content:content}}}catch(error){console.error(error)}return result},exports.set_PlanCMD_DD=set_PlanCMD_DD;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdAnalysis=require("./BleCmdAnalysis.js"),BleCmdFFAA=require("./BleCmdFFAA.js"),readAndSetParam=require("./readAndSetParam.js");const set_PlanCMD_DD=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"PlanCMD_DD");if(data){const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3);result={data:data,dataStr:dataStr,status:BleDataProcess.hex2string(data[2]),len:data[3],content:content}}else result={status:0,content:[]}}catch(error){console.error(error)}return result},get3B3CAsync=async deviceId=>{const addressCode=["0x00","0x00","0x00","0x00","0x00","0x00","0x00","0x00"],commandCode=["0x01"],data=[],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCrc16modbusCheck([...addressCode,...commandCode,...dataLength,...data],!1),command=["0x3b","0x3c",...addressCode,...commandCode,...dataLength,...data,...check,"0x0d"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:59==hexArr[0]&&60==hexArr[1],pkgLen:hexArr[11]+15}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrc16modbusCheck(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"3B3C")},resolve3B3C=data=>{if(!data)return null;let result={dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[10]),addr:BleDataProcess.hexArr2string(data.slice(2,10))};const content=data.slice(12,data.length-3);for(;content.length>0;){if(content.length<2){console.warn("Content too short to parse, remaining:",content);break}const len=Math.min(content[1]+2,content.length),[v1,v2,...v]=content.splice(0,len);if(v.length===v2){if(1==v1&&(result.productFlag=BleDataProcess.hex2string(v1),result.productLen=v2,v)){const[productType,frontType,protocolV,level]=v.map(o=>BleDataProcess.hex2string(o));Object.assign(result,{productType:productType,frontType:frontType,protocolV:protocolV,level:level})}2==v1&&(result.hardwareFlag=BleDataProcess.hex2string(v1),result.hardwareLen=v2,result.hardwareV=BleDataProcess.hexArr2Assic(v)),3==v1&&(result.sofewareFlag=BleDataProcess.hex2string(v1),result.sofewareLen=v2,result.sofewareV=BleDataProcess.hexArr2Assic(v)),4==v1&&(result.pcbFlag=BleDataProcess.hex2string(v1),result.pcbLen=v2,result.pcbContent=BleDataProcess.hexArr2Assic(v))}else console.warn(`Data length mismatch for type ${v1}: expected ${v2}, got ${v.length}`)}return result},getDDA503Async=async deviceId=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x03","0x00","0xff","0xfd","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&3==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_03");return hex?resolveDDA503(hex):null},resolveDDA503=data=>{if(!data)return null;const cmdResp03=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3),binArr=data[24].toString(2).padStart(8,"0").split("").reverse(),BC1=(data[16]<<8|data[17]).toString(2).padStart(16,"0").split("").reverse();console.log("BC1: ",BC1);const BC2=(data[18]<<8|data[19]).toString(2).padStart(16,"0").split("").reverse(),balances=BC1.concat(BC2);console.warn("BC: ---------------",balances);const fet=data[24],chargeSwitch=!!Number(binArr[0]),dischargeSwitch=!!Number(binArr[1]),BMSVersion=BleDataProcess.decimalToHex(data[22]),humidityIndex=2*data[26]+27,humidity=data[humidityIndex],n=Number(binArr[7])||136==humidity?10:100,totalVoltage=Number((((data[4]<<8)+(255&data[5]))/100).toFixed(2));let current=(data[6]<<8)+(255&data[7]);current=current>32768?(current-65536)/n:current/n;const electricity=Number(current.toFixed(2)),power=Number((totalVoltage*electricity).toFixed(2)),soc=data[23]??0,seriesNum=data[25]??0,volumeHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9]),surplusCapacity=Number((BleDataProcess.hexToDecimal(volumeHex)/n).toFixed(2)),normCapHex=BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),normCap=Number((BleDataProcess.hexToDecimal(normCapHex)/n).toFixed(2)),cycleHex=BleDataProcess.decimalToHex(data[12])+BleDataProcess.decimalToHex(data[13]),cycleIndex=BleDataProcess.hexToDecimal(cycleHex),fccHex=BleDataProcess.decimalToHex(data[humidityIndex+3])+BleDataProcess.decimalToHex(data[humidityIndex+4]),fullChargeCapacity=Number((BleDataProcess.hexToDecimal(fccHex)/n).toFixed(2)),SOH=cycleIndex<=100?100:Math.min(100,fullChargeCapacity/normCap*100),heatingState=!!Number(binArr[4])||!!Number(binArr[3]);let heatingCurrent=null;const hasHeatingCurrent=data[3]+7>=humidityIndex+9+4+1,hasEquilCurrent=data[3]+7>=humidityIndex+7+4+1;if(heatingState&&hasHeatingCurrent){const i=humidityIndex+9;heatingCurrent=heatingCurrent=((data[i]<<8|data[i+1])/100).toFixed(2)}let equilibriumCurrent=null;if(hasEquilCurrent){const i=humidityIndex+7;let equilCurrent=(data[i]<<8)+(255&data[i+1]);equilCurrent=equilCurrent>32768?(equilCurrent-65536)/1e3:equilCurrent/1e3,equilibriumCurrent=Number(equilCurrent.toFixed(2))}const isFactoryMode=!!Number(binArr[6]),equilibriumStatus=!(0===data[16]&&0===data[17]),protectStatus=!(0===data[20]&&0===data[21]),protectStateHex=BleDataProcess.decimalToHex(data[20])+BleDataProcess.decimalToHex(data[21]),protVal=BleDataProcess.hexToDecimal(protectStateHex);let alarmIndex=2*data[26]+28,alarmStateHex=BleDataProcess.decimalToHex(data[alarmIndex])+BleDataProcess.decimalToHex(data[alarmIndex+1]),alarmsState=BleDataProcess.hexToDecimal(alarmStateHex);const ntcNums=255&data[26],temperaturesList=Array.from({length:ntcNums},(_,i)=>((256*(255&data[26+2*i+1])+(255&data[26+2*i+2])-2731)/10).toFixed(1)),fahTempList=[];temperaturesList.forEach(el=>{const value=1.8*Number(el)+32;fahTempList.push(value.toFixed(1))});const temperatures=temperaturesList.map((item,index)=>({name:index+1,value:item})),hasProtocol=data[3]+7>=humidityIndex+11+3+1,protocolVersion=data[humidityIndex+11];return{cmdResp03:cmdResp03,status:BleDataProcess.hex2string(data[2]),len:data[3],softwareV:BleDataProcess.hex2string(content[18]),balances:balances,BMSVersion:BMSVersion,soc:soc,normCap:normCap,surplusCapacity:surplusCapacity,totalVoltage:totalVoltage,electricity:electricity,power:power,cycleIndex:cycleIndex,equilibriumStatus:equilibriumStatus,chargeSwitch:chargeSwitch,dischargeSwitch:dischargeSwitch,temperatures:temperatures,humidity:humidity,protectStatus:protectStatus,fullChargeCapacity:fullChargeCapacity,SOH:SOH,heatingState:heatingState,heatingCurrent:heatingCurrent,equilibriumCurrent:equilibriumCurrent,eqCurr:equilibriumCurrent,isFactoryMode:isFactoryMode,protVal:protVal,alarmsState:alarmsState,ntcNums:ntcNums,temperaturesList:temperaturesList,fahTempList:fahTempList,fet:fet,seriesNum:seriesNum,hasProtocol:hasProtocol,protocolVersion:protocolVersion}},resolveDDA504=(data,dataScope)=>{if(console.log("data: ",data),!data)return null;const cmdResp04=BleDataProcess.hexArr2string(data),voltageList=[];for(let index=4;index<parseInt(data[3])+4;index+=2){let voltageHex=BleDataProcess.decimalToHex(data[index])+BleDataProcess.decimalToHex(data[index+1]),voltage=BleDataProcess.hexToDecimal(voltageHex);voltageList.push(Number(voltage))}let highestVoltage=null,lowestVoltage=null,averageVoltage=null,dropoutVoltage=null;if(voltageList.length>0){highestVoltage=Math.max(...voltageList),lowestVoltage=Math.min(...voltageList);averageVoltage=voltageList.reduce((acc,cur)=>acc+cur,0)/voltageList.length;const dropout=highestVoltage-lowestVoltage,precision=dataScope?3:2;highestVoltage=Number((highestVoltage/1e3).toFixed(precision)),lowestVoltage=Number((lowestVoltage/1e3).toFixed(precision)),averageVoltage=Number((averageVoltage/1e3).toFixed(precision)),dropoutVoltage=Number((dropout/1e3).toFixed(precision))}voltageList.forEach((v,i)=>{let newV=v/1e3;voltageList[i]=Number(newV.toFixed(dataScope?3:2))});const voltageSeries=voltageList.map((item,index)=>({name:index+1,value:item}));return{cmdResp04:cmdResp04,voltageList:voltageList,voltageSeries:voltageSeries,highestVoltage:highestVoltage,lowestVoltage:lowestVoltage,averageVoltage:averageVoltage,dropoutVoltage:dropoutVoltage}},resolveDDA500=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],type:data[5]}},getDD5AFBAsync=async(deviceId,type,value)=>{const _command=["0xFB","0x02",type,value],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&251==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_FB")},resolveBaseDD=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(4,data.length-3);return{dataStr:dataStr,status:BleDataProcess.hex2string(data[2]),len:data[3],content:content}},getDDA505Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x05","0x00","0xff","0xfb","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&5==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_05"),resolveDDA505=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],hardwareV:BleDataProcess.hexArr2Assic(data.slice(4,data.length-3))}},resolveProtections=binary=>{const arr=binary.split("").reverse(),map=["device.0041","device.0042","device.0043","device.0044","device.0045","device.0046","device.0047","device.0048","device.0049","device.0050","device.0051","device.0052","device.0053","device.0054","device.0055","device.00551"];let _arr=[],_indexs=[];for(let i=0;i<arr.length;i++)1==arr[i]&&(_arr.push(map[i]),_indexs.push(i));return{_arr:_arr,_indexs:_indexs}};exports.activateAsync=async deviceId=>{try{const startTime=+new Date;let acStatus=!1;const mosRes=await readAndSetParam.controlSwitch(deviceId,"0x00",!0,!0),disChargMOSRes=mosRes?.dataStr,disChargEndTime=+new Date,activeHex=await getDD5AFBAsync(deviceId,"0x05","0x01"),activeResult=resolveBaseDD(activeHex);console.log("激活指令结果: ",{activeHex:activeHex,activeResult:activeResult});const activeRes=activeResult?.dataStr;let endTime=+new Date,baseInfo=null,voltageInfo=null,steps=[];if("00"==activeResult?.status)steps.push(4),acStatus=!0;else if("81"==activeResult?.status||"84"==activeResult?.status)"00"==mosRes?.status?(acStatus=!0,steps.push(5)):(acStatus=!1,steps.push(10));else if("82"==activeResult?.status||"83"==activeResult?.status)acStatus=!1,steps.push(6);else if(!activeResult||null==activeResult){await BleDataProcess.sleep(300);const baseInfo=await getDDA503Async(deviceId);baseInfo?.dischargeSwitch?(acStatus=!0,steps.push(7)):(acStatus=!1,steps.push(8)),endTime=+new Date}return{disChargMOSRes:disChargMOSRes,activeHex:activeHex,activeRes:activeRes,baseInfo:baseInfo,voltageInfo:voltageInfo,startTime:startTime,disChargEndTime:disChargEndTime,endTime:endTime,acStatus:acStatus,steps:steps}}catch(error){return console.log("🚀 ~ BleApiManager ~ activateAsync ~ error:",error),null}},exports.enterFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A00025678FF3077"),exports.existFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A01022828ffad77"),exports.get3B3CAsync=get3B3CAsync,exports.get3B3CInfo=({deviceId:deviceId,macAddr:macAddr,moduleType:moduleType,productType:productType})=>new Promise(async(resolve,reject)=>{let reportData={macAddr:macAddr,moduleTypeKey:moduleType,productKey:productType},_3b3c=null,_dda5_03=null,_dda5_05=null;try{if(!deviceId)throw new Error("deviceId required");const _ffaa_80=await BleCmdFFAA.getFFAA80Async(deviceId,"AT^VERSION?");console.warn("Report-3B3C _ffaa_80 ",{_ffaa_80:_ffaa_80}),_ffaa_80&&(reportData.moduleVersion=_ffaa_80?.moduleVersion);const _3b3c_hex=await get3B3CAsync(deviceId);if(_3b3c=resolve3B3C(_3b3c_hex),console.warn("Report-3B3C _3b3c ",{_3b3c_hex:_3b3c_hex,_3b3c:_3b3c}),_3b3c)reportData.cmdContent=_3b3c?.dataStr,reportData.bmsVersion=_3b3c?.sofewareV;else{const _dda5_03_hex=await getDDA503Async(deviceId);_dda5_03=resolveDDA503(_dda5_03_hex),console.warn("Report-3B3C _dda5_03 ",{_dda5_03_hex:_dda5_03_hex,_dda5_03:_dda5_03}),_dda5_03&&(reportData.bmsVersion=_dda5_03?.softwareV);const _dda5_05_hex=await getDDA505Async(deviceId);_dda5_05=resolveDDA505(_dda5_05_hex),console.warn("Report-3B3C _dda5_05 ",{_dda5_05_hex:_dda5_05_hex,_dda5_05:_dda5_05}),_dda5_05&&(reportData.bmsSn=_dda5_05?.hardwareV)}resolve({reportData:reportData,_3b3c:_3b3c,_dda5_03:_dda5_03,_dda5_05:_dda5_05,_ffaa_80:_ffaa_80})}catch(error){reject(error)}}),exports.getChipTypeAsync=async deviceId=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x00","0x00","0x00","0x00","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&0==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_00");return hex?resolveDDA500(hex):null},exports.getDD5A0AAsync=async(deviceId,value)=>{const _command=["0x0A","0x02",...BleDataProcess.stringToTwoHexArray(value)],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&10==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_0A_${value}`)},exports.getDD5A0EAsync=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x0E","0x02","0x81","0x18","0xFF","0x57","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&14==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_0E_复位"),exports.getDD5A17Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x17","0x02","0x00","0x01","0xFF","0xE6","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&23==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_17-清除电池循环次数"),exports.getDD5AAllAsync=async(deviceId,path,lengthHex,values,type)=>{const _command=[path,lengthHex,...values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_${path}_${type}`)},exports.getDD5AE0Async=async(deviceId,value)=>{const hex=100*value,hexStr=BleDataProcess.decimalToHex(hex,4),_values=[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`],_command=["0xE0","0x02",..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return console.warn("=======CCCCCCC=SET===",{value:value,hex:hex,hexStr:hexStr,_values:_values,_command:_command,checks:checks,command:command}),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&224==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E0")},exports.getDD5AE1Async=async(deviceId,value)=>{const _command=["0xE1","0x02","0x00",value],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&225==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E1")},exports.getDD5AE4Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0x5a","0xe4","0x02","0x18","0x81","0xfe","0x81","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&228==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_E4"),exports.getDD5AFAAsync=async(deviceId,value)=>{const hex=100*value,hexStr=BleDataProcess.decimalToHex(hex,4),_command=["0xFA","0x05","0x00","0x70","0x01",...[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_FA")},exports.getDD5AFBAsync=getDD5AFBAsync,exports.getDDA4F0Async=async deviceId=>{const command=["0xDD","0xA4","0xF0","0x00"],checks=BleDataProcess.generateCrcCheckSum(command.slice(2)),fullCommand=[...command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:fullCommand,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&240==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA4_F0")},exports.getDDA503Async=getDDA503Async,exports.getDDA504Async=async(deviceId,dataScope)=>{const hex=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x04","0x00","0xff","0xfc","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&4==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_04");return hex?resolveDDA504(hex,dataScope):null},exports.getDDA505Async=getDDA505Async,exports.getDDA506Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0x06","0x00","0xff","0xfa","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&6==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_06"),exports.getDDA507Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0xA5","0x07","0x00","0xFF","0xF9","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&7==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_07历史运行履历总数"),exports.getDDA508Async=async(deviceId,i=0)=>{const _command=["0x08",`0x${i.toString(16).padStart(2,0)}`],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&8==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_08读取履历详情")},exports.getDDA5DCAsync=deviceId=>{const _command=["0xDE","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&222==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_DC")},exports.getDDA5FAAsync=async(deviceId,paramNo,length)=>{const _values=[...paramNo,length],_command=["0xFA",BleDataProcess.decimalToHex0x(_values.length),..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA5",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"READ_DDA5_FA")},exports.getDDA5OldAsync=async(deviceId,path)=>{const values=[path,"0x00"],checks=BleDataProcess.generateCrcCheckSum(values),command=["0xDD","0xa5",...values,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA5_读旧协议读参")},exports.getProtectCountCmd=async deviceId=>{const data=await BleCmdAnalysis.getData(deviceId,{command:["0xdd","0xa5","0xaa","0x00","0xff","0x56","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&170==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA5_AA保护次数"),arr=[];for(let i=4;i<data.length-4;i+=2){const offset=i;console.log("offset",offset);let value=((255&data[offset])<<8)+(255&data[offset+1]);arr.push(value)}return arr},exports.readExistFactory=async deviceId=>set_PlanCMD_DD(deviceId,"DD5A01020000FFFD77"),exports.resetCapacity=deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xDD","0x5A","0x0A","0x02","0x01","0x00","0xFF","0xF3","0x77"],commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&10==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DD5A_0A"),exports.resolve3B3C=resolve3B3C,exports.resolveBMSCmd=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3]}},exports.resolveBaseDD=resolveBaseDD,exports.resolveDD5A0A=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),statusDec=data[2],len=data[3],succeeded=0===statusDec;return{dataStr:dataStr,status:BleDataProcess.hex2string(statusDec),len:len,succeeded:succeeded,message:succeeded?"CMD_EXEC_SUCCESS":"CMD_EXEC_FAIL"}},exports.resolveDDA4F0=data=>{if(!data)return null;if(240==data[1]&&4==data[3]){const runTime=data[4]<<24|data[5]<<16|data[6]<<8|data[7];return{runTime:runTime,runTimeHour:(runTime/3600).toFixed(2),raw:BleDataProcess.hexArr2string(data)}}return null},exports.resolveDDA500=resolveDDA500,exports.resolveDDA503=resolveDDA503,exports.resolveDDA504=resolveDDA504,exports.resolveDDA505=resolveDDA505,exports.resolveDDA506=data=>{if(!data)return null;if(6==data[1]&&0==data[2]&&6==data[3]){const seconds=BleDataProcess.fromBCD(data[4]),minutes=BleDataProcess.fromBCD(data[5]),hours=BleDataProcess.fromBCD(data[6]),day=BleDataProcess.fromBCD(data[7]),month=BleDataProcess.fromBCD(data[8]),timeStr=`${2e3+BleDataProcess.fromBCD(data[9])}-${String(month).padStart(2,0)}-${String(day).padStart(2,0)} ${String(hours).padStart(2,0)}:${String(minutes).padStart(2,0)}:${String(seconds).padStart(2,0)}`;return console.log("timeStr: ",timeStr,BleDataProcess.isWithin30Minutes(timeStr)),BleDataProcess.isWithin30Minutes(timeStr)}return!1},exports.resolveDDA508=data=>{if(!data)return null;if(!data)return null;const hexArr=data.map(o=>o.toString(16).padStart(2,"0").toUpperCase()),f=s=>parseInt(s,16),fet=data[40].toString(2).padStart(8,"0").split("").reverse(),protection=f(hexArr[23]+hexArr[22]).toString(2).padStart(16,"0"),n=Number(fet[7])?10:100;let current=(hexArr[16]<<8)+(255&hexArr[17]);current=current>32768?(current-65536)/n:current/n;const electricity=Number(current.toFixed(2)),sysTime=65536*data[30]+256*data[31]+data[32];console.log("hexArr[30], hexArr[31], hexArr[32]",hexArr[30],hexArr[31],hexArr[32]),console.warn("sysTime: ",sysTime);const reportTime=65536*data[11]+256*data[12]+data[13];console.log("data[11], data[12], data[13]",data[11],data[12],data[13]),console.warn("reportTime: ",reportTime);const time=60*Math.abs(sysTime-reportTime)*1e3;console.warn("time: ",time);const timestamp=(new Date).getTime()-time;return console.warn("new Date().getTime(): ",(new Date).getTime()),{dataStr:hexArr.join(""),status:BleDataProcess.hex2string(data[2]),len:data[3],total:f(hexArr[4]+hexArr[5]),page:f(hexArr[6]+hexArr[7]),type:data[8],sysTime:sysTime,timestamp:timestamp,sumV:(f(hexArr[15]+hexArr[14])/100).toFixed(2),sumE:electricity,restC:(f(hexArr[19]+hexArr[18])/n).toFixed(2),designC:(f(hexArr[21]+hexArr[20])/n).toFixed(2),protections:resolveProtections(protection)._arr,protectionIndex:resolveProtections(protection)._indexs,tH:((f(hexArr[27]+hexArr[26])-2731)/10).toFixed(2),tL:((f(hexArr[29]+hexArr[28])-2731)/10).toFixed(2),vH:(f(hexArr[35]+hexArr[34])/1e3).toFixed(3),vL:(f(hexArr[37]+hexArr[36])/1e3).toFixed(3),nH:f(hexArr[38]),nL:f(hexArr[39]),fet:fet.join("")}},exports.resolveDDA5DC=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),status=BleDataProcess.hex2string(data[2]),len=255&data[3],resistances_milliohm=[];for(let i=4;i<4+len;i+=2){const value=((255&data[i])<<8)+(255&data[i+1]);resistances_milliohm.push(value)}console.log("均衡线电阻(mΩ): ",resistances_milliohm,data);let maxResistance=null,minResistance=null,avgResistance=null;resistances_milliohm.length&&(maxResistance=Math.max(...resistances_milliohm),minResistance=Math.min(...resistances_milliohm),avgResistance=resistances_milliohm.reduce((a,c)=>a+c,0)/resistances_milliohm.length);const resistances_ohm=resistances_milliohm.map(v=>Number((v/1e3).toFixed(3))),resistancesSeries=resistances_ohm.map((v,idx)=>({name:idx+1,value:v}));return{dataStr:dataStr,status:status,len:len,resistances_milliohm:resistances_milliohm,resistances_ohm:resistances_ohm,maxResistance_milliohm:maxResistance,minResistance_milliohm:minResistance,avgResistance_milliohm:avgResistance,maxResistance_ohm:null!=maxResistance?Number((maxResistance/1e3).toFixed(3)):null,minResistance_ohm:null!=minResistance?Number((minResistance/1e3).toFixed(3)):null,avgResistance_ohm:null!=avgResistance?Number((avgResistance/1e3).toFixed(3)):null,resistancesSeries:resistancesSeries}},exports.resolveDDA5FA=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2]),len:data[3],type:data[5],value:data.slice(7,-3)}},exports.resolveProtections=resolveProtections,exports.sendBMSAsync=async(deviceId,values)=>{const command=values.match(/[0-9a-fA-F]{2}/g)?.map(item=>`0x${item}`)||[];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==command[2],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},`DD5A_${command[2]}`)},exports.setDD5AE3sync=async deviceId=>{const now=new Date,year=now.getFullYear(),month=now.getMonth()+1,day=now.getDate(),hours=now.getHours(),minutes=now.getMinutes(),seconds=now.getSeconds(),content=["0xE3","0x07","0x06",...[BleDataProcess.toBCD(seconds),BleDataProcess.toBCD(minutes),128|BleDataProcess.toBCD(hours),BleDataProcess.toBCD(day),BleDataProcess.toBCD(month),BleDataProcess.toBCD(year-2e3)].map(b=>"0x"+b.toString(16).padStart(2,"0"))],checks=BleDataProcess.generateCrcCheckSum(content),command=["0xDD","0x5A",...content,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&227==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"SET_DDA5_E3")},exports.setDDA5FAAsync=async(deviceId,paramNo,valueLength,content)=>{const _values=[...paramNo,valueLength,...content],_command=["0xFA",BleDataProcess.decimalToHex(_values.length),..._values],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0x5A",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&250==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"SET_DDA5_FA")},exports.setDDA5OldAsync=async(deviceId,path,value,type="")=>{const values=[path,"0x02",...value],checks=BleDataProcess.generateCrcCheckSum(values),command=["0xDD","0x5A",...values,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&hexArr[1]==path,pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA5_写旧协议读参"+type)},exports.set_PlanCMD_3B3C=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:59==hexArr[0]&&60==hexArr[1],pkgLen:hexArr[11]+15}),pkgVerifyHandler:pkg=>({verified:!0})},"PlanCMD_3B3C");if(data){const dataStr=BleDataProcess.hexArr2string(data),content=data.slice(12,data.length-3);result={dataStr:dataStr,status:128==data[10]?1:0,addr:BleDataProcess.hexArr2string(data.slice(2,10)),content:content}}}catch(error){console.error(error)}return result},exports.set_PlanCMD_DD=set_PlanCMD_DD;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdAnalysis=require("./BleCmdAnalysis.js");exports.getDDA420Async=async deviceId=>{const _command=["0x20","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xdd","0xa4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&32==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA420")},exports.getDDA421Async=async deviceId=>{const _command=["0x21","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xdd","0xa4",..._command,...checks,"0x77"];return(void 0).getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&33==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA421")},exports.getDDA422Async=async(deviceId,startReg,endReg)=>{const startRegHex=BleDataProcess.decimalToHex(startReg,4),endRegHex=BleDataProcess.decimalToHex(endReg,4),_command=["0x22","0x04",...[parseInt(startRegHex.slice(0,2),16),parseInt(startRegHex.slice(2,4),16)],...[parseInt(endRegHex.slice(0,2),16),parseInt(endRegHex.slice(2,4),16)]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&34==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA422")},exports.getDDA423Async=async(deviceId,startReg,endReg,values,valuesLength)=>{const startRegHex=BleDataProcess.decimalToHex(startReg,4),startRegArr=[parseInt(startRegHex.slice(0,2),16),parseInt(startRegHex.slice(2,4),16)],endRegHex=BleDataProcess.decimalToHex(endReg,4),endRegArr=[parseInt(endRegHex.slice(0,2),16),parseInt(endRegHex.slice(2,4),16)],valueRegHex=BleDataProcess.decimalToHex(values,2*valuesLength);let valueArr=[];for(let i=0;i<valuesLength;i++){const hex=valueRegHex.slice(2*i,2*i+2);valueArr.push(parseInt(hex.slice(0,2),16))}const _command=["0x23",BleDataProcess.decimalToHex(4+valuesLength,2),...startRegArr,...endRegArr,...valueArr],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&35==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA423")},exports.getDDA425Async=async(deviceId,type)=>{const _command=["0x25","0x01",type],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&37==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA425")},exports.getDDA426Async=async(deviceId,testMode=0,outputVoltage=0,outputCurrent=0)=>{const clamp32=v=>((v=Number(v)||0)<0&&(v=0),v>4294967295&&(v=4294967295),v);testMode=2===testMode?2:0,outputVoltage=clamp32(outputVoltage),outputCurrent=clamp32(outputCurrent);const to4Bytes=val=>{const hex=commonfun.decimalToHex(val,8);return[0,2,4,6].map(i=>parseInt(hex.slice(i,i+2),16))},voltageArr=to4Bytes(outputVoltage),currentArr=to4Bytes(outputCurrent),_command=["0x26",`0x${commonfun.decimalToHex(9,2)}`,255&testMode,...voltageArr,...currentArr].map(o=>"number"==typeof o?`0x${("00"+o.toString(16)).slice(-2)}`:o),_commandNums=_command.map(h=>parseInt(h,16)),checks=BleDataProcess.generateCrcCheckSum(_commandNums),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&38==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA426(充电测试)")},exports.getDDA427Async=async(deviceId,startTime,endTime,granularity=2,type=1)=>{const startTimeHex=startTime.toString(16).padStart(8,"0"),endTimeHex=endTime.toString(16).padStart(8,"0"),startTimeArr=[parseInt(startTimeHex.slice(0,2),16),parseInt(startTimeHex.slice(2,4),16),parseInt(startTimeHex.slice(4,6),16),parseInt(startTimeHex.slice(6,8),16)],endTimeArr=[parseInt(endTimeHex.slice(0,2),16),parseInt(endTimeHex.slice(2,4),16),parseInt(endTimeHex.slice(4,6),16),parseInt(endTimeHex.slice(6,8),16)],historyType=BleDataProcess.decimalToHex(type,2),granularityArr=BleDataProcess.decimalToHex(granularity,2),_command=["0x27","0x0A",...startTimeArr,...endTimeArr,historyType,granularityArr],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return console.log("getDDA427Async getDDA427Async",startTimeHex,endTimeHex,startTimeArr,endTimeArr,granularity,command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&39==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA427")},exports.getDDA429Async=async(deviceId,id)=>{const idHex=BleDataProcess.decimalToHex(id,8),_command=["0x29","0x04",...[parseInt(idHex.slice(0,2),16),parseInt(idHex.slice(2,4),16),parseInt(idHex.slice(4,6),16),parseInt(idHex.slice(4,6),16),parseInt(idHex.slice(6,8),16)]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xdd","0xa4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>{if(221!=hexArr[0]||41!=hexArr[1])return{verified:!1,pkgLen:null};if(hexArr.length<8)return{verified:!1,pkgLen:null};if(hexArr.length>=36){const respIdHex=BleDataProcess.decimalToHex(hexArr[32])+BleDataProcess.decimalToHex(hexArr[33])+BleDataProcess.decimalToHex(hexArr[34])+BleDataProcess.decimalToHex(hexArr[35]);if(BleDataProcess.hexToDecimal(respIdHex)!==id)return{verified:!1,pkgLen:null}}return{verified:!0,pkgLen:hexArr[3]+7}},pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA429")},exports.resolveDDA420=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data);let n=4;const workStatus=data[n++],chargeStatus=data[n++],chargeVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargePower=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTemperature=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++]))/10,chargeCapacity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeRemainTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeCompleteTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputVoltagePercent=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputElectricityPercent=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),batteryVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),swtichStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(16,"0").split("").reverse(),chargeSwitch="1"==swtichStatusArr[0],preChargeSwitch="1"==swtichStatusArr[1],fanSwitch="1"==swtichStatusArr[2],protectStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let protectStatusIndexs=[];for(let i=0;i<protectStatusArr.length;i++)"1"==protectStatusArr[i]&&protectStatusIndexs.push(i);const alarmStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let alarmStatusIndexs=[];for(let i=0;i<alarmStatusArr.length;i++)"1"==alarmStatusArr[i]&&alarmStatusIndexs.push(i);return{dataStr:dataStr,workStatus:workStatus,chargeStatus:chargeStatus,chargeVoltage:chargeVoltage,chargeElectricity:chargeElectricity,chargePower:chargePower,chargeTemperature:chargeTemperature,chargeCapacity:chargeCapacity,chargeTime:chargeTime,chargeRemainTime:chargeRemainTime,chargeCompleteTime:chargeCompleteTime,outputVoltagePercent:outputVoltagePercent,outputElectricityPercent:outputElectricityPercent,outputVoltage:outputVoltage,outputElectricity:outputElectricity,batteryVoltage:batteryVoltage,chargeSwitch:chargeSwitch,preChargeSwitch:preChargeSwitch,fanSwitch:fanSwitch,protectStatusIndexs:protectStatusIndexs,alarmStatusIndexs:alarmStatusIndexs,communicationMode:data[n++]}},exports.resolveDDA421=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),batteryVoltageHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5])+BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]),batteryVoltage=BleDataProcess.hexToDecimal(batteryVoltageHex),batteryCurrentHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9])+BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),batteryCurrent=BleDataProcess.hexToDecimal(batteryCurrentHex),batteryType=data[12],batterySeries=data[13],batteryCapacityHex=BleDataProcess.decimalToHex(data[14])+BleDataProcess.decimalToHex(data[15])+BleDataProcess.decimalToHex(data[16])+BleDataProcess.decimalToHex(data[17]),batteryCapacity=BleDataProcess.hexToDecimal(batteryCapacityHex),batterySOC=data[18],batteryTempHex=BleDataProcess.decimalToHex(data[19])+BleDataProcess.decimalToHex(data[20]),batteryTemperature=BleDataProcess.hexToDecimal(batteryTempHex)/10,heatingStatus=data[21],heatingCurrentHex=BleDataProcess.decimalToHex(data[22])+BleDataProcess.decimalToHex(data[23])+BleDataProcess.decimalToHex(data[24])+BleDataProcess.decimalToHex(data[25]),heatingCurrent=BleDataProcess.hexToDecimal(heatingCurrentHex),protectStatusHex=BleDataProcess.decimalToHex(data[26])+BleDataProcess.decimalToHex(data[27]),protectStatusArr=BleDataProcess.hexToDecimal(protectStatusHex).toString(2).padStart(16,"0").split("").reverse();let protectStatusIndexs=[];for(let i=0;i<protectStatusArr.length;i++)"1"==protectStatusArr[i]&&protectStatusIndexs.push(i);const alarmStatusHex=BleDataProcess.decimalToHex(data[28])+BleDataProcess.decimalToHex(data[29]),alarmStatusArr=BleDataProcess.hexToDecimal(alarmStatusHex).toString(2).padStart(16,"0").split("").reverse();let alarmStatusIndexs=[];for(let i=0;i<alarmStatusArr.length;i++)"1"==alarmStatusArr[i]&&alarmStatusIndexs.push(i);return{dataStr:dataStr,batteryVoltage:batteryVoltage,batteryCurrent:batteryCurrent,batteryType:batteryType,batterySeries:batterySeries,batteryCapacity:batteryCapacity,batterySOC:batterySOC,batteryTemperature:batteryTemperature,heatingStatus:heatingStatus,heatingCurrent:heatingCurrent,protectStatusIndexs:protectStatusIndexs,alarmStatusIndexs:alarmStatusIndexs}},exports.resolveDDA422=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),startRegHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5]),startReg=BleDataProcess.hexToDecimal(startRegHex),endRegHex=BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]);return{dataStr:dataStr,startReg:startReg,endReg:BleDataProcess.hexToDecimal(endRegHex),regData:data.slice(8,data.length-3)}},exports.resolveDDA423=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA425=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA426=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA427=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),startTimeHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5])+BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]),startTime=BleDataProcess.hexToDecimal(startTimeHex),endTimeHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9])+BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),endTime=BleDataProcess.hexToDecimal(endTimeHex),historyType=data[12],granularity=data[13],count=data[14];let history=[];for(let i=0;i<count;i++){const base=15+8*i,voltageHex=BleDataProcess.decimalToHex(data[base])+BleDataProcess.decimalToHex(data[base+1])+BleDataProcess.decimalToHex(data[base+2])+BleDataProcess.decimalToHex(data[base+3]),voltage=BleDataProcess.hexToDecimal(voltageHex),currentHex=BleDataProcess.decimalToHex(data[base+4])+BleDataProcess.decimalToHex(data[base+5])+BleDataProcess.decimalToHex(data[base+6])+BleDataProcess.decimalToHex(data[base+7]),current=BleDataProcess.hexToDecimal(currentHex);history.push({current:current,voltage:voltage})}return console.log("historyType",historyType),{dataStr:dataStr,startTime:startTime,endTime:endTime,historyType:historyType,granularity:granularity,count:count,history:history}},exports.resolveDDA429=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data);let n=4;const workStatus=data[n++],chargeStatus=data[n++],chargeVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargePower=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTemperature=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++]))/10,chargeCapacity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeRemainTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeCompleteTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputVoltagePercent=data[n++],outputElectricityPercent=data[n++],id1=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),id=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),swtichStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(16,"0").split("").reverse(),chargeSwitch="1"==swtichStatusArr[0],preChargeSwitch="1"==swtichStatusArr[1],fanSwitch="1"==swtichStatusArr[2],protectStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let protectStatusIndexs=[];for(let i=0;i<protectStatusArr.length;i++)"1"==protectStatusArr[i]&&protectStatusIndexs.push(i);const alarmStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let alarmStatusIndexs=[];for(let i=0;i<alarmStatusArr.length;i++)"1"==alarmStatusArr[i]&&alarmStatusIndexs.push(i);return{dataStr:dataStr,workStatus:workStatus,chargeStatus:chargeStatus,chargeVoltage:chargeVoltage,chargeElectricity:chargeElectricity,chargePower:chargePower,chargeTemperature:chargeTemperature,chargeCapacity:chargeCapacity,chargeTime:chargeTime,chargeRemainTime:chargeRemainTime,chargeCompleteTime:chargeCompleteTime,outputVoltagePercent:outputVoltagePercent,outputElectricityPercent:outputElectricityPercent,id:id,outputElectricity:outputElectricity,id1:id1,chargeSwitch:chargeSwitch,preChargeSwitch:preChargeSwitch,fanSwitch:fanSwitch,protectStatusIndexs:protectStatusIndexs,alarmStatusIndexs:alarmStatusIndexs}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdAnalysis=require("./BleCmdAnalysis.js");exports.getDDA420Async=async deviceId=>{const _command=["0x20","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xdd","0xa4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&32==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA420")},exports.getDDA421Async=async deviceId=>{const _command=["0x21","0x00"],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xdd","0xa4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&33==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA421")},exports.getDDA422Async=async(deviceId,startReg,endReg)=>{const startRegHex=BleDataProcess.decimalToHex(startReg,4),endRegHex=BleDataProcess.decimalToHex(endReg,4),_command=["0x22","0x04",...[parseInt(startRegHex.slice(0,2),16),parseInt(startRegHex.slice(2,4),16)],...[parseInt(endRegHex.slice(0,2),16),parseInt(endRegHex.slice(2,4),16)]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&34==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA422")},exports.getDDA423Async=async(deviceId,startReg,endReg,values,valuesLength)=>{try{const startRegHex=BleDataProcess.decimalToHex(startReg,4),startRegArr=[parseInt(startRegHex.slice(0,2),16),parseInt(startRegHex.slice(2,4),16)],endRegHex=BleDataProcess.decimalToHex(endReg,4),endRegArr=[parseInt(endRegHex.slice(0,2),16),parseInt(endRegHex.slice(2,4),16)];let valueArr=[];if(Array.isArray(values)){valueArr=values.map(v=>255&(Number(v)||0));const expectLen=endReg-startReg+1;if(valueArr.length!==expectLen)if(valueArr.length>expectLen)valueArr=valueArr.slice(0,expectLen);else for(;valueArr.length<expectLen;)valueArr.push(0);valuesLength=valueArr.length}else{const len=valuesLength||endReg-startReg+1,valueRegHex=BleDataProcess.decimalToHex(values,2*len);for(let i=0;i<len;i++){const hex=valueRegHex.slice(2*i,2*i+2);valueArr.push(parseInt(hex,16))}valuesLength=len}const _command=["0x23",4+valuesLength,...startRegArr,...endRegArr,...valueArr],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&35==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA423",3e3)}catch(e){return console.warn("getDDA423Async build frame error",e),Promise.reject(e)}},exports.getDDA425Async=async(deviceId,type)=>{const _command=["0x25","0x01",type],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return console.log("command: ",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&37==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA425")},exports.getDDA426Async=async(deviceId,testMode=0,outputVoltage=0,outputCurrent=0)=>{const clamp32=v=>((v=Number(v)||0)<0&&(v=0),v>4294967295&&(v=4294967295),v);testMode=2===testMode?2:0,outputVoltage=clamp32(outputVoltage),outputCurrent=clamp32(outputCurrent);const to4Bytes=val=>{const hex=BleDataProcess.decimalToHex(val,8);return[0,2,4,6].map(i=>parseInt(hex.slice(i,i+2),16))},voltageArr=to4Bytes(outputVoltage),currentArr=to4Bytes(outputCurrent),_command=["0x26",`0x${BleDataProcess.decimalToHex(9,2)}`,255&testMode,...voltageArr,...currentArr].map(o=>"number"==typeof o?`0x${("00"+o.toString(16)).slice(-2)}`:o),_commandNums=_command.map(h=>parseInt(h,16)),checks=BleDataProcess.generateCrcCheckSum(_commandNums),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&38==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>({verified:!0})},"DDA426(充电测试)")},exports.getDDA427Async=async(deviceId,startTime,endTime,granularity=2,type=1)=>{const startTimeHex=startTime.toString(16).padStart(8,"0"),endTimeHex=endTime.toString(16).padStart(8,"0"),startTimeArr=[parseInt(startTimeHex.slice(0,2),16),parseInt(startTimeHex.slice(2,4),16),parseInt(startTimeHex.slice(4,6),16),parseInt(startTimeHex.slice(6,8),16)],endTimeArr=[parseInt(endTimeHex.slice(0,2),16),parseInt(endTimeHex.slice(2,4),16),parseInt(endTimeHex.slice(4,6),16),parseInt(endTimeHex.slice(6,8),16)],historyType=BleDataProcess.decimalToHex(type,2),granularityArr=BleDataProcess.decimalToHex(granularity,2),_command=["0x27","0x0A",...startTimeArr,...endTimeArr,historyType,granularityArr],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return console.log("getDDA427Async getDDA427Async",startTimeHex,endTimeHex,startTimeArr,endTimeArr,granularity,command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&39==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA427")},exports.getDDA429Async=async(deviceId,id=1,seq=0)=>{const idHex=BleDataProcess.decimalToHex(id,8),seqHex=BleDataProcess.decimalToHex(seq,8),_command=["0x29","0x08",...[parseInt(idHex.slice(0,2),16),parseInt(idHex.slice(2,4),16),parseInt(idHex.slice(4,6),16),parseInt(idHex.slice(6,8),16)],...[parseInt(seqHex.slice(0,2),16),parseInt(seqHex.slice(2,4),16),parseInt(seqHex.slice(4,6),16),parseInt(seqHex.slice(6,8),16)]],checks=BleDataProcess.generateCrcCheckSum(_command),command=["0xDD","0xA4",..._command,...checks,"0x77"];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:221==hexArr[0]&&41==hexArr[1],pkgLen:hexArr[3]+7}),pkgVerifyHandler:pkg=>{const len=pkg.length,[c1,c2]=BleDataProcess.generateCrcCheckSum(pkg.slice(2,len-3)),[_c1,_c2]=[pkg[len-3],pkg[len-2]];return{verified:c1==_c1&&c2==_c2}}},"DDA429")},exports.resolveDDA420=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data);let n=4;const workStatus=data[n++],chargeStatus=data[n++],chargeVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargePower=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),tempChargeTemperature=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTemperature=tempChargeTemperature>32768?(tempChargeTemperature-65536)/10:tempChargeTemperature/10,chargeCapacity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeRemainTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),chargeCompleteTime=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputVoltagePercent=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputElectricityPercent=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),outputElectricity=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),batteryVoltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])),swtichStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(16,"0").split("").reverse(),chargeSwitch="1"==swtichStatusArr[0],preChargeSwitch="1"==swtichStatusArr[1],fanSwitch="1"==swtichStatusArr[2],protectStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let protectStatusIndexs=[];for(let i=0;i<protectStatusArr.length;i++)"1"==protectStatusArr[i]&&protectStatusIndexs.push(i);const alarmStatusArr=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])+BleDataProcess.decimalToHex(data[n++])).toString(2).padStart(32,"0").split("").reverse();let alarmStatusIndexs=[];for(let i=0;i<alarmStatusArr.length;i++)"1"==alarmStatusArr[i]&&alarmStatusIndexs.push(i);return{dataStr:dataStr,workStatus:workStatus,chargeStatus:chargeStatus,chargeVoltage:chargeVoltage,chargeElectricity:chargeElectricity,chargePower:chargePower,chargeTemperature:chargeTemperature,chargeCapacity:chargeCapacity,chargeTime:chargeTime,chargeRemainTime:chargeRemainTime,chargeCompleteTime:chargeCompleteTime,outputVoltagePercent:outputVoltagePercent,outputElectricityPercent:outputElectricityPercent,outputVoltage:outputVoltage,outputElectricity:outputElectricity,batteryVoltage:batteryVoltage,chargeSwitch:chargeSwitch,preChargeSwitch:preChargeSwitch,fanSwitch:fanSwitch,protectStatusIndexs:protectStatusIndexs,alarmStatusIndexs:alarmStatusIndexs,communicationMode:data[n++]}},exports.resolveDDA421=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),batteryVoltageHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5])+BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]),batteryVoltage=BleDataProcess.hexToDecimal(batteryVoltageHex),batteryCurrentHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9])+BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),batteryCurrent=BleDataProcess.hexToDecimal(batteryCurrentHex),batteryType=data[12],batterySeries=data[13],batteryCapacityHex=BleDataProcess.decimalToHex(data[14])+BleDataProcess.decimalToHex(data[15])+BleDataProcess.decimalToHex(data[16])+BleDataProcess.decimalToHex(data[17]),batteryCapacity=BleDataProcess.hexToDecimal(batteryCapacityHex),batterySOC=data[18],batteryTempHex=BleDataProcess.decimalToHex(data[19])+BleDataProcess.decimalToHex(data[20]),tempBatteryTemperature=BleDataProcess.hexToDecimal(batteryTempHex),batteryTemperature=tempBatteryTemperature>32768?(tempBatteryTemperature-65536)/10:tempBatteryTemperature/10,heatingStatus=data[21],heatingCurrentHex=BleDataProcess.decimalToHex(data[22])+BleDataProcess.decimalToHex(data[23])+BleDataProcess.decimalToHex(data[24])+BleDataProcess.decimalToHex(data[25]),heatingCurrent=BleDataProcess.hexToDecimal(heatingCurrentHex),protectStatusHex=BleDataProcess.decimalToHex(data[26])+BleDataProcess.decimalToHex(data[27]),protectStatusArr=BleDataProcess.hexToDecimal(protectStatusHex).toString(2).padStart(16,"0").split("").reverse();let protectStatusIndexs=[];for(let i=0;i<protectStatusArr.length;i++)"1"==protectStatusArr[i]&&protectStatusIndexs.push(i);const alarmStatusHex=BleDataProcess.decimalToHex(data[28])+BleDataProcess.decimalToHex(data[29]),alarmStatusArr=BleDataProcess.hexToDecimal(alarmStatusHex).toString(2).padStart(16,"0").split("").reverse();let alarmStatusIndexs=[];for(let i=0;i<alarmStatusArr.length;i++)"1"==alarmStatusArr[i]&&alarmStatusIndexs.push(i);return{dataStr:dataStr,batteryVoltage:batteryVoltage,batteryCurrent:batteryCurrent,batteryType:batteryType,batterySeries:batterySeries,batteryCapacity:batteryCapacity,batterySOC:batterySOC,batteryTemperature:batteryTemperature,heatingStatus:heatingStatus,heatingCurrent:heatingCurrent,protectStatusIndexs:protectStatusIndexs,alarmStatusIndexs:alarmStatusIndexs}},exports.resolveDDA422=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),startRegHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5]),startReg=BleDataProcess.hexToDecimal(startRegHex),endRegHex=BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]);return{dataStr:dataStr,startReg:startReg,endReg:BleDataProcess.hexToDecimal(endRegHex),regData:data.slice(8,data.length-3)}},exports.resolveDDA423=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA425=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA426=data=>{if(!data)return null;return{dataStr:BleDataProcess.hexArr2string(data),status:BleDataProcess.hex2string(data[2])}},exports.resolveDDA427=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),startTimeHex=BleDataProcess.decimalToHex(data[4])+BleDataProcess.decimalToHex(data[5])+BleDataProcess.decimalToHex(data[6])+BleDataProcess.decimalToHex(data[7]),startTime=BleDataProcess.hexToDecimal(startTimeHex),endTimeHex=BleDataProcess.decimalToHex(data[8])+BleDataProcess.decimalToHex(data[9])+BleDataProcess.decimalToHex(data[10])+BleDataProcess.decimalToHex(data[11]),endTime=BleDataProcess.hexToDecimal(endTimeHex),historyType=data[12],granularity=data[13],count=data[14];let history=[];for(let i=0;i<count;i++){const base=15+8*i,voltageHex=BleDataProcess.decimalToHex(data[base])+BleDataProcess.decimalToHex(data[base+1])+BleDataProcess.decimalToHex(data[base+2])+BleDataProcess.decimalToHex(data[base+3]),voltage=BleDataProcess.hexToDecimal(voltageHex),currentHex=BleDataProcess.decimalToHex(data[base+4])+BleDataProcess.decimalToHex(data[base+5])+BleDataProcess.decimalToHex(data[base+6])+BleDataProcess.decimalToHex(data[base+7]),current=BleDataProcess.hexToDecimal(currentHex);history.push({current:current,voltage:voltage})}return console.log("historyType",historyType),{dataStr:dataStr,startTime:startTime,endTime:endTime,historyType:historyType,granularity:granularity,count:count,history:history}},exports.resolveDDA429=data=>{if(!data)return null;const status=data[2],content=data.slice(4,data.length-3),dataStr=BleDataProcess.hexArr2string(data);if(content.length<8)return{dataStr:dataStr,status:status,error:"content too short"};const id=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(content[0])+BleDataProcess.decimalToHex(content[1])+BleDataProcess.decimalToHex(content[2])+BleDataProcess.decimalToHex(content[3])),seq=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(content[4])+BleDataProcess.decimalToHex(content[5])+BleDataProcess.decimalToHex(content[6])+BleDataProcess.decimalToHex(content[7])),body=content.slice(8);if(1===id){const peerTailLen=57;let workInfo=[],peerSection=[];body.length>=peerTailLen?(workInfo=body.slice(0,body.length-peerTailLen),peerSection=body.slice(body.length-peerTailLen)):peerSection=body.slice();const workinfoField={state:workInfo[0]||0,ipwm:BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(workInfo[24])+BleDataProcess.decimalToHex(workInfo[25])+BleDataProcess.decimalToHex(workInfo[26])+BleDataProcess.decimalToHex(workInfo[27])),vpwm:BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(workInfo[28])+BleDataProcess.decimalToHex(workInfo[29])+BleDataProcess.decimalToHex(workInfo[30])+BleDataProcess.decimalToHex(workInfo[31])),vout:BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(workInfo[32])+BleDataProcess.decimalToHex(workInfo[33])+BleDataProcess.decimalToHex(workInfo[34])+BleDataProcess.decimalToHex(workInfo[35])),iout:BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(workInfo[36])+BleDataProcess.decimalToHex(workInfo[37])+BleDataProcess.decimalToHex(workInfo[38])+BleDataProcess.decimalToHex(workInfo[39])),vbat:BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(workInfo[40])+BleDataProcess.decimalToHex(workInfo[41])+BleDataProcess.decimalToHex(workInfo[42])+BleDataProcess.decimalToHex(workInfo[43])),port:String(workInfo[54])||0},fieldNames=["peer_curr","peer_num","ble_state","ble_init","ble_release","release_cnt","scan_start","scan_end","scan_res","scan_resp","conn_start","conn_resp","conn_end","conn_idx","conn_res","cmp_resp","handshake_resp","qr_chg","blacklist","ext_resp","ext_num"],peerMap={};peerSection.slice(0,21).forEach((b,i)=>{peerMap[fieldNames[i]||`extra_${i}`]=b});const extraBytes=peerSection.slice(21);let i=0,j=0;const fieldNamesExtra=["run_ts","scan_ts","scan_end_ts","get_ts","get_end_ts","conn_ts","conn_end_ts","cmp_ts","cmp_end_ts"];for(;i<extraBytes.length;)peerMap[fieldNamesExtra[j]||`extra_${j}`]=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(extraBytes[i]||0)+BleDataProcess.decimalToHex(extraBytes[i+1]||0)+BleDataProcess.decimalToHex(extraBytes[i+2]||0)+BleDataProcess.decimalToHex(extraBytes[i+3]||0)),i+=4,j+=1;return{dataStr:dataStr,status:status,id:id,seq:seq,type:"ID1",...workinfoField,...peerMap}}if(2===id||3===id){const peerInfos=[];for(let i=0;i+16<=body.length;i+=16){const seg=body.slice(i,i+16),mac=seg.slice(0,6).map(b=>BleDataProcess.decimalToHex(b)).map(m=>m.toUpperCase()).join(":"),state=255===seg[6]?-1:seg[6],cmp=255===seg[7]?-1:seg[7],voltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(seg[8])+BleDataProcess.decimalToHex(seg[9])),b_voltage=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(seg[10])+BleDataProcess.decimalToHex(seg[11])),current=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(seg[12])+BleDataProcess.decimalToHex(seg[13])),b_current=BleDataProcess.hexToDecimal(BleDataProcess.decimalToHex(seg[14])+BleDataProcess.decimalToHex(seg[15]));peerInfos.push({mac:mac,state:state,cmp:cmp,voltage:voltage,b_voltage:b_voltage,current:current,b_current:b_current})}return{dataStr:dataStr,status:status,id:id,seq:seq,type:`ID${id}`,peerInfos:peerInfos.map((item,i)=>({id:i,...item}))}}return{dataStr:dataStr,status:status,id:id,seq:seq,raw:body}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleCmdAnalysis=require("./BleCmdAnalysis.js"),BleDataProcess=require("../BleDataProcess.js");const getFFAAKeyAsync=async(deviceId,code,content,type)=>{const commandCode=[code],data=[...content],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return console.log("command: ---------------",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&hexArr[2]==BleDataProcess.hexToDecimal(code),pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},`FFAA_${code}(${type})`)},resolveFFAAKey=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=data[data.length-2];return{data:data,dataStr:dataStr,response:response,status:response}},getFFAA80Async=async(deviceId,ATStr)=>{const commandCode=["0x80"],data=BleDataProcess.string2hexArr(ATStr).map(o=>`0x${o}`),dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check],hex=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&128==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_80(AT)");return hex?resolveFFAA80(hex):null},resolveFFAA80=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),status=data[data.length-2],response=BleDataProcess.hexArr2Assic(data.slice(4,-1)),moduleVersion=response.replace(/\r|\n|\s+|\OK/g,"").split(":")[1]??"";return{dataStr:dataStr,status:status,response:response,moduleVersion:moduleVersion}},setWiFiSta=async(deviceId,rssi,pwd)=>{const str=`AT^WIFISTA=${rssi},${pwd}`;try{const hex=await getFFAA80Async(deviceId,str);return resolveFFAA80(hex)}catch(error){}return!1},setWiFi=async(deviceId,rssi,pwd)=>{let data=null;try{data=await setWiFiSta(deviceId,rssi,pwd)}catch(error){}return data};exports.clearPrimaryKey=async deviceId=>getFFAAKeyAsync(deviceId,"0x23",["0x01"],"清除一级密码"),exports.getBluetoothName=async deviceId=>{const hex=await getFFAAKeyAsync(deviceId,"0x06",[],"蓝牙名称");let name="";if(hex&&6==hex[2]){let arr=hex.slice(4,-1);if(0==arr.length)return"";name=String.fromCharCode(...arr)}return name},exports.getBroadcastDataCmd=async deviceId=>getFFAAKeyAsync(deviceId,"0x19",["0x01"],"广播数据"),exports.getFFAA03Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xFF","0xAA","0x03","0x00","0x03"],commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&3==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_03(模块复位)"),exports.getFFAA17Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xFF","0xAA","0x17","0x00","0x17"],commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&23==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_17(获取随机数)"),exports.getFFAA25Async=async deviceId=>{const commandCode=["0x25"],data=[],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&37==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_25(LCD屏查询配对mac)")},exports.getFFAA26Async=async(deviceId,macAddrArr)=>{const commandCode=["0x26"],data=[...macAddrArr],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&38==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_26(LCD屏设置配对mac)")},exports.getFFAA80Async=getFFAA80Async,exports.getFFAAKeyAsync=getFFAAKeyAsync,exports.getWiFiIP=async deviceId=>new Promise(async(r,j)=>{try{const str="AT^WIFISTA_IP?",hex=await getFFAA80Async(deviceId,str),data=resolveFFAA80(hex);data&&data?.response?.includes("OK")&&data?.response?.includes(str)&&!data?.response?.includes("ip:0.0.0.0")?r(data):j(data)}catch(error){j(error)}}),exports.resetFactoryData=async deviceId=>getFFAAKeyAsync(deviceId,"0x20",["0x01"],"恢复出厂设置"),exports.resetSecondaryKey=async deviceId=>getFFAAKeyAsync(deviceId,"0x1F",["0x01"],"恢复二级密码"),exports.resolveFFAA25=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=dataStr.slice(8,-2),arr=response.match(/(.{2})/g),state=arr.pop();return{dataStr:dataStr,response:response,macAddr:arr.join(":"),state:state,isConnected:0!=state}},exports.resolveFFAA26=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=dataStr.slice(6,-2);return{dataStr:dataStr,response:response,result:0==response}},exports.resolveFFAA80=resolveFFAA80,exports.resolveFFAAKey=resolveFFAAKey,exports.setBluetoothName=async(deviceId,value)=>{const content=BleDataProcess.string2hexArr(value).map(o=>`0x${o}`),hex=await getFFAAKeyAsync(deviceId,"0x07",content,"蓝牙名称");if(hex&&7==hex[2])return!0;throw new Error("设置蓝牙名称失败")},exports.setWiFi=setWiFi,exports.setWiFiSta=setWiFiSta,exports.set_PlanCMD_FFAA=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&hexArr[2]==command[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"通用CMD_FFAA");data&&(result=resolveFFAAKey(data))}catch(error){console.error(error)}return result},exports.set_PlanCMD_FFAA80=async(deviceId,ATStr)=>{let data=null;try{if("AT^WIFISTA="==ATStr.slice(0,11).toUpperCase()){const[v0,v1]=ATStr.split("="),[rssi,pwd]=v1.split(",");data=await setWiFi(deviceId,rssi,pwd),console.warn("WiFi_STA",data)}else{const hex=await getFFAA80Async(deviceId,ATStr);data=resolveFFAA80(hex)}}catch(error){}return data};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleCmdAnalysis=require("./BleCmdAnalysis.js"),BleDataProcess=require("../BleDataProcess.js");const getFFAAKeyAsync=async(deviceId,code,content,type)=>{const commandCode=[code],data=[...content],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return console.log("command: ---------------",command),BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&hexArr[2]==BleDataProcess.hexToDecimal(code),pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},`FFAA_${code}(${type})`)},resolveFFAAKey=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=data[data.length-2];return{data:data,dataStr:dataStr,response:response,status:response}},getFFAA80Async=async(deviceId,ATStr)=>{const commandCode=["0x80"],data=BleDataProcess.string2hexArr(ATStr).map(o=>`0x${o}`),dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check],hex=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&128==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_80(AT)");return console.log("getFFAA80Async",hex),hex?resolveFFAA80(hex):null},resolveFFAA80=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),status=data[data.length-2],response=BleDataProcess.hexArr2Assic(data.slice(4,-1)),moduleVersion=response.replace(/\r|\n|\s+|\OK/g,"").split(":")[1]??"";return{dataStr:dataStr,status:status,response:response,moduleVersion:moduleVersion}},setWiFiSta=async(deviceId,rssi,pwd)=>{const str=`AT^WIFISTA=${rssi},${pwd}`;try{const hex=await getFFAA80Async(deviceId,str);return resolveFFAA80(hex)}catch(error){}return!1},setWiFi=async(deviceId,rssi,pwd)=>{let data=null;try{data=await setWiFiSta(deviceId,rssi,pwd)}catch(error){}return data};exports.clearPrimaryKey=async deviceId=>getFFAAKeyAsync(deviceId,"0x23",["0x01"],"清除一级密码"),exports.getBluetoothName=async deviceId=>{const hex=await getFFAAKeyAsync(deviceId,"0x06",[],"蓝牙名称");let name="";if(hex&&6==hex[2]){let arr=hex.slice(4,-1);if(0==arr.length)return"";name=String.fromCharCode(...arr)}return name},exports.getBroadcastDataCmd=async deviceId=>getFFAAKeyAsync(deviceId,"0x19",["0x01"],"广播数据"),exports.getFFAA03Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xFF","0xAA","0x03","0x00","0x03"],commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&3==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_03(模块复位)"),exports.getFFAA17Async=async deviceId=>BleCmdAnalysis.getData(deviceId,{command:["0xFF","0xAA","0x17","0x00","0x17"],commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&23==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_17(获取随机数)"),exports.getFFAA25Async=async deviceId=>{const commandCode=["0x25"],data=[],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&37==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_25(LCD屏查询配对mac)")},exports.getFFAA26Async=async(deviceId,macAddrArr)=>{const commandCode=["0x26"],data=[...macAddrArr],dataLength=[`0x${BleDataProcess.decimalToHex(data.length,2)}`],check=BleDataProcess.generateCheckSum([...commandCode,...dataLength,...data]),command=["0xff","0xaa",...commandCode,...dataLength,...data,...check];return BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&38==hexArr[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"FFAA_26(LCD屏设置配对mac)")},exports.getFFAA80Async=getFFAA80Async,exports.getFFAAKeyAsync=getFFAAKeyAsync,exports.getWiFiIP=async deviceId=>new Promise(async(r,j)=>{try{const str="AT^WIFISTA_IP?",hex=await getFFAA80Async(deviceId,str),data=resolveFFAA80(hex);data&&data?.response?.includes("OK")&&data?.response?.includes(str)&&!data?.response?.includes("ip:0.0.0.0")?r(data):j(data)}catch(error){j(error)}}),exports.resetFactoryData=async deviceId=>getFFAAKeyAsync(deviceId,"0x20",["0x01"],"恢复出厂设置"),exports.resetSecondaryKey=async deviceId=>getFFAAKeyAsync(deviceId,"0x1F",["0x01"],"恢复二级密码"),exports.resolveFFAA25=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=dataStr.slice(8,-2),arr=response.match(/(.{2})/g),state=arr.pop();return{dataStr:dataStr,response:response,macAddr:arr.join(":"),state:state,isConnected:0!=state}},exports.resolveFFAA26=data=>{if(!data)return null;const dataStr=BleDataProcess.hexArr2string(data),response=dataStr.slice(6,-2);return{dataStr:dataStr,response:response,result:0==response}},exports.resolveFFAA80=resolveFFAA80,exports.resolveFFAAKey=resolveFFAAKey,exports.setBluetoothName=async(deviceId,value)=>{const content=BleDataProcess.string2hexArr(value).map(o=>`0x${o}`),hex=await getFFAAKeyAsync(deviceId,"0x07",content,"蓝牙名称");if(hex&&7==hex[2])return!0;throw new Error("设置蓝牙名称失败")},exports.setWiFi=setWiFi,exports.setWiFiSta=setWiFiSta,exports.set_PlanCMD_FFAA=async(deviceId,command)=>{"string"==typeof command&&(command=command.match(/(.{2})/g).map(o=>`0x${o}`));let result=null;try{const data=await BleCmdAnalysis.getData(deviceId,{command:command,commandVerifyHandler:hexArr=>({verified:255==hexArr[0]&&170==hexArr[1]&&hexArr[2]==command[2],pkgLen:hexArr[3]+5}),pkgVerifyHandler:pkg=>{const _pkg=pkg.map(o=>BleDataProcess.hex2string(o)),len=pkg.length,[c1]=BleDataProcess.generateCheckSum(_pkg.slice(2,len-1));return{verified:c1==pkg[len-1]}}},"通用CMD_FFAA");data&&(result=resolveFFAAKey(data))}catch(error){console.error(error)}return result},exports.set_PlanCMD_FFAA80=async(deviceId,ATStr)=>{let data=null;try{if("AT^WIFISTA="==ATStr.slice(0,11).toUpperCase()){const[v0,v1]=ATStr.split("="),[rssi,pwd]=v1.split(",");data=await setWiFi(deviceId,rssi,pwd),console.warn("WiFi_STA",data)}else{const hex=await getFFAA80Async(deviceId,ATStr);data=resolveFFAA80(hex)}}catch(error){}return data};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdDD=require("./BleCmdDD.js");const readParamCmd=(chipType,deviceId,paramInfo,needFactoryMode=!0)=>(console.log("chipType: ",chipType),new Promise(async(resolve,reject)=>{const{address:address=0,length:length=1,oldAddress:oldAddress="0x1f"}=paramInfo,hexAddress=BleDataProcess.decimalToTwoByteHexArray(address),hexLength=BleDataProcess.decimalToHex(length),handleRead=async(readFunction,index)=>{try{const hex=await readFunction();if(4==index&&needFactoryMode&&await BleCmdDD.readExistFactory(deviceId),!hex)return void resolve(null);const data=hex.slice(index,-3);console.log("data: 读参数",data),resolve(data||null)}catch(error){console.error("读取参数出错: ",error),reject(error)}};try{if(chipType)await handleRead(async()=>await BleCmdDD.getDDA5FAAsync(deviceId,hexAddress,hexLength),7);else{if(!oldAddress)return resolve(null);needFactoryMode&&await BleCmdDD.enterFactory(deviceId),await handleRead(async()=>await BleCmdDD.getDDA5OldAsync(deviceId,oldAddress),4)}}catch(error){console.error("读取参数出错---: ",error),reject(error)}})),setParamCmd=async(chipType,deviceId,paramInfoArray)=>{console.log("chipType: 芯片",chipType);const paramsToProcess=Array.isArray(paramInfoArray)?paramInfoArray:[paramInfoArray];return new Promise(async(resolve,reject)=>{try{await BleCmdDD.enterFactory(deviceId);const results=[];for(let i=0;i<paramsToProcess.length;i++){const paramInfo=paramsToProcess[i],{address:address,length:length,values:values,oldAddress:oldAddress}=paramInfo,hexAddress=BleDataProcess.decimalToTwoByteHexArray(address),hexLength=BleDataProcess.decimalToHex(length);let hex;if(hex=chipType?await BleCmdDD.setDDA5FAAsync(deviceId,hexAddress,hexLength,values):await BleCmdDD.setDDA5OldAsync(deviceId,oldAddress,values),console.log(`data: 写入第${i+1}个参数结果`,hex),!hex)throw new Error(`设置第${i+1}个参数失败`);results.push(hex)}await BleCmdDD.existFactory(deviceId),resolve(results)}catch(error){console.error("设置参数出错: ",error);try{await BleCmdDD.existFactory(deviceId)}catch(exitError){console.error("退出工厂模式失败: ",exitError)}reject(error)}})},getE1Cmd=(typeCmd,currentSwitch,anotherSwitch)=>{let cmd="0x00";return"0x00"===typeCmd?cmd=currentSwitch&&anotherSwitch?"0x00":currentSwitch&&!anotherSwitch?"0x01":!currentSwitch&&anotherSwitch?"0x02":"0x03":"0x01"===typeCmd&&(cmd=currentSwitch&&anotherSwitch?"0x00":!currentSwitch&&anotherSwitch?"0x01":currentSwitch&&!anotherSwitch?"0x02":"0x03"),cmd};exports.controlSwitch=async(deviceId,typeCmd,currentSwitch,anotherSwitch)=>{const hex=await BleCmdDD.getDD5AFBAsync(deviceId,typeCmd,currentSwitch?"0x00":"0x01"),mosRes=BleCmdDD.resolveBaseDD(hex);console.log("hex: ",hex);let dataRes=mosRes;if(!mosRes||"00"!=mosRes?.status){const cmd=getE1Cmd(typeCmd,currentSwitch,anotherSwitch),e1hex=await BleCmdDD.getDD5AE1Async(deviceId,cmd);dataRes=BleCmdDD.resolveBaseDD(e1hex)}return dataRes},exports.getE1Cmd=getE1Cmd,exports.getSysParamCmd=async(chipType,deviceId,paramInfo,needFactoryMode=!0)=>{try{console.log("paramInfo: ",paramInfo);const paramObj={address:paramInfo.paramNo,length:paramInfo.paramLength/2,oldAddress:paramInfo.oldParamNo};let data=await readParamCmd(chipType,deviceId,paramObj,needFactoryMode);return data||null}catch(error){throw console.error("error: 读系统参数报错 getSysParamCmd",error),error}},exports.readParamCmd=readParamCmd,exports.setCapacityParamCmd=(chipType,deviceId,paramInfo)=>(console.log("chipType: 芯片",chipType),new Promise(async(resolve,reject)=>{const{values:values}=paramInfo,circular={address:1,oldAddress:"0x11",values:.8*values,length:1},full={address:112,oldAddress:"0x10",values:values,length:1},handleSet=async(setFunction,index)=>{try{const hex=await setFunction();return console.log("data: 写入参数结果",hex),hex||void reject("设置参数失败")}catch(error){console.error("设置参数出错: ",error),reject(error)}},handleParam=async paramObj=>{const{paramNo:paramNo,oldParamNo:oldParamNo,paramLength:paramLength}=paramObj,value=Math.round(Number(paramObj.values)/paramInfo.divisor);console.log("value: ",value);const hexValues=BleDataProcess.decimalToTwoByteHexArray(value),hexAddress=BleDataProcess.decimalToTwoByteHexArray(paramNo),hexLength=BleDataProcess.decimalToHex(paramLength/2);return chipType?await handleSet(()=>BleCmdDD.setDDA5FAAsync(deviceId,hexAddress,hexLength,hexValues)):await handleSet(()=>BleCmdDD.setDDA5OldAsync(deviceId,oldParamNo,hexValues))};try{await BleCmdDD.enterFactory(deviceId);const paramInfoHex=await handleParam(paramInfo);await handleParam(circular);if(chipType){await handleParam(full)}await BleCmdDD.existFactory(deviceId),paramInfoHex&&resolve(paramInfoHex)}catch(error){reject(error)}})),exports.setParamCmd=setParamCmd,exports.setSysParamCmd=async(chipType,deviceId,paramInfoArray,macAddr,blueConnect=!0)=>{try{console.log("paramInfoArray: ",paramInfoArray);const paramsToProcess=Array.isArray(paramInfoArray)?paramInfoArray:[paramInfoArray],paramObjs=[];for(const paramInfo of paramsToProcess){let value=Number(paramInfo?.paramValue||paramInfo.newValue)/Number(paramInfo?.divisor||1);console.log("value: ",value),paramInfo.isTemp&&blueConnect&&(value=2731+10*Number(paramInfo.newValue)),value=Math.round(value);let valuesHexs=[];blueConnect&&(valuesHexs=BleDataProcess.decimalToTwoByteHexArray(value),console.log("valuesHexs: ",valuesHexs)),paramObjs.push({address:paramInfo.paramNo,length:paramInfo.paramLength/2,values:valuesHexs,oldAddress:paramInfo.oldParamNo,newValue:value})}console.log("chipType: 芯片",chipType),await setParamCmd(chipType,deviceId,paramObjs)}catch(error){throw console.error("error: 写系统参数报错 setSysParamCmd",error),error}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BleDataProcess=require("../BleDataProcess.js"),BleCmdDD=require("./BleCmdDD.js");const readParamCmd=(chipType,deviceId,paramInfo,needFactoryMode=!0)=>(console.log("chipType: ",chipType),new Promise(async(resolve,reject)=>{const{address:address=0,length:length=1,oldAddress:oldAddress="0x1f"}=paramInfo,hexAddress=BleDataProcess.decimalToTwoByteHexArray(address),hexLength=BleDataProcess.decimalToHex0x(length),handleRead=async(readFunction,index)=>{try{const hex=await readFunction();if(4==index&&needFactoryMode&&await BleCmdDD.readExistFactory(deviceId),!hex)return void resolve(null);const data=hex.slice(index,-3);console.log("data: 读参数",data),resolve(data||null)}catch(error){console.error("读取参数出错: ",error),reject(error)}};try{if(chipType)await handleRead(async()=>await BleCmdDD.getDDA5FAAsync(deviceId,hexAddress,hexLength),7);else{if(!oldAddress)return resolve(null);needFactoryMode&&await BleCmdDD.enterFactory(deviceId),await handleRead(async()=>await BleCmdDD.getDDA5OldAsync(deviceId,oldAddress),4)}}catch(error){console.error("读取参数出错---: ",error),reject(error)}})),setParamCmd=async(chipType,deviceId,paramInfoArray)=>{console.log("chipType: 芯片",chipType);const paramsToProcess=Array.isArray(paramInfoArray)?paramInfoArray:[paramInfoArray];return new Promise(async(resolve,reject)=>{try{await BleCmdDD.enterFactory(deviceId);const results=[];for(let i=0;i<paramsToProcess.length;i++){const paramInfo=paramsToProcess[i],{address:address,length:length,values:values,oldAddress:oldAddress}=paramInfo,hexAddress=BleDataProcess.decimalToTwoByteHexArray(address),hexLength=BleDataProcess.decimalToHex(length);let hex;if(hex=chipType?await BleCmdDD.setDDA5FAAsync(deviceId,hexAddress,hexLength,values):await BleCmdDD.setDDA5OldAsync(deviceId,oldAddress,values),console.log(`data: 写入第${i+1}个参数结果`,hex),!hex)throw new Error(`设置第${i+1}个参数失败`);results.push(hex)}await BleCmdDD.existFactory(deviceId),resolve(results)}catch(error){console.error("设置参数出错: ",error);try{await BleCmdDD.existFactory(deviceId)}catch(exitError){console.error("退出工厂模式失败: ",exitError)}reject(error)}})},getE1Cmd=(typeCmd,currentSwitch,anotherSwitch)=>{let cmd="0x00";return"0x00"===typeCmd?cmd=currentSwitch&&anotherSwitch?"0x00":currentSwitch&&!anotherSwitch?"0x01":!currentSwitch&&anotherSwitch?"0x02":"0x03":"0x01"===typeCmd&&(cmd=currentSwitch&&anotherSwitch?"0x00":!currentSwitch&&anotherSwitch?"0x01":currentSwitch&&!anotherSwitch?"0x02":"0x03"),cmd};exports.controlSwitch=async(deviceId,typeCmd,currentSwitch,anotherSwitch)=>{const hex=await BleCmdDD.getDD5AFBAsync(deviceId,typeCmd,currentSwitch?"0x00":"0x01"),mosRes=BleCmdDD.resolveBaseDD(hex);console.log("hex: ",hex);let dataRes=mosRes;if(!mosRes||"00"!=mosRes?.status){const cmd=getE1Cmd(typeCmd,currentSwitch,anotherSwitch),e1hex=await BleCmdDD.getDD5AE1Async(deviceId,cmd);dataRes=BleCmdDD.resolveBaseDD(e1hex)}return dataRes},exports.getE1Cmd=getE1Cmd,exports.getSysParamCmd=async(chipType,deviceId,paramInfo,needFactoryMode=!0)=>{try{console.warn("paramInfo:参数信息",paramInfo);const paramObj={address:paramInfo.paramNo,length:paramInfo.paramLength/2,oldAddress:paramInfo.oldParamNo};let data=await readParamCmd(chipType,deviceId,paramObj,needFactoryMode);return data||null}catch(error){throw console.error("error: 读系统参数报错 getSysParamCmd",error),error}},exports.readParamCmd=readParamCmd,exports.setCapacityParamCmd=(chipType,deviceId,paramInfo)=>(console.log("chipType: 芯片",chipType),new Promise(async(resolve,reject)=>{const{values:values}=paramInfo,circular={paramNo:1,oldParamNo:"0x11",values:.8*values,paramLength:2},full={paramNo:112,oldParamNo:"0x10",values:values,paramLength:2},handleSet=async(setFunction,index)=>{try{const hex=await setFunction();return console.log("data: 写入参数结果",hex),hex||void reject("设置参数失败")}catch(error){console.error("设置参数出错: ",error),reject(error)}},handleParam=async paramObj=>{const{paramNo:paramNo,oldParamNo:oldParamNo,paramLength:paramLength}=paramObj,value=Math.round(Number(paramObj.values)/paramInfo.divisor);console.log("value: ",value);const hexValues=BleDataProcess.decimalToTwoByteHexArray(value),hexAddress=BleDataProcess.decimalToTwoByteHexArray(paramNo),hexLength=BleDataProcess.decimalToHex(paramLength/2);return chipType?await handleSet(()=>BleCmdDD.setDDA5FAAsync(deviceId,hexAddress,hexLength,hexValues)):await handleSet(()=>BleCmdDD.setDDA5OldAsync(deviceId,oldParamNo,hexValues))},handleCapacityParam=async(paramObj,lowParamNo,highParamNo)=>{const value=Math.round(Number(paramObj.values)/paramInfo.divisor);console.log(`容量参数value (paramNo ${lowParamNo}):`,value);const lowValue=65535&value,highValue=value>>16&65535,lowBytes=BleDataProcess.decimalToTwoByteHexArray(lowValue),lowAddress=BleDataProcess.decimalToTwoByteHexArray(lowParamNo),hexLength=BleDataProcess.decimalToHex(1),lowHex=await handleSet(async()=>await BleCmdDD.setDDA5FAAsync(deviceId,lowAddress,hexLength,lowBytes)),highBytes=BleDataProcess.decimalToTwoByteHexArray(highValue),highAddress=BleDataProcess.decimalToTwoByteHexArray(highParamNo),highHex=await handleSet(async()=>await BleCmdDD.setDDA5FAAsync(deviceId,highAddress,hexLength,highBytes));return lowHex&&highHex};try{let paramInfoHex;await BleCmdDD.enterFactory(deviceId),paramInfoHex=chipType?await handleCapacityParam(paramInfo,0,155):await handleParam(paramInfo);await handleParam(circular);if(chipType){await handleCapacityParam(full,112,156)}await BleCmdDD.existFactory(deviceId),paramInfoHex&&resolve(paramInfoHex)}catch(error){reject(error)}})),exports.setParamCmd=setParamCmd,exports.setSysParamCmd=async(chipType,deviceId,paramInfoArray)=>{try{console.log("paramInfoArray: ",paramInfoArray);const paramsToProcess=Array.isArray(paramInfoArray)?paramInfoArray:[paramInfoArray],paramObjs=[];for(const paramInfo of paramsToProcess){let value=Number(paramInfo?.paramValue||paramInfo.newValue)/Number(paramInfo?.divisor||1);console.log("value: ",value),paramInfo.isTemp&&(value=2731+10*Number(paramInfo.newValue)),value=Math.round(value);let valuesHexs=[];valuesHexs=BleDataProcess.decimalToTwoByteHexArray(value),console.log("valuesHexs: ",valuesHexs),paramObjs.push({address:paramInfo.paramNo,length:paramInfo.paramLength/2,values:valuesHexs,oldAddress:paramInfo.oldParamNo,newValue:value})}console.log("chipType: 芯片",chipType),await setParamCmd(chipType,deviceId,paramObjs)}catch(error){throw console.error("error: 写系统参数报错 setSysParamCmd",error),error}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const crc16modbus=(data,swapNeed=!1)=>{let crc=65535;for(let i=0;i<data.length;i++){crc^=data[i];for(let j=0;j<8;j++)1&crc?crc=crc>>1^40961:crc>>=1}return swapNeed&&(crc=(255&crc)<<8|crc>>8&255),65535&crc},crcCheckSum=(data,offset=1)=>{console.log("data: --------",data);let hex=0;for(let i=0;i<data.length;i++)hex+=255&data[i];return hex^=65535,hex+=offset,console.log("hex: -------------",hex),hex},checkSum=(data=[])=>{const sum=data.map(o=>parseInt(o,16)).reduce((a,c)=>a+c,0);let sumHex="0x"+decimalToHex(sum,2);return sumHex&=255,sumHex},generateCheckSum=data=>{const hex=checkSum(data);return[`0x${decimalToHex(hex,2)}`]},arrayBufferToHexArray=(arrayBuffer,withPrefix=!0)=>Array.prototype.map.call(new Uint8Array(arrayBuffer),x=>{let hex=("00"+x.toString(16)).slice(-2);return withPrefix?`0x${hex}`:hex}),decimalToHex=(decimal,padding=2)=>Number(decimal).toString(16).padStart(padding,"0"),hex2string=hex=>("00"+hex.toString(16)).slice(-2).toUpperCase(),hexStrAscii=hexString=>{let asciiString="";for(let i=0;i<hexString.length;i+=2){const hexPair=hexString.substr(i,2),decimalValue=parseInt(hexPair,16);asciiString+=String.fromCharCode(decimalValue)}return asciiString.replace(/\u0000/g,"")},parseDateTime=str=>{const match=str.match(/^(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})$/);if(!match)return null;const[,y,m,d,h,i,s]=match.map(Number);return new Date(y,m-1,d,h,i,s).getTime()};exports.ab2decimalArr=buffer=>Array.prototype.map.call(new Uint8Array(buffer),bit=>bit),exports.ab2hex=buffer=>Array.prototype.map.call(new Uint8Array(buffer),function(bit){return("00"+bit.toString(16)).slice(-2)}).join(""),exports.arrayBufferToHexArray=arrayBufferToHexArray,exports.base64ToHexArray=(base64,withPrefix=!0)=>{const arrayBuffer=uni.base64ToArrayBuffer(base64);return arrayBufferToHexArray(arrayBuffer,withPrefix)},exports.checkSum=checkSum,exports.crc16modbus=crc16modbus,exports.crcCheckSum=crcCheckSum,exports.decimalToHex=decimalToHex,exports.decimalToHex0x=(decimal,padding=2)=>"0x"+Number(decimal).toString(16).padStart(padding,"0"),exports.decimalToTwoByteHexArray=decimal=>{if("number"!=typeof decimal||!Number.isInteger(decimal))throw new Error("输入必须为整数");if(decimal<0||decimal>65535)throw new Error("输入的十进制数超出 16 位无符号整数范围(0 - 65535)");return[`0x${`00${(decimal>>8).toString(16)}`.slice(-2)}`,`0x${`00${(255&decimal).toString(16)}`.slice(-2)}`]},exports.extractBits=(number,start,end)=>number>>start&(1<<end-start+1)-1,exports.fromBCD=bcd=>10*((bcd&=255)>>4&15)+(15&bcd),exports.generateCheckSum=generateCheckSum,exports.generateCrc16modbusCheck=(data,swapNeed=!1)=>{const hex=crc16modbus(data,swapNeed),hexStr=decimalToHex(hex,4);return[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]},exports.generateCrcCheckSum=data=>{const hex=crcCheckSum(data),hexStr=decimalToHex(hex,4);return[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]},exports.getParamBaseValue=arr=>{const hexString=arr.map(el=>decimalToHex(el)).join("");return parseInt(hexString,16)},exports.hex2Ascii=(value=[])=>{const hexString=value.join("");return hexStrAscii(hexString)},exports.hex2Binary=(hex,len=0)=>parseInt(hex,16).toString(2).padStart(len,"0"),exports.hex2string=hex2string,exports.hexArr2Assic=(hexArr=[])=>String.fromCharCode(...hexArr).replace(/\u0000/g,""),exports.hexArr2ab=hexArr=>{const buffer=new ArrayBuffer(hexArr.length),dataView=new DataView(buffer);return hexArr.forEach((hex,i)=>dataView.setUint8(i,hex)),buffer},exports.hexArr2string=(hexArr=[],connector="")=>hexArr.map(o=>hex2string(o)).join(connector),exports.hexArrayToModuleArrayBuffer=(fields,hexArray,withCheck=!0,withPrefix=!0)=>{const fieldsLength=fields.length;let offset=fieldsLength+1;withCheck&&offset++;let bufferLength=hexArray.length+offset;const buffer=new ArrayBuffer(bufferLength),dataView=new DataView(buffer),lengthCode=decimalToHex(hexArray.length);fields.forEach((field,i)=>{dataView.setUint8(i,field)}),dataView.setUint8(fieldsLength,"0x"+lengthCode);let indexNum=fieldsLength+1;if(hexArray.forEach((el,index)=>{dataView.setUint8(indexNum,withPrefix?"0x"+el:el),indexNum+=1}),withCheck){const code=fields[2].toString(16);let check=generateCheckSum([code,lengthCode,...hexArray]);dataView.setUint8(bufferLength-1,check[0])}return buffer},exports.hexStrAscii=hexStrAscii,exports.hexStringToBinary=hexString=>parseInt(hexString,16).toString(2),exports.hexToDecimal=hex=>parseInt(hex,16),exports.isWithin30Minutes=timeStr=>{const now=Date.now(),targetTime=parseDateTime(timeStr);if(null===targetTime)return console.error("时间字符串格式错误:",timeStr),!1;return Math.abs(now-targetTime)>=18e5},exports.parseDateTime=parseDateTime,exports.sleep=(n=500)=>new Promise(r=>setTimeout(()=>r(!0),n)),exports.string2hexArr=str=>{let hexArray=[];for(let i=0;i<str.length;i++){const charCode=str.charCodeAt(i).toString(16).padStart(2,"0");hexArray.push(charCode)}return hexArray},exports.stringToTwoHexArray=str=>{const paddedStr=str.padStart(4,"0");return[`0x${paddedStr.slice(0,2)}`,`0x${paddedStr.slice(2,4)}`]},exports.toBCD=num=>{if(num<0||num>99)throw new Error("BCD only supports 0-99");return Math.floor(num/10)<<4|num%10};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const crc16modbus=(data,swapNeed=!1)=>{let crc=65535;for(let i=0;i<data.length;i++){crc^=data[i];for(let j=0;j<8;j++)1&crc?crc=crc>>1^40961:crc>>=1}return swapNeed&&(crc=(255&crc)<<8|crc>>8&255),65535&crc},crcCheckSum=(data,offset=1)=>{console.log("data: --------",data);let hex=0;for(let i=0;i<data.length;i++)hex+=255&data[i];return hex^=65535,hex+=offset,console.log("hex: -------------",hex),hex},checkSum=(data=[])=>{const sum=data.map(o=>parseInt(o,16)).reduce((a,c)=>a+c,0);let sumHex="0x"+decimalToHex(sum,2);return sumHex&=255,sumHex},generateCheckSum=data=>{const hex=checkSum(data);return[`0x${decimalToHex(hex,2)}`]},arrayBufferToHexArray=(arrayBuffer,withPrefix=!0)=>Array.prototype.map.call(new Uint8Array(arrayBuffer),x=>{let hex=("00"+x.toString(16)).slice(-2);return withPrefix?`0x${hex}`:hex}),decimalToHex=(decimal,padding=2)=>Number(decimal).toString(16).padStart(padding,"0"),hex2string=hex=>("00"+hex.toString(16)).slice(-2).toUpperCase(),hexStrAscii=hexString=>{let asciiString="";for(let i=0;i<hexString.length;i+=2){const hexPair=hexString.substr(i,2),decimalValue=parseInt(hexPair,16);asciiString+=String.fromCharCode(decimalValue)}return asciiString.replace(/\u0000/g,"")},parseDateTime=str=>{const match=str.match(/^(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})$/);if(!match)return null;const[,y,m,d,h,i,s]=match.map(Number);return new Date(y,m-1,d,h,i,s).getTime()};exports.ab2decimalArr=buffer=>Array.prototype.map.call(new Uint8Array(buffer),bit=>bit),exports.ab2hex=buffer=>Array.prototype.map.call(new Uint8Array(buffer),function(bit){return("00"+bit.toString(16)).slice(-2)}).join(""),exports.arrayBufferToHexArray=arrayBufferToHexArray,exports.base64ToHexArray=(base64,withPrefix=!0)=>{const arrayBuffer=uni.base64ToArrayBuffer(base64);return arrayBufferToHexArray(arrayBuffer,withPrefix)},exports.checkSum=checkSum,exports.crc16modbus=crc16modbus,exports.crcCheckSum=crcCheckSum,exports.decimalToHex=decimalToHex,exports.decimalToHex0x=(decimal,padding=2)=>"0x"+Number(decimal).toString(16).padStart(padding,"0"),exports.decimalToTwoByteHexArray=decimal=>{if(decimal<-32768||decimal>65535)throw new Error("输入超出范围(-32768 65535)");return decimal<0&&(decimal&=65535),[`0x${`00${(decimal>>8).toString(16).toUpperCase()}`.slice(-2)}`,`0x${`00${(255&decimal).toString(16).toUpperCase()}`.slice(-2)}`]},exports.extractBits=(number,start,end)=>number>>start&(1<<end-start+1)-1,exports.fromBCD=bcd=>10*((bcd&=255)>>4&15)+(15&bcd),exports.generateCheckSum=generateCheckSum,exports.generateCrc16modbusCheck=(data,swapNeed=!1)=>{const hex=crc16modbus(data,swapNeed),hexStr=decimalToHex(hex,4);return[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]},exports.generateCrcCheckSum=data=>{const hex=crcCheckSum(data),hexStr=decimalToHex(hex,4);return[`0x${hexStr.slice(0,2)}`,`0x${hexStr.slice(2,4)}`]},exports.getParamBaseValue=arr=>{const hexString=arr.map(el=>decimalToHex(el)).join("");return parseInt(hexString,16)},exports.hex2Ascii=(value=[])=>{const hexString=value.join("");return hexStrAscii(hexString)},exports.hex2Binary=(hex,len=0)=>parseInt(hex,16).toString(2).padStart(len,"0"),exports.hex2string=hex2string,exports.hexArr2Assic=(hexArr=[])=>String.fromCharCode(...hexArr).replace(/\u0000/g,""),exports.hexArr2ab=hexArr=>{const buffer=new ArrayBuffer(hexArr.length),dataView=new DataView(buffer);return hexArr.forEach((hex,i)=>dataView.setUint8(i,hex)),buffer},exports.hexArr2string=(hexArr=[],connector="")=>hexArr.map(o=>hex2string(o)).join(connector),exports.hexArrayToModuleArrayBuffer=(fields,hexArray,withCheck=!0,withPrefix=!0)=>{const fieldsLength=fields.length;let offset=fieldsLength+1;withCheck&&offset++;let bufferLength=hexArray.length+offset;const buffer=new ArrayBuffer(bufferLength),dataView=new DataView(buffer),lengthCode=decimalToHex(hexArray.length);fields.forEach((field,i)=>{dataView.setUint8(i,field)}),dataView.setUint8(fieldsLength,"0x"+lengthCode);let indexNum=fieldsLength+1;if(hexArray.forEach((el,index)=>{dataView.setUint8(indexNum,withPrefix?"0x"+el:el),indexNum+=1}),withCheck){const code=fields[2].toString(16);let check=generateCheckSum([code,lengthCode,...hexArray]);dataView.setUint8(bufferLength-1,check[0])}return buffer},exports.hexStrAscii=hexStrAscii,exports.hexStringToBinary=hexString=>parseInt(hexString,16).toString(2),exports.hexToDecimal=hex=>parseInt(hex,16),exports.isWithin30Minutes=timeStr=>{const now=Date.now(),targetTime=parseDateTime(timeStr);if(null===targetTime)return console.error("时间字符串格式错误:",timeStr),!1;return Math.abs(now-targetTime)>=18e5},exports.parseDateTime=parseDateTime,exports.sleep=(n=500)=>new Promise(r=>setTimeout(()=>r(!0),n)),exports.string2hexArr=str=>{let hexArray=[];for(let i=0;i<str.length;i++){const charCode=str.charCodeAt(i).toString(16).padStart(2,"0");hexArray.push(charCode)}return hexArray},exports.stringToTwoHexArray=str=>{const paddedStr=str.padStart(4,"0");return[`0x${paddedStr.slice(0,2)}`,`0x${paddedStr.slice(2,4)}`]},exports.toBCD=num=>{if(num<0||num>99)throw new Error("BCD only supports 0-99");return Math.floor(num/10)<<4|num%10};