使用 CoAPthon 库将 json 有效负载作为 return 值从 CoAP 服务器发送到 GET 方法

Sending a json payload from a CoAP server as return value to GET method using CoAPthon library

我正在使用 CoAPthon 创建服务器,每当调用 get 方法时,它应该 return 一个 json 有效负载,下面是我的代码片段:

from coapthon.resources.resource import Resource
from coapthon.server.coap import CoAP 
import json

class res(Resource):
   def __init__(self,name="Res",coap_server=None):
      super(res,self).__init__(name,coap_server,visible=True,observable=True,allow_children=True)
      with open("/home/pratik/Iot_datamodels/IoT-openiot-DataModels/oic.r.temperature.json","r") as f:
        value = json.load(f)
      self.payload=value['definitions']
      self.resource_type = "oic.r.temperature"
      self.content_type = "application/json"
      self.interface_type = "oic.if.a"

   def render_GET(self,request):
    print json.dumps({"e":[{ "n": "temperature", "v":23.5,"u":"degC" }]})
    return json.dumps({"e":[{ "n": "temperature", "v":23.5,"u":"degC" }]}))

class CoAPServer(CoAP):
  def __init__(self, host, port, multicast=False):
    CoAP.__init__(self,(host,port),multicast)
    self.add_resource('sens-Me/',res())
    print "CoAP server started on {}:{}".format(str(host),str(port))
    print self.root.dump()

def main():
    ip = "0.0.0.0"
    port = 5683
    multicast=False
    server = CoAPServer(ip,port,multicast)
    try:
        server.listen(10)
    except KeyboardInterrupt:
        server.close()

if __name__=="__main__":
  main()

服务器运行,我通过copper访问IP地址可以看到。但是当我按下 get 时,我在浏览器上得到了 5.00 Internal Server Error(Blockwise)。有人可以建议我怎么做吗?

首先导入以下内容

from coapthon import defines

然后在 class res 中重新定义 get 函数如下:-

def render_GET(self,request):
   self.payload = (defines.Content_types["application/json"],json.dumps({"e":[{ "n": "temperature", "v":23.5,"u":"degC" }]}))
   return self