Skip to main content

云上如何对Device-to-cloud消息加强处理

分类:  Azure物联网 标签:  #Azure #IoT Hub # #入门 #指南 发布于: 2023-06-13 22:58:21

针对Device-to-cloud的消息加强处理主要是指Azure IoT Hub提供的一个功能: Message enrichments, 这个功能主要在消息被传递到Azure IoT Hub,但是还没有转发到定义的终结点之前,Azure IoT Hub利用一些附加的信息对消息进行一定的标识,这个过程就称为Message enrichments

在上述的定义中我们有提到Azure IoT Hub利用附加的信息对消息进行标识,那么这里提及的附加信息可以是:

  • 用户自定义的字符串常量。
  • IoT Hub的名字,使用变量$iothubname来引用
  • Device Twin中引入的变量。

用户在定义Message Enrichments时,是如何使用这些附件信息的呢?我们定义一个Message Enrichments主要需要定义三个要素:

  • 给这个Message Enrichments起一个名字。
  • 给这个Message Enrichments定义一个值,这些附加信息就放置在这些值里。
  • Message Enrichments要应用在哪个消息终结点上,例如我们上一章自己创建的Azure Storage终结点。

最终这些信息是如何加强消息的呢? Azure IoT Hub会将这些消息放置到消息的应用属性里,例如:

{
  "EnqueuedTimeUtc":"2019-05-10T06:06:32.7220000Z",
  "Properties":
  {
    "level":"storage",
    "myIotHub":"{your hub name}",
    "DeviceLocation":"Plant 43",
    "customerID":"6ce345b8-1e4a-411e-9398-d34587459a3a"
  },
  "SystemProperties":
  {
    "connectionDeviceId":"Contoso-Test-Device",
    "connectionAuthMethod":"{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
    "connectionDeviceGenerationId":"636930642531278483",
    "enqueuedTime":"2019-05-10T06:06:32.7220000Z"
  },"Body":"eyJkZXZpY2VJZCI6IkNvbnRvc28tVGVzdC1EZXZpY2UiLCJ0ZW1wZXJhdHVyZSI6MjkuMjMyMDE2ODQ4MDQyNjE1LCJodW1pZGl0eSI6NjQuMzA1MzQ5NjkyODQ0NDg3LCJwb2ludEluZm8iOiJUaGlzIGlzIGEgc3RvcmFnZSBtZXNzYWdlLiJ9"
}

上述这个例子中:myIotHubDeviceLocationCustomerID即是通过Message EnrichmentsAzure IoT Hub自动加进应用属性中。

我们来演示一下如何设置Message Enrichments

注意
开始之前,请按照文章先创建一个消息路由以及自定义总结点指向Azure Storage

我们本例中演示所有可能的值。

  • 静态字符串数据
  • IoT Hub的名字动态引用
  • Device Twin中的值引用。

使用Azure Portal找到IoT Hub的资源,从左侧菜单里找到Hub Setting -> Message routing:


然后从列表里选择自定义的终结点(也可以应用于内置终结点)


然后依次输入Message Enrichments的定义:


如上图:

  • 定义了一个名字myIotHub,值为$iothubname动态值的Message enrichments
  • 定义了一个静态字符串的Message enrichments, 名字为customerID, 其值就是一个静态值
  • 定义了一个名字为DeviceLocation, 其值是引用了device twin的动态值:$twin.tags.location

按照上述配置结果之后,生成消息会在应用属性中添加下述值:

  {
    "myIotHub":"{your hub name}",
    "DeviceLocation":"Plant 43",
    "customerID":"6ce345b8-1e4a-411e-9398-d34587459a3a"
  },