服务端程序:

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);
  }
})();
Node.js物联网应用:使用COAP协议采集房间数据

原文地址: https://www.cveoy.top/t/topic/m9by 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录