| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580 |
- // #ifdef APP
- import ecUI from '@/utils/ecUI.js'
- import ecBLE from '@/utils/ecBLE/ecBLE.js'
- // #endif
- // #ifdef MP
- const ecUI = require('@/utils/ecUI.js')
- const ecBLE = require('@/utils/ecBLE/ecBLE.js')
- // #endif
- const deviceTool = {
- //
- startCharge(port){
- let arr = [85,104,3,1,80,195,127];
- if(port == 2){
- arr = [85,104,3,2,80,195,128];
- }
- sendData(arr)
- },
- stopCharge(port){
- let arr = [85,105,1,1,107];
- if(port == 2){
- arr = [85,105,1,2,108];
- }
- sendData(arr)
- },
- sendPortDetailCmd(){
- let arr = [85,103,1,0,104];
- sendData(arr)
- },
- sendMainboardCmd(){
- let arr = [85,96,1,0];
- addLast(arr);
- sendData(arr)
- },
- restart(){
- let arr = [85,117,1,0,118];
- sendData(arr)
- },
- reset(){
- let arr = [85,98,1,0,99];
- sendData(arr)
- },
- plan(port,time){
- let moneyArr = decToCmd(500);
- let one = 0,two = 0;
- if(moneyArr.length == 1){
- one = 0;
- two = moneyArr[0];
- }else{
- one = moneyArr[0];
- two = moneyArr[1];
- }
- let first = 0,second = 0;
- let timeArr = decToCmd(time);
- if(timeArr.length == 1){
- first = 0;
- second = timeArr[0];
- }else{
- first = timeArr[0];
- second = timeArr[1];
- }
- let arr = [85,104,5,port,two,one,second,first];
- addLast(arr);
- sendData(arr)
- },
- cancelPlan(port){
- let cmdKey;
- if(port == 1){
- cmdKey = [85,115,2,1,0,118];
- }else if(port == 2){
- cmdKey = [85,115,2,2,0,119];
- }
- sendData(cmdKey);
- },
- setCurrent(current){
- let currentArr = decToCmd(current);
- let one = 0,two = 0;
- if(currentArr.length == 1){
- one = 0;
- two = currentArr[0];
- }else{
- one = currentArr[0];
- two = currentArr[1];
- }
- let arr = [85,97,19,1,8,244,1,231,3,0,208,32,7,9,5,22,8,5,one,two,1,1];
- addLast(arr)
- sendData(arr)
- },
- getPwd(){
- let arr = [85,172,0,172];
- sendData(arr)
- },
- setPwd(pwd){
- let arr = [85,204,6];
- for (let i = 0; i < pwd.length; i++) {
- arr.push(parseInt(pwd[i],10));
- }
- addLast(arr)
- sendData(arr)
- },
- getUUID(){
- let arr = [85,253,0,253];
- sendData(arr)
- },
- sendWifiPwd(wifi,pwd){
- let arr = buildWifiPwd(wifi,pwd)
- addLast(arr)
- sendData(arr)
- }
- }
- function buildWifiPwd(wifi,pwd){
- let arr = [85,160,wifi.length+pwd.length+1];
- for (let i = 0; i < wifi.length; i++) {
- let c = wifi.charCodeAt(0);
- arr.push(c);
- }
- arr.push(59)
- for (let i = 0; i < pwd.length; i++) {
- let c = pwd.charCodeAt(0);
- arr.push(c);
- }
- return arr;
- }
- function addLast(arr){
- let total = 0;
- for(let i =1;i<arr.length;i++){
- const data =arr[i];
- total += data;
- }
- total = total.toString(2);
- if(total.length>8){
- let valueStrLen = total.length;
- total = total.substring(valueStrLen-8,valueStrLen);
- }
- total = parseInt(total,2)
- arr.push(total);
- }
- function sendData(arr){
- arr = changeArr(arr);
- let str = arr.join(" ");
- sendBlueData(str);
- }
- function changeArr(arr){
- const hexArr = arr.map(num => {
- let str = num.toString(16); // 将每个数字转换为16进制字符串
- if(str.length == 1){
- return "0"+str.toUpperCase();
- }else{
- return str.toUpperCase();
- }
- });
- return hexArr;
- }
- const dataParser = {
- /**
- * "data":[170,96,33,1,8,244,1,231,3,1,208,32,7,9,5,22,8,0,0,0,5,128,12,0,0,0,0,12,15,18,8,7,8,7,8,7,120]
- * "real_data":{"card_avail":1,"peak_price":8,"cost":500,"time_limit":999,"fee_type":1,"max_power":8400,"peak_service_price":7,"volume":9,"bottom_price":5,"botton_end":22,"bottom_start":8,"qr_id_low":0,"qr_id_middle":0,"qr_id_high":0,"bottom_service_price":5,"max_current":3200,"cp_check_off":0,"fee_show_off":0,"time1_end":12,"time2_end":15,"time3_end":18,"time1_price":8,"time1_price_service":7,"time2_price":8,"time2_sercie_price":7,"time3_price":8,"time3_service_price":7},"type":96}
- */
- mainboard:'CARD_AVAIL\n' +
- 'PEAK_PRICE\n' +
- 'COST 2\n' +
- 'TIME_LIMIT 2\n' +
- 'FEE_TYPE\n' +
- 'MAX_POWER 2\n' +
- 'PEAK_SERVICE_PRICE\n' +
- 'VOLUME\n' +
- 'BOTTOM_PRICE\n' +
- 'BOTTON_END\n' +
- 'BOTTOM_START\n' +
- 'QR_ID_LOW\n' +
- 'QR_ID_MIDDLE\n' +
- 'QR_ID_HIGH\n' +
- 'BOTTOM_SERVICE_PRICE\n' +
- 'MAX_CURRENT 2\n' +
- 'XXX\n' +
- 'XXX\n' +
- 'CP_CHECK_OFF\n' +
- 'FEE_SHOW_OFF\n' +
- 'TIME1_END\n' +
- 'TIME2_END\n' +
- 'TIME3_END\n' +
- 'TIME1_PRICE\n' +
- 'TIME1_PRICE_SERVICE\n' +
- 'TIME2_PRICE\n' +
- 'TIME2_SERCIE_PRICE\n' +
- 'TIME3_PRICE\n' +
- 'TIME3_SERVICE_PRICE',
- portdetail:{
- single:'PORT_FIRST_STATUS\n' +
- 'POWER 2\n' +
- 'ELEC 2\n' +
- 'MONEY 2\n' +
- 'TIME 2',
- morlsingle:'PORT_FIRST_STATUS\n' +
- 'POWER 2\n' +
- 'ELEC 2\n' +
- 'MONEY 2\n' +
- 'TIME 2\n' +
- 'VOLTAGE\n' +
- 'DEV_TEMPER\n' +
- 'WIRE_TEMPER',
- morlsingle2:'PORT_FIRST_STATUS\n' +
- 'POWER 2\n' +
- 'ELEC 2\n' +
- 'MONEY 2\n' +
- 'TIME 2\n' +
- 'DEV_TEMPER\n' +
- 'VOLTAGE' ,
- double:'PORT_FIRST_STATUS\n' +
- 'POWER 2\n' +
- 'ELEC 2\n' +
- 'MONEY 2\n' +
- 'TIME 2\n' +
- 'PORT_SECOND_STATUS\n' +
- 'POWER_1 2\n' +
- 'ELEC_1 2\n' +
- 'MONEY_1 2\n' +
- 'TIME_1 2',
- morldouble:'PORT_FIRST_STATUS\n' +
- 'POWER 2\n' +
- 'ELEC 2\n' +
- 'MONEY 2\n' +
- 'TIME 2\n' +
- 'PORT_SECOND_STATUS\n' +
- 'POWER_1 2\n' +
- 'ELEC_1 2\n' +
- 'MONEY_1 2\n' +
- 'TIME_1 2\n' +
- 'DEV_TEMPER\n' +
- 'VOLTAGE\n'
- }
- }
- function parseData(arr){
- if(!arr){
- return
- }
- let type = arr[1];
- let str = "";
- if(type == 96){//主板
- str = dataParser.mainboard;
- }
- if(type == 103){
- let len = arr[2];
- if(len == 18){
- str = dataParser.portdetail.double;
- }
- if(len == 9){
- str = dataParser.portdetail.single;
- }
- if(len == 11){
- str = dataParser.portdetail.morlsingle2;
- }
- if(len == 13){
- str = dataParser.portdetail.morlsingle;
- }
- if(len == 20){
- str = dataParser.portdetail.morldouble;
- }
- }
- let data = {};
- if(type == 253){
- data.type = type;
- data.real_data = parseUUID(arr);
- return data;
- }
- if(type == 172){
- data.type = type;
- data.real_data = parsePwd(arr);
- return data;
- }
- let obj = parseProp(arr,str);
- data.type = type;
- data.real_data = obj;
- return data;
- }
- function parseUUID(arr){
- let str = "";
- for (let i = 2; i < arr.length; i++) {
- let key = arr[i]+"";
- if(key.length == 1){
- key = "00"+key;
- }
- if(key.length == 2){
- key = "0"+key;
- }
- str = str+""+key;
- }
- return str;
- }
- function parseProp(arr,str){
- let obj = {};
- let keys = str.split("\n")
- let index = 3;
- for (let i = 0; i < keys.length; i++) {
- let key = keys[i];
- let keyProps = key.split(" ");
- let num = 1;
- if(keyProps.length == 2){
- num = parseInt(keyProps[1],10);
- }
- let integers = [index,index+num-1];
- let datas = [];
- for (let j = integers[0]; j <= integers[integers.length-1]; j++) {
- datas.push(arr[j]);
- }
- let aLong = cmdToDec(datas);
- let propKey = keyProps[0].toLowerCase();
- obj[propKey] = aLong;
- index+=num;
- }
- return obj;
- }
- /**
- * 将命令字符串转成十进制
- * @param cmds
- * @return
- */
- function cmdToDec(cmds) {
- if (!cmds) {
- return -1;
- }
- let len = cmds.length;
- if (len === 1) {
- return cmds[0];
- } else if (len === 2) {
- let first = cmds[0];
- let second = cmds[1];
- let firstStr = addZero(first.toString(2));
- let secondStr = addZero(second.toString(2));
- let allStr = secondStr + firstStr;
- let i = parseInt(allStr, 2);
- return i;
- } else if (len === 4) {
- let first = cmds[0];
- let second = cmds[1];
- let third = cmds[2];
- let forth = cmds[3];
- let firstStr = addZero(first.toString(2));
- let secondStr = addZero(second.toString(2));
- let thirdStr = addZero(third.toString(2));
- let forthStr = addZero(forth.toString(2));
- let allStr = forthStr + thirdStr + secondStr + firstStr;
- let i = parseInt(allStr, 2);
- return i;
- }
- return 0;
- }
- function sendBlueData(tempSendData){
- let data = tempSendData
- .replace(/\s*/g, '')
- .replace(/\n/g, '')
- .replace(/\r/g, '')
- throttle(function() {
- console.log("写入数据:"+data+","+new Date().toLocaleTimeString());
- ecBLE.writeBLECharacteristicValue(data, true)
- }, 100)();
- }
- /**
- * 二进制补0
- * @param value
- * @return
- */
- function addZero(value) {
- let len = value.length;
- if (len < 8) {
- for (let i = 0; i < 8 - len; i++) {
- value = "0" + value;
- }
- }
- return value;
- }
- /**
- * 将十进制值转成cmd格式
- * @param value
- * @return
- */
- function decToCmd(value) {
- let cmds = null;
- if (value <= 255) { //两位
- cmds = [value];
- } else if (value <= 65535) {
- cmds = new Array(2);
- let valueStr = value.toString(2);
- let len = valueStr.length;
- let lastEight = valueStr.substring(len - 8, len);
- let firstEight = valueStr.substring(0, len - 8);
- cmds[0] = parseInt(lastEight, 2);
- cmds[1] = parseInt(firstEight, 2);
- } else {
- cmds = new Array(4);
- let valueStr = value.toString(2);
- let len = valueStr.length;
- let lastEight = valueStr.substring(len - 8, len);
- let firstEight = valueStr.substring(len - 16, len - 8);
- let secondEight = valueStr.substring(len - 24, len - 16);
- let thirdEight = valueStr.substring(0, len - 24);
- cmds[0] = parseInt(lastEight, 2);
- cmds[1] = parseInt(firstEight, 2);
- cmds[2] = parseInt(secondEight, 2);
- cmds[3] = parseInt(thirdEight, 2);
- }
- return cmds;
- }
- //parseData([170,103,18,1,0,0,54,5,0,0,0,0,2,241,25,67,3,75,0,77,0,159])
- export function sendPortDetailCmd(){
- deviceTool.sendPortDetailCmd()
- return new Promise(resolve => {
- resolve()
- });
- }
- export function getMainboardConfig(){
- deviceTool.getMainboardConfig()
- return new Promise(resolve => {
- resolve()
- });
- }
- export function parseDataObj(data){
- data = data.trim();
- data = data.split(" ");
- console.log(data)
- let arr = [];
- for (let i = 0; i < data.length; i++) {
- arr.push(parseInt(data[i],16)) ;
- }
- return parseData(arr)
- }
- export function parsePwd(data){
- let pwd = "";
- for (let i = 3; i < 9; i++) {
- pwd = pwd+""+parseInt(data[i],16) ;
- }
- return pwd;
- }
- export function startCharge(obj){
- deviceTool.startCharge(obj.port);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function planCharge(port,min){
- deviceTool.plan(port,min);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function cancelPlan(port,min){
- deviceTool.cancelPlan(port);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function stopCharge(obj){
- deviceTool.stopCharge(obj.port);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function sendMainboardCmd(){
- deviceTool.sendMainboardCmd();
- return new Promise(resolve => {
- resolve()
- });
- }
- export function setCurrent(current){
- deviceTool.setCurrent(current);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function reset(){
- deviceTool.reset();
- return new Promise(resolve => {
- resolve()
- });
- }
- export function restart(){
- deviceTool.restart();
- return new Promise(resolve => {
- resolve()
- });
- }
- export function setPwd(pwd){
- deviceTool.setPwd(pwd);
- return new Promise(resolve => {
- resolve()
- });
- }
- export function getPwd(){
- deviceTool.getPwd();
- return new Promise(resolve => {
- resolve()
- });
- }
- export function getUUID(){
- deviceTool.getUUID();
- return new Promise(resolve => {
- resolve()
- });
- }
- //--------------------------------
- let queue = Promise.resolve();
- function throttle(func, delay) {
- return function(...args) {
- queue = queue.then(() => {
- func.apply(this, args);
- return new Promise(resolve => {
- setTimeout(resolve, delay)
- doResetTime(delay);
- });
- });
- };
- }
- // 使用方法:
- const myFunction = throttle(function() {
- console.log('这是一个调用请求'+new Date());
- }, 1000);
- let resetTimer = null;
- function doResetTime(delay){
- if(resetTimer == null){
- resetTimer = setTimeout(function (){
- console.log("reset timer"+new Date());
- queue = Promise.resolve();
- },delay);
- }else{
- clearTimeout(resetTimer);
- resetTimer = null;
- doResetTime(delay);
- }
- }
- //--------------
- function test(){
- let data = 'AA,67,0B,02,00,00,15,00,4E,C3,2B,00,1C,E8,C9';
- data = data.trim();
- data = data.split(",");
- let arr = [];
- for (let i = 0; i < data.length; i++) {
- arr.push(parseInt(data[i],16)) ;
- }
- console.log(arr)
- console.log( parseData(arr))
- }
- function testQueue(){
- for (let i = 0; i < 10; i++) {
- sendBlueData(i+"");
- }
- }
- // test()
|