IoT中心消息有效负载-如何定义应用程序属性和主体?

时间:2019-05-09 10:53:37

标签: azure-iot-hub

在发送到IoT中心的消息中定义/创建应用程序属性需要什么?

我有一个演示设备,可以在其中使用 C客户端SDK 创建消息,并且一切正常。可以基于应用程序属性值路由这些传入消息,并且在侦听IoT中心的Azure函数中正确设置了 EventData 参数。

另一台设备也在将数据发送到同一IoT中心。我的客户直接在此设备上运行代码,但是我怀疑他们是否使用了SDK。相反,我假设他们自己创建了整个有效负载。

对我来说,传入的JSON 看起来基本相同,就像使用SDK开发的一样。它包含用于 applicationProperties 的部分和用于 body 的部分。

{
  "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
    }
  }
}

但是事实证明,将消息作为整个视为正文

那么为什么此消息表现不同?在不使用SDK时,要做什么以告诉IoT中心什么是应用程序属性以及什么是 real 正文?

1 个答案:

答案 0 :(得分:0)

如果直接使用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之类的无连接协议时,应用程序和系统属性是标头的一部分。以下示例显示了MQTT协议的上述属性:

iothub-app-location:abcd
iothub-to:deviceABC