【问题标题】:Why IoT Hub message is not decoded corretly in storage JSON blob?为什么 IoT 中心消息在存储 JSON blob 中未正确解码?
【发布时间】:2021-05-04 03:02:57
【问题描述】:

我正在使用提供的函数发送带有 Azure Sphere 开发工具包的字符串:

AzureIoT_SendMessage("Hello from sample App")

消息被发送到 IoT 中心,然后通过 JSON 编码路由到存储 Blob。如果我查看 blob 存储,我会得到以下信息:

{"EnqueuedTimeUtc":"2019-05-22T12:33:42.2320000Z","Properties":{},"SystemProperties":{"connectionDeviceId":"fbea*****************6d**********************9c0","connectionAuthMethod":"{\"scope\":\"device\",\"type\":\"x509Certificate\",\"issuer\":\"external\",\"acceptingIpFilterRule\":null}","connectionDeviceGenerationId":"63************22","enqueuedTime":"2019-05-22T12:33:42.2320000Z"},"Body":"SGVsbG8gZnJvbSBzYW1wbGUgQXBw"}

字段“body”根本不显示发送的字符串(“来自示例应用程序的Hello”),但它显示“SGVsbG8gZnJvbSBzYW1wbGUgQXBw”。为什么会这样?我该如何解决?

我发现,如果我将存储格式化为 AVRO(而不是 JSON),则字符串会正确呈现,但消息会(字面上)变成一个 blob,并且不能用于 powerBI 等流服务(例如)。但是,可以在 blob 中找到该消息以及其他一些混乱的东西(参见下图,默认字符串消息)

【问题讨论】:

  • SGVsbG8gZnJvbSBzYW1wbGUgQXBwHello from sample App 的 base64 编码值。
  • 我可以在powerBI中解码吗?
  • 刚刚浏览文档,您可以尝试先使用Text.ToBinary() (docs.microsoft.com/en-us/powerquery-m/text-tobinary) 通过指定Base64 编码将文本转换为二进制,然后使用Binary.ToText() (@987654323) 将其转换回文本@)?

标签: azure azure-storage azure-blob-storage


【解决方案1】:

请参阅 Microsoft 的 IoT 中心消息路由文档 - 特别是 Azure Storage 部分。它说“使用 JSON 编码时,必须在消息系统属性中将 contentType 设置为 application/json 并将 contentEncoding 设置为 UTF-8。这两个值都不区分大小写。如果未设置内容编码,则 IoT Hub 将以 base 64 编码格式编写消息。”

This blog post 进一步扩展主题,解释需要将内容类型和编码设置为特定的标头。

关于设置标题:

如果您使用的是 Azure IoT 设备 SDK,将消息标头设置为所需的属性非常简单。如果您使用的是第三方协议库,则可以使用此表查看标头在 IoT 中心支持的每个协议中的表现方式:

【讨论】:

    【解决方案2】:

    FWiW,使用 PowerBi 中的 PowerQuery (PQ),我能够解码由 Azure IoT Hub 发送到 blob 的 JSON 文件的 {body:xxxencoded_base64...} 部分。

    我在 PowerBI 中的步骤: - 连接到 blob 帐户,容器收集 JSON 文件。 - 在 PQ 中,单击初始二进制列上的双箭头展开 - 对我来说,Column10 是 {body:xxx} 列。使用 PQ 的 Replace Values 函数,我删除了前缀“{body:”和最后的“} - 只留下编码字符串。 - 在 PQ 中创建一个新列,使用此 M 代码:=Binary.FromText([Column10],BinaryEncoding.Base64) - 现在是一个新的二进制列,单击双箭头并展开二进制。它将显示解码后的 JSON 表,包含您的所有 IoT 遥测数据。
    HTHs

    【讨论】:

      【解决方案3】:

      另请参阅 IoT-Hub 的待处理功能请求: feature request

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多