device.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. // #ifdef APP
  2. import ecUI from '@/utils/ecUI.js'
  3. import ecBLE from '@/utils/ecBLE/ecBLE.js'
  4. // #endif
  5. // #ifdef MP
  6. const ecUI = require('@/utils/ecUI.js')
  7. const ecBLE = require('@/utils/ecBLE/ecBLE.js')
  8. // #endif
  9. const deviceTool = {
  10. //
  11. startCharge(port){
  12. let arr = [85,104,3,1,80,195,127];
  13. if(port == 2){
  14. arr = [85,104,3,2,80,195,128];
  15. }
  16. sendData(arr)
  17. },
  18. stopCharge(port){
  19. let arr = [85,105,1,1,107];
  20. if(port == 2){
  21. arr = [85,105,1,2,108];
  22. }
  23. sendData(arr)
  24. },
  25. sendPortDetailCmd(){
  26. let arr = [85,103,1,0,104];
  27. sendData(arr)
  28. },
  29. sendMainboardCmd(){
  30. let arr = [85,96,1,0];
  31. addLast(arr);
  32. sendData(arr)
  33. },
  34. restart(){
  35. let arr = [85,117,1,0,118];
  36. sendData(arr)
  37. },
  38. reset(){
  39. let arr = [85,98,1,0,99];
  40. sendData(arr)
  41. },
  42. plan(port,time){
  43. let moneyArr = decToCmd(500);
  44. let one = 0,two = 0;
  45. if(moneyArr.length == 1){
  46. one = 0;
  47. two = moneyArr[0];
  48. }else{
  49. one = moneyArr[0];
  50. two = moneyArr[1];
  51. }
  52. let first = 0,second = 0;
  53. let timeArr = decToCmd(time);
  54. if(timeArr.length == 1){
  55. first = 0;
  56. second = timeArr[0];
  57. }else{
  58. first = timeArr[0];
  59. second = timeArr[1];
  60. }
  61. let arr = [85,104,5,port,two,one,second,first];
  62. addLast(arr);
  63. sendData(arr)
  64. },
  65. cancelPlan(port){
  66. let cmdKey;
  67. if(port == 1){
  68. cmdKey = [85,115,2,1,0,118];
  69. }else if(port == 2){
  70. cmdKey = [85,115,2,2,0,119];
  71. }
  72. sendData(cmdKey);
  73. },
  74. setCurrent(current){
  75. let currentArr = decToCmd(current);
  76. let one = 0,two = 0;
  77. if(currentArr.length == 1){
  78. one = 0;
  79. two = currentArr[0];
  80. }else{
  81. one = currentArr[0];
  82. two = currentArr[1];
  83. }
  84. let arr = [85,97,19,1,8,244,1,231,3,0,208,32,7,9,5,22,8,5,one,two,1,1];
  85. addLast(arr)
  86. sendData(arr)
  87. },
  88. getPwd(){
  89. let arr = [85,172,0,172];
  90. sendData(arr)
  91. },
  92. setPwd(pwd){
  93. let arr = [85,204,6];
  94. for (let i = 0; i < pwd.length; i++) {
  95. arr.push(parseInt(pwd[i],10));
  96. }
  97. addLast(arr)
  98. sendData(arr)
  99. },
  100. getUUID(){
  101. let arr = [85,253,0,253];
  102. sendData(arr)
  103. },
  104. sendWifiPwd(wifi,pwd){
  105. let arr = buildWifiPwd(wifi,pwd)
  106. addLast(arr)
  107. sendData(arr)
  108. }
  109. }
  110. function buildWifiPwd(wifi,pwd){
  111. let arr = [85,160,wifi.length+pwd.length+1];
  112. for (let i = 0; i < wifi.length; i++) {
  113. let c = wifi.charCodeAt(0);
  114. arr.push(c);
  115. }
  116. arr.push(59)
  117. for (let i = 0; i < pwd.length; i++) {
  118. let c = pwd.charCodeAt(0);
  119. arr.push(c);
  120. }
  121. return arr;
  122. }
  123. function addLast(arr){
  124. let total = 0;
  125. for(let i =1;i<arr.length;i++){
  126. const data =arr[i];
  127. total += data;
  128. }
  129. total = total.toString(2);
  130. if(total.length>8){
  131. let valueStrLen = total.length;
  132. total = total.substring(valueStrLen-8,valueStrLen);
  133. }
  134. total = parseInt(total,2)
  135. arr.push(total);
  136. }
  137. function sendData(arr){
  138. arr = changeArr(arr);
  139. let str = arr.join(" ");
  140. sendBlueData(str);
  141. }
  142. function changeArr(arr){
  143. const hexArr = arr.map(num => {
  144. let str = num.toString(16); // 将每个数字转换为16进制字符串
  145. if(str.length == 1){
  146. return "0"+str.toUpperCase();
  147. }else{
  148. return str.toUpperCase();
  149. }
  150. });
  151. return hexArr;
  152. }
  153. const dataParser = {
  154. /**
  155. * "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]
  156. * "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}
  157. */
  158. mainboard:'CARD_AVAIL\n' +
  159. 'PEAK_PRICE\n' +
  160. 'COST 2\n' +
  161. 'TIME_LIMIT 2\n' +
  162. 'FEE_TYPE\n' +
  163. 'MAX_POWER 2\n' +
  164. 'PEAK_SERVICE_PRICE\n' +
  165. 'VOLUME\n' +
  166. 'BOTTOM_PRICE\n' +
  167. 'BOTTON_END\n' +
  168. 'BOTTOM_START\n' +
  169. 'QR_ID_LOW\n' +
  170. 'QR_ID_MIDDLE\n' +
  171. 'QR_ID_HIGH\n' +
  172. 'BOTTOM_SERVICE_PRICE\n' +
  173. 'MAX_CURRENT 2\n' +
  174. 'XXX\n' +
  175. 'XXX\n' +
  176. 'CP_CHECK_OFF\n' +
  177. 'FEE_SHOW_OFF\n' +
  178. 'TIME1_END\n' +
  179. 'TIME2_END\n' +
  180. 'TIME3_END\n' +
  181. 'TIME1_PRICE\n' +
  182. 'TIME1_PRICE_SERVICE\n' +
  183. 'TIME2_PRICE\n' +
  184. 'TIME2_SERCIE_PRICE\n' +
  185. 'TIME3_PRICE\n' +
  186. 'TIME3_SERVICE_PRICE',
  187. portdetail:{
  188. single:'PORT_FIRST_STATUS\n' +
  189. 'POWER 2\n' +
  190. 'ELEC 2\n' +
  191. 'MONEY 2\n' +
  192. 'TIME 2',
  193. morlsingle:'PORT_FIRST_STATUS\n' +
  194. 'POWER 2\n' +
  195. 'ELEC 2\n' +
  196. 'MONEY 2\n' +
  197. 'TIME 2\n' +
  198. 'VOLTAGE\n' +
  199. 'DEV_TEMPER\n' +
  200. 'WIRE_TEMPER',
  201. double:'PORT_FIRST_STATUS\n' +
  202. 'POWER 2\n' +
  203. 'ELEC 2\n' +
  204. 'MONEY 2\n' +
  205. 'TIME 2\n' +
  206. 'PORT_SECOND_STATUS\n' +
  207. 'POWER 2\n' +
  208. 'ELEC 2\n' +
  209. 'MONEY 2\n' +
  210. 'TIME 2',
  211. morldouble:'PORT_FIRST_STATUS\n' +
  212. 'POWER 2\n' +
  213. 'ELEC 2\n' +
  214. 'MONEY 2\n' +
  215. 'TIME 2\n' +
  216. 'PORT_SECOND_STATUS\n' +
  217. 'POWER 2\n' +
  218. 'ELEC 2\n' +
  219. 'MONEY 2\n' +
  220. 'TIME 2\n' +
  221. 'VOLTAGE\n' +
  222. 'DEV_TEMPER\n'
  223. }
  224. }
  225. function parseData(arr){
  226. if(!arr){
  227. return
  228. }
  229. let type = arr[1];
  230. let str = "";
  231. if(type == 96){//主板
  232. str = dataParser.mainboard;
  233. }
  234. if(type == 103){
  235. let len = arr[2];
  236. if(len == 18){
  237. str = dataParser.portdetail.double;
  238. }
  239. if(len == 9){
  240. str = dataParser.portdetail.single;
  241. }
  242. if(len == 13){
  243. str = dataParser.portdetail.morlsingle;
  244. }
  245. if(len == 20){
  246. str = dataParser.portdetail.morldouble;
  247. }
  248. }
  249. let data = {};
  250. if(type == 253){
  251. data.type = type;
  252. data.real_data = parseUUID(arr);
  253. return data;
  254. }
  255. if(type == 172){
  256. data.type = type;
  257. data.real_data = parsePwd(arr);
  258. return data;
  259. }
  260. let obj = parseProp(arr,str);
  261. data.type = type;
  262. data.real_data = obj;
  263. console.log(data);
  264. return data;
  265. }
  266. function parseUUID(arr){
  267. let str = "";
  268. for (let i = 2; i < arr.length; i++) {
  269. let key = arr[i]+"";
  270. if(key.length == 1){
  271. key = "00"+key;
  272. }
  273. if(key.length == 2){
  274. key = "0"+key;
  275. }
  276. str = str+""+key;
  277. }
  278. return str;
  279. }
  280. function parseProp(arr,str){
  281. let obj = {};
  282. let keys = str.split("\n")
  283. let index = 3;
  284. for (let i = 0; i < keys.length; i++) {
  285. let key = keys[i];
  286. let keyProps = key.split(" ");
  287. let num = 1;
  288. if(keyProps.length == 2){
  289. num = parseInt(keyProps[1],10);
  290. }
  291. let integers = [index,index+num-1];
  292. let datas = [];
  293. for (let j = integers[0]; j <= integers[integers.length-1]; j++) {
  294. datas.push(arr[j]);
  295. }
  296. let aLong = cmdToDec(datas);
  297. obj[keyProps[0].toLowerCase()] = aLong;
  298. index+=num;
  299. }
  300. return obj;
  301. }
  302. /**
  303. * 将命令字符串转成十进制
  304. * @param cmds
  305. * @return
  306. */
  307. function cmdToDec(cmds) {
  308. if (!cmds) {
  309. return -1;
  310. }
  311. let len = cmds.length;
  312. if (len === 1) {
  313. return cmds[0];
  314. } else if (len === 2) {
  315. let first = cmds[0];
  316. let second = cmds[1];
  317. let firstStr = addZero(first.toString(2));
  318. let secondStr = addZero(second.toString(2));
  319. let allStr = secondStr + firstStr;
  320. let i = parseInt(allStr, 2);
  321. return i;
  322. } else if (len === 4) {
  323. let first = cmds[0];
  324. let second = cmds[1];
  325. let third = cmds[2];
  326. let forth = cmds[3];
  327. let firstStr = addZero(first.toString(2));
  328. let secondStr = addZero(second.toString(2));
  329. let thirdStr = addZero(third.toString(2));
  330. let forthStr = addZero(forth.toString(2));
  331. let allStr = forthStr + thirdStr + secondStr + firstStr;
  332. let i = parseInt(allStr, 2);
  333. return i;
  334. }
  335. return 0;
  336. }
  337. function sendBlueData(tempSendData){
  338. let data = tempSendData
  339. .replace(/\s*/g, '')
  340. .replace(/\n/g, '')
  341. .replace(/\r/g, '')
  342. console.log("写入数据:"+data);
  343. ecBLE.writeBLECharacteristicValue(data, true)
  344. }
  345. /**
  346. * 二进制补0
  347. * @param value
  348. * @return
  349. */
  350. function addZero(value) {
  351. let len = value.length;
  352. if (len < 8) {
  353. for (let i = 0; i < 8 - len; i++) {
  354. value = "0" + value;
  355. }
  356. }
  357. return value;
  358. }
  359. /**
  360. * 将十进制值转成cmd格式
  361. * @param value
  362. * @return
  363. */
  364. function decToCmd(value) {
  365. let cmds = null;
  366. if (value <= 255) { //两位
  367. cmds = [value];
  368. } else if (value <= 65535) {
  369. cmds = new Array(2);
  370. let valueStr = value.toString(2);
  371. let len = valueStr.length;
  372. let lastEight = valueStr.substring(len - 8, len);
  373. let firstEight = valueStr.substring(0, len - 8);
  374. cmds[0] = parseInt(lastEight, 2);
  375. cmds[1] = parseInt(firstEight, 2);
  376. } else {
  377. cmds = new Array(4);
  378. let valueStr = value.toString(2);
  379. let len = valueStr.length;
  380. let lastEight = valueStr.substring(len - 8, len);
  381. let firstEight = valueStr.substring(len - 16, len - 8);
  382. let secondEight = valueStr.substring(len - 24, len - 16);
  383. let thirdEight = valueStr.substring(0, len - 24);
  384. cmds[0] = parseInt(lastEight, 2);
  385. cmds[1] = parseInt(firstEight, 2);
  386. cmds[2] = parseInt(secondEight, 2);
  387. cmds[3] = parseInt(thirdEight, 2);
  388. }
  389. return cmds;
  390. }
  391. //parseData([170,103,18,1,0,0,54,5,0,0,0,0,2,241,25,67,3,75,0,77,0,159])
  392. export function sendPortDetailCmd(){
  393. deviceTool.sendPortDetailCmd()
  394. return new Promise(resolve => {
  395. resolve()
  396. });
  397. }
  398. export function getMainboardConfig(){
  399. deviceTool.getMainboardConfig()
  400. return new Promise(resolve => {
  401. resolve()
  402. });
  403. }
  404. export function parseDataObj(data){
  405. data = data.trim();
  406. data = data.split(" ");
  407. console.log(data)
  408. let arr = [];
  409. for (let i = 0; i < data.length; i++) {
  410. arr.push(parseInt(data[i],16)) ;
  411. }
  412. return parseData(arr)
  413. }
  414. export function parsePwd(data){
  415. let pwd = "";
  416. for (let i = 3; i < 9; i++) {
  417. pwd = pwd+""+parseInt(data[i],16) ;
  418. }
  419. return pwd;
  420. }
  421. export function startCharge(obj){
  422. deviceTool.startCharge(obj.port);
  423. return new Promise(resolve => {
  424. resolve()
  425. });
  426. }
  427. export function planCharge(port,min){
  428. deviceTool.plan(port,min);
  429. return new Promise(resolve => {
  430. resolve()
  431. });
  432. }
  433. export function cancelPlan(port,min){
  434. deviceTool.cancelPlan(port);
  435. return new Promise(resolve => {
  436. resolve()
  437. });
  438. }
  439. export function stopCharge(obj){
  440. deviceTool.stopCharge(obj.port);
  441. return new Promise(resolve => {
  442. resolve()
  443. });
  444. }
  445. export function sendMainboardCmd(){
  446. deviceTool.sendMainboardCmd();
  447. return new Promise(resolve => {
  448. resolve()
  449. });
  450. }
  451. export function setCurrent(current){
  452. deviceTool.setCurrent(current);
  453. return new Promise(resolve => {
  454. resolve()
  455. });
  456. }
  457. export function reset(){
  458. deviceTool.reset();
  459. return new Promise(resolve => {
  460. resolve()
  461. });
  462. }
  463. export function restart(){
  464. deviceTool.restart();
  465. return new Promise(resolve => {
  466. resolve()
  467. });
  468. }
  469. export function setPwd(pwd){
  470. deviceTool.setPwd(pwd);
  471. return new Promise(resolve => {
  472. resolve()
  473. });
  474. }
  475. export function getPwd(){
  476. deviceTool.getPwd();
  477. return new Promise(resolve => {
  478. resolve()
  479. });
  480. }
  481. export function getUUID(){
  482. deviceTool.getUUID();
  483. return new Promise(resolve => {
  484. resolve()
  485. });
  486. }
  487. function test(){
  488. let data = 'AA 67 14 02 00 00 00 00 01 F4 4C 00 01 00 00 00 00 F4 01 4C 00 1B E7 02';
  489. data = data.trim();
  490. data = data.split(" ");
  491. let arr = [];
  492. for (let i = 0; i < data.length; i++) {
  493. arr.push(parseInt(data[i],16)) ;
  494. }
  495. arr = [170, 103, 20, 2, 56, 4, 0, 0, 200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 232, 13]
  496. console.log(arr)
  497. parseData(arr)
  498. }
  499. // test()