クライアントデバイス通信をテストする - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クライアントデバイス通信をテストする

クライアントデバイスでは AWS IoT Device SDK を使用して、コアデバイスを検出して接続し、通信することができます。AWS IoT Device SDK の Greengrass 検出クライアントを使用することで、クライアントデバイスが接続可能なコアデバイスに関する情報を返す [Greengrass discovery API] (Greengrass 検出 API) を使用できます。API レスポンスには、接続する MQTT ブローカエンドポイントと、各コアデバイスの身元を確認するために使用する証明書が含まれます。その後、クライアントデバイスは、コアデバイスに正常に接続されるまで、各エンドポイントを試すことができます。

クライアントデバイスは、関連付けられているコアデバイスのみを検出できます。クライアントデバイスとコアデバイス間の通信をテストする前に、クライアントデバイスをコアデバイスに関連付ける必要があります。詳細については、「クライアントデバイスを関連付ける」を参照してください。

Greengrass 検出 API は、指定したコアデバイス MQTT ブローカーエンドポイントを返します。[IP detector component] (IP ディテクターコンポーネント) を使用して、これらのエンドポイントを管理することも、各コアデバイスに対して手動で管理することもできます。詳細については、「コアデバイスのエンドポイントを管理」を参照してください。

注記

Greengrass discovery API を使用するには、クライアントデバイスに greengrass:Discover アクセス許可が必要です。詳細については、「クライアントデバイス向けの最低限の AWS IoT ポリシー」を参照してください。

AWS IoT Device SDK は、複数のプログラミング言語で利用できます。詳細については、「AWS IoT Core デベロッパーガイド」の「AWS IoT デバイス SDK」を参照してください。

通信をテストする (Python)

このセクションでは、AWS IoT Device SDK v2 for Python の Greengrass 検出サンプルを使用して、クライアントデバイスとコアデバイス間の通信をテストします。

重要

AWS IoT Device SDK v2 for Python を使用するには、デバイスは Python 3.6 以降を実行する必要があります。

通信をテストするには (AWS IoT Device SDK v2 for Python)
  1. AWS IoT Device SDK v2 for Python をクライアントデバイスとして接続する AWS IoT モノにダウンロードしてインストールします。

    クライアントデバイスで、次の操作を行います。

    1. AWS IoT Device SDK v2 for Python のリポジトリをクローンしてダウンロードします。

      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
    2. AWS IoT Device SDK v2 for Python をインストールします。

      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
  2. AWS IoT Device SDK v2 for Python のサンプルフォルダに移動します。

    cd aws-iot-device-sdk-python-v2/samples
  3. サンプルの Greengrass 検出アプリケーションを実行します。このアプリケーションでは、クライアントデバイスのモノの名前、使用する MQTT トピックとメッセージ、および接続を認証して保護する証明書を指定する引数が必要です。次の例では、clients/MyClientDevice1/hello/world トピックに「Hello World」メッセージを送信します。

    • MyClientDevice1 をクライアントデバイスのモノの名前に置き換えます。

    • ~/certs/AmazonRootCA1.pem をクライアントデバイスの Amazon ルート CA 証明書へのパスに置き換えます。

    • ~/certs/device.pem.crt をクライアントデバイスのデバイス証明書へのパスに置き換えます。

    • ~/certs/private.pem.key をクライアントデバイスのプライベートキーファイルへのパスに置き換えます。

    • us-east-1 をクライアントデバイスとコアデバイスが動作する AWS リージョンに置き換えます。

    python3 basic_discovery.py \\ --thing_name MyClientDevice1 \\ --topic 'clients/MyClientDevice1/hello/world' \\ --message 'Hello World!' \\ --ca_file ~/certs/AmazonRootCA1.pem \\ --cert ~/certs/device.pem.crt \\ --key ~/certs/private.pem.key \\ --region us-east-1 \\ --verbosity Warn

    検出サンプルアプリケーションはメッセージを 10 回送信し、その後切断します。また、メッセージの公開先と同じトピックにサブスクライブします。出力にアプリケーションがトピックに関する MQTT メッセージを受信したことが示される場合は、クライアントデバイスはコアデバイスと正常に通信できています。

    Performing greengrass discovery... awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\ MIICiT...EXAMPLE=\ -----END CERTIFICATE-----\ '])]) Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883 Connected! Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 0}' Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 1}' ... Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9} Publish received on topic clients/MyClientDevice1/hello/world b'{"message": "Hello World!", "sequence": 9}'

    アプリケーションが代わりにエラーを出力する場合は、「Greengrass 検出で生じる問題のトラブルシューティング」を参照してください。

    コアデバイスの Greengrass ログを表示して、クライアントデバイスが正常に接続してメッセージを送信しているかどうかを確認することもできます。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

通信をテストする (C++)

このセクションでは、AWS IoT Device SDK v2 for C++ の Greengrass 検出サンプルを使用して、クライアントデバイスとコアデバイス間の通信をテストします。

AWS IoT Device SDK v2 for C++ をビルドするには、デバイスに以下のツールが必要です。

  • C++ 11 以降

  • CMake 3.1 以降

  • 以下のいずれかのコンパイラ:

    • GCC 4.8 以降

    • Clang 3.9 以降

    • MSVC 2015 以降

通信をテストするには (AWS IoT Device SDK v2 for C++)
  1. AWS IoT Device SDK v2 for C++ をクライアントデバイスとして接続する AWS IoT モノにダウンロードしてビルドします。

    クライアントデバイスで、次の操作を行います。

    1. AWS IoT Device SDK v2 for C++ のワークスペース用のフォルダを作成し、そのフォルダに変更します。

      cd mkdir iot-device-sdk-cpp cd iot-device-sdk-cpp
    2. AWS IoT Device SDK v2 for C++ のリポジトリをクローンしてダウンロードします。--recursive フラグは、サブモジュールをダウンロードすることを指定します。

      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
    3. AWS IoT Device SDK v2 for C++ のビルド出力用のフォルダを作成し、そのフォルダに変更します。

      mkdir aws-iot-device-sdk-cpp-v2-build cd aws-iot-device-sdk-cpp-v2-build
    4. AWS IoT Device SDK v2 for C++ をビルドします。

      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2 cmake --build . --target install
  2. Greengrass 検出サンプルアプリケーションを AWS IoT Device SDK v2 for C++ でビルドします。以下の操作を実行します。

    1. AWS IoT Device SDK v2 for C++ の Greengrass 検出サンプルフォルダに変更します。

      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
    2. Greengrass 検出サンプルビルド出力用のフォルダを作成し、そのフォルダに変更します。

      mkdir build cd build
    3. Greengrass 検出サンプルアプリケーションをビルドします。

      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" .. cmake --build . --config "Release"
  3. サンプルの Greengrass 検出アプリケーションを実行します。このアプリケーションでは、クライアントデバイスのモノの名前、使用する MQTT トピック、および接続を認証して保護する証明書を指定する引数が必要です。次の例では、clients/MyClientDevice1/hello/world トピックをサブスクライブし、コマンドラインで入力したメッセージを同じトピックに公開します。

    • MyClientDevice1 をクライアントデバイスのモノの名前に置き換えます。

    • ~/certs/AmazonRootCA1.pem をクライアントデバイスの Amazon ルート CA 証明書へのパスに置き換えます。

    • ~/certs/device.pem.crt をクライアントデバイスのデバイス証明書へのパスに置き換えます。

    • ~/certs/private.pem.key をクライアントデバイスのプライベートキーファイルへのパスに置き換えます。

    • us-east-1 をクライアントデバイスとコアデバイスが動作する AWS リージョンに置き換えます。

    ./basic-discovery \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1

    検出サンプルアプリケーションは、トピックをサブスクライブし、公開するメッセージを入力するよう促します。

    Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883 Successfully subscribed to clients/MyClientDevice1/hello/world Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.

    アプリケーションが代わりにエラーを出力する場合は、「Greengrass 検出で生じる問題のトラブルシューティング」を参照してください。

  4. Hello World! などのメッセージを入力します。

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program. Hello World!

    出力にアプリケーションがトピックに関する MQTT メッセージを受信したことが示される場合は、クライアントデバイスはコアデバイスと正常に通信できています。

    Operation on packetId 2 Succeeded Publish received on topic clients/MyClientDevice1/hello/world Message: Hello World!

    コアデバイスの Greengrass ログを表示して、クライアントデバイスが正常に接続してメッセージを送信しているかどうかを確認することもできます。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

通信をテストする (JavaScript)

このセクションでは、 AWS IoT Device SDKv2 JavaScriptの Greengrass 検出サンプルを使用して、クライアントデバイスとコアデバイス間の通信をテストします。

重要

v2 AWS IoT Device SDK for を使用するには JavaScript、デバイスは Node v10.0 以降を実行する必要があります。

通信をテストするには (AWS IoT Device SDK v2 for JavaScript)
  1. AWS IoT Device SDK v2 for JavaScriptをクライアントデバイスとして接続するAWS IoTモノにダウンロードしてインストールします。

    クライアントデバイスで、次の操作を行います。

    1. v2 AWS IoT Device SDK for JavaScript リポジトリを複製してダウンロードします。

      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
    2. AWS IoT Device SDK v2 for をインストールします JavaScript。

      cd aws-iot-device-sdk-js-v2 npm install
  2. v2 for の Greengrass AWS IoT Device SDK 検出サンプルフォルダに変更します JavaScript。

    cd samples/node/basic_discovery
  3. Greengrass 検出サンプルアプリケーションをインストールします。

    npm install
  4. サンプルの Greengrass 検出アプリケーションを実行します。このアプリケーションでは、クライアントデバイスのモノの名前、使用する MQTT トピックとメッセージ、および接続を認証して保護する証明書を指定する引数が必要です。次の例では、clients/MyClientDevice1/hello/world トピックに「Hello World」メッセージを送信します。

    • MyClientDevice1 をクライアントデバイスのモノの名前に置き換えます。

    • ~/certs/AmazonRootCA1.pem をクライアントデバイスの Amazon ルート CA 証明書へのパスに置き換えます。

    • ~/certs/device.pem.crt をクライアントデバイスのデバイス証明書へのパスに置き換えます。

    • ~/certs/private.pem.key をクライアントデバイスのプライベートキーファイルへのパスに置き換えます。

    • us-east-1 をクライアントデバイスとコアデバイスが動作する AWS リージョンに置き換えます。

    node dist/index.js \ --thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --message 'Hello World!' \ --ca_file ~/certs/AmazonRootCA1.pem \ --cert ~/certs/device.pem.crt \ --key ~/certs/private.pem.key \ --region us-east-1 \ --verbose warn

    検出サンプルアプリケーションはメッセージを 10 回送信し、その後切断します。また、メッセージの公開先と同じトピックにサブスクライブします。出力にアプリケーションがトピックに関する MQTT メッセージを受信したことが示される場合は、クライアントデバイスはコアデバイスと正常に通信できています。

    Discovery Response: {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]} Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer. Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":1} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":2} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":3} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":4} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":5} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":6} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":7} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":8} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":9} Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false {"message":"Hello World!","sequence":10} Complete!

    アプリケーションが代わりにエラーを出力する場合は、「Greengrass 検出で生じる問題のトラブルシューティング」を参照してください。

    コアデバイスの Greengrass ログを表示して、クライアントデバイスが正常に接続してメッセージを送信しているかどうかを確認することもできます。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。

通信をテストする (Java)

このセクションでは、AWS IoT Device SDK v2 for Java の Greengrass 検出サンプルを使用して、クライアントデバイスとコアデバイス間の通信をテストします。

重要

AWS IoT Device SDK V2 for Java をビルドするには、デバイスには次のツールが必要です。

  • Java 8 以降、JAVA_HOME が Java フォルダを指していること。

  • Apache Maven

通信をテストするには (AWS IoT Device SDK v2 for Java)
  1. AWS IoT Device SDK v2 for Java をクライアントデバイスとして接続する AWS IoT モノにダウンロードしてビルドします。

    クライアントデバイスで、次の操作を行います。

    1. AWS IoT Device SDK v2 for Java のリポジトリをクローンしてダウンロードします。

      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
    2. AWS IoT Device SDK v2 for Javaフォルダに変更します。

    3. AWS IoT Device SDK v2 for Java をビルドします。

      cd aws-iot-device-sdk-java-v2 mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*" mvn clean install
  2. サンプルの Greengrass 検出アプリケーションを実行します。このアプリケーションでは、クライアントデバイスのモノの名前、使用する MQTT トピック、および接続を認証して保護する証明書を指定する引数が必要です。次の例では、clients/MyClientDevice1/hello/world トピックをサブスクライブし、コマンドラインで入力したメッセージを同じトピックに公開します。

    • MyClientDevice1 の両方のインスタンスをクライアントデバイスのモノの名前に置き換えます。

    • $HOME/certs/AmazonRootCA1.pem をクライアントデバイスの Amazon ルート CA 証明書へのパスに置き換えます。

    • $HOME/certs/device.pem.crt をクライアントデバイスのデバイス証明書へのパスに置き換えます。

    • $HOME/certs/private.pem.key をクライアントデバイスのプライベートキーファイルへのパスに置き換えます。

    • us-east-1 をクライアントデバイスとコアデバイスが動作する AWS リージョン に置き換えます。

    DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \ --topic 'clients/MyClientDevice1/hello/world' \ --ca_file $HOME/certs/AmazonRootCA1.pem \ --cert $HOME/certs/device.pem.crt \ --key $HOME/certs/private.pem.key \ --region us-east-1" mvn exec:java -pl samples/Greengrass \ -Dexec.mainClass=greengrass.BasicDiscovery \ -Dexec.args="$DISCOVERY_SAMPLE_ARGS"

    検出サンプルアプリケーションは、トピックをサブスクライブし、公開するメッセージを入力するよう促します。

    Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883 Started a clean session Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:

    アプリケーションが代わりにエラーを出力する場合は、「Greengrass 検出で生じる問題のトラブルシューティング」を参照してください。

  3. Hello World! などのメッセージを入力します。

    Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program: Hello World!

    出力にアプリケーションがトピックに関する MQTT メッセージを受信したことが示される場合は、クライアントデバイスはコアデバイスと正常に通信できています。

    Message received on topic clients/MyClientDevice1/hello/world: Hello World!

    コアデバイスの Greengrass ログを表示して、クライアントデバイスが正常に接続してメッセージを送信しているかどうかを確認することもできます。詳細については、「AWS IoT Greengrass ログのモニタリング」を参照してください。