搞了半天才搞定,python2.7遇到点坑。
1. python 2.7 没有 bytes()函数,要用 a.decode(‘hex’)
2. rawData 是 list,
3. 返回dict中 method 字段要有,解析的 串口数据 放 字段 params。
def raw_data_to_protocol(rawData):
dataArray = []
for byteValue in rawData:
dataArray.append(byteValue & 0xff) # 16 进制列表
dict = {}
params = {}
if dataArray[0]==0xeb and dataArray[1] == 0x90:
a = bytes2hex(dataArray[2:105]) # 转成16进制
b = struct.unpack('<BBH24fB1s1s', a.decode('hex')) # 这个要注意,python2.7 要用decode
params['temperature'] = b[4]
params['ch1'] = time2force(b[3],b[4])
params['ch2'] = time2force(b[5],b[4])
params['ch3'] = time2force(b[7],b[4])
params['ch4'] = time2force(b[9],b[4])
params['ch5'] = time2force(b[11],b[4])
params['ch6'] = time2force(b[13],b[4])
params['ch7'] = time2force(b[15],b[4])
params['ch8'] = time2force(b[17],b[4])
dict['method'] = 'thing.event.property.post'
dict['version'] = '1.1'
dict['id'] = '12345'
dict['params'] = params
return dict
def bytes2hex(bytes):
data = ['%02X' % i for i in bytes] # c语言用法,组合list中的ox数
d = ''.join(data)
return d