2

私はセンサーシステムを持っています。センサーは私からコマンドを受信し、何かを実行してから、私に応答を送信します。

応答は次のようになります。

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]はどのように分割する必要がありますか????

助けてくれてどうもありがとう!

4

2 に答える 2

0

問題は、これを Python の文字列として扱っていることですが、ビットの集まりになるだけです。

struct.unpackこれらを分割するには、 を使用する必要があります。

于 2013-01-28T17:47:10.570 に答える
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()- see hereを使用できます。

于 2013-01-28T17:25:36.777 に答える