123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- const bluetooth = require('../bluetooth.js');
- const parse = require('./blueParse/LSBMS.js');
- const readServiceID = '0000FEE7-0000-1000-8000-00805F9B34FB';
- const readID = '000036F6-0000-1000-8000-00805F9B34FB';
- const writeServiceID = '0000FEE7-0000-1000-8000-00805F9B34FB';
- const writeID = '000036F5-0000-1000-8000-00805F9B34FB';
- const common = require('../common.js');
- const app = getApp();
- const MTU = 115;
- var curTime = 0;
- var isEndPackage = true;
- var total_length = 0;
- var functionCode = 0;
- var functionList = [0, 0, 0, 0];
- function acceptDevice(device) {
- return device.btid ? true : false;
- }
- function haveBms() {
- console.log('是单蓝牙并且带bms');
- return true;
- }
- function isSingleBt() {
- return true;
- }
- function isDevice(device, data) {
- const advertisData = new Uint8Array(data.advertisData);
- const mac = device.btid
- .split('')
- .map((p, i) => parseInt(p + device.btid[i + 1], 16))
- .filter((p, i) => i % 2 == 0);
- if (advertisData.slice(0, 4).toString() == [9, 255, 1, 2].toString() && advertisData.slice(4, 10).toString() == mac.toString()) {
- return true;
- }
- return false;
- }
- function sendCommand(cmd, data = []) {
- data = [cmd, data.length].concat(data);
- return common.completArrayCRC(data, data.length);
- }
- // 鉴权
- function alterConnect(device, deviceId) {
- return [sendCommand(1, [171, 205, 171, 205])];
- }
- function readData(device, value, data) {
- var value = new Uint8Array(value);
- console.log(value);
- let macid = device.mac_id;
- if (!isEndPackage) {
- var endTime = new Date().getTime();
- if (endTime - curTime < 800) {
- curTime = endTime;
- var bms_data = mergeUint8Array(app.globalData.deviceBTBMSBuf[macid].bms_origin_data, value);
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bms_data;
- if (bms_data.length === total_length) {
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bms_data.slice(0, -1);
- if (functionCode === 30) {
- functionList.splice(0, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- }
- if (functionCode === 32) {
- functionList.splice(2, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- }
- if (functionCode === 9) {
- functionList.splice(3, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- console.log(functionList);
- }
- if (functionList[0] != 0 && functionList[1] != 0 && functionList[2] != 0 && functionList[3] != 0) {
- data = loadDoneBmsInfo(functionList, macid);
- }
- isEndPackage = true;
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = null;
- }
- } else {
- isEndPackage = true;
- }
- }
- switch (value[0]) {
- case 59:
- {
- if (value[4] === 30) {
- functionCode = 30;
- curTime = new Date().getTime();
- isEndPackage = false;
- total_length = value[5] + 1;
- var bmsData = value.slice(6);
- if (bmsData.length === total_length) {
- isEndPackage = true;
- }
- app.globalData.deviceBTBMSBuf[macid] = {
- bms_origin_data: null
- };
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData;
- }
- if (value[4] === 31) {
- functionCode = 31;
- curTime = new Date().getTime();
- isEndPackage = false;
- total_length = value[5] + 1;
- var bmsData = value.slice(6);
- if (bmsData.length === total_length) {
- isEndPackage = true;
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData.slice(0, -1);
- functionList.splice(1, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- if (functionList[0] != 0 && functionList[1] != 0 && functionList[2] != 0 && functionList[3] != 0) {
- data = loadDoneBmsInfo(functionList, macid);
- }
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = null;
- }
- app.globalData.deviceBTBMSBuf[macid] = {
- bms_origin_data: null
- };
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData;
- }
- if (value[4] === 32) {
- functionCode = 32;
- curTime = new Date().getTime();
- isEndPackage = false;
- total_length = value[5] + 1;
- var bmsData = value.slice(6);
- if (bmsData.length === total_length) {
- isEndPackage = true;
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData.slice(0, -1);
- functionList.splice(2, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- if (functionList[0] != 0 && functionList[1] != 0 && functionList[2] != 0 && functionList[3] != 0) {
- data = loadDoneBmsInfo(functionList, macid);
- }
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = null;
- }
- app.globalData.deviceBTBMSBuf[macid] = {
- bms_origin_data: null
- };
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData;
- }
- if (value[4] === 9) {
- console.log('xxxxx');
- functionCode = 9;
- curTime = new Date().getTime();
- isEndPackage = false;
- total_length = value[5] + 1;
- var bmsData = value.slice(6);
- if (bmsData.length === total_length) {
- console.log('09功能进来了');
- isEndPackage = true;
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData.slice(0, -1);
- functionList.splice(3, 1, app.globalData.deviceBTBMSBuf[macid].bms_origin_data);
- console.log('functionList');
- console.log(functionList);
- if (functionList[0] != 0 && functionList[1] != 0 && functionList[2] != 0 && functionList[3] != 0) {
- data = loadDoneBmsInfo(functionList, macid);
- console.log(data);
- }
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = null;
- }
- console.log('bmsDatabmsDatabmsData');
- console.log(bmsData);
- app.globalData.deviceBTBMSBuf[macid] = {
- bms_origin_data: null
- };
- app.globalData.deviceBTBMSBuf[macid].bms_origin_data = bmsData;
- }
- }
- break;
- }
- return data;
- }
- function loadDoneBmsInfo(functionList, macid) {
- var data = parse.parseBmsData(functionList[0], functionList[1], functionList[2]);
- common.reportBluetooth(macid, functionList[0], functionList[1], functionList[2], functionList[3]);
- data.voltage = data.state.voltageAll;
- data.quantity = data.state.soc;
- data.soh = data.state.soh;
- data.alarm = data.state.alarm;
- data.temp = data.state.temp.length != 0 ? data.state.temp[0] : 0;
- console.log(data);
- return data;
- }
- function stateUpdate(device, deviceId) {
- console.log('读电压');
- return [
- [58, 126, 1, 1, 30, 0, 216],
- [58, 126, 1, 1, 31, 0, 217],
- [58, 126, 1, 1, 32, 0, 218],
- [58, 126, 1, 1, 9, 0, 195]
- ];
- }
- function turnOn(device, deviceId) {
- console.log('通电');
- //return [sendCommand(0x03, [0xaa])]
- return [[58, 126, 1, 0, 60, 4, 255, 1, 255, 255, 247]];
- }
- function turnOff(device, deviceId) {
- console.log('断电');
- //return [sendCommand(0x03, [0xbb])]
- return [[58, 126, 1, 0, 60, 4, 255, 0, 255, 255, 246]];
- }
- function bmsChargingMOS(value) {
- if (value == 1) {
- return [[58, 126, 1, 0, 60, 4, 255, 255, 1, 255, 247]];
- } else {
- return [[58, 126, 1, 0, 60, 4, 255, 255, 0, 255, 246]];
- }
- }
- function bmsDischargeMOS(value, device) {
- if (value == 1) {
- return [[58, 126, 1, 0, 60, 4, 255, 1, 255, 255, 247]];
- } else {
- console.log('xxxxxx44');
- return [[58, 126, 1, 0, 60, 4, 255, 0, 255, 255, 246]];
- }
- }
- function mergeUint8Array(arr1, arr2) {
- let len1 = arr1 ? arr1.length : 0;
- let len2 = arr2.length;
- let arr = new Uint8Array(len1 + len2);
- for (let i = 0; i < len1; i++) {
- arr[i] = arr1[i];
- }
- for (let i = 0; i < len2; i++) {
- arr[len1 + i] = arr2[i];
- }
- return arr;
- }
- // function bmsInfo(){
- // }
- module.exports = {
- readServiceID: readServiceID,
- readID: readID,
- writeServiceID: writeServiceID,
- writeID: writeID,
- MTU: MTU,
- acceptDevice: acceptDevice,
- // bmsInfo: bmsInfo,
- isDevice: isDevice,
- alterConnect: alterConnect,
- readData: readData,
- stateUpdate: stateUpdate,
- turnOn: turnOn,
- turnOff: turnOff,
- isSingleBt: isSingleBt,
- haveBms: haveBms,
- bmsChargingMOS: bmsChargingMOS,
- bmsDischargeMOS: bmsDischargeMOS
- };
|