Use case 1: Motion detection during the night

Description

We assume that in a factory, several motion sensors are installed in specific areas where usually, there is no activity during the night.
A new detection can be suspicious and a guard must check the place.
The motion sensor publishes a Data message in Live Objects using MQTT protocol each time there is detection with a minimum of 10 sec interval between two detections.
The night time is from 20h to 06h (24h UTC time).

Live Objects features

For this use case, we will use:

  • Alarming: a Simple Event Processing rule associated with a Firing rule

  • Notifications: Triggers & Actions with a SMS notification

Step 1: identifying the Data message format

The Data message sent by the device follows this format:

Data message published by device
{
   "location": {
      "provider": "gps",
      "lon": 2.99616,
      "lat": 50.21142
   },
   "model": "demoDevGuide",
   "value": {
      "motionSensorDetection": 1,
       "type":"alert",
       "typeId":4,
       "version": "1.2.4"
   },
   "timestamp": "2019-09-06T08:58:10.953Z",
   "tags": [
      "last_version","areaSouth"
   ]
}

Details about Data message format: see Data model section

The Data message after internal Live Objects enrichment follows this format:

Data message after enrichment by Live Objects
{
  "metadata": {
    "connector": "mqtt",
    "source": "urn:lo:nsid:mqtt:myTest",
    "transformation": {
      "published": {
        "location": {
          "provider": "gps",
          "lon": 2.99616,
          "lat": 50.21142
        }
      }
    },
    "group": {
      "path": "/",
      "id": "root"
    },
    "network": {
      "mqtt": {
        "clientId": "urn:lo:nsid:mqtt:myTest"
      }
    }
  },
  "streamId": "urn:lo:nsid:mqtt:myTest",
  "created": "2021-06-17T14:21:34.036Z",
  "extra": {},
  "location": {
    "provider": "gps",
    "alt": null,
    "accuracy": null,
    "lon": 2.99616,
    "lat": 50.21142
  },
  "model": "demoDevGuide",
  "id": "60cb5a6e2b9f5a61388d3fb7",
  "value": {
    "motionSensorDetection": 1,
    "typeId": 4,
    "type": "alert",
    "version": "1.2.4"
  },
  "timestamp": "2021-06-17T14:21:34.026Z",
  "tags": [
    "last_version",
    "areaSouth"
  ]
}

Details about Live Objects enricher: see Data enrichment process

Step 2: set the matching rule

The matching rule is using the additional “get_utc_hours” jsonLogic operator to extract the hour value of the timestamp.

Matching rule
{
   "name":"matching rule with time condition",
   "enabled":true,
   "dataPredicate":{
      "and":[
         {
            "==":[
               {
                  "var":"value.motionSensorDetection"
               },
               1
            ]
         },
         {
            "or":[
               {
                  ">=":[
                     {
                        "get_utc_hours":[
                           {
                              "var":"timestamp"
                           }
                        ]
                     },
                     20
                  ]
               },
               {
                  "<":[
                     {
                        "get_utc_hours":[
                           {
                              "var":"timestamp"
                           }
                        ]
                     },
                     6
                  ]
               }
            ]
         }
      ]
   }
}

Details about additional operators: see Additional operators

Step 3: set the firing rule

As the minimum interval is 10 sec between two data messages in case of motion detection, to avoid SMS spam, we define here a firing rule with SLEEP mode in order to repeat the notification with a larger time interval. Here the sleep duration is set to 2 minutes.

Firing rule
{
   "name":"firing rule with sleep mode to avoid flooding",
   "enabled":true,
   "matchingRuleIds":[
      "my_matching_rule_id"
   ],
   "aggregationKeys":["metadata.source"],
   "firingType":"SLEEP",
   "sleepDuration":"PT2M"
}

Step 4: set the notification using triggers and actions policy

Here you can find an action policy with the trigger type "matchingFired" linked with the ruleId = the firingRuleId of the rule created in the previous step.

Action policy
{
   "name":"notification by sms for a motion detection during the night",
   "enabled":true,
   "triggers":{
      "matchingFired":{
         "version":1,
         "filter":{
            "ruleIds":[
               "my_firing_rule_id"
            ]
         }
      }
   },
   "actions":{
      "sms":[
         {
            "destinationPhoneNumbers":[
               "+33612345667"
            ],
            "contentTemplate":"Motion detection! Sensor: {{matchingContext.data.metadata.network.mqtt.clientId}} at {{matchingContext.data.timestamp}}"
         }
      ]
   }
}

Details about Triggers and actions feature: see Notification

Test it! With this data message from the device: detection at 23:58 UTC:

Data message matching the conditions
{
   "location": {
      "provider": "gps",
      "lon": 2.99616,
      "lat": 50.21142
   },
   "model": "demoDevGuide",
   "value": {
      "motionSensorDetection": 1,
       "type":"alert",
       "typeId":4,
       "version": "1.2.4"
   },
   "timestamp": "2019-09-06T23:58:10.953Z",
   "tags": [
      "last_version","areaSouth"
   ]
}

A SMS is sent:

"Motion detection! Sensor: 1234qfre at 2019-09-06T23:58:10.953Z"