物联网事件——从输入计算移动平均数

0

【以下的问题经过翻译处理】 你好,我在 IoT Events 中构建了一个检测器模型,它从环境传感器获取输入数据,如果传感器值超过阈值,则会通过 Lambda 发送电子邮件警报。然后设置一个计时器,如果传感器值在 24 小时后继续超过阈值,则会重新发送电子邮件警报。这个解决方案很简单并且效果很好。然而,问题在于传感器输入值可能会急剧上升。这可能会导致误报,因为在发送第一封电子邮件后,传感器输入值可能会迅速回落到阈值以下。

我想创建一个移动平均计算,回顾一段预定义的时间并计算环境传感器输入的平均值。例如,计算过去 12 小时内传感器值的平均值。如果移动平均值高于阈值,则发送初始电子邮件警报。是否可以在 IoT Events 中计算这样的移动平均值?

正如我提到的,电子邮件警报由 Lambda 函数生成,IoT 事件模型由 IoT 核心规则触发。

谢谢!

profile picture
EXPERTE
gefragt vor 6 Monaten11 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 嗨。虽然有可能实现,但这可能不是最好的解决方案。IoT Events没有一个很好的机制来存储N个样本的缓冲区,以计算N周期移动平均值。您可以使用setVariable动作和非常复杂的检测模型来实现它。相反,我建议您涉及其他AWS服务来预处理原始输入,或者建议您使用其他低通滤波技术,例如[指数平滑](https://en.wikipedia.org/wiki/Exponential_smoothing)。

指数平滑法仅需要当前输入和上一平滑值,因此在IoT Events中实现起来非常容易。您还可以考虑去抖动、某种异常值拒绝或各种变体或组合。

[HVAC示例](https://docs.aws.amazon.com/iotevents/latest/developerguide/iotevents-examples-hvac.html)似乎非常适合您的用例,并采用指数平滑(与异常/离群值拒绝结合使用):

{
  “eventName”:“calculateAverage”,
  “condition”:“$ input.temperatureInput.sensorData.temperature < $ variable.anomalousHigh && $ input.temperatureInput.sensorData.temperature > $ variable.anomalousLow”,
  “actions”:[
  {
    “setVariable”:{
    “variableName”:“averageTemperature”,
    “value”:“((($ variable.averageTemperature *($ variable.sensorCount-1))+ $ input.temperatureInput.sensorData.temperature)/ $ variable.sensorCount)”
    }
  }
  ]
}

在这种情况下,平滑常数为1 / $ variable.sensorCount。当然,您可以使用不同的平滑常数来调整您的过滤需求。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen