device.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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. restart(){
  30. let arr = [85,117,1,0,118];
  31. sendData(arr)
  32. },
  33. plan(port,time){
  34. let arr = [85,104,5,1,80,95,7,0,152];
  35. },
  36. getMainboardConfig(){
  37. let arr = [85,96,1,0];
  38. addLast(arr);
  39. sendData(arr)
  40. },
  41. setCurrent(current){
  42. let currentArr = decToCmd(current);
  43. let one = 0,two = 0;
  44. if(currentArr.length == 1){
  45. one = 0;
  46. two = currentArr[0];
  47. }else{
  48. one = currentArr[0];
  49. two = currentArr[1];
  50. }
  51. debugger;
  52. let arr = [85,97,19,1,8,244,1,231,3,0,208,32,7,9,5,22,8,5,one,two,1,1];
  53. addLast(arr)
  54. console.log(arr)
  55. console.log([85,97,19,1,8,244,1,231,3,0,208,32,7,9,5,22,8,5,208,7,1,1,93])
  56. }
  57. }
  58. function addLast(arr){
  59. let total = 0;
  60. for(let i =1;i<arr.length;i++){
  61. const data =arr[i];
  62. total += data;
  63. }
  64. total = total.toString(2);
  65. if(total.length>8){
  66. let valueStrLen = total.length;
  67. total = total.substring(valueStrLen-8,valueStrLen);
  68. }
  69. total = parseInt(total,2)
  70. arr.push(total);
  71. }
  72. function sendData(arr){
  73. arr = changeArr(arr);
  74. let str = arr.join(" ");
  75. sendBlueData(str);
  76. }
  77. function changeArr(arr){
  78. const hexArr = arr.map(num => {
  79. let str = num.toString(16); // 将每个数字转换为16进制字符串
  80. if(str.length == 1){
  81. return "0"+str.toUpperCase();
  82. }else{
  83. return str.toUpperCase();
  84. }
  85. });
  86. return hexArr;
  87. }
  88. const dataParser = {
  89. /**
  90. * "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]
  91. * "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}
  92. */
  93. mainboard:'CARD_AVAIL\n' +
  94. 'PEAK_PRICE\n' +
  95. 'COST 2\n' +
  96. 'TIME_LIMIT 2\n' +
  97. 'FEE_TYPE\n' +
  98. 'MAX_POWER 2\n' +
  99. 'PEAK_SERVICE_PRICE\n' +
  100. 'VOLUME\n' +
  101. 'BOTTOM_PRICE\n' +
  102. 'BOTTON_END\n' +
  103. 'BOTTOM_START\n' +
  104. 'QR_ID_LOW\n' +
  105. 'QR_ID_MIDDLE\n' +
  106. 'QR_ID_HIGH\n' +
  107. 'BOTTOM_SERVICE_PRICE\n' +
  108. 'MAX_CURRENT 2\n' +
  109. 'XXX\n' +
  110. 'XXX\n' +
  111. 'CP_CHECK_OFF\n' +
  112. 'FEE_SHOW_OFF\n' +
  113. 'TIME1_END\n' +
  114. 'TIME2_END\n' +
  115. 'TIME3_END\n' +
  116. 'TIME1_PRICE\n' +
  117. 'TIME1_PRICE_SERVICE\n' +
  118. 'TIME2_PRICE\n' +
  119. 'TIME2_SERCIE_PRICE\n' +
  120. 'TIME3_PRICE\n' +
  121. 'TIME3_SERVICE_PRICE',
  122. portdetail:{
  123. single:'PORT_FIRST_STATUS\n' +
  124. 'POWER 2\n' +
  125. 'ELEC 2\n' +
  126. 'MONEY 2\n' +
  127. 'TIME 2',
  128. morlsingle:'PORT_FIRST_STATUS\n' +
  129. 'POWER 2\n' +
  130. 'ELEC 2\n' +
  131. 'MONEY 2\n' +
  132. 'TIME 2\n' +
  133. 'VOLTAGE\n' +
  134. 'DEV_TEMPER\n' +
  135. 'WIRE_TEMPER',
  136. double:'PORT_FIRST_STATUS\n' +
  137. 'POWER 2\n' +
  138. 'ELEC 2\n' +
  139. 'MONEY 2\n' +
  140. 'TIME 2\n' +
  141. 'PORT_SECOND_STATUS\n' +
  142. 'POWER 2\n' +
  143. 'ELEC 2\n' +
  144. 'MONEY 2\n' +
  145. 'TIME 2'
  146. }
  147. }
  148. function parseData(arr){
  149. if(!arr){
  150. return
  151. }
  152. let type = arr[1];
  153. let str = "";
  154. if(type == 96){//主板
  155. str = dataParser.mainboard;
  156. }
  157. if(type == 103){
  158. let len = arr[2];
  159. if(len == 18){
  160. str = dataParser.portdetail.double;
  161. }
  162. if(len == 9){
  163. str = dataParser.portdetail.single;
  164. }
  165. if(len == 13){
  166. str = dataParser.portdetail.morlsingle;
  167. }
  168. }
  169. return parseProp(arr,str)
  170. }
  171. function parseProp(arr,str){
  172. let obj = {};
  173. let keys = str.split("\n")
  174. let index = 3;
  175. for (let i = 0; i < keys.length; i++) {
  176. let key = keys[i];
  177. let keyProps = key.split(" ");
  178. let num = 1;
  179. if(keyProps.length == 2){
  180. num = parseInt(keyProps[1],10);
  181. }
  182. let integers = [index,index+num-1];
  183. let datas = [];
  184. for (let j = integers[0]; j <= integers[integers.length-1]; j++) {
  185. datas.push(arr[j]);
  186. }
  187. let aLong = cmdToDec(datas);
  188. obj[keyProps[0].toLowerCase()] = aLong;
  189. index+=num;
  190. }
  191. return obj;
  192. }
  193. /**
  194. * 将命令字符串转成十进制
  195. * @param cmds
  196. * @return
  197. */
  198. function cmdToDec(cmds) {
  199. if (!cmds) {
  200. return -1;
  201. }
  202. let len = cmds.length;
  203. if (len === 1) {
  204. return cmds[0];
  205. } else if (len === 2) {
  206. let first = cmds[0];
  207. let second = cmds[1];
  208. let firstStr = addZero(first.toString(2));
  209. let secondStr = addZero(second.toString(2));
  210. let allStr = secondStr + firstStr;
  211. let i = parseInt(allStr, 2);
  212. return i;
  213. } else if (len === 4) {
  214. let first = cmds[0];
  215. let second = cmds[1];
  216. let third = cmds[2];
  217. let forth = cmds[3];
  218. let firstStr = addZero(first.toString(2));
  219. let secondStr = addZero(second.toString(2));
  220. let thirdStr = addZero(third.toString(2));
  221. let forthStr = addZero(forth.toString(2));
  222. let allStr = forthStr + thirdStr + secondStr + firstStr;
  223. let i = parseInt(allStr, 2);
  224. return i;
  225. }
  226. return 0;
  227. }
  228. function sendBlueData(tempSendData){
  229. ecBLE.writeBLECharacteristicValue(tempSendData, false)
  230. }
  231. /**
  232. * 二进制补0
  233. * @param value
  234. * @return
  235. */
  236. function addZero(value) {
  237. let len = value.length;
  238. if (len < 8) {
  239. for (let i = 0; i < 8 - len; i++) {
  240. value = "0" + value;
  241. }
  242. }
  243. return value;
  244. }
  245. /**
  246. * 将十进制值转成cmd格式
  247. * @param value
  248. * @return
  249. */
  250. function decToCmd(value) {
  251. let cmds = null;
  252. if (value <= 255) { //两位
  253. cmds = [value];
  254. } else if (value <= 65535) {
  255. cmds = new Array(2);
  256. let valueStr = value.toString(2);
  257. let len = valueStr.length;
  258. let lastEight = valueStr.substring(len - 8, len);
  259. let firstEight = valueStr.substring(0, len - 8);
  260. cmds[0] = parseInt(lastEight, 2);
  261. cmds[1] = parseInt(firstEight, 2);
  262. } else {
  263. cmds = new Array(4);
  264. let valueStr = value.toString(2);
  265. let len = valueStr.length;
  266. let lastEight = valueStr.substring(len - 8, len);
  267. let firstEight = valueStr.substring(len - 16, len - 8);
  268. let secondEight = valueStr.substring(len - 24, len - 16);
  269. let thirdEight = valueStr.substring(0, len - 24);
  270. cmds[0] = parseInt(lastEight, 2);
  271. cmds[1] = parseInt(firstEight, 2);
  272. cmds[2] = parseInt(secondEight, 2);
  273. cmds[3] = parseInt(thirdEight, 2);
  274. }
  275. return cmds;
  276. }
  277. //parseData([170,103,18,1,0,0,54,5,0,0,0,0,2,241,25,67,3,75,0,77,0,159])
  278. export function sendPortDetailCmd(){
  279. deviceTool.sendPortDetailCmd()
  280. return new Promise(resolve => {
  281. resolve()
  282. });
  283. }
  284. export function getMainboardConfig(){
  285. deviceTool.getMainboardConfig()
  286. return new Promise(resolve => {
  287. resolve()
  288. });
  289. }
  290. function test(){
  291. deviceTool.setCurrent(2000)
  292. }
  293. test()