node.js - node.js 中的 OneM2M coap 客户端

标签 node.js coap onem2m

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

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

非常感谢代码示例。

最佳答案

根据 6.2.1 Header 章中的 TS-0008: CoAP Protocol Binding,有以下 oneM2M 操作与 CoAP 方法的映射:

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> 创建一个 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 - node.js 中的 OneM2M coap 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47303072/

相关文章:

c - C 中的缓冲区解析

c# - 如何在 C# 中从接收 CoAP 包中获取 IP 地址?

c++ - 由于此错误,无法使用 microcoap 库。任何修复?

javascript - 这是在 Node.js 中编写异步代码的正确方法吗?

javascript - Promise:然后在 Resolve 之前

node.js - 仅从 Sequelize ORM 中获取 dataValues

iot - ETSI-M2M 标准和 OneM2M 标准有什么区别?

javascript - EJS include is not a function 错误

onem2m - 是什么让传感器成为 AE 或容器?

onem2m - none-oneM2M 设备的设备管理?