从MoteLab返回的串口数据,包含messages.pickle文件这是MoteLab系统中串口收集数据的总和,但是这些数据需要解析后才能进行分析。下面的代码就是在python环境下提取message有效数据的代码。
使用命令 python TestOutput.py messages.pickle
生成的test.log就是获得的有效数据
返回数据的示例
1252985727.66 received from0Message <mviz_msg> :时间 接收/发送 节点号 消息类型
[version=0x0]
[interval=0x400] :消息内容 和Mviz.h定义中相同
[origin=0x4f]
[count=0x0]
[reading=0x0]
[etx=0x0]
[link_route_value=0x0]
[link_route_addr=0x0]
1252985727.66 received from0Message <mviz_msg>
[version=0x0]
[interval=0x400]
[origin=0x52]
[count=0x0]
[reading=0x0]
[etx=0x0]
[link_route_value=0x0]
[link_route_addr=0x0]
源代码只要修改消息类就可以(代码中的mviz_msg)对其它数据进行分析
源代码
import os,sys,traceback,time,cPickle
sys.path.append(os.path.join(os.environ["TOSROOT"], "support/sdk/python"))
from tinyos.message import Message
import mviz_msg
logfile = open('test.log', 'w')
picklefile = open(sys.argv[1])
counters = {}
def checkmessage(m):
if m.dest == 0xFFFF:
return True
if not counters.has_key(m.addr):
counters[m.addr] = 0
return True
else:
return True
while True:
try:
m = cPickle.load(picklefile)
if m.amType() == mviz_msg.AM_TYPE:
Mviz_msg = /
mviz_msg.mviz_msg(data=m.dataGet(),
addr=m.getAddr(),
gid=m.getGid())
Mviz_msg.dest = m.dest
Mviz_msg.time = m.time
Mviz_msg.sent = m.sent
Mviz_msg.received = m.received
print (Mviz_msg.time,)
logfile.write(str(Mviz_msg.time,))
if Mviz_msg.received:
print ("received from", int(Mviz_msg.addr))
logfile.write(str("received from"))
logfile.write(str(int(Mviz_msg.addr)))
else:
print ("sent to", Mviz_msg.dest)
logfile.write(str("sent to"))
logfile.write(str(Mviz_msg.dest))
print (Mviz_msg)
logfile.write(str(Mviz_msg))
else:
passlogfile = open('test.log', 'w')
except EOFError:
sys.exit(0)
except:
traceback.print_exc()
sys.exit(-1)