我正在使用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}'
这仅打印客户端收到的第一个值;我也想打印后续值。
最佳答案
它有助于替换以下行:
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_callback
是定义为的函数:def observation_callback(response):
print("callback: %r" % response.payload)
现在,无论何时从服务器收到新的通知消息,消息有效负载都会被打印。
关于python - 如何使用aiocoap库观察CoAP资源?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37779470/