Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function calculateTheParameter(index, calculated, sensor, measurement, sensors) {
- return new Promise((resolve, reject) => {
- // Create params and args and push own measurement as first one
- let params = [];
- //params.push(sensor.template.code);
- let args = [];
- //args.push(measurement.value);
- // Get the external params
- let baseCode = sensor.template.code;
- for(let param of calculated.params) {
- if(!params.includes(param)) {
- params.push(param);
- }
- }
- let tasks = [];
- for(let i = 0; i < params.length; i++) {
- if(params[i].indexOf(baseCode != 0)){
- tasks.push(getTheExternalParam(i, params[i], measurement.date, sensors));
- }else{
- args.push(measurement.value);
- }
- }
- measurement.args = args;
- Promise.all(tasks)
- .then((results) => {
- results.map((result) => args[result.index] = result.data);
- try {
- let func = Function(params, calculated.formula);
- var calc = func.apply({}, args) || 0;
- } catch(e) {
- reject(e);
- }
- resolve({index: index, data: Math.round( calc * 10 ) / 10});
- }).catch((err) => reject(err));
- });
- }
- //here do the calc but need measurements of other sensors
- function calculateTheMeasurements(index, sensor, measurement, sensors) {
- return new Promise((resolve, reject) => {
- measurement.calculated = [];
- // Go through all calculated parameters to process
- let tasks = sensor.calculated.map((calculated, ci) => calculateTheParameter(ci, calculated, sensor, measurement, sensors));
- Promise.all(tasks)
- .then((results) => {
- measurement.calculated = [];
- results.map((result) => measurement.calculated[result.index] = result.data);
- resolve({index: index, data: measurement});
- })
- .catch((err) => reject(err));
- });
- }
- //we got to calculate for each measurement in main sensor measurements...
- function processTheCalculatedParameters(res,sensor, measurements, sensors){
- let tasks = measurements.map((measurement, i) => calculateTheMeasurements(i, sensor, measurement, sensors));
- Promise.all(tasks)
- .then((results) => {
- measurements = [];
- results.map((result) => measurements[result.index] = result.data);
- return responses.successResponse(res, measurements);
- })
- .catch((err) => {
- logger.error('sensors: Error on calculated parameters:', err.message);
- return responses.genericError(res);
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement