node.js中的OneM2M coap客户端
我必须开发一个node.js应用程序,它可以与另一台oneM2M服务器交互。 特别是node.js应用程序需要使用CoaP协议交换数据,但我不知道如何以兼容oneM2M的方式进行交换 我使用以下模块启动了我的node.js项目: 但是我需要一些支持来使用oneM2M协议创建CoaP客户端node.js中的OneM2M coap客户端,node.js,coap,onem2m,Node.js,Coap,Onem2m,我必须开发一个node.js应用程序,它可以与另一台oneM2M服务器交互。 特别是node.js应用程序需要使用CoaP协议交换数据,但我不知道如何以兼容oneM2M的方式进行交换 我使用以下模块启动了我的node.js项目: 但是我需要一些支持来使用oneM2M协议创建CoaP客户端 非常感谢代码示例。如果您想从应用程序与oneM2M CSE通信,那么您应该实现Mca接口。这是CSE和应用程序之间的接口,技术上称为应用程序实体或AE 最简单的方法是使用REST绑定。您可以在上查看oneM2M
非常感谢代码示例。如果您想从应用程序与oneM2M CSE通信,那么您应该实现Mca接口。这是CSE和应用程序之间的接口,技术上称为应用程序实体或AE 最简单的方法是使用REST绑定。您可以在上查看oneM2M的开发者指南 您可能还需要阅读以下规范:
- ,这是oneM2M的核心规范文件。这里定义了基本概念以及所有资源类型
- 有关资源的实际编码和表示的更多详细信息
Operation CoAP Method
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
NOTIFY POST
然后在第6.2.2.4章新期权的定义中,引入了一组新的CoAP期权,映射了一个M2M头参数。此处列出了与CoAP选项等效的主要HTTP头变量:
Header HTTP variable CoAP Option
X-M2M-Origin 256
X-M2M-RI 257
oneM2M-TY 267
因此,这里有一个最小的node.js脚本来执行获取操作,即检索容器资源中路径为//
的最新contentInstance:
var-coap=require('coap');
变量选项={
主机:“”,
港口:5683,
路径名:“///la”,
方法:“get”,
可证实:'真',
选项:{
“接受”:“应用程序/json”
}
};
变量bodyString='';//GET操作的无效字符串
var-responseBody='';
var req=coap.请求(选项);
请求设置选项(“256”,新缓冲区(“”);//X-M2M-Origin(强制性)
请求设置选项(“257”,新缓冲区(“123456”);//X-M2M-RI(强制性)
请求开启(“响应”,功能(res){
res.on('data',function(){
responseBody+=res.payload.toString();
});
res.on('end',function(){
如果(res.code==“2.05”){
log(“[coap]coap就绪,请求正常”);
var obj=JSON.parse(responseBody);
console.log(“[coap]responseBody”,obj);
}否则{
log('[coap]coap res.code='+res.code);
}
});
});
请求写入(正文字符串);
请求结束();
这是一个最小的POST操作示例,即在容器资源中创建一个路径为//
的contentInstance:
var-coap=require('coap');
变量选项={
主机:“”,
港口:5683,
路径名:“//”,
方法:“post”,
可证实:'真',
选项:{
“内容格式”:“应用程序/json”
}
};
var bodyString=新缓冲区('{“m2m:cin”:{“con”:{“温度”:33}}');
var-responseBody='';
var req=coap.请求(选项);
请求设置选项(“256”,新缓冲区(“”);//X-M2M-Origin(强制性)
请求设置选项(“257”,新缓冲区(“123456”);//X-M2M-RI(强制性)
请求设置选项(“267”,新缓冲区([4]);//ty=4,ContentInstance资源类型
请求开启(“响应”,功能(res){
res.on('data',function(){
responseBody+=res.payload.toString();
});
res.on('end',function(){
如果(res.code==“2.05”){
log(“[coap]coap就绪,请求正常”);
var obj=JSON.parse(responseBody);
console.log(“[coap]responseBody”,obj);
}否则{
log('[coap]coap res.code='+res.code);
}
});
});
请求写入(正文字符串);
请求结束();
很遗憾,没有。但《开发人员指南》中的示例是一个良好的开端。您基本上需要实现RESTAPI。另一个起点可以是Eclipse om2m项目的指南:。
var coap = require('coap');
var options = {
host : '<hostname>',
port : 5683,
pathname : "/<cseBase>/<AE>/<Container>/la",
method : 'get',
confirmable : 'true',
options : {
'Accept' : 'application/json'
}
};
var bodyString = ''; // void string for GET operation
var responseBody = '';
var req = coap.request(options);
req.setOption("256", new Buffer("<origin>")); // X-M2M-Origin (mandatory)
req.setOption("257", new Buffer('123456')); // X-M2M-RI (mandatory)
req.on('response', function (res) {
res.on('data', function () {
responseBody += res.payload.toString();
});
res.on('end', function () {
if (res.code == '2.05') {
console.log('[coap] coap ready, request OK');
var obj = JSON.parse(responseBody);
console.log('[coap] responseBody', obj);
} else {
console.log('[coap] coap res.code='+res.code);
}
});
});
req.write(bodyString);
req.end();
var coap = require('coap');
var options = {
host : '<hostname>',
port : 5683,
pathname : "/<cseBase>/<AE>/<Container>",
method : 'post',
confirmable : 'true',
options : {
'Content-Format' : 'application/json'
}
};
var bodyString = new Buffer('{"m2m:cin":{ "con":{"temperature":33}}}');
var responseBody = '';
var req = coap.request(options);
req.setOption("256", new Buffer("<origin>")); // X-M2M-Origin (mandatory)
req.setOption("257", new Buffer('123456')); // X-M2M-RI (mandatory)
req.setOption("267", new Buffer([4])); // ty = 4, ContentInstance resource type
req.on('response', function (res) {
res.on('data', function () {
responseBody += res.payload.toString();
});
res.on('end', function () {
if (res.code == '2.05') {
console.log('[coap] coap ready, request OK');
var obj = JSON.parse(responseBody);
console.log('[coap] responseBody', obj);
} else {
console.log('[coap] coap res.code='+res.code);
}
});
});
req.write(bodyString);
req.end();