286 lines
11 KiB
Python
286 lines
11 KiB
Python
|
|
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
|