I am using CoAPthon to create a server, it should return a json payload whenever the get method is invoked, below is my code snippet:
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()
The server runs, and I can see it by visiting the IP address from copper. But when I press get, I get 5.00 Internal Server Error(Blockwise)
on my browser. Could someone suggest me how to do it?
first import the following
from coapthon import defines
then redefine get function inside class res as follows :-
def render_GET(self,request):
self.payload = (defines.Content_types["application/json"],json.dumps({"e":[{ "n": "temperature", "v":23.5,"u":"degC" }]}))
return self