【问题标题】:OneM2M coap client in node.jsnode.js 中的 OneM2M coap 客户端
【发布时间】:2017-11-15 08:56:06
【问题描述】:

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

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

非常感谢代码示例。

【问题讨论】:

    标签: node.js coap onem2m


    【解决方案1】:

    根据6.2.1 Header一章中TS-0008: CoAP Protocol Binding有如下一个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操作,即在路径/<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操作示例,即在路径/&lt;cseBase&gt;/&lt;AE&gt;/&lt;Container&gt;的容器资源中创建一个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();
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 很遗憾没有。但是开发人员指南中的示例是一个好的开始。您基本上需要实现 REST API。另一个起点可能是 Eclipse om2m 项目的指南:http://wiki.eclipse.org/OM2M/one/REST_API
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      相关资源
      最近更新 更多