Message Script

The message script allows to dynamically generate an HTTP request for sending time series to the target URL. The script uses JavaScript with the support for all built-in objects and functions of ECMAScript 5 specification (read more about it here). As a result, the script should return a RestRequestMessage object. The object is a prototype of the generated HTTP request and should contain all necessary message headers and body. Detailed description of the object can be found here.

In order to access the time series data ready to be sent, the dataContext object is used. It provides access to an array of time series data. The object provides access to the secret string, TimeSeries and ValueState objects. A detailed description of dataContext can be found here.

The following example shows a script used for inserting data into InfluxDB, which marks the data with an additional ts_type tag during generation.

var message = new RestRequestMessage();
var body = '';
var firstLine = true;
var ts_type = 'misc'; // Declare a variable for the ts_type tag

// Process the ready-to-publish time series
for (var i = 0; i < dataContext.series.length; i++)
{
	var ts = dataContext.series[i];

	// Determine the value of the ts_type tag
	// based on the path of the time series
	if (ts.path.includes('Power'))
		ts_type = 'power';
	else if (ts.path.includes('Alarms'))
		ts_type = 'alarm';
	else if (ts.path.includes('Fuel'))
		ts_type = 'fuel';

	// Process the samples of the i-th time series
	for (var j = 0; j < ts.samples.length; j++)
	{
		var sample = ts.samples[j];        
		
		if (!firstLine)
			body += '\n'; // If at least one line was added, insert a line break
           
		// Generate a string like this:
		// rest_measures,ts_path=Plant.Generator1.Power full.kWh value=280.87124,status=0,ts_type='power' 1591172295193
		body += 'rest_measures,ts_path=' + ts.path
            + ' value=' + sample.value.toFixed(5)
            + ',status=' + sample.status
            + ', ts_type=' + ts_type
            + ' ' + sample.time.getTime();

            firstLine = false;
	}
}

// Specifying the final string as the HTTP request body
message.body = body;
return message;

When publishing data to various cloud services, cryptographic and text functions may be useful. Access to them is provided by MosCrypto and MosText objects.

Last updated