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 类似如下代码:
[javascript] view plain copy
- 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);
- });
- });
当需要传感器数量可变化时,可采用如下实现:
- 根据传感器数量参数得到query序列[javascript] view plain copy
- 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);
- }
- 使用Javascript的Array.forEach()语法对每一个传感器建立observable对象[javascript] view plain copy
- 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
- });
- }
|