我有覆盆子pi连接xbees和一个运动传感器,从连接到其中一个xbee的运动传感器接收数据。然后它会将数据发送到我的树莓派。有没有办法我可以操作或拆分输出,例如状态只有True / False和地址= \ x00 \ x13 \ xa2 \ x00 @ \ xbbJ,因为我想将地址存储到数据库中,如果status ==“True ”。
所以如果我这样做
if status[0]['dio-0'] == True :
print "Yes"
cur = con.cursor()
cur.execute("INSERT ignore into sensor(sensor_id, status) VALUES(%s,True)",(add[0]))
con.commit()
但是存储在数据库中的地址是奇怪的字符,而不是\ x00 \ x13 \ xa2 \ x00 @ \ xbbJ。或者我应该采取其他方式吗?
这是代码。
from xbee import XBee
import serial
PORT = '/dev/ttyUSBXBEE'
BAUD_RATE = 9600
# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)
# Create API object
xbee = XBee(ser)
def decodeReceivedFrame(response):
add = str(response['source_addr_long'])
status = response['samples']
return [add, status]
# Continuously read and print packets
while True:
try:
response = xbee.wait_read_frame()
decodedData = decodeReceivedFrame(response)
status = decodeReceivedFrame(response)[1]
print status
print decodedData
add= decodedData[0]
except KeyboardInterrupt:
break
ser.close()
这是输出。
[{'dio-0': True}]
['\x00\x13\xa2\x00@\xbbJ}', [{'dio-0': True}]]
[{'dio-0': False}]
['\x00\x13\xa2\x00@\xbbJ}', [{'dio-0': False}]]
在数据库中
+------------+--------+
| sensor_id | status |
+------------+--------+
| ¢ @»J} | 1 |
+------------+--------+
答案 0 :(得分:1)
变量sensor_id
是一个字节数组,听起来你想以人类可读的格式存储它。
一种方法是在将其存储到数据库中之前将其转换为格式化字符串。
sensor_id = ':'.join("%02X" % ord(b) for b in add)
该语句循环遍历地址(for b in add
)中的字节,将每个字符串格式化为双字符十六进制字符串("%02X" % ord(b)
),然后将每个字符串连接在一起,并在其间加上冒号(':'.join()
)。