如何从IoT中心接收特定设备发送的所有消息?

时间:2018-09-24 09:05:02

标签: c# azure-iot-hub

代码将消息发送到IoT中心,该中心将消息存储在BLOB存储中。

_device = DeviceClient.Create(_iotHubUri, new 
DeviceAuthenticationWithRegistrySymmetricKey(_deviceId, _deviceKey), 
TransportType.Amqp_Tcp_Only);

await _device.OpenAsync();

await _device.SendEventAsync(message);

我在Azure门户中看到该消息。

我不了解的是如何从设备已发送的IoT中心获取所有消息(C#)?

1 个答案:

答案 0 :(得分:2)

Azure IoT中心是用于设备中的实时物联网流管道的入口网关。可以从此物联网流管道中捕获(过滤)任何特定事件,在时间窗口中分析事件等。

基本上(从Azure IoT中心的角度来看),可以在两个地方过滤此流管道,例如:

  1. 具有内置的Azure IoT中心路由功能,可以根据路由查询字符串将设备事件路由到自定义终结点,请查看更多详细信息here。请注意,存在一些限制,例如路由的最大数量(100)和自定义端点的最大数量(10)。

  2. 作为流管道的使用者在Azure IoT中心之外。简单的方法是使用Azure EventHubTrigger函数,请在sample中查看更多详细信息。

以下代码片段显示了EventHubTrigger函数的示例:

    using System;

    public static void Run(string myIoTHubMessage, IDictionary<string, object> properties, IDictionary<string, object> systemproperties, TraceWriter log)
    {
       log.Info($"C# IoT Hub trigger function processed a message: \n\t{myIoTHubMessage}");

       log.Info($"\nSystemProperties:\n\t{string.Join("\n\t", systemproperties.Select(i => $"{i.Key}={i.Value}"))}");

       log.Info($"\nProperties:\n\t{string.Join("\n\t", properties.Select(i => $"{i.Key}={i.Value}"))}");
    }

function.json文件:

    {
      "bindings": [
       {
         "type": "eventHubTrigger",
         "name": "myIoTHubMessage",
         "direction": "in",
         "path": "myIoTHubName",
         "connection": "myIoTHubConnectionString",
         "consumerGroup": "function"
       }
     ],
     "disabled": false
   }

请注意,可以从 systemproperties [“ iothub-connection-device-id”]获取设备ID。