Jelajahi Sumber

1.获取msg不阻塞,2,升级

kinve 1 tahun lalu
induk
melakukan
807f02c7e6
4 mengubah file dengan 219 tambahan dan 156 penghapusan
  1. 56 31
      ble.py
  2. 162 124
      config.json
  3. TEMPAT SAMPAH
      dist/ble.exe
  4. 1 1
      message_base.py

+ 56 - 31
ble.py

@@ -245,12 +245,25 @@ def PACK_LEN():
     return H+L+C
 
 def batch_split_key_value(input_str):
-    # 正则表达式匹配key=value格式,支持多个键值对
-    pattern = re.compile(r'(\w+)=([\w.]+)')
+    # 使用split()方法按';'切割字符串,获取键值对列表
+    pairs = input_str.split(';')
+
+    # 初始化一个字典来存储结果
     result = {}
-    for match in pattern.finditer(input_str):
-        key, value = match.groups()
-        result[key] = value
+
+    # 遍历键值对列表
+    for pair in pairs:
+        # 去除空白字符
+        pair = pair.strip()
+        # 检查是否为空字符串
+        if pair:
+            # 使用split()方法按'='切割键值对,获取键和值字符串
+            key, values_str = pair.split('=', 1)  # 限制分割次数为1
+            # 使用split()方法按','切割值字符串,获取值列表
+            values = values_str.split(',')
+            # 将键和值列表存储到字典中
+            result[key] = values
+
     return result
 
 
@@ -342,6 +355,7 @@ def send_form_data_list(client, i, data=None):
             byte_array = bytes([byte_value])  # 将整数转换为单字节的字节串
             byte_sequence += byte_array
 
+    logger.info("发送前:{}".format(byte_sequence))
     # data_str = json.dumps(json_data)
     # 字符串编码为字节序列
     # byte_sequence = str.encode(data_str)
@@ -532,6 +546,7 @@ def ble_recv_handler():
     while g_run:
         data = mq.get("ble_recv")
         if not data:
+            time.sleep(0.1)  
             continue
 
         if g_config["def_cfg"]["recv_detail_print"]:
@@ -550,7 +565,7 @@ def ble_recv_handler():
         recv_data_str = str(bytes(recv_data))
         HEAD_SEND = str(g_config["def_cfg"]["head_send"])
         HEAD_RECV = str(g_config["def_cfg"]["head_recv"])
-        reve=False
+        reve=True
         find_head = HEAD_SEND if not reve else HEAD_RECV
         index = -1
         if find_head != "":
@@ -590,25 +605,26 @@ def ble_recv_handler():
         else:
             dec_data = soc_data
 
-
+        dec_str = bytes(dec_data).decode('utf-8')
+        logger.info("解析:{}".format(dec_str) )
+        
         # 特殊处理:升级
-        out = batch_split_key_value(dec_data)
-        for key in out:
-            if key == "upgrade_req":
-                values = out[key].split(",")
-                if len(values) == 2:
-                    file = values[0]
-                    page = values[1]
-                    with open(file, "rb", encoding="utf-8") as f:
-                        f.seek(page*(1024+4))  #位移到最后    SEEK_END(值为2)     SEEK_CUR(值为1)  SEEK_SET(值为0)
-                        datas = f.read(1024+4)
-                        f.close()
-
-                        # 发送
-                        byte_array = bytearray("set:upgrade_data=")+bytearray(datas)
-                        byte_array = ev_packing(byte_array)
-                        send_data = bytes(byte_array)
-                        mq.add("ble_send", send_data)
+        out = batch_split_key_value(dec_str)
+        if "upgrade_req" in out.keys():
+            values = out["upgrade_req"]
+            if len(values) == 2:
+                file = str(values[0])
+                page = int(values[1])
+                with open(file, "rb") as f:
+                    f.seek(page*(1024+4))  #位移到最后    SEEK_END(值为2)     SEEK_CUR(值为1)  SEEK_SET(值为0)
+                    datas = f.read(1024+4)
+                    f.close()
+
+                    # 发送
+                    byte_array = bytearray("set:upgrade_data=", encoding="utf8")+bytearray(datas)
+                    byte_array = ev_packing(byte_array)
+                    send_data = bytes(byte_array)
+                    mq.add("ble_send", send_data)
 
         # 清理
         recv_data.clear()
@@ -617,11 +633,23 @@ def ble_recv_handler():
 
     logger.info("结束:{}".format(inspect.currentframe().f_code.co_name))     
 
-def main_key_handler():
+def key_handler():
+    global g_run
+    input_wait_time = 0
+
+    while g_run:
+        if g_config["def_cfg"]["input_interval"]>0 and time.time()-input_wait_time>=g_config["def_cfg"]["input_interval"]:
+            input_wait_time = time.time()                      
+            input_call(None)
+
+        time.sleep(0.1)    
+
+    logger.info("结束:{}".format(inspect.currentframe().f_code.co_name)) 
+
+def main_handler():
     global g_run
     read_config_time = 0
     heart_beart_time = 0
-    input_wait_time = 0
 
     while g_run:
         if time.time()-read_config_time >= 3:
@@ -635,10 +663,6 @@ def main_key_handler():
             heart_beart_time = time.time()
             heart_beat_call(None)
 
-        elif g_config["def_cfg"]["input_interval"]>0 and time.time()-input_wait_time>=g_config["def_cfg"]["input_interval"]:
-            input_wait_time = time.time()                      
-            input_call(None)
-
         time.sleep(0.1)    
 
     logger.info("结束:{}".format(inspect.currentframe().f_code.co_name)) 
@@ -663,7 +687,8 @@ if __name__ == "__main__":
     mq = MessageBase()
     ws = WebServer("0.0.0.0", 11100, mq)
 
-    thread_list.append(threading.Thread(target=main_key_handler, args=()))
+    thread_list.append(threading.Thread(target=main_handler, args=()))
+    thread_list.append(threading.Thread(target=key_handler, args=()))
     thread_list.append(threading.Thread(target=ble_recv_handler, args=()))
     for thread in thread_list:
         thread.start()

+ 162 - 124
config.json

@@ -1,127 +1,165 @@
 {
-"def_cfg":{
-	"ble_mac": "D5:4F:62:FB:C7:C8",
-	"ble_mac4": "7c:b9:4c:da:af:5c",
-	"ble_mac7": "7C:B9:4C:DA:61:7C",
-	"ble_mac2": "E9:8B:FC:41:3F:CF",
-	"ble_mac3": "DB:57:46:A6:14:22",
-	"heart_beat_sel": 1,
-	"input_interval": 5,
-	"heart_beat_interval": 25,	
-	"notif_char": "0000ffe2-0000-1000-8000-00805f9b34fb",
-	"write_char": "0000ffe1-0000-1000-8000-00805f9b34fb",
-	"notif_char1": "49535343-8841-43f4-a8d4-ecbe34729bb3",
-	"write_char1": "49535343-1e4d-4bd9-ba61-23c647249616",
-	"ble_mtu": 0,
-	"ble_send_wait": 1.5,
-	"head_send": "YL<",
-	"head_recv": "YL>",
-	"checknum_type": "sum16",
-	"checknum_type1": "crc16",
-	"aes_cbc_enbable": false,
-	"aes_cbc_key_send": "",
-	"aes_cbc_key_recv": "",	
-	"recv_detail_print": false,			
-	"recv_soc_data_print": true,
-	"recv_analysis_data_print": false, 		
-	"auto_send_GetConfigurationNumber": true
-},
-
-"cmd_list":	
-[
-	[
-		"",
-		"str:get:heart_beat",
-		"heart_beat_sel"
-	],
-	[
-		"",
-		"str:get:version=?",
-		"get_soft_version"
-	],
-	[
-		"",
-		"str:get:work_status=?",
-		"get_work_status"
-	],
-	[
-		"",
-		"str:get:fire_status=?",
-		"get_fire_status"
-	],	
-	[
-		"",
-		"str:get:fault_status=?",
-		"get_fault_status"
-	],
-	[
-		"",
-		"str:get:humidity=?",
-		"get_humidity"
-	],
-	[
-		"",
-		"str:get:temperature=?",
-		"get_temperature"
-	],
-	[
-		"",
-		"str:get:cur_photosen0=?",
-		"get_photosen"
-	],	
-	[
-		"",
-		"str:get:photosen0=?",
-		"get_photosen"
-	],
-	[
-		"",
-		"str:get:net=?",
-		"get_net"
-	],
+	"def_cfg":{
+		"ble_mac1": "b8:3d:fb:ac:d2:26",	
+		"ble_mac": "7C:B9:4C:DA:AF:5C",
+		"ble_mac4": "7C:B9:4C:DA:61:7C",
+		"ble_mac2": "E9:8B:FC:41:3F:CF",
+		"ble_mac3": "DB:57:46:A6:14:22",
+		"heart_beat_sel": 1,
+		"input_interval": 5,
+		"heart_beat_interval": 25,	
+		"notif_char": "49535343-8841-43f4-a8d4-ecbe34729bb3",
+		"write_char": "49535343-1e4d-4bd9-ba61-23c647249616",
+		"ble_mtu": 0,
+		"ble_send_wait": 1.5,
+		"head_send3": "",
+		"head_recv3": "",
+		"checknum_type3": "",
+		"head_send": "YL<",
+		"head_recv": "YL>",
+		"checknum_type": "sum16",
+		"checknum_type1": "crc16",
+		"aes_cbc_enbable": false,
+		"aes_cbc_key_send": "",
+		"aes_cbc_key_recv": "",	
+		"recv_detail_print": false,			
+		"recv_soc_data_print": true,
+		"recv_analysis_data_print": false, 		
+		"auto_send_GetConfigurationNumber": true
+	},
+	
+	"cmd_list":	
+	[
+		[
+			"",
+			"str:get:version=?",
+			"get_soft_version"
+		],
+		[
+			"",
+			"str:get:heart_beat=?",
+			"heart_beat_sel"
+		],
+		[
+			"",
+			"get:time=?",
+			"get_time"
+		],	
+		[
+			"",
+			"str:get:work_status=?",
+			"get_work_status"
+		],
+		[
+			"",
+			"str:get:fire_status=?",
+			"get_fire_status"
+		],	
+		[
+			"",
+			"str:get:fault_status=?",
+			"get_fault_status"
+		],
+		[
+			"",
+			"str:get:humidity=?",
+			"get_humidity"
+		],
+		[
+			"",
+			"str:get:temperature=?",
+			"get_temperature"
+		],
+		[
+			"",
+			"str:get:cur_photosen0=?",
+			"get_cur_photosen"
+		],	
+		[
+			"",
+			"str:get:photosen0=?",
+			"get_photosen"
+		],
+		[
+			"",
+			"str:get:net=?",
+			"get_net"
+		],
+		
+		[
+			"",
+			"str:get:event_num=?",
+			"get_event_num"
+		],
+	
+		[
+			"",
+			"str:get:warning_num=?",
+			"get_warning_num"
+		],
+		
+		[
+			"",
+			"str:set:extra_time=180",
+			"set_extra_time"
+		],	
+		[
+			"",
+			"str:set:standing_time=10",
+			"set_standing_time"
+		],	
+		[
+			"",
+			"str:set:interval_time=600",
+			"set_interval_time"
+		],	
+		[
+			"",
+			"str:set:photosen0=6000,6000,6000,6000",
+			"set_photosen"
+		],	
+		[
+			"",
+			"str:set:time=24,9,21,13,03,0",
+			"set_time"
+		],
+		[
+			"",
+			"str:set:reset=1",
+			"set_rest"
+		],
+	
+		[
+			"",
+			"str:set:net=WIFI24,12345678,qq.com,1883,user,123456",
+			"set_net"
+		],
+	
+		[
+			"",
+			"str:set:event_num=1000",
+			"set_event_num"
+		],
+	
+		[
+			"",
+			"str:set:warning_num=1000",
+			"set_warning_num"
+		],
+	
+		[
+			"",
+			"str:set:erase_bit=7",
+			"set_erase_bit"
+		],
+	
+		[
+			"",
+			"str:set:upgrade=fire_detector17.bin.sum32[008a7ab8],008000c9,90276",
+			"set_upgrade"
+		]
+	
 	
-	[
-		"",
-		"str:set:extra_time=180",
-		"set_extra_time"
-	],	
-	[
-		"",
-		"str:set:standing_time=10",
-		"set_standing_time"
-	],	
-	[
-		"",
-		"str:set:interval_time=600",
-		"set_interval_time"
-	],	
-	[
-		"",
-		"str:set:photosen0=6000,6000,6000,6000",
-		"set_photosen"
-	],	
-	[
-		"",
-		"set:time=1727107200",
-		"set_time"
-	],
-	[
-		"",
-		"set:reset=1",
-		"set_rest"
-	],
-
-	[
-		"",
-		"set:net=WIFI24,12345678,qq.com,1883,user,123456",
-		"set_net"
-	],
-
-	[
-		"",
-		"set:upgrade=Template.bin.sum32[008000c9],008000c9,84800",
-		"set_upgrade"
 	]
-
-]
-}
+	}
+	

TEMPAT SAMPAH
dist/ble.exe


+ 1 - 1
message_base.py

@@ -16,7 +16,7 @@ class MessageBase:
         data_queue: Queue = self.data.get(device)
         if not data_queue or data_queue.empty():
             return None
-        data = data_queue.get()
+        data = data_queue.get(block=False)  #不阻塞
         return data