import struct import logging import binascii from datetime import datetime class Command2122: def __init__(self): self.command_21 = 0x21 # 充电启动结果命令 self.command_22 = 0x22 # 平台回复启动充电结果命令 def parse_21h_charging_start_result(self, data): """ 解析21H充电启动结果命令 :param data: 完整的21H命令报文 :return: 解析后的字典或None """ try: # 验证基本帧格式 if len(data) < 14 or data[0:2] != b'JX' or data[2] != 0x21: logging.warning(f"21H命令帧格式不正确,原始报文: {binascii.hexlify(data)}") return None # 打印完整的原始报文以便调试 print(f"完整原始报文: {binascii.hexlify(data)}") # 提取桩号 pile_id_bytes = data[3:11] # 提取时间标识 time_bytes = data[14:20] year = time_bytes[0] + 2000 month, day, hour, minute, second = time_bytes[1:6] timestamp = f"{year:04d}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}" current_index = 22 # 解析充电订单号 charging_order_number = data[current_index:current_index + 32].decode('ascii').rstrip('\x00') current_index += 32 # 解析用户ID user_id = data[current_index:current_index + 32].decode('ascii').rstrip('\x00') current_index += 32 # 解析用户类型 user_type = struct.unpack("