kinve 1 سال پیش
والد
کامیت
925fa2ba92
4فایلهای تغییر یافته به همراه53 افزوده شده و 44 حذف شده
  1. 9 8
      ble.py
  2. 38 31
      client.js
  3. BIN
      dist/ble.exe
  4. 6 5
      websocket_server.py

+ 9 - 8
ble.py

@@ -11,6 +11,7 @@ import base64
 from Crypto.Cipher import AES
 from Crypto.Util.Padding import pad, unpad
 import copy
+import os
 
 from message_base import MessageBase
 from websocket_server import WebServer
@@ -96,7 +97,7 @@ def AES_Encrypt(aes_iv, aes_key, plain_text):
         pad_data = pad(plain_text, AES.block_size)
         return AES.new(aes_key, AES.MODE_CBC, aes_iv).encrypt(pad_data)
     except Exception as e: 
-        logger.error('Error:{}'.format(e)) 
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
         return bytes()  
 
 def AES_Decrypt(aes_iv, aes_key, plain_text):
@@ -111,7 +112,7 @@ def AES_Decrypt(aes_iv, aes_key, plain_text):
         dec_data = AES.new(aes_key, AES.MODE_CBC, aes_iv).decrypt(plain_text)
         return unpad(dec_data, AES.block_size)
     except Exception as e: 
-        logger.error('Error:{}'.format(e)) 
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
         return bytes()  
 
 def AES_Encrypt2(vi, key, data):
@@ -129,7 +130,7 @@ def AES_Encrypt2(vi, key, data):
         enctext = encodestrs.decode('utf8')
         # 对byte字符串按utf-8进行解码
     except Exception as e: 
-        logger.error('Error:{}'.format(e))   
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e)) 
     return enctext
  
 def AES_Decrypt2(vi, key, data):
@@ -146,7 +147,7 @@ def AES_Decrypt2(vi, key, data):
         # 去补位
         text_decrypted = text_decrypted.decode('utf8')
     except Exception as e: 
-        logger.error('Error:{}'.format(e))   
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))  
     return text_decrypted
 
 def sum_ccitt_16(data):
@@ -315,7 +316,7 @@ async def ble_send(client, data):
             await client.write_gatt_char(g_config["def_cfg"]["write_char"], s)
             send_count += cur_len
     except Exception as e: 
-        logger.error('Error:{}'.format(e)) 
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
             
 
     send_end_time = time.time()   
@@ -336,7 +337,7 @@ def print_data_list():
         for i in range(len(g_config["cmd_list"])):
             print(i, g_config["cmd_list"][i][2])
     except Exception as e: 
-        logger.error('Error:{}'.format(e)) 
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
 
 @calculate_time
 async def send_form_data_list(client, i, data=None):
@@ -449,7 +450,7 @@ async def auto_getcfg_call(client):
                 g_download_cfg["Number"] = Number+1 if Number < Total else 0
 
     except Exception as e: 
-        logger.error('Error:{}'.format(e)) 
+        logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
 
 async def main():
     global g_ble_client
@@ -492,7 +493,7 @@ async def main():
             try: 
                 await client.start_notify(g_config["def_cfg"]["notif_char"], notification_handler)
             except Exception as e: 
-                logger.error('Error:{}'.format(e)) 
+                logger.error("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
 
             g_download_cfg["Number"] = 0
             read_config_time = 0

+ 38 - 31
client.js

@@ -8,32 +8,19 @@ const WebSocket = require('ws');
 var ws = new WebSocket("ws://jiangyi.site:11111/");
 
 let stringsArray = [
-    "get:version=?",
-    "get:heart_beat=?",
-    "get:time=?",
-
-    "get:work_status=?",
-    "get:fire_status=?",
-    "get:fault_status=?",
-
-    "get:humidity=?",
-    "get:temperature=?",
-    "get:cur_photosen0=?",
-    "get:photosen0=?",
-    "get:net=?",
-    "get:event_num=?",
-    "get:warning_num=?",
-
-    // "set:extra_time=180",
-    // "set:standing_time=10",
-    // "set:interval_time=600",
+    // 获取(可批量)
+    "get:heart_beat=?;time=?;version=?;work_status=?;fire_status=?;fault_status=?",
+    "get:humidity=?;temperature=?;cur_photosen0=?;photosen0=?",
+    "get:net=?;event_num=?;warning_num=?", 
 
+    // 设置(可批量) 
+    // "set:extra_time=180;standing_time=10;interval_time=600",
     // "set:photosen0=6000,6000,6000,6000",
+    // "set:net=WIFI24,12345678,qq.com,1883,user,123456;event_num=1000;warning_num=1000",
+
+    // 操作(单独)
     // "set:time=24,9,15,21,53,0",
     // "set:reset=1",
-    // "set:net=WIFI24,12345678,qq.com,1883,user,123456",
-    // "set:event_num=1000",
-    // "set:warning_num=1000",
     // "set:erase_bit=7",
 ];
 let strings_i = 0;
@@ -140,20 +127,36 @@ function stringToUint8Array(str){
     return tmpUint8Array
   }
      
+function intToHex(number, minLength) {
+    return number.toString(16).padStart(minLength, '0');
+}
+
+function hexToString(hex) {
+    var string = '';
+    for (var i = 0; i < hex.length; i += 2) {
+        string += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
+    }
+    return string;
+}
+
 
 // 封包
 function pack_send(str) {
     console.log("封包前:"+str);
     
     body = str;
-    let data_len = body.length;
-    let data_check = calculateChecksum16bit(stringToByteArray(body));
-    // console.log("check:"+data_check);
-    let headBuf = "YL<" + Buffer.from([(data_len>>8)&0xff, (data_len>>0)&0xff, (data_check>>8)&0xff, (data_check>>0)&0xff]);
-    let pack_date = headBuf+body
-    ws.send(pack_date);   
-    datArray = stringToByteArray(pack_date);
-    console.log("封包后:"+bufferToHex(datArray));
+    let data_len = body.length & 0xffff;
+    let data_check = calculateChecksum16bit(stringToByteArray(body)) & 0xffff;
+    // console.log("len:"+intToHex(data_len,4));
+    // console.log("check:"+intToHex(data_check,4));
+    const headBuf = Buffer.from([0x59, 0x4c, 0x3c, (data_len>>8)&0xff, (data_len)&0xff, (data_check>>8)&0xff, (data_check)&0xff]);
+    const bodyBuf = Buffer.from(body);
+    let pack_date = Buffer.concat([headBuf, bodyBuf]);
+    ws.send(pack_date);
+    // console.log("headBuf:"+bufferToHex(headBuf));
+    // console.log("bodyBuf:"+bufferToHex(bodyBuf));
+    console.log("封包后:"+bufferToHex(pack_date));    
+
 }
 
 function handler_recv(out){
@@ -259,8 +262,12 @@ function unpack_recv(data) {
 // 设置一个每5000毫秒执行一次的定时器
 setInterval(function() {
     array = stringsArray[strings_i];
-    pack_send(array);
+    if(array.length >= 500){
+        console.log("长度太大,请减少数据长度");
+        return;
+    }
 
+    pack_send(array);
 
     strings_i++;
     if(strings_i >= stringsArray.length){

BIN
dist/ble.exe


+ 6 - 5
websocket_server.py

@@ -2,6 +2,7 @@ import asyncio
 import json
 import threading
 import websockets
+import os
 ##
 from message_base import MessageBase
  
@@ -21,14 +22,14 @@ class WebServer:
             try:
                 recv_text = await websocket.recv()
                 if recv_text:
-                    byte_array = bytes(recv_text.encode())
-                    print("ws收到", byte_array.hex())
+                    byte_array = recv_text
+                    print("ws收到", byte_array)
                     self.message_base.add("ws_recv", byte_array)
 
                 send_text = self.message_base.get("ws_send")
                 if send_text:
-                    byte_array = bytes(send_text)
-                    print("ws发送", byte_array.hex())
+                    byte_array = send_text
+                    print("ws发送", byte_array)
                     await websocket.send(byte_array)
                 # data = json.loads(recv_text)
                 # device = data.get("device")
@@ -45,7 +46,7 @@ class WebServer:
                 self.clients.remove(websocket)
                 break
             except Exception as e:
-                print(e)
+                print("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
  
     def connect(self):
         print("连接成功!")