在Python中将xbee源addr存储到数据库中

时间:2015-08-31 01:59:51

标签: python mysql database xbee

我有覆盆子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     |
+------------+--------+

1 个答案:

答案 0 :(得分:1)

变量sensor_id是一个字节数组,听起来你想以人类可读的格式存储它。

一种方法是在将其存储到数据库中之前将其转换为格式化字符串。

sensor_id = ':'.join("%02X" % ord(b) for b in add)

该语句循环遍历地址(for b in add)中的字节,将每个字符串格式化为双字符十六进制字符串("%02X" % ord(b)),然后将每个字符串连接在一起,并在其间加上冒号(':'.join())。