Azure IoT 中心:没有 SDK 的 HTTP Device-to-Cloud 消息?
Azure IoT Hub: HTTP Device-to-Cloud Messages without SDK?
我正在使用 32 位微控制器(用 C 语言编写的程序代码),其闪存非常有限 space,它正在与蜂窝模块进行通信。我有一个带有 IoT 中心的 Azure 帐户设置,我想向我的 IoT 中心发送一些 device-to-cloud 消息。我已经测试并确认了与其他服务器的 HTTP 和 HTTPS 通信。但是,我找不到指定发送 device-to-cloud 消息所需的 HTTP headers 的任何地方。谁能提供所需 HTTP 消息格式的描述(HTTP 起始行、所需的 HTTP headers 和 HTTP header 值)?
我找到了适用于 C 的 Azure SDK,但即使启用了所有优化选项,它也会为我的微控制器占用太多代码space。我已经尝试按照 SDK 中的代码了解如何构建 HTTP 消息,但我似乎遗漏了一些部分。我只发送了两个或三个 device-to-cloud 消息,因此我假设如果我知道 header 是什么,则生成 device-to-cloud 消息不需要太多代码。
我的蜂窝模块正在处理用于双向 TLS 身份验证的 X.509 证书。假设这是有效的。对于这个问题,我只关心为 Azure IoT device-to-cloud 消息找到所需的 HTTP 消息格式。
编辑:
根据评论的建议,我最终被带到了这个页面:
https://docs.microsoft.com/en-us/rest/api/iothub/device/senddeviceevent
使用建议的 HTTP POST(替换了我的设备细节),我现在收到 401 错误 (IotHubUnauthorizedAccess)。我以为我理解身份验证应该如何工作,但我想我错了。
我的物联网设备有一个对称密钥。我以为我应该包括一个 header 格式为:
Authorization:SharedAccessKey=<my_primary_key>
但这不起作用。我的 HTTP body 很简单:
{"deviceID":<my_IoT_Device_ID>}
我应该在哪里包含对称密钥信息,它的格式是什么?
经过反复试验,我们发现这比我们想象的要容易得多。如果您使用 X.509 证书进行客户端身份验证,则无需在 HTTP 消息内容中包含任何内容来指定您的身份验证。使用 X.509 证书进行身份验证的 Azure device-to-cloud 消息的最低要求是:
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>}
其中 <id>
是 Azure IoT 中心列出的设备 ID,<fully-qualified-iothubname>
是 IoT 中心名称。我相信 Azure 支持分块编码,如果你想这样做而不是使用 Content-Length
header.
我正在使用 32 位微控制器(用 C 语言编写的程序代码),其闪存非常有限 space,它正在与蜂窝模块进行通信。我有一个带有 IoT 中心的 Azure 帐户设置,我想向我的 IoT 中心发送一些 device-to-cloud 消息。我已经测试并确认了与其他服务器的 HTTP 和 HTTPS 通信。但是,我找不到指定发送 device-to-cloud 消息所需的 HTTP headers 的任何地方。谁能提供所需 HTTP 消息格式的描述(HTTP 起始行、所需的 HTTP headers 和 HTTP header 值)?
我找到了适用于 C 的 Azure SDK,但即使启用了所有优化选项,它也会为我的微控制器占用太多代码space。我已经尝试按照 SDK 中的代码了解如何构建 HTTP 消息,但我似乎遗漏了一些部分。我只发送了两个或三个 device-to-cloud 消息,因此我假设如果我知道 header 是什么,则生成 device-to-cloud 消息不需要太多代码。
我的蜂窝模块正在处理用于双向 TLS 身份验证的 X.509 证书。假设这是有效的。对于这个问题,我只关心为 Azure IoT device-to-cloud 消息找到所需的 HTTP 消息格式。
编辑: 根据评论的建议,我最终被带到了这个页面: https://docs.microsoft.com/en-us/rest/api/iothub/device/senddeviceevent
使用建议的 HTTP POST(替换了我的设备细节),我现在收到 401 错误 (IotHubUnauthorizedAccess)。我以为我理解身份验证应该如何工作,但我想我错了。
我的物联网设备有一个对称密钥。我以为我应该包括一个 header 格式为:
Authorization:SharedAccessKey=<my_primary_key>
但这不起作用。我的 HTTP body 很简单:
{"deviceID":<my_IoT_Device_ID>}
我应该在哪里包含对称密钥信息,它的格式是什么?
经过反复试验,我们发现这比我们想象的要容易得多。如果您使用 X.509 证书进行客户端身份验证,则无需在 HTTP 消息内容中包含任何内容来指定您的身份验证。使用 X.509 证书进行身份验证的 Azure device-to-cloud 消息的最低要求是:
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>}
其中 <id>
是 Azure IoT 中心列出的设备 ID,<fully-qualified-iothubname>
是 IoT 中心名称。我相信 Azure 支持分块编码,如果你想这样做而不是使用 Content-Length
header.