2017-11-10 19 views
0

CoAPthon을 사용하여 서버를 만들고 get 메서드가 호출 될 때마다 json 페이로드를 반환해야합니다. 내 코드 조각은 다음과 같습니다.CoAPthon 라이브러리를 사용하여 GET 메서드의 반환 값으로 CoAP 서버에서 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() 

서버가 실행 중이며 구리선의 IP 주소를 방문하여 볼 수 있습니다. 그러나 get을 누르면 브라우저에 5.00 Internal Server Error(Blockwise)이 표시됩니다. 누군가가 나에게 그걸하는 법을 제안 할 수 있었 을까? 다음과 같이

답변

0

첫 수입 다음

from coapthon import defines 

는 클래스 고해상도 내부 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