### Overview

Algorithms in the SIB allow derived metrics to be calculated from raw metrics. An example of an algorithm might calculate velocity given position and time. Derived metrics are then available to plot on graphs or appear on data tables when performing analysis of a sensors' observations.

### Basic Steps

- Navigate to Integrations --> Algorithms
- Enter in a unique ID e.g. MY_ALGORITHM
- Enter in a comma-separated list of input metrics e.g. z
- Enter in a comma-separated list of output metrics e.g. el
- Add code for the
**filter**code hook that specifies any conditions for when this algorithm applied. Return a boolean**true**or**false** - Add code the
**apply**code hook that specifies the main part of the algorithm that converts the input metric to the output metric. Return the newly constructed output time-series data.

### Basic Example

This (fictitious) very basic algorithm just adds 50 to the value of the temperature metric:

Code Hooks |

Here is the code for easy copy-and-paste:

function apply(context, timeSeries) { var output = api.buildSensorMetricSeries(timeSeries.getSensorId(), 'R', 'ohm'); var obsList = timeSeries.asObservations(); for(var i = 0; i < obsList.size(); ++i) { var observation = obsList.get(i); output.add(observation.getTimestamp(), observation.getValues()[0] + 50) } log.info("Output is: " + output) return output } |

Let's go thru this line-by-line

- The filter method just returns
**true**which means this algorithm applies to all sensors - The apply method line 2 creates the output time-series data with a metric of
**R**and unit**ohm**. This is just an example, and realistically you would never convert temperature**T**to resistance**R.** - On line 3, the timeSeries argument is converted to a list of
**observations** - We then loop thru each existing temperature observation and simply add 50 the value and add it to the output time-series we initialized on line 2
- Finally, we print out the output and return it

### Verification and Testing

To test your algorithm directly, you can choose a sensor that has the input metric you are creating an algorithm for and matches the constraints you specified in the **filter** method. Or, if they are no constraints (e.g return **true**), then you can choose any sensor that has the input metric associated with your algorithm.

Click **Test** below the editor to test it once you have selected the sensor using the sensor picker above the editor.

You can also test it by saving the algorithm integration and then attempting to **graph** the data. You should see your new output metric in the dropdown when choosing metrics to graph. For example this is what the very basic example described above would look like when graphing it:

Workspace | Data | Graphs |

This is what the results would look like in a data table. Notice the difference of **50**:

Workspace | Data | Tables |

## Comments

0 comments

Please sign in to leave a comment.