A Node-Red node that can be used to aggregate numeric values over a specific time span
This node can be used to aggregate numeric values over a specific time span.
- combine more than one sensor inputs to one output (as a way to implement some sort of a simple sensor redundancy)
- statistical aggregation of more than one inputs. Example: if you have five temperature sensors in a room, you will be able to calculate the average of their values to get the average room temperature (i.e. for a display)
- statistical aggregation over a longer time period. Example: if you are only interested in the average day temperature, you could do this with the aggregator node too.
- combination of values. Example: You have three push buttons and you want to switch a light when one of them is pressed/sends you a 1. On the one hand you will be able to detect if one push button has sent you a 1 with the maximum function, on the other hand you will be able to suppress flickering thanks to the defined time span (i.e. with a time span of half a second)
Available aggregation methods:
- arithmetic mean (average)
- geometric mean
- harmonic mean
aggegration over multiple topics
The aggregator stores the retrieved values per topic for the pending time span. He assumes that every topic has the same mightiness, regardless of how many values he retrieved per topic. Once the time span times out, this assumption leads to the following calculation of all retrieved values:
- Aggregation of all retrieved values per topic by the defined aggregation method
- Aggregation of the aggregation results of each topic again by the defined aggregation method
If Submit one message per topic is selected, the second aggregration step will be skipped. One individual message is sent for each topic along with the original topic name.
topic and error handling
- msg.topic is handled case insensitive (converted to LowerCase)
- if the msg.payload doesn't contain a number, the aggregator node raises an exception which can be caught with the Catch node
Submit incomplete interval on start? option
The Aggregator node aggregates on a whole unit of time selected. For example, every 4 hours starting at 12:30:00 will aggregate at [16:00:00], 20:00:00, 00:00:00 etc. The first aggregation result at 16:00:00, containing the values over the first "incomplete" timespan of 3.5 hours (12:30 - 16:00), is only outputted if the "Submit incomplete interval on start?" option is selected. If the option is not selected, the first output would be at 20:00 with the values between 16:00 and 20:00.
In practise this option should be deselected if you have to ensure that all aggregation results are based on an equal timespan. If this is not an issue or you explicitly want also the first values aggregated for your application, then this option should be selected.
In your Node-RED directory, execute:
npm install node-red-contrib-aggregator
Please just raise a pull request on GitHub.
Many thanks to following people who helped finding bugs and adding more functionalities:
Copyright and license
Copyright 2016, Roger Jaggi and Pascal Bohni under the Apache 2.0 license.