我们将数据从IoT设备发送到Azure IoT Hub,并尝试将某种类型的消息传递给Azure功能 .
目前,我们是通过创建Azure Service Bus endpoints 并在IoTHub中创建消息路由来实现的 . 它按预期工作,Azure功能正确接收消息 .
现在,我们想要在Azure功能中从IoT Hub获取DeviceId,以及在Device Twin中定义的标签,我完全不知道如何做到这一点 .
如果我们使用 EventHubTrigger
,它似乎很简单,做这样的事情:
public static class Test
{
[FunctionName("TestQueueTrigger")]
public static void Run(
[EventHubTrigger("messages/events", Connection = "IoTHubConnection")]
EventData message,
Twin deviceTwin,
TraceWriter log)
{ ... }
}
但目前尚不清楚如何使用Service Bus触发器完成此操作 .
此外,我们希望将所有消息(独立于路由)存储到Azure Data Lake存储中,并且我对如何工作有点失落 .
1 回答
Azure IoT Hub设备到 Cloud 消息格式描述为here . 这种格式没有设备双胞胎属性 . 设备双胞胎存储在 Cloud 后端中,可以根据到特定 endpoints (内置和/或自定义 endpoints )的iot中心路由通知其更改 .
您的函数“TestQueueTrigger”的示例正在使用azure-functions-iothub-extension用于版本1.扩展输入绑定 Twin 允许使用扩展中的单独调用来获取设备twin:
基本上,此扩展也可用于ServiceBusTrigger绑定 . 请注意,此扩展只能用于功能版本1,因此我建议使用例如REST API Get Twin调用在设备中使用设备 .
Update
以下代码段显示了ServiceBusTrigger函数和REST API Get Twin调用的示例 .
run.csx文件:
function.json: