我有一个传感器系统。传感器接收我的命令,执行某些操作,然后向我发送响应。
响应是这样的:
seq. number | net_id | opcode_group | opcode | payloadlength | val
我用空格字符分隔这些值。
现在我想获取名为 val 的最后一个值。在这一部分中,我拥有我想知道的所有信息,以详细说明传感器的响应。
例如,我对想要知道传感器的 IEEE MAC 地址的命令有这样的响应:
在这种情况下,val 是响应中 Length 之后的所有字段。没有分离,但我有一种弦。
我所要做的就是拆分这个数组/数字字符串,只知道每个字段的长度。对于前。状态为1字节,MAC地址为8字节,依此类推...
我的代码是这样的:
if response.error:
ret['error'] = 'Error while retrieving unregistered sensors'
else:
for line in response.body.split("\n"):
if line != "":
value = int(line.split(" ")[6])
ret['response'] = value
self.write(tornado.escape.json_encode(ret))
self.finish()
if command == 'IDENTIFY':
status = value.split(" ")[0]
IEEEAddrRemoteDev = value.split(" ")[1]
NWKAddrRemoteDev = value.split(" ")[2]
NumOfAssociatedDevice = value.split(" ")[3]
StartIndex = value.split(" ")[4]
ListOfShortAddress = value.split(" ")[5]
if status == 0x00:
ret['success'] = "The %s command has been succesfully sent! \
IEEE address: %s" % % (command.upper(), IEEEAddrRemoteDev)
self.write(tornado.escape.json_encode(ret))
elif status == 0x80:
ret['success'] = "Invalid Request Type"
self.write(tornado.escape.json_encode(ret))
elif status == 0x81:
ret['success'] = "Device Not Found"
self.write(tornado.escape.json_encode(ret))
在第一部分中,我从整个响应中获取第 6 个值,并将其放入变量 value 中。在此之后,我想在每个组件中拆分这个变量。
例如。这个 status = value.split("")[0] 我必须以哪种方式拆分????
非常感谢您的帮助!
请您参考如下方法:
val 字段的确切格式是什么(即代码中 value 的内容)?它是一个字符串吗?一个字节序列?
如果它是一个字符串,你可以使用:
status = value[0]
IEEEAddrRemoteDev = value[1:8]
NWKAddrRemoteDev = value[9:2]
NumOfAssociatedDevice = value[11:1]
StartIndex = value[12:1]
ListOfShortAddress = value[13:2*NumOfAssociatedDevice]
如果它是一个字节序列,那么您可以使用 struct.unpack() - 参见 here .
