Azure Logic应用:从IoT中心消息中读取遥测数据作为动态内容

问题描述 投票:1回答:1

我正在使用Webhook通过IoT事件和事件网格将遥测消息路由到Logic Apps。逻辑应用程序使您可以输入示例JSON消息,然后使用动态内容将信息添加到我正在发送的电子邮件警报中(O365:发送电子邮件V2)

我可以包括“ iothub-connection-device-id”之类的系统属性,但是当我尝试选择temeletry数据时,出现以下错误:

InvalidTemplate。无法在行“ 1”和列“ 1680”的输入“ Send_an_email_(V2)”中处理模板语言表达式:'模板语言表达式'items('For_each')?['data']?['body']无法评估?['windingTemp1']',因为无法选择属性'windingTemp1'。类型'String'的值不支持属性选择。请参阅https://aka.ms/logicexpressions了解详细用法。'

当我查看webhook连接器的原始输出时,它显示以下消息,但遥测点显然不存在。我希望看到他们在“体”的属性,而是存在仅仅是字符串:“eyJ3aW5kaW5nVGVtcDEiOjg2LjYzOTYxNzk4MjYxODMzLCJ3aW5kaW5nVGVtcDIiOjc4LjQ1MDc4NTgwMjQyMTUyLCJ3aW5kaW5nVGVtcDMiOjg1LjUzMDYxMDY5OTQ1MzY1LCJMb2FkQSI6MjAyOS44NDgyMTg4ODYxMTEsIkxvYWRCIjoyMDQwLjgxMDk4OTg0MDMzMzgsIkxvYWRWIjoyMDA0LjYxMTkzMjMyNTQ2MTgsIk9pbFRlbXAiOjk5LjA2MjMyNjU2MTY4ODU4fQ ==”

寻求帮助以确定可能导致此情况的原因以及如何正确获取遥测数据,以便我可以在电子邮件警报中动态地灌输它。

谢谢!

{
"headers": {
    "Connection": "Keep-Alive",
    "Accept-Encoding": "gzip,deflate",
    "Host": "prod-24.northeurope.logic.azure.com",
    "aeg-subscription-name": "TEMPALERT",
    "aeg-delivery-count": "1",
    "aeg-data-version": "",
    "aeg-metadata-version": "1",
    "aeg-event-type": "Notification",
    "Content-Length": "1017",
    "Content-Type": "application/json; charset=utf-8"
},
"body": [
    {
        "id": "c767fb91-3806-324c-ec3c-XXXXXXXXXX",
        "topic": "/SUBSCRIPTIONS/XXXXXXXXXXXX",
        "subject": "devices/Device-001",
        "eventType": "Microsoft.Devices.DeviceTelemetry",
        "data": {
            "properties": {
                "TempAlarm": "true"
            },
            "systemProperties": {
                "iothub-connection-device-id": "Device-001",
                "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
                "iothub-connection-auth-generation-id": "637264713410XXXX",
                "iothub-enqueuedtime": "2020-06-01T23:05:58.3130000Z",
                "iothub-message-source": "Telemetry"
            },
            "body": "eyJ3aW5kaW5nVGVtcDEiOjg2LjYzOTYxNzk4MjYxODMzLCJ3aW5kaW5nVGVtcDIiOjc4LjQ1MDc4NTgwMjQyMTUyLCJ3aW5kaW5nVGVtcDMiOjg1LjUzMDYxMDY5OTQ1MzY1LCJMb2FkQSI6MjAyOS44NDgyMTg4ODYxMTEsIkxvYWRCIjoyMDQwLjgxMDk4OTg0MDMzMzgsIkxvYWRWIjoyMDA0LjYxMTkzMjMyNTQ2MTgsIk9pbFRlbXAiOjk5LjA2MjMyNjU2MTY4ODU4fQ=="
        },
        "dataVersion": "",
        "metadataVersion": "1",
        "eventTime": "2020-06-01T23:05:58.313Z"
    }
]

}

这里是与触发器一起使用的示例输入:

[{
  "id": "9af86784-8d40-fe2g-8b2a-bab65e106785",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>", 
  "subject": "devices/LogicAppTestDevice", 
  "eventType": "Microsoft.Devices.DeviceTelemetry",
  "eventTime": "2019-01-07T20:58:30.48Z",
  "data": {        
      "body": {            
          "windingTemp1": 95.62818310718433       
      },
        "properties": {            
          "Status": "Active"        
        },
        "systemProperties": {            
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "d1",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "123455432199234570",
            "iothub-enqueuedtime": "2019-01-07T20:58:30.48Z",
            "iothub-message-source": "Telemetry"        
        }    
    },
  "dataVersion": "",
  "metadataVersion": "1"
}]
iot azure-logic-apps azure-iot-hub
1个回答
0
投票

总结性评论以帮助其他有相同问题的人。

您提供的主体是Base64编码的,可以使用Convert.FromBase64String(String)方法对其进行解码。

Convert.FromBase64String(String)

有关更多详细信息,您可以参考此byte[] newBytes = Convert.FromBase64String(body);

© www.soinside.com 2019 - 2024. All rights reserved.