37. 36
var cserver = require('coap-shepherd');
cserver.on('ready', function () {
console.log('>> coap-shepherd server start!');
console.log('>> Permit devices joining for 180 seconds');
cserver.permitJoin(180);
});
cserver.start(function (err) {
if (err)
console.log(err);
});
app.js
38. 37
cserver.on('ind', function (msg) {
switch (msg.type) {
case 'devIncoming':
devIncomingHandler(msg);
break;
case 'devStatus':
devStatusHandler(msg);
break;
case 'devNotify':
devNotifyHandler(msg);
break;
default:
// Not deal with other msg.type in this example
break;
}
});
app.js
39. 38
function devIncomingHandler(msg) {
var cnode = msg.cnode;
if (cnode.clientName === 'my_client_id_cnode001') {
cnode.readReq('temperature/0/sensorValue', function (err, rsp) {
if (!err)
console.log('>> Current temperature value at machine: ' + rsp.data);
});
}
}
app.js
40. 39
function devStatusHandler(msg) {
var cnode = msg.cnode;
if (cnode.clientName === 'my_client_id_cnode001' && msg.data === 'online') {
// setting for notification of led state reporting
cnode.observeReq('temperature/0/sensorValue', function (err, rsp) {
console.log('>> Temperature observation starts: ' + rsp.status);
});
}
}
app.js
41. 40
function devNotifyHandler(msg) {
var data = msg.data,
node = cserver.find('my_first_node');
if (data && data.path === ‘/temperature/0/sensorValue') {
console.log(‘>> Temperature value at machine changed: ' + data.value);
}
}
app.js
42. 修改註冊 IP 位址
41
修改 cnode1.js 中的 IP 位址為 coap-shepherd 所在電腦的 IP 位置
// ...略
cnode1.register('192.168.1.196', 5683, function (err, msg) {
if (err) {
console.log(err);
} else {
if (msg.status !== '2.01') {
setTimeout(startRegister, 5000);
}
}
});
module.exports = cnode1;
cnode1.js
$ ifconfig
於電腦終端機執行指令 $ ifconfig 取得 IP 位置
IPSO 定義了一個階層式的資料模型來描述真實世界的裝置資源。
一個物件 (Object) 就像是一個類別 (Cless),並且每個物件實例 (Object Instance) 是物件的實體。
每一個物件、物件實例和資源都有自己唯一的 Id,物件的 Id 可用於判斷屬於什麼類別;物件實例的 Id 可用於識別自身;資源的 Id 則是資源的名稱。