使用Amazon IoT Events监控您的 IoT 设备 - Amazon IoT Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用Amazon IoT Events监控您的 IoT 设备

您可以使用Amazon IoT Events来监控您的设备或进程,并根据重大事件采取措施。为此,请按照以下基本步骤操作:

创建输入

您的设备和进程必须具有将遥测数据导入Amazon IoT Events。您可以通过将消息发送为inputs到Amazon IoT Events。您可以通过多种方式将消息作为输入发送:

  • 使用BatchPutMessageoperation.

  • 写入 Amazon IoT Core 规则操作(对于 ) Amazon IoT Core 规则引擎,该引擎将您的消息数据转发到Amazon IoT Events。这通过名称标识输入。

  • InAmazon IoT Analytics,请使用CreateDataset操作以创建数据集contentDeliveryRules。这些规则指定Amazon IoT Events输入,其中自动发送数据集内容。

  • 定义一个IotEvents在Amazon IoT Events探测器模型的onInputonExit或者transitionEventsevent. 有关检测器模型实例和触发操作的事件的信息将以您指定名称的输入形式返回到系统。

在您的设备开始以此方式发送数据前,您必须定义一个或多个输入。为此,请为每个输入指定一个名称,并指定输入监视传入消息数据中的哪些字段。Amazon IoT Events以 JSON 有效载荷的形式从许多来源接收其输入。每个输入可以单独操作,也可以与其他输入结合使用,以检测更复杂的事件。

创建检测器模型

定义一个探测器模型(您的设备或进程的模型)使用状态。对于每种状态,您定义条件(布尔值)逻辑,该逻辑评估传入的输入以检测重要事件。检测到事件后,它可以使用其他Amazon服务。您可以定义其他事件,这些事件将在进入或退出某个状态以及满足某个条件(可选)时触发动作。

在本教程中,当模型进入或退出特定状态时,您将发送 Amazon SNS 消息作为操作。

监控设备或进程

如果您正在监视多个设备或进程,请在每个输入中指定一个字段,用于标识输入来源的特定设备或进程。请参阅key字段中的CreateDetectorModel。) 当一个新设备被识别时(在输入字段中看到一个新值,由key),则会创建一个检测器。(每个探测器都是探测器模型的一个实例。) 然后,新检测器继续响应来自该设备的输入,直到其检测器型号被更新或删除。

如果您正在监视单个进程(即使多个设备或子进程正在发送输入),则不会指定唯一的标识key字段。在这种情况下,当第一个输入到达时,会创建单个检测器(实例)。

将消息作为输入发送到您的探测器模型

有多种方法可以从设备或进程发送消息作为输入到Amazon IoT Events检测器,这些检测器不需要您对邮件执行其他格式化。在本教程中,您将使用Amazon IoT控制台编写Amazon IoT Events操作规则 Amazon IoT Core 规则引擎,该引擎将您的消息数据转发到Amazon IoT Events。为此,您可以通过名称标识输入。然后,您继续使用Amazon IoT控制台生成一些消息,这些消息作为输入转发到Amazon IoT Events。

您如何知道探测器型号中需要哪些状态?

要确定您的探测器型号应具有哪些状态,首先决定您可以采取哪些操作。例如,如果您的汽车使用汽油运行,当您开始旅行时,您可以查看燃油表,看看是否需要加油。在这里,你有一个动作:告诉司机 “去得到气”。您的探测器型号需要两种状态:“汽车不需要燃料” 和 “汽车确实需要燃料”。通常,您希望为每个可能的操作定义一个状态,另外还要为不需要执行任何操作时再定义一个状态。即使动作本身更复杂,这也有效。例如,您可能希望查找并包含有关在哪里找到最近的加油站或最便宜的价格的信息,但是当您发送消息 “去得到煤气” 时,您会这样做。

要确定接下来要进入哪个状态,请查看输入。输入包含决定应处于何种状态所需的信息。要创建输入,请在设备或进程发送的消息中选择一个或多个可帮助您决定的字段。在此示例中,您需要一个输入来告诉您当前燃油水平(“满百分比”)。也许你的车向你发送几个不同的消息,每个消息都有几个不同的字段。要创建此输入,您必须选择报告当前气体表水平的消息和字段。您将要走的行程长度(“到目的地的距离”)可以进行硬编码以保持简单;您可以使用您的平均行程长度。您将根据输入进行一些计算(该百分比翻译成多少加仑? 是平均行程长度大于您可以行驶的里程,考虑到您拥有的加仑和您的平均 “每加仑里程”)。您可以执行这些计算并在事件

到目前为止,你有两个状态和一个输入。您需要一个处于第一个状态的事件,该事件基于输入执行计算并决定是否转到第二个状态。这是一个过渡事件。 (transitionEvents处于一个州的onInput事件列表。在 上接收input在第一种状态下,event执行转换设置为第二个状态,如果事件的condition已满足。) 当您到达第二个状态时,您将在进入状态后立即发送邮件。您可以使用onEnterevent. 进入第二个状态时,此事件将发送消息。 无需等待另一个输入到达。) 还有其他类型的事件,但这就是你需要一个简单的例子。

其他类型的事件包括onExitonInput。一旦接收到输入并满足条件,就会发出onInput事件执行指定的操作。当操作退出其当前状态并且条件满足时,onExit事件执行指定的操作。

你错过了什么吗? 是的,你怎么回到第一个 “汽车不需要燃料” 状态? 填满油箱后,输入内容会显示一个完整的油箱。在第二个状态下,您需要一个转换事件回到收到输入时发生的第一个状态(在第二个状态的onInput:事件)。它应该转换回第一个状态,如果它的计算显示你现在有足够的气体让你去的地方。

这就是基础知识 某些检测器模型通过添加反映重要输入的状态而不仅仅是可能的操作而变得更加复杂。例如,在跟踪温度的检测器模型中可能有三种状态:“正常” 状态、“太热” 状态和 “潜在问题” 状态。当温度升高于某个水平,但尚未变得太热时,您将转换为潜在问题状态。除非警报保持在此温度下超过 15 分钟,否则您不希望发送警报。如果温度在此之前恢复到正常状态,检测器将转换回正常状态。如果计时器过期,检测器将转换为过热状态并发送警报,只是为了谨慎。你可以使用变量和一组更复杂的事件条件来做同样的事情。但通常使用另一种状态来实际上存储计算结果会更容易。

你怎么知道你是需要一个探测器的实例还是几个?

要确定您需要多少个实例,请问自己 “您有兴趣了解什么?” 假设你要知道今天的天气是什么样的。是下雨(状态)吗? 你需要采取伞(动作)吗? 您可以有一个报告温度的传感器,另一个报告湿度的传感器,以及报告气压、风速和方向以及降水量的其他传感器。但是,你必须监测所有这些传感器在一起,以确定天气状态(雨,雪,阴天,阳光)和适当的行动采取(抓住伞或应用防晒霜)。尽管传感器数量众多,但您仍需要一个探测器实例来监控天气状态并通知您要采取的操作。

但是,如果您是您所在区域的天气预报员,您可能会有多个此类传感器阵列的实例,这些实例位于整个区域的不同位置。每个位置的人都需要知道该位置的天气情况。在这种情况下,您将需要多个探测器实例。每个位置的每个传感器报告的数据必须包含一个字段,该字段指定为key字段。此字段启用Amazon IoT Events为该区域创建一个检测器实例,然后在该检测器实例继续到达时继续将此信息路由到该检测器实例。没有更多的破坏的头发或晒黑的鼻子!

实质上,如果您有一个情况(一个进程或一个位置)要监控,则需要一个检测器实例。如果您有许多需要监控的情况(位置、进程),则需要多个检测器实例。