Filter nodes are used for message filtering and routing. You may find list of available nodes below.
- asset profile switch
- device profile switch
- alarm status filter
- check fields presence
- check relation presence
- entity type filter
- entity type switch
- message type filter
- message type switch
- script
- switch
- GPS geofencing filter
asset profile switch
Routes incoming messages based on the name of the asset profile. The asset profile name is case-sensitive.
Note: The output connection of the rule node corresponds to the asset profile name. For example: “Freezer room”, “Building”, etc. See rule node connections for more details.
Output connections
- “Freezer room”/”Building”/etc:
- If message is successfully routed with the relation type corresponding with the asset profile name.
- Failure:
- If message originator`s entity is not an Asset.
- If message originator does not have assigned asset profile.
- If unexpected error occurred during message processing.
Usage example
Experienced platform users utilize asset profiles and configure specific rule chains per asset profile. This is useful to automatically route messages the platform generates: Entity Created, Entity Deleted, Attributes Updated, etc. But most of the messages are derived from the sensor data. Let’s assume we have temperature sensors in the room assets with profiles: “Freezer Room” and “Boiler Room”. We also take that there is a relation between room asset and temperature device of type “Contains”. The below rule chain will change the originator of the message from the device to the related asset and route the incoming messages to the “Freezer Room” or “Boiler Room” rule chains.
You may download and import the rule chain. Note that the rule chain nodes will point to not existing rule chains in your environment.
device profile switch
Routes incoming messages based on the name of the device profile. The device profile name is case-sensitive.
Note: The output connection of the rule node corresponds to the device profile name. For example: “Temperature sensor”, “Humidity sensor”, etc. See rule node connections for more details.
Output connections
- “Temperature sensor”/”Humidity sensor”/etc:
- If message is successfully routed with the relation type corresponding with the device profile name.
- Failure:
- If message originator`s entity is not a Device.
- If message originator does not have assigned device profile.
- If unexpected error occurred during message processing.
Usage example
Experienced platform users utilize device profiles and configure specific rule chains per device profile. This is useful in most of the cases, except when the device data is derived from some other message. For example, you may use BLE to MQTT gateway and BLE beacons. The Gateway payload typically contains MAC of the beacon and beacon data:
1
{"mac": "7085C2F13DCD", "rssi": -25, "payload": "AABBCC"}
Let’s assume you have different beacon profiles - indoor air quality “IAQ sensor” device profile and leak sensors “Leak sensor” device profile. The below rule chain will change the originator of the message from gateway to device and forward the message to the corresponding rule chain:
You may download and import the rule chain. Note that the rule chain nodes will point to not existing rule chains in your environment.
alarm status filter
Filters messages based on the specified alarm statuses.
Configuration
- Alarm status - controls the statuses to filter by. Available statuses: Active Acknowledged, Active Unacknowledged, Cleared Acknowledged, Cleared Unacknowledged.
Output connections
- True:
- If the message matches any of the selected alarm statuses.
- False:
- If the message does not match any of the selected alarm statuses.
- Failure:
- If unexpected error occurred during message processing.
Usage example
Consider a scenario where you want to process alarms that are currently active. You can configure the rule node to filter for Active Unacknowledged and Active Acknowledged statuses. This setup ensures that only alarms which are currently active, whether they have been acknowledged or not, are processed further.
You may download and import the rule chain.
check fields presence
Checks the presence of the specified fields in the message and/or metadata. Both message and metadata is typically a JSON object.
Configuration
- Message field names - list of field names that should be present in the message.
- Metadata field names - list of field names that should be present in the metadata.
- Check that all specified fields are present - if enabled, checks the presence of all fields, otherwise at least one.
Output connections
- True:
- If all specified fields are present when the Check that all specified fields are present toggle is enabled.
- If at least one specified field is present when the Check that all specified fields are present toggle is disabled.
- False:
- If any of the specified fields are missing when the Check that all specified fields are present toggle is enabled.
- If none of the specified fields are present when the Check that all specified fields are present toggle is disabled.
- Failure:
- If unexpected error occurred during message processing.
Usage example
See configuration screenshot.
check relation presence
Checks the presence of the relation between the message originator and other entities.
Configuration
- Direction - direction of the relation. Either From originator or To originator.
Note: The value corresponds to the direction of the relation from the originator to the specific/any entity or from the specific/any entity to the originator.
- Relation type - type of the relation. Default relation types are “Contains” and “Manages”, but you may create relation of any type.
- Check relation to specific entity - if enabled, checks the presence of the relation to a particular entity, otherwise to an entity that matches the direction and relation type criteria.
Note: The configuration to specify a particular entity appears, only if Check relation to specific entity is enabled.
Output connections
- True:
- If the specified relation to the specific entity is present when the Check relation to specific entity toggle is enabled.
- If the specified relation to any entity is present when the Check relation to specific entity toggle is disabled.
- False:
- If the specified relation to the specific entity is not present when the Check relation to specific entity toggle is enabled.
- If the specified relation to any entity is not present when the Check relation to specific entity toggle is disabled.
- Failure:
- If unexpected error occurred during message processing.
Usage example
Let’s assume you have temperature sensor inside the office and also inside the warehouses.
During the data processing, you may want to know either the sensor is located in the office or in the warehouse.
To achieve this one should provision the “OfficeToDevice” relation from the Office asset to the sensor device located in the office.
See configuration screenshot to learn how to configure the rule node for this specific case.
entity type filter
Filters incoming messages by type of message originator entity. Checks that the entity type of the incoming message originator matches one of the values specified in the filter.
Configuration
- Select entity types - list of entity types to filter messages: Device, Asset, User, etc.
Output connections
- True:
- If the message originator type matches one of the selected entity types.
- False:
- If the message originator type does not match any of the selected entity types.
- Failure:
- If unexpected error occurred during message processing.
Usage example
See configuration screenshot.
entity type switch
Routes incoming messages based on the entity type of the message originator.
Output
Note: The output connection of the rule node corresponds to the entity type of the message originator. For example: “Device”, “Asset”, “User”, etc.
Output connections
- “Device”/”Asset”/etc:
- If message is successfully routed with the relation type corresponding with the entity type.
- Failure:
- If unexpected error occurred during message processing.
Usage example
Let’s assume you have messages from different entities processed in one rule chain. You may want to split the message flow based on entity type. See below:
message type filter
Filters incoming messages based on one or more predefined or custom message types. Checks that the message type of the incoming message matches one of the values specified in the configuration.
Configuration
- Select message types - list of message types. Both predefined and custom message types are supported.
Output connections
- True:
- If the incoming message type matches one of the selected message types.
- False:
- If the incoming message type does not match any of the selected message types.
- Failure:
- If unexpected error occurred during message processing.
Usage example
See configuration screenshot.
message type switch
Routes incoming messages by the message type value. If the incoming message has known message type then it is sent to the corresponding chain, otherwise, message is sent to Other chain.
Note: The output connection of the rule node corresponds to the type of the message. For example: “Post Telemetry”, “Custom”, etc. If you use custom message types than you can route those messages via Other chain.
Output connections
- “Post telemetry”/Other:
- If message is successfully routed with the relation type corresponding with message type value.
- Failure:
- If unexpected error occurred during message processing.
Usage example
Let’s assume you have messages with different types processed in one rule chain. You may want to split the message flow based on message type. See below:
script
Evaluates boolean function using incoming message. The function may be written using TBEL(recommended) or plain JavaScript. Script function should return boolean value and accepts three parameters.
Configuration
TBEL/JavaScript - controls in which language the function will be written. It receives 3 input parameters:
msg
- is a message payload, typically a JSON object or array.metadata
- is a message metadata. Represented as a key-value map. Both keys and values are strings.msgType
- is a message type, string.
Output connections
- True:
- If the script evaluation returns
true
.
- If the script evaluation returns
- False:
- If the script evaluation returns
false
.
- If the script evaluation returns
- Failure:
- If the script evaluation fails.
Usage example
Message payload can be accessed via msg
variable. For example msg.temperature < 10;
Message metadata can be accessed via metadata
variable. For example metadata.deviceType === 'DHT11';
Message type can be accessed via msgType
variable. For example msgType === 'POST_TELEMETRY_REQUEST'
Full script example:
1
2
3
4
5
6
7
8
9
if(msgType === 'POST_TELEMETRY_REQUEST') {
if(metadata.deviceType === 'vehicle') {
return msg.humidity > 50;
} else if(metadata.deviceType === 'controller') {
return msg.temperature > 20 && msg.humidity > 60;
}
}
return false;
TBEL/JavaScript condition can be verified using test filter function.
You can see the real life examples, where this node is used, in the next tutorials:
switch
Routes incoming message to one or multiple output connections. Node executes configured TBEL(recommended) or JavaScript function that returns array of strings (connection names).
Configuration
TBEL/JavaScript - controls in which language the function will be written. It receives 3 input parameters:
msg
- is a message payload, typically a JSON object or array.metadata
- is a message metadata. Represented as a key-value map. Both keys and values are strings.msgType
- is a message type, string.
The script should return an array of node connection names where incoming message should be routed. If returned array is empty - message will not be routed to any node and discarded.
Note: The output connection of the rule node corresponds to the result of the script execution. For example: “Low Temperature Telemetry”, “Normal Temperature Telemetry”, “Idle State”, etc. See rule node connections for more details.
Output connections
- “Low Temperature Telemetry”/”Idle State”/etc:
- If message is successfully routed with the relation type corresponding with the result of the script execution.
- Failure:
- If unexpected error occurred during message processing.
Usage example
Message payload can be accessed via msg
variable. For example msg.temperature < 10;
Message metadata can be accessed via metadata
variable. For example metadata.customerName === 'John';
Message type can be accessed via msgType
variable. For example msgType === 'POST_TELEMETRY_REQUEST'
Full script example:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (msgType === 'POST_TELEMETRY_REQUEST') {
if (msg.temperature < 18) {
return ['Low Temperature Telemetry'];
} else {
return ['Normal Temperature Telemetry'];
}
} else if (msgType === 'POST_ATTRIBUTES_REQUEST') {
if (msg.currentState === 'IDLE') {
return ['Idle State', 'Update State Attribute'];
} else if (msg.currentState === 'RUNNING') {
return ['Running State', 'Update State Attribute'];
} else {
return ['Unknown State'];
}
}
return [];
TBEL/JavaScript condition can be verified using test filter function.
GPS geofencing filter
Filters incoming messages by GPS-based geofencing. Extracts latitude and longitude parameters from the incoming message and checks them according to configured perimeter.
Configuration: Coordinate field names
- Latitude field name - message field that contains location latitude.
- Longitude field name - message field that contains location longitude.
Note: Rule node tries to fetch the specified fields from the message. If they are not present, it will look them up in the message metadata.
Configuration: Geofence configuration
- Perimeter type - Polygon or Circle.
- Fetch perimeter information from metadata - if enabled, rule node will fetch the perimeter information from the message metadata.
Note: Useful if your perimeter is specific to the entity(device/asset/etc) and you store it as entity attribute.
- Perimeter key name - metadata key that stores perimeter information.
- For Polygon perimeter type:
- Polygon definition - string that contains array of coordinates in the following format:
[[lat1, lon1],[lat2, lon2],[lat3, lon3], ... , [latN, lonN]]
.
- Polygon definition - string that contains array of coordinates in the following format:
- For Circle perimeter type:
- Center latitude - latitude of the circle perimeter center;
- Center longitude - longitude of the circle perimeter center;
- Range - value of the circle perimeter range, double-precision floating-point value;
- Range units - one of: Meter, Kilometer, Foot, Mile, Nautical Mile.
- For Polygon perimeter type:
Note: Rule node will use default metadata key names, if the Fetch perimeter from message metadata is enabled and Perimeter key name is not configured. Default metadata key names for polygon perimeter type is “perimeter”. Default metadata key names for circle perimeter are: “centerLatitude”, “centerLongitude”, “range”, “rangeUnit”.
Structure of the circle perimeter definition (stored in server-side attribute, for example):
1
{"latitude": 48.198618758582384, "longitude": 24.65322245153503, "radius": 100.0, "radiusUnit": "METER"}
Available radius units: “METER”, “KILOMETER”, “FOOT”, “MILE”, “NAUTICAL_MILE”;
Output connections
- True:
- If coordinate from message inside the configured geofence.
- False:
- If coordinate from message outside the configured geofence.
- Failure:
- If the incoming message has no configured latitude or longitude key in message or message metadata.
- If missing perimeter definition.
- If unexpected error occurred during message processing.
Usage example: static circle perimeter
Let’s assume you would like to check that the location of the device is within 100 meters from the Ukraine’s Independence Monument, located in the center of Kyiv. The coordinates of the monument are the following:
- latitude:
50.4515652
; - longitude:
0.5236963
.
The configuration of the rule node is quite simple:
Usage example: static polygon perimeter
Let’s assume a simple livestock location monitoring use case. Let’s configure the rule node to monitor that the sheep is within area perimeter:
We will use static polygon coordinates of the farm field:
1
[[48.19736726399899, 24.652353415807884], [48.19800374220741, 24.65060461551745], [48.19918370897885, 24.65317953619048], [48.19849718616351, 24.65420950445969]]
You may test that rule node returns True if you submit the following coordinates in the message:
1
{"latitude": 48.198618758582384, "longitude": 24.65322245153503}
Usage example: dynamic circle/polygon perimeter
Let’s review more complex livestock location monitoring case, where you may have sheeps located in different farms. Let’s assume we have created two farms: “Farm A” and “Farm B”. Each livestock tracker device is related either to “Farm A” or “Farm B” asset.
We will configure server-side attribute called “perimeter” with the JSON value:
1
[[48.19736726399899, 24.652353415807884], [48.19800374220741, 24.65060461551745], [48.19918370897885, 24.65317953619048], [48.19849718616351, 24.65420950445969]]
The below rule chain will fetch the attribute from the related asset “Farm A” and use it in the geofencing node:
Rule node configuration is fairly simple. Please note that perimeter key name is without any prefix:
You may download and import the rule chain. Note that the “Sheep Tracker Generator” generator node will point to not existing device. You will need to provision device and asset to replicate the example.