2016-06-12 12 views
1

aiocoapライブラリを使用して、埋め込みデバイスにCoAPリクエストを発行しています。コミュニケーションと基本的な機能はうまくいくようですが、ドキュメンテーションは観察を有効にする方法を述べていません。監視機能がソースコードに存在するように見えますが、サーバー側とクライアント側の両方に存在します。クライアント側が必要です。aiocoapライブラリでCoAPリソースを観察するにはどうすればよいですか?

これは私がこれまで持っているものです:サーバー上で観察する状態を作成しますGET要求:

import asyncio, aiocoap 

@asyncio.coroutine 
def coap_get_with_observe(): 
    protocol = yield from aiocoap.Context.create_client_context() 

    request = aiocoap.Message(code = aiocoap.GET) 
    request.set_request_uri('coap://[aaaa::212:4b00:a49:e903]/sensors/temp') 
    # set observe bit from None to 0 
    request.opt.observe = 0 

    try: 
     response = yield from protocol.request(request).response 
    except Exception as e: 
     print("request failed: %s" % str(e)) 
    else: 
     print("request ok: %r" % response.payload) 

event_loop = asyncio.new_event_loop() 
asyncio.set_event_loop(event_loop) 
event_loop.create_task(coap_get_with_observe()) 
asyncio.get_event_loop().run_forever() 

出力:

request ok: b'{"HDC_TEMP":2426}' 

このプリントクライアントが受信したばかりの最初の値;後続の値も印刷したいと思います。

答えて

0

それは、この行置き換えることができます。これで

response = yield from protocol.request(request).response 

を:

observation_callbackのように定義された関数である
protocol_request = protocol.request(request) 
    protocol_request.observation.register_callback(observation_callback) 
    response = yield from protocol_request.response 

def observation_callback(response): 
    print("callback: %r" % response.payload) 

今すぐメッセージペイロードがいつでも印刷され新しい通知メッセージがサーバーから受信されます。

関連する問題