print("connect_iot_websocket error")\r
def heart_IOt(self,event,msg):\r
print("heart_IOT.....")\r
- #Header\r
- header = ustruct.pack('>H', 0xFFFE) # 使用大端模式\r
- #Type\r
- packet_type = ustruct.pack('B', 0x02)\r
#心跳帧\r
json_str = {\r
"cmd":"post_heart_beat",\r
payload = json_str.encode('utf-8')\r
payloadLen = ustruct.pack('H', len(payload))\r
#拼接\r
- heart_packet = header + packet_type + payloadLen + payload#+ crc\r
+ heart_packet = b"\xff\xfe" + b"\x01"+ b"\x03" + b"\x00" * 3+ payloadLen + payload#+ crc\r
EventMesh.publish("CHANNEL_IOT_SEND", heart_packet)\r
# print("心跳发送数据包:{}".format(heart_packet))\r
\r
print("iot不在线")\r
EventMesh.publish("publish_AI_btnInfo",{"func":self.connect_iot_websocket}) \r
return \r
- #Header\r
- header = ustruct.pack('>H', 0xFFFE) # 使用大端模式\r
- #Type\r
- packet_type = ustruct.pack('B', 0x03)\r
- #字典转为json字符串\r
- json_str = EventMesh.publish("GET_IOT_SEND_CMD", data)\r
- json_str = ujson.dumps(json_str)\r
- #字符串转为二进制数据Payload\r
- payload = json_str.encode('utf-8')\r
- #PayloadLen\r
- payloadLen = ustruct.pack('H', len(payload))\r
- #CRC16(2字节,基于pay字段计算)\r
- crc = self.crc16(payload)\r
- print("crc的长度为{}".format(len(crc)))\r
- #拼接\r
- full_packet = header + packet_type + payloadLen + payload#+ crc\r
- EventMesh.publish("CHANNEL_IOT_SEND", full_packet)\r
- print("发送更新数据包:{}".format(full_packet))\r
+ MAGIC = (0xfffe).to_bytes(2,"big")\r
+ VERSION = (0x01).to_bytes(1,"big")#"03".encode('utf-8')\r
+ TYPE = (0x03).to_bytes(1,"big")\r
+ HR_JSON = ujson.dumps(EventMesh.publish("GET_IOT_SEND_CMD", data))\r
+ GPS_JSON_b = HR_JSON.encode('utf-8')\r
+ DATA_LEN = (len(HR_JSON)).to_bytes(4,"big")\r
+ heards_infor = b''\r
+ heards_infor = MAGIC+VERSION+TYPE+DATA_LEN+GPS_JSON_b\r
+ EventMesh.publish("CHANNEL_IOT_SEND", heards_infor)\r
+ print("发送更新数据包:{}".format(heards_infor))\r
\r
def login_IOT(self,event,msg):\r
print("登录中")\r
- #Header\r
- header = ustruct.pack('>H', 0xFFFE) # 使用大端模式\r
- #Type\r
- packet_type = ustruct.pack('B', 0x00)\r
#设备ID\r
device_id_bytes = modem.getDevImei().encode('utf-8')[:20] # 转为字节并截断到20字节\r
device_id = bytes_ljust(device_id_bytes, 20, b'\x00')\r
token_bytes = EventMesh.publish("get_dev_token").encode('utf-8')[:36] # 转为字节并截断\r
token_padded = bytes_ljust(token_bytes, 36, b'\x00')\r
#拼接\r
- body = header + packet_type + device_id + token_padded\r
+ body = b"\xff\xfe" + b"\x01"+ b"\x03" + device_id + token_padded\r
#CRC16(2字节,基于上述所有字段计算)\r
crc = self.crc16(body)\r
# 完整数据包\r