Event detection utility

There was a question recently about event detection, which got me thinking about how I might go about doing this, in a simple way. It has been a long time since I sat down and actually wrote code, but I thought I would try to put my ideas into practice.

The result is a bit of code which reads the UDP packet stream that the R-Shake produces, picks out the ‘Z’ stream (vertical movement), where each packet of data contains the channel name, the time and the latest series of sensor values at 100Hz intervals.

Calculating a “running average” over the most recent 250 samples smooths out the value to give a fairly stable average. Then taking the running average of the last 10 data points removes data “spikes”.

Subtract the 10 sample “window” from the longer term “average” and look at the magnitude of the difference (ignore whether it is positive or negative) and we have a number we can use to compare to a trigger value (say 1000) if that trigger is exceeded, we just might have something worth looking at, so print a message saying something was detected, and the time/date.

Once triggered, it also checks for the existence of an executable file named “detect-alert”. If it exists, and is executable, that file is executed. It can do whatever you code it to do. E.g. send an email. It can be a shell script.

Once triggered, it is likely that every subsequent data point for some time is going to trigger again, so a pause of 30 seconds is started during which triggering is disabled.

This does not detect earthquakes. It detects movement events above some threshold. The time/date allows you to now fire up RS DataView or whatever your favorite tools is to go and see the event in detail.

Source, some documentation and compiled binaries can be found here:

https://drive.google.com/drive/folders/1fO8ZTN3y2BCgDBWTQk5Z7GMsmKoV8yLA?usp=sharing

1 Like

Hello Philip,

Thank you for this very interesting contribution! This kind of detection can be very useful to monitor literally everything that, as you said, creates a movement event above a set threshold.

I’m sure that the community will find it helpful for some of their projects.