【问题标题】:Azure IoT Hub: HTTP Device-to-Cloud Messages without SDK?Azure IoT 中心:没有 SDK 的 HTTP 设备到云消息?
【发布时间】:2020-07-27 17:45:01
【问题描述】:

我正在使用闪存空间非常有限的 32 位微控制器(用 C 编写的程序代码)与蜂窝模块通信。我有一个带有 IoT 中心的 Azure 帐户设置,我想将一些设备到云的消息发送到我的 IoT 中心。我已经测试并确认了与其他服务器的 HTTP 和 HTTPS 通信。但是,我找不到任何地方指定发送设备到云消息所需的 HTTP 标头是什么。谁能提供所需 HTTP 消息格式的描述(HTTP 起始行、所需的 HTTP 标头和 HTTP 标头值)?

我找到了适用于 C 的 Azure SDK,但即使打开了所有优化选项,它也为我的微控制器占用了太多的代码空间。我已经尝试按照 SDK 中的代码来了解如何构建 HTTP 消息,但我似乎遗漏了一些内容。我只有两三个要发送的设备到云消息,所以我假设如果我知道标头是什么,就不需要太多代码来生成设备到云消息。

我拥有的蜂窝模块正在处理用于相互 TLS 身份验证的 X.509 证书。假设这是有效的。对于这个问题,我只关心为 Azure IoT 设备到云消息找到所需的 HTTP 消息格式。

编辑: 根据评论的建议,我最终被带到了这个页面: https://docs.microsoft.com/en-us/rest/api/iothub/device/senddeviceevent

使用建议的 HTTP POST(替换了我的设备细节),我现在收到 401 错误 (IotHubUnauthorizedAccess)。我以为我理解了身份验证应该如何工作,但我想我错了。

我的 IoT 设备有一个对称密钥。我以为我应该包含一个格式为:

Authorization:SharedAccessKey=<my_primary_key>

但这不起作用。我的 HTTP 正文很简单:

{"deviceID":<my_IoT_Device_ID>}

我应该在哪里包含对称密钥信息,它的格式是什么?

【问题讨论】:

  • 我们非常乐意帮助您在设备上启用 SDK。您能否通过详细说明您的设备的具体规格和您的要求(仅 D2C?)来帮助我们?如果您可以提交问题here,那就太好了。我们正在收集有关 SDK 占用空间的反馈,并希望针对受限设备进一步优化它。
  • 本文档提供了有关如何在不使用 Azure IoT 设备 SDK 的情况下直接将 MQTT 协议与 IoTHub 一起使用的指南:docs.microsoft.com/en-us/azure/iot-hub/… 如果您发现任何缺失或需要改进的地方,请在文档中记录问题页面。
  • 您需要生成 SAS 令牌(基于您的设备密钥),但它不是设备密钥本身。请参阅github.com/Microsoft/vscode-azure-iot-toolkit/wiki/… 和这里的方法:github.com/kvaes/…
  • 身份验证是否需要 SAS 令牌?我按照上面链接中的步骤操作,使用 Postman,我能够使用 Azure CLI 在 Azure 门户上生成的 SAS 令牌成功发送 D2C 消息。我认为我的微控制器无法计算 SAS 令牌。

标签: c azure http azure-iot-hub


【解决方案1】:

经过反复试验,我们发现这比我们想象的要容易得多。如果您使用 X.509 证书进行客户端身份验证,则不需要在 HTTP 消息内容中包含任何内容来指定您的身份验证。使用 X.509 证书进行身份验证的 Azure 设备到云消息的最低要求是:

POST /devices/<id>/messages/events?api-version=2018-06-30 HTTP/1.1
Host:<fully-qualified-iothubname>.azure-devices.net
Content-Length:<number-of-bytes-in-the-JSON-body>

{"deviceID":"<id>",<your-JSON-formatted-custom-d2c-message-data>}

其中&lt;id&gt; 是 Azure IoT 中心列出的设备 ID,&lt;fully-qualified-iothubname&gt; 是 IoT 中心名称。如果您想这样做而不是使用 Content-Length 标头,我相信 Azure 支持分块编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多