node.js 中的 OneM2M coap 客户端
OneM2M coap client in node.js
我必须开发一个 node.js 应用程序,它可以与另一个 oneM2M 服务器交互。
特别是 node.js 应用程序需要使用 CoaP 协议交换数据,但我不知道如何以符合 oneM2M 的方式进行。
我使用这个模块开始了我的 node.js 项目:https://github.com/mcollina/node-coap
但我需要一些支持才能使用 oneM2M 协议创建 CoaP 客户端。
非常感谢代码示例。
如果您想从您的应用程序与 oneM2M CSE 通信,那么您应该实现 Mca 接口。这是 CSE 和您的应用程序之间的接口,技术上称为应用程序实体或 AE。
最简单的方法是使用 REST 绑定。您可以在 http://www.onem2m.org/application-developer-guide 查看 oneM2M 的开发人员指南。
您可能还想阅读以下规范:
- TS-0001: Functional Specification,这是oneM2M的核心规范文档。在这里,定义了基本概念以及所有资源类型。
- TS-0004: Service Layer Core Protocol 有关资源的实际编码和表示的更多详细信息。
- TS-0008: CoAP Protocol Binding
- TS-0009: HTTP Protocol Binding
您可以在此处找到这些规范和其他规范的最新版本:http://www.onem2m.org/technical/published-documents
根据 6.2.1 Header 章中的 TS-0008: CoAP Protocol Binding,存在以下与 CoAP 方法映射的一个 M2M 操作:
Operation CoAP Method
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
NOTIFY POST
然后在章节 6.2.2.4 新选项的定义 中引入了一组新的 CoAP 选项,映射一个 M2M header 参数。这里主要的 HTTP header 变量与 CoAP 选项等价物一起列出:
Header HTTP variable CoAP Option
X-M2M-Origin 256
X-M2M-RI 257
oneM2M-TY 267
所以这里有一个最小的 node.js 脚本来执行 GET 操作,即在路径为 /<cseBase>/<AE>/<Container>
的容器资源中检索最新的 contentInstance:
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();
这是一个最小的POST操作示例,即在路径为/<cseBase>/<AE>/<Container>
:[=17=的容器资源中创建一个contentInstance ]
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();
我必须开发一个 node.js 应用程序,它可以与另一个 oneM2M 服务器交互。 特别是 node.js 应用程序需要使用 CoaP 协议交换数据,但我不知道如何以符合 oneM2M 的方式进行。
我使用这个模块开始了我的 node.js 项目:https://github.com/mcollina/node-coap 但我需要一些支持才能使用 oneM2M 协议创建 CoaP 客户端。
非常感谢代码示例。
如果您想从您的应用程序与 oneM2M CSE 通信,那么您应该实现 Mca 接口。这是 CSE 和您的应用程序之间的接口,技术上称为应用程序实体或 AE。
最简单的方法是使用 REST 绑定。您可以在 http://www.onem2m.org/application-developer-guide 查看 oneM2M 的开发人员指南。
您可能还想阅读以下规范:
- TS-0001: Functional Specification,这是oneM2M的核心规范文档。在这里,定义了基本概念以及所有资源类型。
- TS-0004: Service Layer Core Protocol 有关资源的实际编码和表示的更多详细信息。
- TS-0008: CoAP Protocol Binding
- TS-0009: HTTP Protocol Binding
您可以在此处找到这些规范和其他规范的最新版本:http://www.onem2m.org/technical/published-documents
根据 6.2.1 Header 章中的 TS-0008: CoAP Protocol Binding,存在以下与 CoAP 方法映射的一个 M2M 操作:
Operation CoAP Method
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
NOTIFY POST
然后在章节 6.2.2.4 新选项的定义 中引入了一组新的 CoAP 选项,映射一个 M2M header 参数。这里主要的 HTTP header 变量与 CoAP 选项等价物一起列出:
Header HTTP variable CoAP Option
X-M2M-Origin 256
X-M2M-RI 257
oneM2M-TY 267
所以这里有一个最小的 node.js 脚本来执行 GET 操作,即在路径为 /<cseBase>/<AE>/<Container>
的容器资源中检索最新的 contentInstance:
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();
这是一个最小的POST操作示例,即在路径为/<cseBase>/<AE>/<Container>
:[=17=的容器资源中创建一个contentInstance ]
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();