我创建了一个非常简单的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}");
}
答案 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}");
}