Node.js物联网应用:使用COAP协议采集房间数据
服务端程序:
const coap = require('coap');
const os = require('os');
const ip = require('ip');
// 获取本地IP地址
const getLocalIP = () => {
const ifaces = os.networkInterfaces();
let localIp = '';
Object.keys(ifaces).forEach(ifname => {
ifaces[ifname].forEach(iface => {
if (iface.family === 'IPv4' && !iface.internal && iface.address !== '127.0.0.1') {
localIp = iface.address;
}
});
});
return localIp;
};
// 模拟采集温度、湿度、光照度等信息
const getRoomInfo = () => {
const temperature = Math.round(Math.random() * 10 + 20);
const humidity = Math.round(Math.random() * 30 + 50);
const illuminance = Math.round(Math.random() * 500 + 500);
return {
temperature,
humidity,
illuminance,
};
};
// 创建coap服务器
const server = coap.createServer();
// 监听请求
server.on('request', (req, res) => {
const path = req.url;
if (path === '/room-info') {
const roomInfo = getRoomInfo();
res.setOption('Content-Format', 'application/json');
res.end(JSON.stringify(roomInfo));
} else if (path === '/local-ip') {
const localIp = getLocalIP();
res.end(localIp);
} else {
res.statusCode = 404;
res.end();
}
});
// 启动服务器
const port = 5683;
server.listen(port, () => {
const localIp = getLocalIP();
console.log(`coap server is running on coap://${localIp}:${port}`);
});
客户端程序:
const coap = require('coap');
// 获取房间信息
const getRoomInfo = () => {
return new Promise((resolve, reject) => {
const req = coap.request('coap://localhost:5683/room-info');
req.on('response', res => {
const data = res.payload.toString();
resolve(JSON.parse(data));
});
req.on('error', err => {
reject(err);
});
req.end();
});
};
// 获取本地IP地址
const getLocalIP = () => {
return new Promise((resolve, reject) => {
const req = coap.request('coap://localhost:5683/local-ip');
req.on('response', res => {
const localIp = res.payload.toString();
resolve(localIp);
});
req.on('error', err => {
reject(err);
});
req.end();
});
};
(async () => {
try {
const localIp = await getLocalIP();
console.log(`local ip: ${localIp}`);
setInterval(async () => {
const roomInfo = await getRoomInfo();
console.log(`room info: ${JSON.stringify(roomInfo)}`);
}, 3000);
} catch (err) {
console.error(err);
}
})();
原文地址: https://www.cveoy.top/t/topic/m9by 著作权归作者所有。请勿转载和采集!