import pickle #NFC 中的数据解析 s_info = { "dev_state":None, "zig_mac": None, "hw_ver": None, "sf_ver": None, "mf_pn" : None, "mf_sn" : None, "pw_date": None, "wakeup_times": None, "evel_times": None, "wave_times": None, "bat_vol": None, "product": None, "zig_rss": None } s_conf = { 'conf_flag': None, 'wakeup_period': None, 'wave_period': None, 'zig_pid': None, 'zig_channel': None, 'zig_local_addr': None, 'zig_dest_addr': None, 'zig_power_level': None, 'zig_retry_num': None, 'zig_retry_time': None, 'acc_acq_pram': None, 'acc_acq_time': None, 'freq_pw_s1': None, 'freq_pw_e1': None, 'freq_pw_s2': None, 'freq_pw_e2': None, 'freq_pw_s3': None, 'freq_pw_e3': None, 'freq_pw_s4': None, 'freq_pw_e4': None, 'freq_pw_s5': None, 'freq_pw_e5': None, 'envel_freq_s': None, 'envel_freq_e': None, 'fail_freq1': None, 'fail_freq2': None, 'fail_freq3': None, 'fail_freq4': None, 'conf_date' : None, 'speed_freq': None } def senser_info_detect(data): s_info_text = '' s_info['dev_state'] = data[0] s_info['zig_mac'] = array_to_hex_str(data[1:9]) s_info['hw_ver'] = data[9]/10 s_info['sf_ver'] = data[10]/10 s_info['mf_pn'] = array_num_four(data[11:15]) s_info['mf_sn'] = array_num_four(data[15:19]) s_info['pw_date'] = array_num_four(data[19:23]) s_info['wakeup_times'] = array_num_four(data[23:27]) s_info['evel_times'] = array_num_four(data[27:31]) s_info['wave_times'] = array_num_four(data[31:35]) s_info['bat_vol'] = array_num_two(data[35:37]) s_info['product'] = data[37] s_info['zig_rss'] = data[38] s_info_text = s_info_text + dev_state_detect(s_info['dev_state']) s_info_text = s_info_text + "Zigbee MAC:"+s_info['zig_mac']+'\n' s_info_text = s_info_text + "硬件版本:"+str(s_info['hw_ver'])+'\n' s_info_text = s_info_text + "软件版本:"+str(s_info['sf_ver'])+'\n' s_info_text = s_info_text + "生产批号:"+str(s_info['mf_pn'])+'\n' s_info_text = s_info_text + "生产序列号:"+str(s_info['mf_sn'])+'\n' s_info_text = s_info_text + "首次上电日期"+str(s_info['pw_date'])+'\n' s_info_text = s_info_text + "唤醒次数:"+str(s_info['wakeup_times'])+'\n' s_info_text = s_info_text + "特征值发送次数:"+str(s_info['evel_times'])+'\n' s_info_text = s_info_text + "原始波形发送次数:" + str(s_info['wave_times']) + '\n' s_info_text = s_info_text + "电池电压:"+str(s_info['bat_vol'])+'mV\n' s_info_text = s_info_text + "设备型号:"+str(s_info['product'])+'\n' s_info_text = s_info_text + "Zigbee RSS:"+str(s_info['zig_rss'])+'\n' return s_info_text def senser_conf_detect(data): s_conf_text = '\n' s_conf['conf_flag'] = data[0] s_conf['wakeup_period'] = array_num_two(data[1:3]); s_conf['wave_period'] = data[3] s_conf['zig_pid'] = array_to_hex_str(data[4:6]) s_conf['zig_channel'] = data[6] s_conf['zig_local_addr'] = array_to_hex_str(data[7:9]) s_conf['zig_dest_addr'] = array_to_hex_str(data[9:11]) s_conf['zig_power_level'] = data[11] s_conf['zig_retry_num'] = data[12] s_conf['zig_retry_time'] = data[13] s_conf['acc_acq_pram'] = data[14] s_conf['acc_acq_time'] = data[15] s_conf['freq_pw_s1'] = array_num_two(data[16:18]) s_conf['freq_pw_e1'] = array_num_two(data[18:20]) s_conf['freq_pw_s2'] = array_num_two(data[20:22]) s_conf['freq_pw_e2'] = array_num_two(data[22:24]) s_conf['freq_pw_s3'] = array_num_two(data[24:26]) s_conf['freq_pw_e3'] = array_num_two(data[26:28]) s_conf['freq_pw_s4'] = array_num_two(data[28:30]) s_conf['freq_pw_e4'] = array_num_two(data[30:32]) s_conf['freq_pw_s5'] = array_num_two(data[32:34]) s_conf['freq_pw_e5'] = array_num_two(data[34:36]) s_conf['envel_freq_s'] = array_num_two(data[36:38]) s_conf['envel_freq_e'] = array_num_two(data[38:40]) s_conf['fail_freq1'] = array_num_two(data[40:42]) s_conf['fail_freq2'] = array_num_two(data[42:44]) s_conf['fail_freq3'] = array_num_two(data[44:46]) s_conf['fail_freq4'] = array_num_two(data[46:48]) s_conf['conf_date'] = array_num_two(data[48:52]) s_conf['speed_freq'] = data[52] s_conf_text = s_conf_text + "配置标志:" + conf_state_detect(s_conf['conf_flag']) +'\n' s_conf_text = s_conf_text + "唤醒周期:" + str(s_conf['wakeup_period']) + '\n' s_conf_text = s_conf_text + "原始波形发送周期:" + str(s_conf['wave_period']) + '\n' s_conf_text = s_conf_text + "Zigbee PID:" + s_conf['zig_pid']+ '\n' s_conf_text = s_conf_text + "Zigbee 信道:" + str(s_conf['zig_channel']) + '\n' s_conf_text = s_conf_text + "Zigbee 本地地址:" + s_conf['zig_local_addr'] + '\n' s_conf_text = s_conf_text + "Zigbee 网关地址:" + s_conf['zig_dest_addr'] + '\n' s_conf_text = s_conf_text + "Zigbee 发射功率:" + str(s_conf['zig_power_level']) + '\n' s_conf_text = s_conf_text + "Zigbee 重发次数:" + str(s_conf['zig_retry_num']) + '\n' s_conf_text = s_conf_text + "Zigbee 重发间隔:" + str(s_conf['zig_retry_time']) + '\n' s_conf_text = s_conf_text + "ACC 量程:" + acc_range_detect(s_conf['acc_acq_pram']) + '\n' s_conf_text = s_conf_text + "ACC 采样率:" + acc_rate_detect(s_conf['acc_acq_pram']) + '\n' s_conf_text = s_conf_text + "ACC 采样时间:" + str(s_conf['acc_acq_time']) + '\n' s_conf_text = s_conf_text + "频带能量起始频率1:" + str(s_conf['freq_pw_s1']) + '\n' s_conf_text = s_conf_text + "频带能量截至频率1:" + str(s_conf['freq_pw_e1']) + '\n' s_conf_text = s_conf_text + "频带能量起始频率2:" + str(s_conf['freq_pw_s2']) + '\n' s_conf_text = s_conf_text + "频带能量截至频率2:" + str(s_conf['freq_pw_e2']) + '\n' s_conf_text = s_conf_text + "频带能量起始频率3:" + str(s_conf['freq_pw_s3']) + '\n' s_conf_text = s_conf_text + "频带能量截至频率3:" + str(s_conf['freq_pw_e3']) + '\n' s_conf_text = s_conf_text + "频带能量起始频率4:" + str(s_conf['freq_pw_s4']) + '\n' s_conf_text = s_conf_text + "频带能量截至频率4:" + str(s_conf['freq_pw_e4']) + '\n' s_conf_text = s_conf_text + "频带能量起始频率5:" + str(s_conf['freq_pw_s5']) + '\n' s_conf_text = s_conf_text + "频带能量截至频率5:" + str(s_conf['freq_pw_e5']) + '\n' s_conf_text = s_conf_text + "冲击能量起始频率:" + str(s_conf['envel_freq_s']) + '\n' s_conf_text = s_conf_text + "冲击能量截至频率:" + str(s_conf['envel_freq_e']) + '\n' s_conf_text = s_conf_text + "故障频率1:" + str(s_conf['fail_freq1']) + '\n' s_conf_text = s_conf_text + "故障频率2:" + str(s_conf['fail_freq2']) + '\n' s_conf_text = s_conf_text + "故障频率3:" + str(s_conf['fail_freq3']) + '\n' s_conf_text = s_conf_text + "故障频率4:" + str(s_conf['fail_freq4']) + '\n' s_conf_text = s_conf_text + "速度积分起始频率:" + str(s_conf['speed_freq']) + '\n' s_conf_text = s_conf_text + "配置时间:" + str(s_conf['conf_date']) + '\n' return s_conf_text def acc_rate_detect(acc_parm): acc_rate = acc_parm & 0x03 if acc_rate == 0: acc_rate = '±3.2KHz' elif acc_rate == 1: acc_rate = '±6.4KHz' elif acc_rate == 2: acc_rate = '±12.8KHz' elif acc_rate == 3: acc_rate = '±25.6KHz' return acc_rate def acc_range_detect(acc_parm): acc_range = (acc_parm>>2)&0x03 if acc_range == 0: acc_range = '±8g' elif acc_range == 1: acc_range = '±16g' elif acc_range == 2: acc_range = '±32g' elif acc_range == 3: acc_range = '±64g' return acc_range def conf_state_detect(conf_state): if conf_state==0xAA: return "配置标志:OK" else: return "配置标志:None" def dev_state_detect(dev_state): s_info_text = '' if (dev_state & 0x80): s_info_text = s_info_text + "初始化标志:OK\n" else: s_info_text = s_info_text + "初始化标志:ERROR\n" if (dev_state & 0x40): s_info_text = s_info_text + "加速度传感状态:OK\n" else: s_info_text = s_info_text + "加速度传感状态:ERROR\n" if (dev_state & 0x20): s_info_text = s_info_text + "Zigbee模块状态:OK\n" else: s_info_text = s_info_text + "Zigbee模块状态:ERROR\n" if (dev_state & 0x10): s_info_text = s_info_text + "设备温度传感器状态:OK\n" else: s_info_text = s_info_text + "设备温度传感器状态:ERROR\n" if (dev_state & 0x08): s_info_text = s_info_text + "环境温度传感器状态:OK\n" else: s_info_text = s_info_text + "环境温度传感器状态:ERROR\n" if (dev_state & 0x04): s_info_text = s_info_text + "设备状态:运行\n" else: s_info_text = s_info_text + "设备状态:休眠\n" return s_info_text def array_to_hex_str(data): uhex = ['{:02X}'.format(d) for d in data] hex_s = '' for u in uhex: hex_s = hex_s + u return hex_s def array_num_four(data): num = (data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3] return num def array_num_two(data): num = (data[0] << 8) + data[1] return num #NFC 配置信息解析 class CONF_ANALYSIS(object): def __init__(self): super().__init__() self.conf_info = {"senser_info":None, "senser_conf":None } self.senser_info = None self.senser_conf = None #从配置文件中获取配置信息 def get_conf_info(self): try: with open("conf.dat", 'rb') as conf_file: self.conf_info = pickle.load(conf_file) self.senser_info = self.conf_info["senser_info"] self.senser_conf = self.conf_info["senser_conf"] return "获取配置信息成功" except: return "获取配置信息失败" #将配置信息写入配置文件 def save_conf_info(self): try: with open("conf.dat", 'wb') as conf_file: self.conf_info["senser_info"] = self.senser_info self.conf_info["senser_conf"] = self.senser_conf pickle.dump(self.conf_info, conf_file) self.conf_info = pickle.load(conf_file) return "保存配置文件成功" except: return "保存配置文件失败" def senser_info_detect(self, data): info = senser_info_detect(data) return info def senser_conf_detect(self, data): conf = senser_conf_detect(data) return conf