Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用AIOCAP库观察CoAP资源?_Python_Python 3.x_Python Asyncio - Fatal编程技术网

Python 如何使用AIOCAP库观察CoAP资源?

Python 如何使用AIOCAP库观察CoAP资源?,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,我正在使用库向嵌入式设备发出CoAP请求。通信和基本功能似乎工作正常,但文档中没有说明如何启用观测。源代码中似乎确实存在观察功能,包括服务器端和客户端-我需要客户端 这就是我目前所拥有的:一个GET请求,它在服务器上创建观察状态: import asyncio, aiocoap @asyncio.coroutine def coap_get_with_observe(): protocol = yield from aiocoap.Context.create_client_conte

我正在使用库向嵌入式设备发出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}'

这只打印客户端接收到的第一个值;我还想打印后续值。

替换这一行有助于:

    response = yield from protocol.request(request).response
为此:

    protocol_request = protocol.request(request)
    protocol_request.observation.register_callback(observation_callback)
    response = yield from protocol_request.response
其中,
observation\u callback
是一个定义如下的函数:

def observation_callback(response):
    print("callback: %r" % response.payload)
现在,每当从服务器接收到新的通知消息时,就会打印消息负载