簡體   English   中英

如何使用 node-coap 包注冊 LwM2M 客戶端?

[英]How to register LwM2M client with node-coap package?

我正在嘗試使用 node.js coap package模擬 LwM2M 客戶端節點。 我有 LwM2M 服務器在我的 Raspberry Pi 3 上運行並監聽端口5555

目前我所取得的成就是向lo (環回)接口發送一個 UDP 數據包。 (但是,它封裝在另一個 UDP 數據包中,該數據包的源和目標為 00:00:00:00:00:00,但現在對我來說並不重要)。

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 數據包:

Data (50 bytes)
    Data: 44021dff8ea487ebb272646132ff3f65703d736f6d655365...
    [Length: 50]

下面的數據從wireshark粘貼為十六進制轉儲

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 ,但是我沒有通過使用其他方式獲得更好的結果。

整個問題是lifetimelwm2m版本等選項在數據包正文中,但必須在query描述:

查詢:查詢字符串。 默認為''。 不應包含路徑,例如'a=b&c=d'

同樣在注冊設備后,響應不是json格式,所有信息也不是在響應正文中,而是在響應選項中:

消息選項

所有 CoAP 選項,由CoAP-packet解析。

所有選項都是二進制格式,除了'Content-Format''Accept''ETag' 請參閱registerOption()以了解如何注冊更多信息。

有關所有可能的選項,請參閱規范

話雖如此,通過稍微修改代碼來解決問題:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM