Skip to content

Decision Rule

mathcoll edited this page Jul 4, 2021 · 16 revisions

Decision-Rule is the event-based engine that trigger Actions following matching Conditions. Engine is watching for fact matching conditions on payloads coming from Datapoints POST, and handle Action(s) according to rules.

Fact

The fact is actually the payload POSTed to Datapoints endpoint. This contains some attributes that can be used in the matching Conditions

  • datatype: This can take one of the following value: "integer", "time", "date", "float", "json", "geo", "string", "boolean" see Data-Types page
  • datetime
  • dtepoch: The timestamp
  • environment: Either "production" or "development" depending on your settings
  • flow: The Flow uuid-v4
  • latitude: (optional) latitude coming from your payload
  • longitude: (optional) longitude coming from your payload
  • object_id: (optional) Object uuid-v4 from the payload
  • text: (optional) Object text meta from the payload
  • user_id: Your own user id (uuid-v4)
  • value: The measurement/value from the payload

Conditions matching operators

Conditions supports combination by using all and any boolean operators. This give the ability for Rules to match multiple complex Conditions.

The following Condition will match when a datapoint is POSTed to flow_id cb518da8-xxxx-xxxx-xxxx-95b3b2bbfd8f and only when the environment is "development".

{
    "all": [
        {
            "fact": "environment",
            "operator": "equal",
            "value": "development"
        },
        {
            "fact": "flow",
            "operator": "equal",
            "value": "cb518da8-xxxx-xxxx-xxxx-95b3b2bbfd8f"
        }
    ]
}

Operators

Operators allows to compare the value of Facts and so determine when the Rule is matching Conditions.

  • isDayTime: will match only when data-timestamp according to geolocalization is during daylight.
{"all":[{"fact":"dtepoch","operator":"isDayTime","value":true}]}
  • lastEventGreaterThanInclusive: will match only when last event occurs more than the threashold value in seconds.
{"all":[{"fact":"value","operator":"lastEventGreaterThanInclusive","value":3600}]}
  • lastEventLessThanInclusive: will match only when last event occurs less than the threashold value in seconds.
{"all":[{"fact":"value","operator":"lastEventLessThanInclusive","value":3600}]}
  • anomalyGreaterThanInclusive: will match only when measured value is greater than predicted value.
{"all":[{"fact":"value","operator":"anomalyGreaterThanInclusive","value":1234}]}
  • anomalyLessThanInclusive: will match only when measured value is less than predicted value.
{"all":[{"fact":"value","operator":"anomalyLessThanInclusive","value":1234}]}
  • changeGreaterThanInclusive: will match only when the difference in time with previous value is greater than threashold value in seconds
{"all":[{"fact":"value","operator":"changeGreaterThanInclusive","value":1234}]}
  • changeLessThanInclusive: will match only when the difference between in time with previous value is less than threashold value in seconds
{"all":[{"fact":"value","operator":"changeLessThanInclusive","value":1234}]}
  • sentimentScoreGreaterThanInclusive: Compare the value (must be set as string) with the sentiment score
{"all":[{"fact":"value","operator":"sentimentScoreGreaterThanInclusive","value":2}]}
  • sentimentScoreLessThanInclusive: Compare the value (must be set as string) with the sentiment score
{"all":[{"fact":"value","operator":"sentimentScoreLessThanInclusive","value":-1}]}
  • distanceGreaterThan: Return true when the distance (in meters) from the object is farest from the lat/lon defined in payload position.
{"all":[{"fact":"value","operator":"distanceGreaterThan","value":100}]}
  • distanceLessThan: Return true when the distance (in meters) from the object is closer from the lat/lon defined in payload position.
{"all":[{"fact":"value","operator":"distanceLessThan","value":100}]}

Actions

  • mqttPublish
  • mqttCommand
  • email
  • httpWebhook
  • serial
  • sms: TODO
  • Ifttt: TODO
  • slackMessage: TODO
  • Please contact us by openning a new issue if any other Actions would be relevant to you.