IoT 中心消息负载 - 如何定义应用程序属性和正文?
IoT Hub message payload - how to define Application Properties and Body?
在发送到 IoT 中心的消息中定义/创建应用程序属性需要什么?
我有一台演示设备,我在其中使用 C 客户端 SDK 创建消息,一切正常。这些传入消息可以根据 Application 属性 值进行路由,并且 EventData 参数在侦听物联网中心。
另一个设备也在向同一个 IoT 中心发送数据。此设备上的代码 运行 是我的客户直接开发的,但我怀疑他们使用了 SDK。相反,我假设他们自己创建了整个有效负载。
对我来说,即将到来的 JSON 看起来基本相同,就像使用 SDK 构建的一样。它包含 applicationProperties 的部分和 body[=35= 的部分].
{
"applicationProperties": {
"type": "telemetry",
"version": "1.0"
},
"body": {
"device_id": "sensor1",
"datetime": "2019-05-09T10:44:04Z",
"channels": {
"T": 24.42,
"H": 44.87,
"C": 1234
}
}
}
但事实证明,message 作为一个 whole 被视为 body.
那么为什么这条消息表现不同?需要做什么,在不使用 SDK 时告诉 IoT Hub 什么是应用程序属性以及什么是 真实 主体?
在直接使用 MQTT 协议的情况下,应用程序和系统属性是主题的一部分,请参见以下示例:
devices/Device1/messages/events/location=abcd&$.to=deviceABC
Visual Studio 2019 Cloud Explorer 收到的输出遥测消息:
[Monitor D2C Message] [5/9/2019 7:54:40 AM] Message received on partition 2:{"counter":17,"time":"2019-05-09T14:54:40.1984163Z","deviceId":"Device1","windSpeed":9.1991,"temperature":14.88,"humidity":81.66}
Application properties:
location: abcd
System properties:
iothub-connection-device-id: Device1
iothub-connection-auth-method: {"scope":"device","type":"sas","issuer":"iothub","acceptingIpFilterRule":null}
iothub-connection-auth-generation-id: 636550937738557556
iothub-enqueuedtime: 5/9/2019 2:54:38 PM
iothub-message-source: Telemetry
x-opt-sequence-number: 13069
x-opt-offset: 5989280
x-opt-enqueued-time: 5/9/2019 2:54:38 PM
EnqueuedTimeUtc: 5/9/2019 2:54:38 PM
SequenceNumber: 13069
Offset: 5989280
to: deviceABC
在使用 Https 等无连接协议的情况下,应用程序和系统属性是 headers 的一部分。以下示例显示了 MQTT 协议的上述属性:
iothub-app-location:abcd
iothub-to:deviceABC
在发送到 IoT 中心的消息中定义/创建应用程序属性需要什么?
我有一台演示设备,我在其中使用 C 客户端 SDK 创建消息,一切正常。这些传入消息可以根据 Application 属性 值进行路由,并且 EventData 参数在侦听物联网中心。
另一个设备也在向同一个 IoT 中心发送数据。此设备上的代码 运行 是我的客户直接开发的,但我怀疑他们使用了 SDK。相反,我假设他们自己创建了整个有效负载。
对我来说,即将到来的 JSON 看起来基本相同,就像使用 SDK 构建的一样。它包含 applicationProperties 的部分和 body[=35= 的部分].
{
"applicationProperties": {
"type": "telemetry",
"version": "1.0"
},
"body": {
"device_id": "sensor1",
"datetime": "2019-05-09T10:44:04Z",
"channels": {
"T": 24.42,
"H": 44.87,
"C": 1234
}
}
}
但事实证明,message 作为一个 whole 被视为 body.
那么为什么这条消息表现不同?需要做什么,在不使用 SDK 时告诉 IoT Hub 什么是应用程序属性以及什么是 真实 主体?
在直接使用 MQTT 协议的情况下,应用程序和系统属性是主题的一部分,请参见以下示例:
devices/Device1/messages/events/location=abcd&$.to=deviceABC
Visual Studio 2019 Cloud Explorer 收到的输出遥测消息:
[Monitor D2C Message] [5/9/2019 7:54:40 AM] Message received on partition 2:{"counter":17,"time":"2019-05-09T14:54:40.1984163Z","deviceId":"Device1","windSpeed":9.1991,"temperature":14.88,"humidity":81.66}
Application properties:
location: abcd
System properties:
iothub-connection-device-id: Device1
iothub-connection-auth-method: {"scope":"device","type":"sas","issuer":"iothub","acceptingIpFilterRule":null}
iothub-connection-auth-generation-id: 636550937738557556
iothub-enqueuedtime: 5/9/2019 2:54:38 PM
iothub-message-source: Telemetry
x-opt-sequence-number: 13069
x-opt-offset: 5989280
x-opt-enqueued-time: 5/9/2019 2:54:38 PM
EnqueuedTimeUtc: 5/9/2019 2:54:38 PM
SequenceNumber: 13069
Offset: 5989280
to: deviceABC
在使用 Https 等无连接协议的情况下,应用程序和系统属性是 headers 的一部分。以下示例显示了 MQTT 协议的上述属性:
iothub-app-location:abcd
iothub-to:deviceABC