2017-12-19 9 views
0

IoT Edgeゲートウェイの新しいプレビュー版では、1つのモジュールがInvokeDeviceMethodAsyncを介して別のモジュールでメソッドを呼び出すことができます。これは、デバイスIDとモジュールIDをパラメータとして取り、おそらくEdgeに通話のルーティング方法を伝えます。同じゲートウェイ内で呼び出す場合、device idパラメータはIoT Edgeハブ内のゲートウェイインスタンスのデバイスIDである必要があります。モジュールIDは、IoTエッジからゲートウェイにプッシュダウンされたモジュールのインスタンスのモジュールIDでなければなりません。それらのIDをハードコードするのは簡単ですが、明らかに望ましくないでしょう。ハードコードされた値をロード時にモジュールによって読み取られる設定ファイルに置くことができます。これは問題は少ないが理想的ではありません。文法的に必要な値をプロで見つけたり読み込んだりする方法はありますか?デプロイメントのjson configsは、デプロイメント時にインスタンスIDを取り込むための変数置換などをサポートしていますか?IoT Edgeモジュールインスタンスが別のモジュールのメソッドを呼び出すために必要なIDを検出するための推奨される方法は何ですか?

+0

モジュールの「構成」と考えることができますか?もしそうであれば、モジュールのツインにこの情報を設定してデプロイメントを作成することができます。その後、モジュールはツイートを取得するために 'GetTwinAsync'を呼び出すので、メソッド呼び出しをどこに指示するかを知ることができます。 Docker経由でコンテナに環境変数を注入する方法もあります。 – Raj

答えて

0

IoTエッジデバイスのモジュールによるメソッド呼び出しの一般的なシナリオは、IoTエッジゲートウェイデバイスに接続された同じデバイスまたはダウンストリームデバイス上の他のモジュールからテレメトリメッセージを受信し、メッセージの内容に基づいてテレメトリメッセージを受信することです送信者モジュールまたはデバイス上のメソッドを呼び出して、何らかの変更を示すことを決定します(たとえば、デバイスが過熱していることを示すメッセージがある場合、モジュールはファンの速度を遅くするメソッドなどを呼び出します)。

このようなシナリオでは、モジュールはメッセージ自体から送信者モジュールのデバイスIDとモジュールIDを取得できます。メッセージオブジェクトには、この情報を提供する次のプロパティがあります。 ConnectionDeviceId ConnectionModuleId

+0

私が解決しようとしているシナリオは、要求メッセージを作成することでそのようにすることができますが、受信側でメソッドを呼び出すのが自然だと感じています。たとえば、デバイスが接続するたびにデータベースからの情報を必要とする10個のモジュールがある場合は、必要なクエリメソッドを定義するDBモジュールを作成することが理にかなっています。その後、各モジュールは、DBモジュール上でGetInformationを呼び出していくらかの情報を必要としました。私のシナリオでは、私はデバイスIDがゲートウェイIDを指すようにモジュール間で同じだと思うが、私はまだターゲットモジュールのインスタンスIDが必要になります –

1

私は現在好ましい方法はないと思います。あなたは基本的に3つのオプションがありますが、私はそれらの2つについて言及します。あなたはモジュールを定義すると、私は個人的にオプション1を選択するであろうモジュール

にプロパティとしてモジュールツイン経由でプッシュすることができますモジュール

  • の展開マニフェストのcreateOptionsセクションでEnvを使用して

    1. 展開マニフェストの作成時に-idを指定すると、環境変数を特定のモジュールに注入することもできます。マニフェストのオプションを作成します。

      モジュール通信がいくつかのドメインルールに基づいて変更されますが、私のプロジェクトでこれが真であるユースケースを見つけることができなかった場合、方法2を選択します。

      私はコメントとして回答しますが、評判はありません。

  • 関連する問題