2016-08-31 11 views
2

Azure IoTハブを扱うためのMicrosoft documentationの一部では、単一のTLS接続(AMQPプロトコルを使用)で複数のデバイスの通信を多重化することが可能であることが説明されていますデバイスは、IoTハブと通信するのに十分強力なローカルハブデバイスと通信します。この多重化をどのように実装するのかの例はありますか? DeviceClient libraryはこれをサポートしていないようです(私は間違っているかもしれませんが)。このシナリオでは、IoT Gateway SDKについても言及していますが、これを使用して多重化を設定する方法の明確な例は見つかりませんでした。他のマテリアルへのアドバイスや参照は感謝します。Azure IoTハブAMQP通信多重化

答えて

2

私は最近、そのようなアーキテクチャを構築しました。おそらく参考になるでしょう。 プレイヤー - フィールドゲートウェイ - Iotハブとの通信を処理し、エッジセンサーからのデータを受信するのに十分な強度のローカルハブ。 エッジセンサー - Iotハブに直接接続できないデバイスで、フィールドゲートウェイ(Zwave、Zigbee ...)に接続するための通信プロトコルを実装しています。 Iotハブ - フィールドゲートウェイとハブ間のD2CとC2Dを処理します。 バックエンドサーバー - Iotハブからデータを受信します。

エッジセンサーはテレメトリをフィールドゲートウェイに送信します。フィールドゲートウェイは、IOTハブへの接続を維持し、IOTハブが知っている唯一のデバイスはフィールドゲートウェイです。 エッジセンサーからフィールドゲートウェイで受信されている各テレメトリには、メッセージペイロードに一意のIDが含まれています。 メッセージがIot Hubで受信されている場合、Iot HubはField Gatewayについてのみ認識します。しかし、メッセージがバックエンドによって処理されているときは、ペイロードから一意のIDを取得するため、テレメトリを送信した正しいデバイスがどれかを知ることができます。 1つの接続にすべて乗っている複数のデバイスがあります。

希望すると助かります。

+0

これは非常に興味深いアプローチです。合理的な解決策のようだ。 –

1

Azure IoT Gatewayはまだ例がないかもしれないベータ版だと思います。ここで

はもう少し洞察力を提供するページのカップルです:アズールのIoTゲートウェイSDK (2016年4月掲載)

のIoTハブのための追加のプロトコルをサポートする

https://azure.microsoft.com/en-gb/blog/introducing-the-azure-iot-gateway-sdk-beta/

を紹介

(2016年8月更新)

https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-protocol-gateway/最後に

GitHubの上の実際のベータ版SDKが、あなたはすでにこの持っていると仮定します。私はこれの出力を知ることに興味があると思い

https://github.com/Azure/azure-iot-gateway-sdk

を。私が今まで遭遇したほとんどのアーキテクチャでは、ハブと直接通信するデバイスがあるため、ゲートウェイの要件はありませんでした。まだです。

2

C#DeviceClientは、単一のAmqp/TLS接続を使用して複数のデバイスを多重化することをサポートしています。ここでは、3つのデバイスを1つのAmqp接続を使用してIotHubに接続するサンプルを示します。

   var devices = new Device[3]; 
      for(int i = 0; i < 3; i++) 
      { 
       devices[i] = new Device(); 
       devices[i].Id = Guid.NewGuid().ToString(); 
       devices[i] = await registryManager.RegisterDeviceAsync(device); 
      } 

      var deviceClients = new DeviceClient[3]; 
      for(int i = 0; i < 3; i++) 
      {       
       var auth = new DeviceAuthenticationWithRegistrySymmetricKey(devices[i].Id, devices[i].Authentication.SymmetricKey.PrimaryKey); 
       var deviceClients[i] = DeviceClient.Create(
        <IotHubHostName>, 
        auth, 
        new ITransportSettings[] 
        { 
         new AmqpTransportSettings(Client.TransportType.Amqp_Tcp_Only) 
         { 
          AmqpConnectionPoolSettings = new AmqpConnectionPoolSettings() 
          { 
           Pooling = true, 
           MaxPoolSize = 1 
          } 
         } 
        }); 
       await deviceClients[i].OpenAsync() 
       } 
関連する問題