From: azao <821478748@qq.com> Date: Fri, 9 Jan 2026 10:46:32 +0000 (+0800) Subject: 金三iot3已经同步链接 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=b0ef989a0881388793b13c63e69488b6a1d0f7ce;p=mirrors%2FASR1603_G5.git 金三iot3已经同步链接 --- diff --git a/2.sdk/project/K8/sdk/services/microPython/ports/quectel/core/protocol.py b/2.sdk/project/K8/sdk/services/microPython/ports/quectel/core/protocol.py index a3fc3382..f7cd074a 100644 --- a/2.sdk/project/K8/sdk/services/microPython/ports/quectel/core/protocol.py +++ b/2.sdk/project/K8/sdk/services/microPython/ports/quectel/core/protocol.py @@ -429,13 +429,13 @@ def playload_data(data): print("data类型错误") return - if data[0] != 0xff or data[1] !=0xfe: - print("data格式错误,重新登录") - # EventMesh.publish("login_IOT")#登录IOT - return - # payload_len_bytes = data [7:5] - # payload_len = ustruct.unpack ('H', payload_len_bytes)[0] - # # print ("解析到 Payload 长度:{} 字节".format(payload_len)) + # if data[0] != 0xff or data[1] !=0xfe: + # print("data格式错误,重新登录") + # # EventMesh.publish("login_IOT")#登录IOT + # return + # # payload_len_bytes = data [7:5] + # # payload_len = ustruct.unpack ('H', payload_len_bytes)[0] + # # # print ("解析到 Payload 长度:{} 字节".format(payload_len)) payload = data [8 : ] try: @@ -703,14 +703,11 @@ class SockMangager(Abstract): print("connect_iot_websocket error") def heart_IOt(self,event,msg): print("heart_IOT.....") - #Header - header = ustruct.pack('>H', 0xFFFE) # 使用大端模式 - #Type - packet_type = ustruct.pack('B', 0x02) #心跳帧 + ts = utime.ticks_ms() json_str = { "cmd":"post_heart_beat", - "ts":1738283829, + "ts":ts, "msg":"心跳", "data":{ "battery": 20 @@ -721,7 +718,7 @@ class SockMangager(Abstract): payload = json_str.encode('utf-8') payloadLen = ustruct.pack('H', len(payload)) #拼接 - heart_packet = header + packet_type + payloadLen + payload#+ crc + heart_packet = b"\xff\xfe" + b"\x01"+ b"\x03" + b"\x00" * 3+ payloadLen + payload#+ crc EventMesh.publish("CHANNEL_IOT_SEND", heart_packet) # print("心跳发送数据包:{}".format(heart_packet)) @@ -733,31 +730,19 @@ class SockMangager(Abstract): print("iot不在线") EventMesh.publish("publish_AI_btnInfo",{"func":self.connect_iot_websocket}) return - #Header - header = ustruct.pack('>H', 0xFFFE) # 使用大端模式 - #Type - packet_type = ustruct.pack('B', 0x03) - #字典转为json字符串 - json_str = EventMesh.publish("GET_IOT_SEND_CMD", data) - json_str = ujson.dumps(json_str) - #字符串转为二进制数据Payload - payload = json_str.encode('utf-8') - #PayloadLen - payloadLen = ustruct.pack('H', len(payload)) - #CRC16(2字节,基于pay字段计算) - crc = self.crc16(payload) - print("crc的长度为{}".format(len(crc))) - #拼接 - full_packet = header + packet_type + payloadLen + payload#+ crc - EventMesh.publish("CHANNEL_IOT_SEND", full_packet) - print("发送更新数据包:{}".format(full_packet)) + MAGIC = (0xfffe).to_bytes(2,"big") + VERSION = (0x01).to_bytes(1,"big")#"03".encode('utf-8') + TYPE = (0x03).to_bytes(1,"big") + HR_JSON = ujson.dumps(EventMesh.publish("GET_IOT_SEND_CMD", data)) + GPS_JSON_b = HR_JSON.encode('utf-8') + DATA_LEN = (len(HR_JSON)).to_bytes(4,"big") + heards_infor = b'' + heards_infor = MAGIC+VERSION+TYPE+DATA_LEN+GPS_JSON_b + EventMesh.publish("CHANNEL_IOT_SEND", heards_infor) + print("发送更新数据包:{}".format(heards_infor)) def login_IOT(self,event,msg): print("登录中") - #Header - header = ustruct.pack('>H', 0xFFFE) # 使用大端模式 - #Type - packet_type = ustruct.pack('B', 0x00) #设备ID device_id_bytes = modem.getDevImei().encode('utf-8')[:20] # 转为字节并截断到20字节 device_id = bytes_ljust(device_id_bytes, 20, b'\x00') @@ -765,7 +750,7 @@ class SockMangager(Abstract): token_bytes = EventMesh.publish("get_dev_token").encode('utf-8')[:36] # 转为字节并截断 token_padded = bytes_ljust(token_bytes, 36, b'\x00') #拼接 - body = header + packet_type + device_id + token_padded + body = b"\xff\xfe" + b"\x01"+ b"\x03" + device_id + token_padded #CRC16(2字节,基于上述所有字段计算) crc = self.crc16(body) # 完整数据åŒ