Клиент coap OneM2M в файле node.js
Мне нужно разработать приложение node.js, которое может взаимодействовать с другим сервером oneM2M. В частности, приложению node.js нужно обмениваться данными по протоколу CoaP, но я не знаю, как это сделать способом, совместимым с oneM2M.
Я запустил свой проект node.js с помощью этого модуля: https://github.com/mcollina/node-coap но мне нужна некоторая поддержка для создания клиента CoaP с использованием протокола oneM2M.
Примеры кода действительно ценятся.
2 ответа
В соответствии с TS-0008: привязка протокола CoAP в главе 6.2.1 Заголовок существует следующее отображение операций oneM2M с использованием методов CoAP:
Operation CoAP Method
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
NOTIFY POST
Затем в главе 6.2.2.4 Определение новых опций вводится новый набор опций CoAP, отображающий параметры заголовка oneM2M. Здесь основные переменные заголовка 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();
Если вы хотите общаться с oneM2M CSE из вашего приложения, то вам следует реализовать интерфейс Mca. Это интерфейс между CSE и вашим приложением, технически называемый объектом приложения или AE.
Самый простой способ - использовать привязку REST. Вы можете взглянуть на руководство разработчика oneM2M по адресу http://www.onem2m.org/application-developer-guide.
Вы также можете прочитать следующие спецификации:
- TS-0001: Функциональная спецификация, которая является основным документом спецификации oneM2M. Здесь определены основные понятия, а также все типы ресурсов.
- TS-0004: Базовый протокол уровня обслуживания для получения дополнительной информации о фактическом кодировании и представлении ресурсов.
- TS-0008: привязка протокола CoAP
- TS-0009: привязка протокола HTTP
Вы можете найти последнюю версию этих и других спецификаций здесь: http://www.onem2m.org/technical/published-documents