创建规则以处理 LoRaWAN 设备消息 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

创建规则以处理 LoRaWAN 设备消息

Amazon IoT 规则会将设备消息发送到其他服务。Amazon IoT 规则还可以处理从 LoRaWAN 设备接收的二进制消息,以便将消息转换为其他格式,从而更加便于其它服务使用。

Amazon IoT Core for LoRaWAN 目标将无线设备与规则相关联,该规则将处理要发送到其它服务的设备消息数据。该规则会在 Amazon IoT Core for LoRaWAN 收到数据时立即开始处理设备数据。Amazon IoT Core for LoRaWAN 目标可由消息具有相同数据格式并将数据发送到同一服务的所有设备共享。

Amazon IoT 规则如何处理设备消息

Amazon IoT 规则处理设备消息数据的方式取决于将接收数据的服务、设备消息数据的格式以及该服务所需的数据格式。通常,该规则会调用 Amazon Lambda 函数将设备的消息数据转换为服务所需的格式,然后将结果发送到服务。

以下示意图显示了在消息数据在从无线设备移动到Amazon服务的过程中是如何确保安全以及如何处理的。


                            图像显示了 Amazon IoT Core for LoRaWAN 数据是如何从无线设备传递到 Amazon IoT 和其它服务的。
  1. LoRaWAN 无线设备在传输二进制消息之前会使用 AES128 CTR 模式对其进行加密。

  2. Amazon IoT Core for LoRaWAN 会对二进制消息进行解密,并将解密的二进制消息负载编码为 base64 字符串。

  3. 生成的 base64 编码消息将作为二进制消息负载(未格式化为 JSON 文档的消息负载)发送到分配给设备的任务中所描述的 Amazon IoT 规则。

  4. Amazon IoT 规则将消息数据定向到规则配置中描述的服务。

从无线设备接收的加密二进制负载不会被 Amazon IoT Core for LoRaWAN 修改或解释。解密的二进制消息负载仅编码为 base64 字符串。要使服务访问二进制消息负载中的数据元素,必须通过规则调用的函数从负载中解析数据元素。base64 编码的消息负载是一个 ASCII 字符串,因此可以将其存储以便稍后进行解析。

为 LoRaWAN 创建规则

Amazon IoT Core for LoRaWAN 使用 Amazon IoT 规则来安全地将设备消息直接发送到其它Amazon服务,而无需使用消息代理。通过从摄取路径中删除消息代理,可以降低成本并优化数据流。

Amazon IoT Core for LoRaWAN 规则如要将设备消息发送到其它 Amazon 服务,则需要 Amazon IoT Core for LoRaWAN 目标,并要将 Amazon IoT 规则分配给该目标。Amazon IoT 规则必须包含 SQL 查询语句和至少一个规则操作。

通常,Amazon IoT 规则查询语句由以下内容组成:

  • 一个 SQL SELECT 子句,用于从消息负载中选择数据并设置其格式

  • 标识要使用的消息的主题筛选条件(规则查询语句中的 FROM 对象)

  • 可选条件语句(SQL WHERE 子句),用于指定执行操作的条件

以下是规则查询语句示例:

SELECT temperature FROM iot/topic' WHERE temperature > 50

构建 Amazon IoT 规则来处理来自 LoRaWAN 设备的负载时,则不必将 FROM 子句指定为规则查询对象的一部分。规则查询语句必须具有 SQL SELECT 子句,并且可以包含或不包含 WHERE 子句。如果查询语句使用 FROM 子句,该子句会被忽略。

以下是一个可以处理来自 LoRaWan 设备的负载的规则查询语句示例:

SELECT WirelessDeviceId, WirelessMetadata.LoRaWAN.FPort as FPort, WirelessMetadata.LoRaWAN.DevEui as DevEui, PayloadData

在此示例中,PayloadData 是由您的 LoRaWAN 设备发送的 base64 编码二进制负载。

下面是一个示例规则查询语句,它可以对传入的有效负载执行二进制解码,并将其转换为不同的格式,如 JSON:

SELECT WirelessDeviceId, WirelessMetadata.LoRaWAN.FPort as FPort, WirelessMetadata.LoRaWAN.DevEui as DevEui, aws_lambda("arn:aws:lambda:<region>:<account>:function:<name>", { "PayloadData":PayloadData, "Fport": WirelessMetadata.LoRaWAN.FPort }) as decodingoutput

有关使用 SELECT AND WHERE 子句的更多信息,请参阅 Amazon IoT SQL 参考

有关 Amazon IoT 规则以及如何创建和使用该规则的信息,请参阅 Amazon IoT 规则创建将设备数据路由到其他服务的 Amazon IoT规则

有关创建和使用 Amazon IoT Core for LoRaWAN 目标的信息,请参阅 将目标添加到适用于 LoRaWAN 的 Amazon IoT Core

有关在规则中使用二进制消息负载的信息,请参阅 使用二进制负载

有关用于在传输过程中保护消息负载的数据安全和加密技术的详细信息,请参阅 Amazon IoT Core 中的数据保护

有关显示 IoT 规则二进制解码和实现示例的参考体系架构,请参阅 GitHub 上的 Amazon IoT Core for LoRaWAN 解决方案示例