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

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

使用 Amazon IoT Events 监测物联网设备

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

创建输入

您必须通过一定的方法将设备和进程中的遥测数据导入Amazon IoT Events。若要执行此操作,请将消息作为输入发送到Amazon IoT Events。您可通过以下几种方式发送作为输入的消息:

  • 使用 BatchPutMessage 操作。

  • Amazon IoT Core规则引擎定义一个iotEvents规则操作。规则操作会将您输入的消息数据转发至 Amazon IoT Events。

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

  • 在Amazon IoT Events 检测程序模型的 onInputonExittransitionEvents事件中,定义一个iotEvents 操作。对于检测程序模型实例和操作启动事件信息,其将作为输入反馈至系统,名称为您指定的名称。

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

创建检测程序模型

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

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

监视设备或进程

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

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

将消息作为输入发送至您的检测程序模型

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

您如何知道在检测程序模型中需要什么状态?

若要确定您的检测程序模型应有的状态,首先应确定要采取何种操作。例如,如果您的汽车使用汽油,您可以在开始行程时查看燃油表,了解是否需要加油。这种情况下的操作是:告知驾驶员“去加油”。您的检测程序模型需要两种状态:“汽车不需要加油”和“汽车确实需要加油”。通常,您要为每个可能的操作定义一个状态,再为不需要的操作定义一个状态。这在操作本身比较复杂的情况下也有效。例如,您可能想查找并纳入有关最近加油站或最便宜油价的信息,但是当您发送“去加油”的消息时,您会这样做。

要决定接下来要进入哪种状态,请查看输入。输入包含决定您应该处于何种状态所需的信息。要创建一个输入,请在设备或进程发送的消息中选择一个或多个有助于您决定的字段。在此示例中,您需要一个输入,告诉您当前的燃油油位(“满油百分比”)。也许汽车正在向您发送多条不同的消息,每条消息都包含多个不同的字段。若要创建此输入,您必须选择该消息以及用于报告当前油量的字段。为简化操作,您可对行程长度(“到目的地的距离”)进行硬编码;您可使用平均行程长度。您将根据输入执行一些计算(该加注百分比可转换为多少加仑?平均行程长度是否大于您的行驶里程(考虑到您拥有的加仑数和平均“每加仑英里数”)。您可以执行上述计算,并在事件中发送消息。

目前您已有两个状态和一个输入。您需要事件处于第一种状态,即根据输入执行计算,并决定是否转至第二种状态。此为过渡事件(transitionEvents 在状态的 onInput 事件列表中。收到第一状态的输入 时,事件执行过渡到第二种状态,前提是满足事件的 condition。) 当到达第二种状态时,您会在进入该状态后立即发送消息。(您使用 onEnter 事件。进入第二种状态时,此事件将发送消息。无需等待其他输入。) 还有其他类型事件,但这个简单的示例就包含了所有必要内容。

其他类型的事件是 onExitonInput。收到输入并满足条件后,onInput 事件就会执行指定行动。当操作退出其当前状态并且满足条件时,onExit 事件将执行指定操作。

您是否漏掉了什么? 是的,如何回到第一种“车不需要加油”的状态? 油箱加满后,输入显示油箱已满。在第二种状态下,您需要过渡事件回到第一种状态,该状态在收到输入时发生(在第二个状态的 onInput: 事件中)。如果计算结果显示您的油量足以让您前往想去的地方,应过渡回第一种状态。

这就是基础理论。部分检测程序模型通过添加可反映重要输入(而不仅仅是可能的操作)的状态而变得更加复杂。例如,在追踪温度的检测程序模型中,可能有三种状态:“正常”状态、“过热”状态和“潜在问题”状态。当温度升高至一定水平以上,但还没有变得过热时,就会过渡到“潜在问题”状态。如果此温度保持 15 分钟以上,就不需要发送警报。如果在此之前温度恢复正常,检测程序将恢复至正常状态。为了谨慎起见,如果计时器到达十五分钟时限,检测程序会过渡到过热状态并发送警报。您可以使用变量和一组更复杂的事件条件,完成同样的操作。但实际上,使用另一种状态存储计算结果通常更容易。

您如何知道自己是需要检测程序的一个实例还是多个?

为决定需要的实例数量,请问自己“你想知道什么?” 假设您想知道今天的天气状况。下雨了吗(状态)? 您需要带雨伞(行动)吗? 您有一个报告温度的传感器、一个报告湿度的传感器,以及报告气压、风速、风向、降水量的其他传感器。但是您必须同时监视所有这些传感器,以确定天气状态(雨、雪、阴天、晴天)和要采取的适当行动(拿雨伞或涂防晒霜)。尽管传感器数量众多,但您仍需要通过检测程序实例监视天气状态,并告知自己要采取的行动。

但是,如果您是所在地区的天气预报员,您可能需要多个这样的传感器阵列实例,它们位于该地区的不同位置。每个位置的人都需要了解所在位置的天气情况。在此情况下,您需要有多个检测程序实例。每个位置的每个传感器报告的数据必须包含已指定为 key 字段的字段。该字段让Amazon IoT Events可以为该区域创建检测程序实例,然后在它到达时,继续将这些信息路由至该检测程序实例。不再担心头发淋湿或鼻子晒伤!

本质上,如果您要监视一种情况(一个进程或位置),则需要一个检测程序实例。如果您要监视多种情况(位置、进程),则需要多个检测程序实例。