IOT Hub事件进入功能

时间:2018-03-19 15:26:19

标签: azure azure-functions azure-iot-hub

我创建了一个非常简单的Azure功能,它连接到IoT Hub以捕获内置事件端点(使用自定义使用者组,但这不是问题)。

我遇到的问题是发送到端点的消息。它没有识别哪个设备或哪个模块,甚至是什么事件。它是设备双胞胎更新,来自模块的消息,模块 - 双胞胎更新 - 以及 - 来自设备代码,模块代码?我在这里错过了什么吗?如何确定发送事件的设备/模块等?

屏幕截图显示了固定消息 - 基本上将事件消息转储并记录到日志中(函数的默认构造函数)。

随附的固定代码:

using System;
using System.Web.Http;
using Microsoft.Azure.Devices;
using Microsoft.Azure.Devices.Shared;

public static void Run(string myIoTHubMessage, TraceWriter log) {

    log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");

}

function integrate

function log

2 个答案:

答案 0 :(得分:1)

您应该将函数更改为接受EventData作为输入参数而不是字符串。这样您就可以访问事件元数据,例如来自SystemProperties的设备ID:

public static async Task Run(EventData myIoTHubMessage, TraceWriter log)
{
    var deviceId = myIoTHubMessage.SystemProperties["iothub-connection-device-id"];
    log.Info($"C# IoT Hub trigger function processed a message from  {deviceId}");
}

有关系统属性的列表,请参阅this link

答案 1 :(得分:1)

另一个选项(没有额外的程序集):

using System;

public static void Run(string myIoTHubMessage, IDictionary<string, object> properties, TraceWriter log)
{
   log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
   foreach (var prop in properties)
      log.Info($"\t{prop.Key} = {prop.Value}");
}