使用二进制负载 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用二进制负载

如果您发送原始二进制负载,Amazon IoT Core 通过 S3 操作将其向下游路由到 Amazon S3 存储桶。然后,原始二进制负载编码为 base64 并附加到 JSON。当将消息负载作为原始二进制数据(而不是 JSON 对象)进行处理时,可以使用 * 运算符在 SELECT 子句中对其进行引用。

二进制负载示例

当您使用 * 将消息负载作为原始二进制数据进行引用时,您可以向规则添加数据。如果您有空的或 JSON 有效负载,生成的有效负载可以使用规则添加数据。下面显示了支持 SELECT 子句的示例。

  • 对于二进制有效负载,您可以将以下 SELECT 子句仅与 * 一起使用。

    • SELECT * FROM 'topic/subtopic'
    • SELECT * FROM 'topic/subtopic' WHERE timestamp() % 12 = 0
  • 您还可以添加数据并使用以下 SELECT 子句。

    • SELECT *, principal() as principal, timestamp() as time FROM 'topic/subtopic'
    • SELECT encode(*, 'base64') AS data, timestamp() AS ts FROM 'topic/subtopic'
  • 您还可以使用带二进制负载的 SELECT 子句。

    • 以下是指在 WHERE 子句中的 device_type

      SELECT * FROM 'topic/subtopic' WHERE device_type = 'thermostat'
    • 还支持以下内容。

      { "sql": "SELECT * FROM 'topic/subtopic'" "actions": [{ "republish": { "topic":"device/${device_id}" } }] }

以下规则操作不支持二进制负载,因此您必须对它们进行解码。

  • 一些规则操作不支持二进制负载输入(例如,Lambda 操作),您必须解码二进制负载。如果 Lambda 规则操作是 base64 编码并在 JSON 负载中,则可以接收二进制数据。为此,您可以将规则更改如下:

    SELECT encode(*, 'base64') AS data FROM 'my_topic'
  • SQL 语句不支持字符串作为输入。要将字符串输入转换为 JSON,您可以运行以下命令。

    SELECT decode(encode(*, 'base64'), 'base64') AS payload FROM 'topic'