基于Zetta(Node.js)的数据接收端server中,可接收数量不定传感数据的IoT APP实现

Zetta 是一个基于Node.js的IoT框架。

上一篇 在基于Node.js的IoT框架Zetta中实现可变间隔发送数据 中对Zetta进行了简要的介绍,以及给出了一个发送间隔可变数据的实现。

这一篇将介绍使用zetta作为接收端时如何实现对传感器数量可变的数据进行接收。

一般的Zetta IoT APP可以实现确定类型及个数的传感器数据的接收,并对其进行处理,也可以利用zetta将接收到的数据传送到其他IoT平台进行处理,见 Can Zetta APP collect and process data form changeable number of sensors?

一般的Zetta APP 类似如下代码:

server.observe([pm25Query_1, pm25Query_2, (pmSensor_1, pmSensor_2) => {
   console.log("devices came online");
   console.log(pmSensor_1);
   console.log(pmSensor_2);
   pmSensor_1.streams.result.on("data", (m) => {
      var pm25 = m.data.value
      console.log("pm25_1: ", pm25);
   });
   pmSensor_2.streams.result.on("data", (m) => {
      var pm25 = m.data.value
      console.log("pm25_2: ", pm25);
   });	
});
当需要传感器数量可变化时,可采用如下实现:
  1. 根据传感器数量参数得到query序列
    this.queries = new Array();
    for (var i=0; i < this.sensor_number; i++) {	//start from 0
    	const pm25Query = server.from('*').where({type: 'pm_sensor', name: 'pm_sensor_'+i});
    	this.queries.push(pm25Query);
    }

  2. 使用Javascript的Array.forEach()语法对每一个传感器建立observable对象
    this.pmSensors = new Array();
    for (var i=1; i <= this.sensor_number; i++) {	//start from 1, can be changed later
    	this.pmSensors.push('pmsensor');
    }
    this.pmSensors.forEach(processValue);
    function processValue(sensor, index, arr) {
    	console.log(sensor);
    	console.log(index);
    	server.observe(this.queries[index], (sensor) => {
          ...//calculate the average of all sensor data
         });
    }

你可能感兴趣的:(技术,物联网)