物联网中心事件转化为功能

IOT Hub Events into Function

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

我遇到的问题是发送到端点的消息。它不识别哪个设备或哪个模块,甚至不识别事件是什么。它是设备孪生更新、来自模块的消息、模块孪生更新——以及来自设备代码、模块代码的位置?我在这里错过了什么吗?我如何确定是哪个 device/module 等发送了事件?

屏幕截图显示了固定消息——基本上是获取事件消息并将其转储到日志(函数的默认构造函数)。

自带的罐装代码:

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}");

}

您应该更改您的函数以接受 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

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

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}");
}