首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将LwM2M客户端注册到节点-coap包?

如何将LwM2M客户端注册到节点-coap包?
EN

Stack Overflow用户
提问于 2018-01-02 09:58:54
回答 1查看 480关注 0票数 0

我正在尝试用node.js coap包来模拟node.js客户端节点。我让LwM2M服务器在我的Raspberry 3上运行并监听端口5555

目前,我所做的就是将UDP数据包发送到lo (回环)接口。(不过,它被封装在另一个UDP数据包中,它的源和目的地为00: 00:00:00:00:00:00,但这对我来说现在并不重要)。

代码语言:javascript
复制
const coap  = require('../') // Script is located inside package examples directory

const endpointClientName = 'someSensor'
const lifetime = '600'
const version = '1.0'
const binding = 'UQ'
let bodyString = '?ep=' + endpointClientName + '&lt=' + lifetime + '&lwm2m=' + version + '&b=' + binding;
let responseBody = '';
let options = {
  host : 'fd72:cafe:face:0:fade:deaf:1234:5678',
  port : 5555,
  pathname : "/rd",
  method : 'POST',
  confirmable : 'true',
  options : {
    'Accept' : 'application/json'
  }
};
let request = coap.request(options);

request.on('response', function (response) {
  response.on('data', function () {
    responseBody += response.payload.toString();
  });
  response.on('end', function () {
    if (response.code == '2.01') {
      console.log('[coap] device registered.');
      var obj = JSON.parse(responseBody);
      console.log('[coap] responseBody', obj);
    } else {
      console.log('[coap] coap response.code=' + response.code);
    }
  });
});
request.write(bodyString);
request.end();

上面的代码生成包含数据的UDP数据包:

代码语言:javascript
复制
Data (50 bytes)
    Data: 44021dff8ea487ebb272646132ff3f65703d736f6d655365...
    [Length: 50]

下面的数据从wireshark粘贴为十六进制转储

代码语言:javascript
复制
0000   44 02 1d ff 8e a4 87 eb b2 72 64 61 32 ff 3f 65
0010   70 3d 73 6f 6d 65 53 65 6e 73 6f 72 26 6c 74 3d
0020   36 30 30 26 6c 77 6d 32 6d 3d 31 2e 30 26 62 3d
0030   55 51

不过,我希望Wireshark将数据包显示为CoAP数据包,其中包含分隔为几个部分的段:

  1. Opt Name: #1: Uri-Path: rd
  2. Opt Name: #2: Uri-Query: ep=someSensor
  3. Opt Name: #3: Uri-Query: lt=600
  4. Opt Name: #4: Uri-Query: lwm2m=1.0
  5. Opt Name: #5: Uri-Query: b=UQ

我做错了什么?也许我设定了错误的选择?我注意到一些发送请求来处理coap://localhost:port/path,但是我没有通过其他方法获得更好的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 12:46:07

整个问题是,像lifetimelwm2m版本这样的选项在包体中,但是它必须用query来描述。

查询:查询字符串。默认为“”。不应包括路径,例如'a=b&c=d'

在注册设备之后,响应也不是json格式的,所有信息也不是在响应体中,而是在响应选项中:

message.options 所有CoAP选项,如CoAP-分组所解析的。 除了'Content-Format''Accept''ETag'之外,所有选项都是二进制格式的。请参阅registerOption()以了解如何注册更多内容。 有关所有可能的选项,请参见https://datatracker.ietf.org/doc/html/draft-ietf-core-coap-18#section-5.4

尽管如此,只要稍微修改代码,就可以解决问题:

代码语言:javascript
复制
const coap  = require('../') // Script is located inside package examples directory

const serverAddress = 'fd72:cafe:face:0:fade:deaf:1234:5678'
const serverPort = 5555
const endpointClientName = 'someSensor'
const lifetime = '600'
const version = '1.0'
const binding = 'UQ'
const uriQuery = 'ep=' + endpointClientName + '&lt=' + lifetime + '&lwm2m=' + version + '&b=' + binding;
const clientResources = '/1/0'
let options = {
  host : serverAddress,
  port : serverPort,
  pathname : "/rd",
  method : 'POST',
  confirmable : 'true',
  query : uriQuery,
};
let request = coap.request(options);

request.on('response', function (response) {
  console.log('[coap] coap response.code = ' + response.code);
  console.log('[coap] coap response.options = ' + response.options);
});
request.write(clientResources);
request.end();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48058828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档