import binascii def byte_to_int(sdata): return int.from_bytes(sdata, byteorder='little', signed=True) def temp_cal(sdata): if sdata > 2048: temp = -(256 - sdata * 0.0625) else: temp = sdata * 0.0625 return temp def evel_cal(sdata): s1 = sdata >> 14 s2 = sdata & (0xffff >> 2) if s1 == 0: vl = s2 * 0.0001 elif s1 == 1: vl = s2 * 0.01 elif s1 == 2: vl = s2 elif s1 == 3: vl = s2 / 100 else: vl = 16383 return vl #设备信息解析 def dev_info_analysis(sdata): DEV_INFO["初始化标志"] = sdata[0] DEV_INFO["加速度传感器状态"] = sdata[0]&(1<<6) DEV_INFO["Zigbee模块状态"] = sdata[0] & (1 << 5) DEV_INFO["设备温度传感器状态"] = sdata[0] & (1 << 4) DEV_INFO["环境温度传感器状态"] = sdata[0] & (1 << 3) DEV_INFO["设备运行状态"] = sdata[0] & (1 << 2) DEV_INFO["MAC地址"] = binascii.hexlify(sdata[1:9]) DEV_INFO["硬件版本"] = sdata[9]/10 DEV_INFO["软件版本"] = sdata[10]/10 DEV_INFO["生产批号"] = sdata[11:15] DEV_INFO["生产序列号"] = sdata[15:19] DEV_INFO["首次上电日期"] = sdata[19:23] DEV_INFO["唤醒次数"] = int.from_bytes(sdata[23:27], byteorder='big', signed=True) DEV_INFO["特征值发送次数"] = int.from_bytes(sdata[27:31], byteorder='big', signed=True) DEV_INFO["原始波形发送次数"] = int.from_bytes(sdata[31:35], byteorder='big', signed=True) DEV_INFO["电池电压"] = int.from_bytes(sdata[35:37], byteorder='big', signed=True) DEV_INFO["产品型号"] = sdata[37] DEV_INFO["无线信号强度"] = sdata[38] def dev_conf_analysis(sdata): DEV_CONF["配置标志"] = hex(sdata[0]) DEV_CONF["唤醒周期"] = int.from_bytes(sdata[1:3], byteorder='big', signed=True) DEV_CONF["原始波形发送周期"] = sdata[3] DEV_CONF["Zigbee PID"] = binascii.hexlify(sdata[4:6]) DEV_CONF["Zigbee 信道"] = sdata[6] DEV_CONF["Zigbee 本地地址"] = binascii.hexlify(sdata[7:9]) DEV_CONF["Zigbee 目标地址"] = binascii.hexlify(sdata[9:11]) DEV_CONF["Zigbee 发射功率"] = sdata[11] DEV_CONF["Zigbee 重试次数"] = sdata[12] DEV_CONF["Zigbee 重试间隔"] = sdata[13] DEV_CONF["ACC采样率"] = sdata[14]&(0b11) DEV_CONF["ACC量程"] = sdata[14]&(0b11<<2) DEV_CONF["ACC采样率时间"] = sdata[15] DEV_CONF["频带能量参数1 START"] = int.from_bytes(sdata[16:18], byteorder='big', signed=True) DEV_CONF["频带能量参数1 END"] = int.from_bytes(sdata[18:20], byteorder='big', signed=True) DEV_CONF["频带能量参数2 START"] = int.from_bytes(sdata[20:22], byteorder='big', signed=True) DEV_CONF["频带能量参数2 END"] = int.from_bytes(sdata[22:24], byteorder='big', signed=True) DEV_CONF["频带能量参数3 START"] = int.from_bytes(sdata[24:26], byteorder='big', signed=True) DEV_CONF["频带能量参数3 END"] = int.from_bytes(sdata[26:28], byteorder='big', signed=True) DEV_CONF["频带能量参数4 START"] = int.from_bytes(sdata[28:30], byteorder='big', signed=True) DEV_CONF["频带能量参数4 END"] = int.from_bytes(sdata[30:32], byteorder='big', signed=True) DEV_CONF["频带能量参数5 START"] = int.from_bytes(sdata[32:34], byteorder='big', signed=True) DEV_CONF["频带能量参数5 END"] = int.from_bytes(sdata[34:36], byteorder='big', signed=True) DEV_CONF["冲击带通频率START"] = int.from_bytes(sdata[36:38], byteorder='big', signed=True) DEV_CONF["冲击带通频率END"] = int.from_bytes(sdata[38:40], byteorder='big', signed=True) DEV_CONF["故障频率1"] = int.from_bytes(sdata[40:42], byteorder='big', signed=True) DEV_CONF["故障频率2"] = int.from_bytes(sdata[42:44], byteorder='big', signed=True) DEV_CONF["故障频率3"] = int.from_bytes(sdata[44:46], byteorder='big', signed=True) DEV_CONF["故障频率4"] = int.from_bytes(sdata[46:48], byteorder='big', signed=True) DEV_CONF["配置时间"] = int.from_bytes(sdata[48:52], byteorder='big', signed=True) DEV_CONF["速度积分滤波频率"] = sdata[52] #特征值解析 def evel_info_analysis(sdata): EVEL_INFO["设备温度"] = temp_cal(byte_to_int(sdata[0:2])) EVEL_INFO["环境温度"] = temp_cal(byte_to_int(sdata[2:4])) EVEL_INFO["倾角"] = byte_to_int(sdata[4:6]) EVEL_INFO["电池电压"] = byte_to_int(sdata[6:8]) EVEL_INFO["X轴峰值"] = evel_cal(byte_to_int(sdata[8:10])) EVEL_INFO["X轴有效值"] = evel_cal(byte_to_int(sdata[10:12])) EVEL_INFO["X轴速度峰值"] = evel_cal(byte_to_int(sdata[12:14])) EVEL_INFO["X轴速度有效值"] = evel_cal(byte_to_int(sdata[14:16])) EVEL_INFO["X轴频带能量1"] = evel_cal(byte_to_int(sdata[16:18])) EVEL_INFO["X轴频带能量2"] = evel_cal(byte_to_int(sdata[18:20])) EVEL_INFO["X轴频带能量3"] = evel_cal(byte_to_int(sdata[20:22])) EVEL_INFO["X轴频带能量4"] = evel_cal(byte_to_int(sdata[22:24])) EVEL_INFO["X轴频带能量5"] = evel_cal(byte_to_int(sdata[24:26])) EVEL_INFO["X轴冲击能量"] = evel_cal(byte_to_int(sdata[26:28])) EVEL_INFO["X轴故障频率1"] = evel_cal(byte_to_int(sdata[28:30])) EVEL_INFO["X轴故障频率2"] = evel_cal(byte_to_int(sdata[30:32])) EVEL_INFO["X轴故障频率3"] = evel_cal(byte_to_int(sdata[32:34])) EVEL_INFO["X轴故障频率4"] = evel_cal(byte_to_int(sdata[34:36])) EVEL_INFO["Y轴峰值"] = evel_cal(byte_to_int(sdata[36:38])) EVEL_INFO["Y轴有效值"] = evel_cal(byte_to_int(sdata[38:40])) EVEL_INFO["Y轴速度峰值"] = evel_cal(byte_to_int(sdata[40:42])) EVEL_INFO["Y轴速度有效值"] = evel_cal(byte_to_int(sdata[42:44])) EVEL_INFO["Y轴频带能量1"] = evel_cal(byte_to_int(sdata[44:46])) EVEL_INFO["Y轴频带能量2"] = evel_cal(byte_to_int(sdata[46:48])) EVEL_INFO["Y轴频带能量3"] = evel_cal(byte_to_int(sdata[48:50])) EVEL_INFO["Y轴频带能量4"] = evel_cal(byte_to_int(sdata[50:52])) EVEL_INFO["Y轴频带能量5"] = evel_cal(byte_to_int(sdata[52:54])) EVEL_INFO["Y轴冲击能量"] = evel_cal(byte_to_int(sdata[54:56])) EVEL_INFO["Y轴故障频率1"] = evel_cal(byte_to_int(sdata[56:58])) EVEL_INFO["Y轴故障频率2"] = evel_cal(byte_to_int(sdata[58:60])) EVEL_INFO["Y轴故障频率3"] = evel_cal(byte_to_int(sdata[60:62])) EVEL_INFO["Y轴故障频率4"] = evel_cal(byte_to_int(sdata[62:64])) EVEL_INFO["Z轴峰值"] = evel_cal(byte_to_int(sdata[64:66])) EVEL_INFO["Z轴有效值"] = evel_cal(byte_to_int(sdata[66:68])) EVEL_INFO["Z轴速度峰值"] = evel_cal(byte_to_int(sdata[68:70])) EVEL_INFO["Z轴速度有效值"] = evel_cal(byte_to_int(sdata[70:72])) EVEL_INFO["Z轴频带能量1"] = evel_cal(byte_to_int(sdata[72:74])) EVEL_INFO["Z轴频带能量2"] = evel_cal(byte_to_int(sdata[74:76])) EVEL_INFO["Z轴频带能量3"] = evel_cal(byte_to_int(sdata[76:78])) EVEL_INFO["Z轴频带能量4"] = evel_cal(byte_to_int(sdata[78:80])) EVEL_INFO["Z轴频带能量5"] = evel_cal(byte_to_int(sdata[80:82])) EVEL_INFO["Z轴冲击能量"] = evel_cal(byte_to_int(sdata[82:84])) EVEL_INFO["Z轴故障频率1"] = evel_cal(byte_to_int(sdata[84:86])) EVEL_INFO["Z轴故障频率2"] = evel_cal(byte_to_int(sdata[86:88])) EVEL_INFO["Z轴故障频率3"] = evel_cal(byte_to_int(sdata[88:90])) EVEL_INFO["Z轴故障频率4"] = evel_cal(byte_to_int(sdata[90:92])) DEV_INFO = { "初始化标志": None, "加速度传感器状态": None, "Zigbee模块状态": None, "设备温度传感器状态": None, "环境温度传感器状态": None, "设备运行状态": None, "MAC地址": None, "硬件版本": None, "软件版本": None, "生产批号": None, "生产序列号": None, "首次上电日期": None, "唤醒次数": None, "特征值发送次数": None, "原始波形发送次数": None, "电池电压": None, "产品型号": None, "无线信号强度": None, } DEV_CONF = { "配置标志": None, "唤醒周期": None, "原始波形发送周期": None, "Zigbee PID": None, "Zigbee 信道": None, "Zigbee 本地地址": None, "Zigbee 目标地址": None, "Zigbee 发射功率": None, "Zigbee 重试次数": None, "Zigbee 重试间隔": None, "ACC采样率": None, "ACC量程": None, "ACC采样率时间": None, "频带能量参数1 START": None, "频带能量参数1 END": None, "频带能量参数2 START": None, "频带能量参数2 END": None, "频带能量参数3 START": None, "频带能量参数3 END": None, "频带能量参数4 START": None, "频带能量参数4 END": None, "频带能量参数5 START": None, "频带能量参数5 END": None, "冲击带通频率START": None, "冲击带通频率END": None, "故障频率1": None, "故障频率2": None, "故障频率3": None, "故障频率4": None, "配置时间" : None, "速度积分滤波频率": None, "原始数据": None } EVEL_INFO = { "采集时间": None, "设备温度": None, "环境温度": None, "倾角": None, "电池电压": None, "X轴峰值": None, "X轴有效值": None, "X轴速度峰值": None, "X轴速度有效值": None, "X轴频带能量1": None, "X轴频带能量2": None, "X轴频带能量3": None, "X轴频带能量4": None, "X轴频带能量5": None, "X轴冲击能量": None, "X轴故障频率1": None, "X轴故障频率2": None, "X轴故障频率3": None, "X轴故障频率4": None, "Y轴峰值": None, "Y轴有效值": None, "Y轴速度峰值": None, "Y轴速度有效值": None, "Y轴频带能量1": None, "Y轴频带能量2": None, "Y轴频带能量3": None, "Y轴频带能量4": None, "Y轴频带能量5": None, "Y轴冲击能量": None, "Y轴故障频率1": None, "Y轴故障频率2": None, "Y轴故障频率3": None, "Y轴故障频率4": None, "Z轴峰值": None, "Z轴有效值": None, "Z轴速度峰值": None, "Z轴速度有效值": None, "Z轴频带能量1": None, "Z轴频带能量2": None, "Z轴频带能量3": None, "Z轴频带能量4": None, "Z轴频带能量5": None, "Z轴冲击能量": None, "Z轴故障频率1": None, "Z轴故障频率2": None, "Z轴故障频率3": None, "Z轴故障频率4": None, "原始数据" : None }