3

我必须开发一个可以与另一个oneM2M服务器交互的node.js 应用程序。特别是 node.js 应用程序需要使用CoaP协议交换数据,但我不知道如何以符合 oneM2M 的方式进行。

我使用这个模块开始了我的node.js项目: https ://github.com/mcollina/node-coap 但我需要一些支持才能使用 oneM2M 协议创建 CoaP 客户端。

代码示例非常感谢。

4

2 回答 2

1

如果您想从您的应用程序与 oneM2M CSE 进行通信,那么您应该实现Mca接口。这是 CSE 和您的应用程序之间的接口,技术上称为应用程序实体或 AE。

最简单的方法是使用 REST 绑定。您可以在http://www.onem2m.org/application-developer-guide上查看 oneM2M 的开发人员指南。

您可能还想阅读以下规范:

您可以在此处找到这些和其他规范的最新版本:http ://www.onem2m.org/technical/published-documents

于 2017-11-15T15:49:42.440 回答
1

根据TS-0008: CoAP Protocol Binding章节6.2.1 Header有以下一个 M2M 操作与 CoAP 方法的映射:

Operation      CoAP Method
CREATE         POST
RETRIEVE       GET
UPDATE         PUT
DELETE         DELETE
NOTIFY         POST 

然后在第6.2.2.4 章新选项的定义中介绍了一组新的 CoAP 选项,映射一个 M2M 标头参数。这里列出了主要的 HTTP 标头变量以及 CoAP 选项等效项:

Header HTTP variable   CoAP Option
X-M2M-Origin           256
X-M2M-RI               257
oneM2M-TY              267

所以这里有一个最小的 node.js 脚本来做一个GET 操作,即用路径检索容器资源中的最新 contentInstance /<cseBase>/<AE>/<Container>

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 操作示例,即在具有路径的容器资源中创建一个 contentInstance /<cseBase>/<AE>/<Container>

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();
于 2017-11-27T14:32:12.717 回答