Advanced Rules Mode
Rules in Advanced Mode
In advanced rules, you can write conditions and actions in javascript language.
In this javascript code, it is possible to call some defined functions to execute the same actions that you can do in easy mode. On the other hand, we also have some help functions. We will explain them below.
One of those helpers is documented outside this section, because connector functions are given the very
same object: logger, for writing TRACE, DEBUG, INFO, WARN and ERROR traces from a rule. See
JS Logging API for the reference, and
Functions Logger Service for the WebSocket that streams those
traces live, which serves rules and connector functions alike.
The rule code is given a flattened entity representation, adding the _received and _previous values to each datastream. It reaches the code as a global named entity, not as a parameter: rule code reads it directly, and helper functions that work on the current entity — such as isInsertAction() — take no argument because they already see it. The _received field is a simple object in provision datastreams and an array object in any other case.
We will use the following entity as an example:
entity = {
"provision.administration.channel": {
"_value": {
"_current": {
"value": "battery_channel",
"date": "2017-12-01T08:52:37.563Z",
"at": "2017-12-01T08:52:37.563Z"
},
"_previous": {
"value": "battery_channel",
"date": "2017-12-01T08:52:37.563Z",
"at": "2017-12-01T08:52:37.563Z"
}
}
},
"provision.administration.identifier": {
"_value": {
"_current": {
"value": "device_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.57Z",
"at": "2017-12-01T08:52:37.57Z"
},
"_previous": {
"value": "battery_organization",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.566Z",
"at": "2017-12-01T08:52:37.566Z"
}
}
},
"provision.administration.organization": {
"_value": {
"_current": {
"value": "battery_organization",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.566Z",
"at": "2017-12-01T08:52:37.566Z"
},
"_previous": {
"value": "battery_organization",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.566Z",
"at": "2017-12-01T08:52:37.566Z"
}
}
},
"provision.administration.plan": {
"_value": {
"_current": {
"value": "FLOW_RATE_100",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.565Z",
"at": "2017-12-01T08:52:37.565Z"
},
"_previous": {
"value": "FLOW_RATE_100",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.565Z",
"at": "2017-12-01T08:52:37.565Z"
}
}
},
"provision.administration.serviceGroup": {
"_value": {
"_current": {
"value": "emptyServiceGroup",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.561Z",
"at": "2017-12-01T08:52:37.561Z"
},
"_previous": {
"value": "emptyServiceGroup",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.561Z",
"at": "2017-12-01T08:52:37.561Z"
}
}
},
"provision.device.communicationModules[].identifier": [
{
"_index": {
"path": "provision.device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": "commsMod_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
},
"_previous": {
"value": "commsMod_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
}
],
"provision.device.communicationModules[].subscription.address": [
{
"_index": {
"path": "provision.device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": {
"type": "IPV4",
"value": "99.1.1.71",
"apn": "myapnprov.es"
},
"provType": "REFERENCE",
"date": "2017-12-01T08:52:37.624Z",
"at": "2017-12-01T08:52:37.624Z"
},
"_previous": {
"value": {
"type": "IPV4",
"value": "99.1.1.71",
"apn": "myapnprov.es"
},
"provType": "REFERENCE",
"date": "2017-12-01T08:52:37.624Z",
"at": "2017-12-01T08:52:37.624Z"
}
}
}
],
"provision.device.communicationModules[].subscription.identifier": [
{
"_index": {
"path": "provision.device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": "subscription_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.626Z",
"at": "2017-12-01T08:52:37.626Z"
},
"_previous": {
"value": "subscription_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.626Z",
"at": "2017-12-01T08:52:37.626Z"
}
}
}
],
"provision.device.identifier": {
"_value": {
"_current": {
"value": "device_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.636Z",
"at": "2017-12-01T08:52:37.636Z"
},
"_previous": {
"value": "device_battery_id",
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.636Z",
"at": "2017-12-01T08:52:37.636Z"
}
}
},
"provision.device.location": {
"_value": {
"_current": {
"value": {
"position": {
"type": "Point",
"coordinates": [
-3.7028,
40.41675
]
},
"postal": "28013"
},
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.64Z",
"at": "2017-12-01T08:52:37.64Z"
},
"_previous": {
"value": {
"position": {
"type": "Point",
"coordinates": [
-3.7028,
40.41675
]
},
"postal": "28013"
},
"provType": "MONITORING",
"date": "2017-12-01T08:52:37.64Z",
"at": "2017-12-01T08:52:37.64Z"
}
}
},
"resourceType": {
"_value": {
"_current": {
"value": "entity.device",
"provType": "IDENTIFIER",
"date": "2017-12-01T08:52:37.643Z",
"at": "2017-12-01T08:52:37.643Z"
},
"_previous": {
"value": "entity.device",
"provType": "IDENTIFIER",
"date": "2017-12-01T08:52:37.643Z",
"at": "2017-12-01T08:52:37.643Z"
}
}
},
"device.communicationModules[].identifier": [
{
"_index": {
"path": "device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": "commsMod_battery_id",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
},
"_previous": {
"value": "commsMod_battery_id",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
}
],
"device.communicationModules[].subscription.address": [
{
"_index": {
"path": "device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": {
"type": "IPV4",
"value": "99.1.1.71",
"apn": "myapn.es"
},
"date": "2017-12-01T08:52:37.624Z",
"at": "2017-12-01T08:52:37.624Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
},
"_previous": {
"value": {
"type": "IPV4",
"value": "99.1.1.71",
"apn": "myapn.es"
},
"date": "2017-12-01T08:52:37.624Z",
"at": "2017-12-01T08:52:37.624Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}
}
}
],
"device.communicationModules[].subscription.identifier": [
{
"_index": {
"path": "device.communicationModules[].identifier",
"value": {
"_current": {
"value": "commsMod_battery_id",
"date": "2017-12-01T08:52:37.577Z",
"at": "2017-12-01T08:52:37.577Z"
}
}
},
"_value": {
"_current": {
"value": "subscription_battery_id",
"date": "2017-12-01T08:52:37.626Z",
"at": "2017-12-01T08:52:37.626Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
},
"_previous": {
"value": "subscription_battery_id",
"date": "2017-12-01T08:52:37.626Z",
"at": "2017-12-01T08:52:37.626Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}
}
}
],
"device.identifier": {
"_value": {
"_received": [{
"value": "device_battery_id",
"date": "2017-12-01T08:52:37.636Z",
"at": "2017-12-01T08:52:37.636Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}],
"_current": {
"value": "device_battery_id",
"date": "2017-12-01T08:52:37.636Z",
"at": "2017-12-01T08:52:37.636Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
},
"_previous": {
"value": "device_battery_id",
"date": "2017-12-01T08:52:37.636Z",
"at": "2017-12-01T08:52:37.636Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}
}
},
"device.temperature.value": {
"_value": {
"_received": [{
"value": 25.3,
"date": "2017-12-01T08:52:37.64Z",
"at": "2017-12-01T08:52:37.64Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}],
"_current": {
"value": 25.3,
"date": "2017-12-01T08:52:37.64Z",
"at": "2017-12-01T08:52:37.64Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
},
"_previous": {
"value": 23.3,
"date": "2017-12-01T05:52:37.64Z",
"at": "2017-12-01T05:52:37.64Z",
"source": "DEVICE_OPENGATE_HTTP",
"sourceInfo": "IoT Data Message Received"
}
}
}
}