Merged - Custom Logic Blocks
This page describes the Custom Logic Blocks in more detail
Merged into Custom Logic
Custom Logic Blocks allow the implementation of more complex business logic with the akenza Rule Engine. They enable simple stateless and stateful operations upon rule trigger using custom scripts in Javascript. Custom Logic Blocks are created on organization-level and are therefore available in all workspaces and can be selected when creating a rule.
This webinar explains how to create Custom Rules:
A set of examples for logic blocks can be found here:
A Custom Logic Block consists of a definition of:
Inputs: the dynamic data that is evaluated during script execution (sensor data)
Parameters: constant values like thresholds
A script used to run the logic
Inputs
Inputs specify the input data sources for a Custom Logic Block and contain the dynamic data of a device. At least one input needs to be defined in order to create a Custom Logic Block.
Field
Description
Input display/ label name
The input name
Input description
An optional description
Input variable name
A variable name used to access the value inside the script
Default topic
An optional default topic that is preselected when using the logic block
Default data key
An optional default data key that is preselected when using the logic block
Parameters
Parameters represent static properties that are available during script runtime.
Field
Description
Parameter display/label name
The parameter name
Parameter variable name
A variable name used to access the parameter inside the script
Parameter Type
The data type of the parameter; Numerical, String, or Boolean
Default value
A default value for the parameter
Rule logic script
The Rule logic script defines the custom logic that is evaluated during rule runs.
function consume(event) {
var temperature = event.inputs.temperature;
var threshold = event.properties.tempThreshold;
if (temperature < threshold) {
emit("action", {
message: `it is too cold: the temperature is ${temperature}°C`,
});
}
}Once a Custom Logic Block is saved, it can be selected as a logic block when creating a rule. Inputs need to be linked to an input device or tag and parameters need to be set.
Further, one or more actions need to be defined. The templating syntax can be used to access the results of a Custom Logic Block {{result.*}}. For example, {{result.message}} for the script shown above.
Custom logic timer
There is also the possibility to emit a timer inside the custom logic block.
When emitting the timer event, two params can be specified
runAtrequired, a date which needs to be at least 15 seconds in the futuremetaoptional, object which can contain any values
The meta object will be available when the rule is triggered by that timer and can be accessed at timer.meta during script run. This can provide useful information for the next timed run or help uniquely identify timers when running them.
function consume(event) {
let time = new Date();
time = new Date(time.setDate(time.getDate() + 1));
time = time.setHours(0,0,0,0);
emit("timer", {runAt: new Date(time), meta: {"foo": "bar"}});
}Event Object
The Custom Logic Block script is invoked with the event object as param. It contains the following properties & strucutre:
inputsobject, contains the values of the specified variablesstateobject, contains the user defined rule statetypestring, indicates how the rule was invoked (eithertimeroruplink)dataSourcesobject, see data source propertiesdeviceobject, see device propertiespropertiesobject, contains the user defined properties of the custom logic block
Note: if type has the value of timer certain properties will behave differently:
the variable values of the
inputsobject will be nulldataSourceswill be an empty objectdevicewill be undefined
Device Properties
The following properties of a device can be accessed when using template syntax.
Note: The prefix device. is always required in order to access sub properties.
namethe device namedescriptionthe device descriptionintegrationIdthe integrationId of the device (only for LoRaWAN devices)workspaceIdthe workspaceId of the devicedataFlowIdthe data flow id of the deviceconnectivitythe connectivity of the deviceidthe akenza device iddeviceIdthe unique device id
Data Source Properties
The following properties of a data source can be accessed when using template syntax.
To access a specific data source, use dataSources.X where X is the number of the data source as specified in the rule (starting at 1).
Some properties can be null in certain circumstances (e.g. the correlationId or the device) if e.g. the rule was triggered by a timer event or the data source is set to access the last sample.
Note: The prefix dataSources.X. is always required in order to access sub properties.
correlationIdthe correlation id of the data source (only available if the data source was triggering the flow)devicethe complete device object. See Device Properties for sub propertiesdeviceIdthe unique device idakenzaDeviceIdthe akenza device idtopicthe topic of the sampletimestampthe timestamp of the sampledata.*access any values of the sample.meta.*access any values of the meta objectuplinkMetathe complete uplink meta objecttriggerboolean, indicates whether the data source has triggered the uplinkdeviceInputboolean, indicates if the data source is a devicetagInputboolean, indicates if the data source is a tag
The values related to the sample (namely correlationId, topic, timestamp, data, meta and uplinkMeta) are resolved based on which data source triggered the rule evalution. If the data source is triggering (trigger = true) the rule, the values will be the one from the triggering uplink. Otherwise the values will correlate the most recent stored sample.
Uplink Meta Properties
The following properties of uplink meta data can be accessed when using template syntax
Note: The prefix uplinkMeta. is always required in order to access sub properties.
dataReceivedthe ISO-8601 timestamp when the data was recievedbytesReceivedthe number of bytes received in the uplink requestprocessingStartthe ISO-8601 timestamp when the processing was startedscriptRunUplinkStartthe ISO-8601 timestamp when script run was startedscriptRunUplinkEndthe ISO-8601 timestamp when script run endedprocessingEndthe ISO-8601 timestamp when the processing endedoutputProducedthe ISO-8601 timestamp when all output were produceduplinkDurationthe ISO-8601 duration of the whole uplink flowprocessingDurationthe IOS-8601 duration of the processingscriptRunningDurationthe ISO-8601 duration of the script run
Last updated
Was this helpful?