我可以将CoAPthon(Python的CoAP)连接到nodecap(nodejs的CoAP)吗?

2024-03-29 07:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行一个raspberry pi项目,在该项目中我运行python脚本,我想将该脚本中的传感器数据发送到我的nodejs服务器。我正在尝试用python脚本将CoAP服务器连接到节点服务器上的客户端。使用的库是python中的CoAPthon和nodejs中的NodeCoAP。当我尝试连接协同服务器时,服务器说编码错误,对此有解决方案吗??? 错误:“utf-8”编解码器无法解码位置3中的字节0xbd:无效的开始字节”。
CoAPthon服务器的python版本如下所示

#CoAPServer.py
from coapthon.server.coap import CoAP
from coapthon.resources.resource import Resource
gotin=1
class sensor(Resource):
    def __init__(self, name="sensor", coap_server=None):
        super(sensor, self).__init__(name, coap_server, visible=True,observable=True, allow_children=True)
        self.payload = str(gotin)
        self.content_type = "text/plain"
    def render_GET(self, request):
        return self
class CoAPServer(CoAP):
    def __init__(self, host, port):
        CoAP.__init__(self, (host, port))
        self.add_resource('/sensor', sensor())
def main():
    server = CoAPServer("0.0.0.0", 5682)
    try:
        server.listen(10)
    except KeyboardInterrupt:
        print("Server Shutdown")
        server.close()
if __name__ == '__main__':
    main()

nodejs-CoAP客户端如下所示

//app.js
const express = require("express");
const app = express();
const path = require("path");
const port = process.env.PORT || 3000;
app.use(express.static(path.join(__dirname, "public")));
var coap = require('coap');
var packet = require('coap-packet');
var req = coap.request({
  host: '127.0.0.1',
  pathname: '/sensor',
  port: 5682,
  method: 'get'
})
var payload = {
  user : 'ash'
}
req.write(JSON.stringify(payload));
req.setOption('Content-Format','text/plain');
console.log(req);
req.on('response', function(res) {
  console.log('response code', res.code);
  res.pipe(process.stdout)
});
req.end();
app.listen(port, () => {
  console.log(`🚀🚀Listening on port : ${port}`);
});

我得到的错误是

Traceback (most recent call last):
  File "E:\practice\raspberrypi\CoAPServer1.py", line 28, in <module>
    main()
  File "E:\practice\raspberrypi\CoAPServer1.py", line 23, in main
    server.listen(10)
  File "C:\Users\91948\AppData\Local\Programs\Python\Python39\lib\site-packages\coapthon\server\coap.py", line 153, in listen
    message = serializer.deserialize(data, client_address)
  File "C:\Users\91948\AppData\Local\Programs\Python\Python39\lib\site-packages\coapthon\serializer.py", line 57, in deserialize
    message.token = token_value.decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 0: invalid start byte


Tags: inpyself服务器serverinitmainport