Saltar al contenido

Supervise los datos de temperatura llamando a las API a través de Node.js.

Crea un archivo en tu computadora event.js en su carpeta y pegue lo siguiente Node.js guión en él.

'use strict';

require('dotenv').config();

const express = require('express');
const delaybetweenchecks = process.env.DELAYBETWEENCHECKS || 120000;
const PORT = process.env.PORT || 8080;

var NodeAE = require('iot-application-services-sdk-nodejs');
var nodeAE = new NodeAE();

// check temperature data for event generation
function checkEventForTemps() {

	var d = new Date();

	var fourminutesago = new Date(d.valueOf()-240000).toISOString();
	var twominutesago = new Date(d.valueOf()-120000).toISOString();
	nodeAE.setBaseUrl('analytics-thing-sap');

	var url = '/iotae.weatherstation.greenhouse:envData/aggregates?' +
		'$select=id,temperature_AVG,time&' +
		'$filter=time ge datetime'' +
		fourminutesago.slice(0, -1) +
		'' and time lt datetime'' +
		twominutesago.slice(0, -1) +
		''&' +
		'$format=json';

	var checkValuesCall = nodeAE.request(url);
	checkValuesCall.then(
  		function success(oResponse) {
			var parsedThings = oResponse.d.results;

			for(var thing of parsedThings) {
				console.log("Selected thing ID " + thing.id + " and its temperature is " + thing.temperature_AVG);

				readReferenceProperties(thing.id, twominutesago, thing.temperature_AVG);
			}       

		console.log("");
  		},
  		function error(err) {
    		throw err;
  		}
  	).catch( function(error) {
		console.log(error)
  	});
}

// read reference properties function

function readReferenceProperties(thingid, twominutesago, temp) {
	nodeAE.setBaseUrl('appiot-mds');
	var url1 = "/Things('" + thingid + "')/iotae.weatherstation.greenhouse:greenhouseType/ReferenceProperties/'envData,temperature'";
	var checkValuesCall = nodeAE.request(url1);
	checkValuesCall.then(
  		function success(oResponse) {
			var parsedValues = oResponse.values;

var upthrearray=parsedValues['/envData/temperature']['com.sap.iot.core.UpperThreshold']['value'];
var lowthrearray=parsedValues['/envData/temperature']['com.sap.iot.core.LowerThreshold']['value'];
var upthresval=upthrearray[upthrearray.length-1].value;
var lowthresval=lowthrearray[lowthrearray.length-1].value;

console.log("Upper threshold value for temperature: " + upthresval);
console.log("Lower threshold value for temperature: " + lowthresval);

			if (parseFloat(temp) > upthresval)
			{
			var severity = 1;  
			var desc = "High Temperature";
			console.log("High temperature. Event will be created.");
				createEventForReal(twominutesago, thingid, desc, severity);
		}
		else if (parseFloat(temp) > lowthresval && parseFloat(temp) < upthresval)
		{
			severity = 2;
			desc = "Medium Temperature";
			console.log("Medium temperature. Event will be created.");
			createEventForReal(twominutesago, thingid, desc, severity);
		}
			else
			 {
				 console.log("Low temperature. No event will be created.");
				}

		console.log("");
  		},
  		function error(err) {
    		throw err;
  		}
  	).catch( function(error) {
		console.log(error)
  	});
}
function toArray(parsedValues) {
	const result = [];
	for (const prop in parsedValues) {
		const value = parsedValues[prop];
		if (typeof value === 'object') {

						result.push(toArray(value)); // <- recursive call
	}
		else {
			result.push(value);
		}
	}
	return result;
	console.log(toArray(data));
}

// create event function
function createEventForReal(timestamp, thingid, desc, severity) {
	nodeAE.setBaseUrl('appiot-mds');
	var url =  '/Events';
	var method = 'POST';
	var body = {
		"_businessTimeStamp": timestamp,
		"_status": "Open",
		"_type": "Alert",
		"_severity": severity,
		"_source": "node-event-generator",
		"_code": "1",
		"_thingId": thingid,
		"_thingProperty": "iotae.weatherstation.greenhouse:greenhouseType/envData",
		"_description": desc,
		"_data": "test"
	};

	var requestConfig =
		({url, method, body}
		);
	var createEventCall = nodeAE.request(requestConfig);
		console.log("For thingId = " +  thingid + " an event will be created with text : " + desc);
	createEventCall.then(
  		function success(oResponse) {
			console.log("event created")
			},
  		function error(err) {
    		throw err;
  		}
  	).catch( function(error) {
		console.log(error)
  	})
}

// set automatic check for events
setInterval(checkEventForTemps, delaybetweenchecks);
console.log("now checking tresholds ...");

Debe sustituir valores por algunas de las entidades en el event.js archivo de acuerdo con los valores que especificó en los tutoriales Prerequisites alt. La siguiente tabla muestra las diversas entidades asociadas con el ejemplo anterior Node.js texto:

EntidadSuelte
iotae.weatherstationNombre del inquilino
greenhouseNombre del paquete
greenhouseTypeUna especie de cosa
envDataconjunto de propiedades
temperaturepropiedad

El nombre de la subcuenta / subdominio suele ser el nombre del inquilino iot. como prefijo: puede encontrarlo en el modificador de objeto cuando observa el tipo de objeto en la URL. Debe reemplazar uno de arriba en 2 lugares en el código donde se compone una URL.