物联网中心事件转化为功能
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}");
}
我创建了一个非常简单的 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}");
}