AWS IoT のモノからの AWS IoT SiteWise へのデータの取り込み - AWS IoT SiteWise

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

AWS IoT のモノからの AWS IoT SiteWise へのデータの取り込み

デバイスシャドウを使用して、AWS IoT のモノのフリートからデータを簡単に AWS IoT SiteWise に取り込むことができます。デバイスシャドウは、AWS IoT デバイスの現在の状態情報を格納する JSON オブジェクトです。詳細については、「」を参照してください。Device Shadow サービスAWS IoTデベロッパーガイド

このチュートリアルを完了すると、AWS IoT のモノに基づいて AWS IoT SiteWise にオペレーションを設定できます。AWS IoT のモノを使用することで、オペレーションを AWS IoT の他の便利な機能と簡単に統合することもできます。たとえば、次のタスクを実行するよう AWS IoT 機能を設定できます。

  • データをストリーミングするための追加ルールを設定するAWS IoT Events,Amazon DynamoDB, その他AWSのサービス。詳細については、「」を参照してください。ルールAWS IoTデベロッパーガイド

  • AWS IoT フリートのインデックス作成サービスでデバイスデータのインデックス作成、検索、集計を行います。詳細については、「」を参照してください。フリートインデックス作成サービスAWS IoTデベロッパーガイド

  • AWS IoT Device Defender を使用してデバイスを監査し、セキュリティで保護します。詳細については、AWS IoT Device Defender デベロッパーガイドAWS IoT を参照してください。

このチュートリアルでは、AWS IoT のモノのデバイスシャドウから AWS IoT SiteWise のアセットにデータを取り込む方法について説明します。これを行うには、1 つ以上の AWS IoT のモノを作成し、各モノのデバイスシャドウを CPU およびメモリ使用率データで更新するスクリプトを実行します。このチュートリアルの CPU およびメモリ使用率データを使用して、現実的なセンサーデータを模倣します。次に、モノのデバイスシャドウが更新されるたびにこのデータを AWS IoT SiteWise のアセットに送信する AWS IoT SiteWise アクションを使用したルールを作成します。詳細については、「AWS IoT Core ルールを使用によるデータの取り込み」を参照してください。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • AWS アカウント。アカウントをお持ちでない場合は、「AWS アカウントのセットアップ」を参照してください。

  • AWS Management Console にアクセスするための、Windows、macOS、Linux、または Unix を実行している開発用コンピュータ。詳細については、「AWS Management Console の開始方法」を参照してください。

  • 管理者権限を持つ IAM ユーザー。

  • 開発用コンピュータにインストールされる、または AWS IoT のモノとして登録するデバイスにインストールされる Python 3。

AWS IoT ポリシーの作成

この手順では、このチュートリアルで使用するリソースに AWS IoT のモノがアクセスできるようにする AWS IoT ポリシーを作成します。

AWS IoT ポリシーを作成するには
  1. AWS Management Consoleにサインインします。

  2. を確認します。AWSリージョンどこAWS IoT SiteWiseがサポートされています。必要に応じて、これらのサポートされているいずれかのリージョンに切り替えます。

  3. AWS IoT コンソールに移動します。[今すぐ始める] ボタンが表示された場合はそれをクリックします。

  4. 左のナビゲーションペインで、[安全性]、[ポリシー] の順に選択します。

  5. [ポリシーはまだ作成されていません] ダイアログボックスが表示された場合は、[ポリシーの作成] を選択します。それ以外の場合は、[Create (作成)] を選択します。

  6. AWS IoT ポリシーの名前 (例: SiteWiseTutorialDevicePolicy) を入力します。

  7. [ステートメントを追加] で、[アドバンストモード] を選択し、次のポリシーを JSON 形式で入力します。お客様のリージョンとアカウント ID で regionaccount-id を置き換えます (us-east-1123456789012 など)。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account-id:client/SiteWiseTutorialDevice*" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected", "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected", "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/delete/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account-id:thing/SiteWiseTutorialDevice*" } ] }

    このポリシーにより、AWS IoT のモノが MQTT メッセージを通じてデバイスシャドウに接続し、やり取りできるようになります。デバイスシャドウとやり取りするために、AWS IoT のモノは $aws/things/thing-name/shadow/ で始まるトピックに関する MQTT メッセージをパブリッシュおよび受信します。このポリシーは、モノのポリシー変数 ${iot:Connection.Thing.ThingName} を使用します。この変数は、各トピックで接続されたモノの名前に置き換わります。iot:Connect ステートメントはモノが接続できるものを制限するため、モノのポリシー変数は、SiteWiseTutorialDevice で始まる名前のみに置き換えることができます。

    詳細については、「」を参照してください。モノのポリシー変数AWS IoTデベロッパーガイド

    注記

    このポリシーは、名前が SiteWiseTutorialDevice で始まるモノに適用されます。モノに別の名前を使用するには、それに応じてポリシーを更新する必要があります。

  8. [Create] (作成) を選択します。

AWS IoT のモノの作成および設定

この手順では、AWS IoT のモノを作成および設定します。開発用コンピュータを AWS IoT のモノとして登録すれば、このチュートリアルを簡単に完了できます。このチュートリアルの概念を実際のアプリケーションに適用すると、作成および設定を行うことができます。AWS IoT実行できる任意のデバイス上のものAWS IoTSDK、を含むAWS IoT Greengrassと FreeRTOS. 詳細については、「」を参照してください。AWS IoTSDKAWS IoTデベロッパーガイド

AWS IoT のモノを作成および設定するには
  1. コマンドラインを開き、次のコマンドを実行して、このチュートリアル用のディレクトリを作成します。

    mkdir iot-sitewise-rule-tutorial cd iot-sitewise-rule-tutorial
  2. 次のコマンドを実行して、モノの証明書用のディレクトリを作成します。

    mkdir device1

    追加のモノを作成する場合は、それに応じてディレクトリ名の番号を増やして、どの証明書がどのモノに属しているかをわかるようにします。

  3. AWS IoT コンソールに移動します。

  4. 左側のナビゲーションペインで、[管理]、[モノ] の順に選択します。

  5. [まだモノがありません] ダイアログボックスが表示された場合は、[モノの作成] を選択します。それ以外の場合は、[Create] (作成) を選択します。

  6. [Creating AWS IoT things] (モノを作成する) ページで、[Create a single thing] (単一のモノを作成する) を選択します。

  7. [Add your device to the device registry (デバイスレジストリへのデバイスの追加)] ページで、AWS IoT のモノの名前 (例: SiteWiseTutorialDevice1) を入力し、[次へ] を選択します。追加のモノを作成する場合は、それに応じてモノの名前の番号を増やします。

    重要

    モノの名前は、このチュートリアルで先ほど作成したポリシーで使用した名前と一致する必要があります。一致しないと、デバイスが AWS IoT に接続できません。

    
            AWS IoT モノの名前が強調表示された「Thing Registry にデバイスを追加」ページのスクリーンショット。
  8. [モノに証明書を追加] ページで、[証明書の作成] を選択します。証明書により、AWS IoT がデバイスを安全に識別できるようになります。

    
            AWS IoT [証明書の作成] が強調表示された「モノに証明書を追加」ページのスクリーンショット。
  9. [ダウンロード] リンクを選択して、モノの証明書、パブリックキー、プライベートキーをダウンロードします。モノの証明書用に作成したディレクトリ (例: iot-sitewise-rule-tutorial/device1) に 3 つのファイルをすべて保存します。

    重要

    モノの証明書とキーをダウンロードできるのは今回だけです。この証明書とキーは、デバイスが AWS IoT に正常に接続するために必要です。

    
            AWS IoT 証明書のダウンロードリンクが強調表示された「Certificate created (証明書が作成されました)」ページのスクリーンショット。
  10. ルート CA の [ダウンロード] リンクを選択して、ルート CA 証明書を選択してダウンロードするドキュメントページを開きます。ルート CA 証明書を iot-sitewise-rule-tutorial に保存します。Amazon Root CA 1 をダウンロードすることをお勧めします。

  11. [Activate] を選択します。

  12. [ポリシーのアタッチ] を選択します。

  13. [Add a policy for your thing page (モノにポリシーを追加)] ページで、このチュートリアルの前半で作成したポリシー (SiteWiseTutorialDevicePolicy) を選択し、[Register Thing (モノの登録)] を選択します。

    
            AWS IoT 「モノにポリシーを追加」ページのスクリーンショットSiteWiseTutorialDevicePolicy「強調表示されています。
  14. これで、コンピュータに AWS IoT のモノを登録しました。これで、次のいずれかの手順を実行できます。

    • 追加の AWS IoT のモノを作成せずに、次のセクションに進みます。このチュートリアルは、1 つのモノだけで完了できます。

    • 別のコンピュータまたはデバイスでこのセクションの手順を繰り返して、さらに多くの AWS IoT のモノを作成します。このチュートリアルでは、複数のデバイスから一意の CPU およびメモリ使用率データを取り込むことができるよう、このオプションに従うことをお勧めします。

    • 同じデバイス (コンピュータ) でこのセクションの手順を繰り返して、さらに多くの AWS IoT のモノを作成します。AWS IoT の各モノは、コンピュータから同様の CPU およびメモリ使用率データを受信するため、この方法を使用して、複数のデバイスから一意でないデータを取り込むことを検証します。

デバイスのアセットモデルの作成

この手順では、AWS IoT SiteWise でアセットモデルを作成して、CPU およびメモリ使用率データをストリーミングするデバイスを表します。アセットモデルでは、同じ型の複数のアセットに一貫した情報が適用されるため、デバイスのグループを表すアセット内のデータを処理できます。詳細については、「産業用アセットのモデリング」を参照してください。

デバイスを表すアセットモデルを作成するには
  1. AWS IoT SiteWise コンソールに移動します。

  2. 左側のナビゲーションペインで [モデル] を選択します。

  3. [モデルの作成] を選択します。

  4. [アセットモデル情報] で、名前を入力します (例: SiteWise Tutorial Device Model)。

  5. [Measurement definitions (測定定義)] で、次の操作を実行します。

    1. [名前] に「CPU Usage」と入力します。

    2. [単位] に「%」と入力します。

    3. [データ型] は [Double (倍精度浮動小数点型)] のままにします。

    測定プロパティは、デバイスの raw データストリームを表します。詳細については、「機器からのデータストリームの定義 (測定値) 」を参照してください。

  6. 2 つ目の測定プロパティを追加するには、[Add measurement (測定の追加)] を選択します。

  7. [Measurement definitions (測定定義)] の 2 行目で、次の操作を実行します。

    1. [名前] に「Memory Usage」と入力します。

    2. [単位] に「%」と入力します。

    3. [データ型] は [Double (倍精度浮動小数点型)] のままにします。

    
            AWS IoT SiteWiseデバイスアセットの [Measurement definitions (測定定義)] のスクリーンショット。
  8. [Metric definitions (メトリクス定義)] で、次の操作を実行します。

    1. [名前] に「Average CPU Usage」と入力します。

    2. [計算式] に「avg(CPU Usage)」と入力します。表示されたら、自動入力リストから [CPU Usage] を選択します。

    3. [Time interval (時間間隔)] に「5 minutes」と入力します。

    メトリクスプロパティは、ある間隔ですべての入力データポイントを処理し、間隔ごとに 1 つのデータポイントを出力する集計計算を定義します。このメトリクスプロパティは、各デバイスの平均 CPU 使用率を 5 分ごとに計算します。詳細については、「プロパティおよびその他のアセットのデータ (指標) の集計」を参照してください。

  9. [メトリクスの追加] を選択して、2 つ目のメトリクスプロパティを追加します。

  10. [Metric definitions (メトリクス定義)] の 2 行目で、次の操作を実行します。

    1. [名前] に「Average Memory Usage」と入力します。

    2. [計算式] に「avg(Memory Usage)」と入力します。表示されたら、自動入力リストから [Memory Usage] を選択します。

    3. [Time interval (時間間隔)] に「5 minutes」と入力します。

    このメトリクスプロパティは、各デバイスの平均メモリ使用率を 5 分ごとに計算します。

    
            AWS IoT SiteWiseデバイスアセットの [Metric definitions (メトリクス定義)] のスクリーンショット。
  11. (オプション) デバイスごとの計算に関心のあるその他のメトリクスを追加します。興味深い関数には、minmax などがあります。詳細については、「数式の使用」を参照してください。次のセクションでは、デバイスのフリート全体のデータを使用してメトリクスを計算できる親アセットを作成します。

  12. [モデルの作成] を選択します。

デバイスフリートのアセットモデルの作成

この手順では、AWS IoT SiteWise でアセットモデルを作成して、デバイスのフリートを表します。このアセットモデルでは、階層を定義します。これにより、多くのデバイスアセットを 1 つのフリートアセットに関連付けることができます。次に、関連付けられたすべてのデバイスアセットからデータを集計するメトリクスをフリートアセットモデルで定義し、フリート全体に関する洞察を得ます。

デバイスフリートを表すアセットモデルを作成するには
  1. AWS IoT SiteWise コンソールに移動します。

  2. 左側のナビゲーションペインで [モデル] を選択します。

  3. [モデルの作成] を選択します。

  4. [アセットモデル情報] で、名前を入力します (例: SiteWise Tutorial Device Fleet Model)。

  5. [Hierarchy definitions (階層定義)] で、次の操作を実行します。

    1. [Add hierarchy (階層の追加)] を選択します。

    2. [Hierarchy name (階層名)] に「Device」と入力します。

    3. [Hierarchy model (階層モデル)] で、デバイスアセットモデル (SiteWise Tutorial Device Model) を選択します。

    階層は、親 (フリート) アセットモデルと子 (デバイス) アセットモデルの間の関係を定義します。親アセットは、子アセットのプロパティデータにアクセスできます。後でアセットを作成する場合は、親アセットモデルの階層定義に従って、子アセットを親アセットに関連付ける必要があります。詳細については、「アセットモデル間の関係 (階層) を定義する。」を参照してください。

  6. [Metric definitions (メトリクス定義)] で、次の操作を実行します。

    1. [名前] に「Average CPU Usage」と入力します。

    2. [計算式] に「avg(Device | Average CPU Usage)」と入力します。自動入力リストが表示されたら、[Device] を選択して階層を選択し、[Average CPU Usage] を選択して前に作成したデバイスアセットからメトリクスを選択します。

    3. [Time interval (時間間隔)] に「5 minutes」と入力します。

    このメトリクスプロパティは、Device 階層を通じてフリートアセットに関連付けられているすべてのデバイスアセットの平均 CPU 使用率を計算します。

  7. [メトリクスの追加] を選択して、2 つ目のメトリクスプロパティを追加します。

  8. [Metric definitions (メトリクス定義)] の 2 行目で、次の操作を実行します。

    1. [名前] に「Average Memory Usage」と入力します。

    2. [計算式] に「avg(Device | Average Memory Usage)」と入力します。自動入力リストが表示されたら、[Device] を選択して階層を選択し、[Average Memory Usage] を選択して前に作成したデバイスアセットからメトリクスを選択します。

    3. [Time interval (時間間隔)] に「5 minutes」と入力します。

    このメトリクスプロパティは、Device 階層を通じてフリートアセットに関連付けられているすべてのデバイスアセットの平均メモリ使用率を計算します。

    
            AWS IoT SiteWiseデバイスフリートアセットの [Metric definitions (メトリクス定義)] のスクリーンショット。
  9. (オプション) デバイスのフリート全体の計算に関心のあるその他のメトリクスを追加します。

  10. [モデルの作成] を選択します。

デバイスアセットの作成および設定

この手順では、デバイスアセットモデルからデバイスアセットを作成します。次に、測定プロパティごとにプロパティエイリアスを定義します。プロパティエイリアスは、アセットプロパティを一意に識別する文字列です。アセット ID やプロパティ ID ではなく、後でこれらのエイリアスを使用して、データをアップロードするプロパティを識別できます。詳細については、「アセットプロパティへの産業データストリームのマッピング」を参照してください。

デバイスアセットを作成し、プロパティエイリアスを定義するには
  1. AWS IoT SiteWise コンソールに移動します。

  2. 左側のナビゲーションペインで [Assets (アセット)] を選択します。

  3. [Create asset (アセットの作成)] を選択します。

  4. [アセットモデル] で、デバイスアセットモデル (SiteWise Tutorial Device Model) を選択します。

  5. [名前] に「SiteWise Tutorial Device 1」と入力します。

  6. [Create asset (アセットの作成)] を選択します。

    
            AWS IoT SiteWise の [Create an asset (アセットの作成)] のSiteWise Tutorial Deviceアセット。
  7. 新しいデバイスアセットの場合は、 [編集] を選択します。

    
            AWS IoT SiteWiseデバイスアセットの [編集] のスクリーンショット。
  8. CPU Usage で、プロパティエイリアスとして /tutorial/device/SiteWiseTutorialDevice1/cpu と入力します。プロパティエイリアスに AWS IoT のモノの名前を含めると、1 つの AWS IoT ルールを使用してすべてのデバイスからデータを取り込むことができます。

  9. Memory Usage で、プロパティエイリアスとして /tutorial/device/SiteWiseTutorialDevice1/memory と入力します。

    
            AWS IoT SiteWiseデバイスフリートアセットのプロパティエイリアスのスクリーンショット。
  10. [Save asset (アセットの保存)] を選択します。

  11. 複数の AWS IoT のモノを作成した場合は、デバイスごとに手順 3~10 を繰り返し、それに応じてアセット名およびプロパティエイリアスの番号を増やします。たとえば、2 つ目のデバイスアセットの名前は SiteWise Tutorial Device 2 となり、そのプロパティエイリアスは /tutorial/device/SiteWiseTutorialDevice2/cpu および /tutorial/device/SiteWiseTutorialDevice2/memory となります。

デバイスフリートアセットの作成および設定

この手順では、デバイスフリートアセットモデルからデバイスフリートアセットを作成します。次に、デバイスアセットをフリートアセットに関連付けて、フリートアセットのメトリクスプロパティで多くのデバイスからデータを集約できるようにします。

デバイスフリートアセットを作成してデバイスアセットを関連付けるには
  1. AWS IoT SiteWise コンソールに移動します。

  2. 左側のナビゲーションペインで [Assets (アセット)] を選択します。

  3. [Create asset (アセットの作成)] を選択します。

  4. [アセットモデル] で、デバイスフリートのアセットモデル (SiteWise Tutorial Device Fleet Model) を選択します。

  5. [名前] に「SiteWise Tutorial Device Fleet 1」と入力します。

  6. [Create asset (アセットの作成)] を選択します。

    
            AWS IoT SiteWise の [Create an asset (アセットの作成)] のSiteWise Tutorial Device Fleetアセット。
  7. 新しいデバイスフリートアセットの場合は、 [編集] を選択します。

    
            AWS IoT SiteWiseデバイスフリートアセットの [編集] のスクリーンショット。
  8. [Assets associated to this asset (この資産に関連付けられているアセット] で、[Add associated asset (関連付けられたアセットの追加)] を選択します。

  9. [Hierarchy (階層)] で、[Device] を選択します。この階層は、デバイスとフリートアセットの間の階層関係を識別します。この階層は、このチュートリアルで前にデバイスフリートアセットモデルで定義しました。

  10. [アセット] で、デバイスアセット (SiteWise Tutorial Device 1) を選択します。

    
            AWS IoT SiteWise のスクリーンショットSiteWise Tutorial Device Fleetアセット。
  11. 前に複数のデバイスアセットを作成した場合は、作成したデバイスアセットごとに手順 8~10 を繰り返します。

  12. [Save asset (アセットの保存)] を選択します。

    これで、デバイスアセットが階層として編成されているのがわかります。

    
            AWS IoT SiteWiseデバイスアセット階層のスクリーンショット。

でのルールの作成AWS IoTデータをデバイスアセットに送信するためのコア

この手順では、デバイスシャドウ通知メッセージを解析してデータを AWS IoT SiteWise のデバイスアセットに送信するルールを AWS IoT Core に作成します。デバイスのシャドウが更新されるたびに、AWS IoT は MQTT メッセージを送信します。MQTT メッセージに基づいてデバイスのシャドウが変更されたときにアクションを実行するルールを作成できます。この場合、更新メッセージを処理してプロパティ値を抽出し、AWS IoT SiteWise のデバイスアセットに送信します。

AWS IoT SiteWise アクションを使用してルールを作成するには
  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションペインで [Act (アクト)] を選択し、[ルール] を選択します。

  3. [ルールはまだ作成されていません] ダイアログボックスが表示された場合は、[ルールの作成] を選択します。それ以外の場合は、[Create (作成)] を選択します。

  4. ルールの名前と説明を入力します。

    
            AWS IoT Core 「名前」と「説明」が強調表示された「ルールの作成」ページのスクリーンショット。
  5. 次のルールクエリステートメントを入力します。

    SELECT * FROM '$aws/things/+/shadow/update/accepted' WHERE startsWith(topic(3), "SiteWiseTutorialDevice")

    このルールクエリステートメントは、デバイスシャドウサービスがシャドウの更新を $aws/things/thingName/shadow/update/accepted にパブリッシュするため、機能します。デバイスシャドウの詳細については、「」を参照してください。Device Shadow サービスAWS IoTデベロッパーガイド

    WHERE 句では、このルールクエリステートメントは topic(3) 関数を使用して、トピックの 3 番目のセグメントからモノの名前を取得します。次に、このステートメントは、名前がチュートリアルのデバイス名と一致しないデバイスを除外します。の詳細AWS IoTSQL、「」を参照してください。AWS IoTSQL リファレンスAWS IoTデベロッパーガイド

  6. [1 つ以上のアクションを設定する] で、[アクションの追加] を選択します。

    
            AWS IoT Core [アクションを追加] が強調表示された「ルールの作成」ページのスクリーンショット。
  7. リポジトリの []アクションを選択[] ページで、のアセットプロパティにメッセージデータを送信します。AWS IoT SiteWise作成するにはAWS IoT SiteWiseルールアクション。

    
            AWS IoT Core [アクションの選択] ページのスクリーンショットAWS IoT SiteWise強調表示されている action。
  8. ページの下部にある [アクションの設定] を選択します。

  9. [アクションの設定] ページで、次の手順を実行して AWS IoT SiteWise ルールアクションを設定します。

    1. [By property alias (プロパティエイリアスによる)] を選択します。

      
                AWS IoT Core 「設定を行うAWS IoT SiteWiseaction」ページのスクリーンショット。
    2. [Property alias (プロパティエイリアス)] に「/tutorial/device/${topic(3)}/cpu」と入力します。

      ${...} 構文は置換テンプレートです。AWS IoT は中括弧内の内容を評価します。この置換テンプレートは、トピックからモノの名前を取得し、モノごとに固有のエイリアスを作成します。詳細については、「」を参照してください。置換テンプレートAWS IoTデベロッパーガイド

      注記

      置換テンプレート内の式は SELECT ステートメントとは別に評価されるため、AS 句を使用して作成されたエイリアスは置換テンプレートを使用して参照することはできません。サポートされている関数と演算子に加えて、元のペイロードに存在する情報のみを参照できます。

    3. [Entry ID (エントリ ID)] に「${concat(topic(3), "-cpu-", floor(state.reported.timestamp))}」と入力します。

      エントリ ID は、各値エントリの試行を一意に識別します。エントリがエラーを返す場合は、エラーの出力でエントリ ID を検索して、問題をトラブルシューティングすることができます。このエントリ ID の置換テンプレートは、モノの名前とデバイスの報告されたタイムスタンプを組み合わせたものです。たとえば、結果のエントリ ID は SiteWiseTutorialDevice1-cpu-1579808494 のようになります。

    4. [Time in seconds (時間 (秒))] に「${floor(state.reported.timestamp)}」と入力します。

      この置換テンプレートは、デバイスの報告されたタイムスタンプから秒単位で時間を計算します。このチュートリアルでは、デバイスは Unix エポック時間でタイムスタンプ (秒) を浮動小数点数として報告します。

    5. [Offset in nanos (オフセット (ナノ秒))] に「${floor((state.reported.timestamp % 1) * 1E9)}と入力します。

      この置換テンプレートは、デバイスの報告されたタイムスタンプの小数部分を変換して、秒単位の時間からのナノ秒オフセットを計算します。

      注記

      AWS IoT SiteWise では、データに Unix エポック時間の現在のタイムスタンプが必要です。デバイスが正確に時刻を報告しない場合、現在の時刻はAWS IoTを使用したルールエンジンtimestamp()。この関数は、時刻をミリ秒単位で報告するため、ルールアクションの時間パラメータを次の値に更新する必要があります。

      • [Time in seconds (時間 (秒))] に「${floor(timestamp() / 1E3)}」と入力します。

      • [Offset in nanos (オフセット (ナノ秒))] に「${(timestamp() % 1E3) * 1E6}と入力します。

    6. [値] に「${state.reported.cpu}」と入力します。置換テンプレートでは、. 演算子を使用して JSON 構造内から値を取得します。

    7. [データ型] で、[Double (倍精度浮動小数点型)] を選択します。

      このデータ型は、アセットモデルで定義したアセットプロパティのデータ型と一致する必要があります。

    8. [エントリの追加] を選択して、メモリ使用率プロパティに新しいエントリを追加し、そのプロパティに対して次の手順を再度実行します。

      1. [Property alias (プロパティエイリアス)] に「/tutorial/device/${topic(3)}/memory」と入力します。

      2. [Entry ID (エントリ ID)] に「${concat(topic(3), "-memory-", floor(state.reported.timestamp))}」と入力します。

      3. [Time in seconds (時間 (秒))] に「${floor(state.reported.timestamp)}」と入力します。

      4. [Offset in nanos (オフセット (ナノ秒))] に「${floor((state.reported.timestamp % 1) * 1E9)}と入力します。

      5. [値] に「${state.reported.memory}」と入力します。

      6. [データ型] で、[Double (倍精度浮動小数点型)] を選択します。

    9. [Root asset name (ルートアセット名)] で、[選択] を選択してリストを展開し、デバイスフリートアセット (SiteWise Tutorial Device Fleet 1) を選択します。

    10. []ロールで、[ロールの作成]をクリックして、このルールアクションの IAM ロールを作成します。このロールにより、AWS IoT はデバイスフリートアセットとそのアセット階層のプロパティにデータをプッシュできます。

    11. ロール名を入力し、[ロールの作成] を選択します。

      
                AWS IoT Core 「設定を行うAWS IoT SiteWise[ロールの作成] が強調表示された「アクション」ページのスクリーンショット。
    12. [Add action] を選択します。

  10. (オプション) ルールのトラブルシューティングに使用できるエラーアクションを設定します。詳細については、「ルールのトラブルシューティング」を参照してください。

  11. ページの下部にある [ルールの作成] を選択して、ルールの作成を終了します。

デバイスクライアントスクリプトの実行

実際のデバイスを使用してデータを報告していないため、AWS IoT のモノのデバイスシャドウを CPU およびメモリ使用率で更新し、実際のセンサーデータを模倣します。スクリプトを実行するには、まず必要な Python パッケージをインストールする必要があります。この手順では、必要な Python パッケージをインストールしてから、デバイスクライアントスクリプトを実行します。

デバイスクライアントスクリプトを設定および実行するには
  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションペインの下部にある [設定] を選択します。

  3. デバイスクライアントスクリプトで使用するためにカスタムエンドポイントを保存します。このエンドポイントを使用して、モノのシャドウとやり取りします。このエンドポイントは、現在のリージョンのアカウントに固有です。

    カスタムエンドポイントは、次の例のようになります。

    identifier.iot.region.amazonaws.com
  4. コマンドラインを開き、次のコマンドを実行して、先ほど作成したチュートリアル用のディレクトリに移動します。

    cd iot-sitewise-rule-tutorial
  5. 以下のコマンドを実行して、AWS IoT Device SDK for Python をインストールします。

    pip3 install AWSIoTPythonSDK

    詳細については、「」を参照してください。AWS IoT Device SDK for PythonAWS IoTデベロッパーガイド

  6. 次のコマンドを実行して、psutil をインストールします。psutil は、クロスプラットフォームプロセスおよびシステムユーティリティライブラリです。

    pip3 install psutil

    詳細については、「」を参照してください。psutilPython パッケージインデックス

  7. iot-sitewise-rule-tutorial ディレクトリ thing_performance.py にというファイルを作成し、次の Python コードをファイルにコピーします。

    from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient import json import psutil import argparse import logging import time # Configures the argument parser for this program. def configureParser(): parser = argparse.ArgumentParser() parser.add_argument("-e", "--endpoint", action="store", required=True, dest="host", help="Your AWS IoT custom endpoint") parser.add_argument("-r", "--rootCA", action="store", required=True, dest="rootCAPath", help="Root CA file path") parser.add_argument("-c", "--cert", action="store", required=True, dest="certificatePath", help="Certificate file path") parser.add_argument("-k", "--key", action="store", required=True, dest="privateKeyPath", help="Private key file path") parser.add_argument("-p", "--port", action="store", dest="port", type=int, default=8883, help="Port number override") parser.add_argument("-n", "--thingName", action="store", required=True, dest="thingName", help="Targeted thing name") parser.add_argument("-d", "--requestDelay", action="store", dest="requestDelay", type=float, default=1, help="Time between requests (in seconds)") parser.add_argument("-v", "--enableLogging", action="store_true", dest="enableLogging", help="Enable logging for the AWS IoT Device SDK for Python") return parser # An MQTT shadow client that uploads device performance data to AWS IoT at a regular interval. class PerformanceShadowClient: def __init__(self, thingName, host, port, rootCAPath, privateKeyPath, certificatePath, requestDelay): self.thingName = thingName self.host = host self.port = port self.rootCAPath = rootCAPath self.privateKeyPath = privateKeyPath self.certificatePath = certificatePath self.requestDelay = requestDelay # Updates this thing's shadow with system performance data at a regular interval. def run(self): print("Connecting MQTT client for {}...".format(self.thingName)) mqttClient = self.configureMQTTClient() mqttClient.connect() print("MQTT client for {} connected".format(self.thingName)) deviceShadowHandler = mqttClient.createShadowHandlerWithName(self.thingName, True) print("Running performance shadow client for {}...\n".format(self.thingName)) while True: performance = self.readPerformance() print("[{}]".format(self.thingName)) print("CPU:\t{}%".format(performance["cpu"])) print("Memory:\t{}%\n".format(performance["memory"])) payload = { "state": { "reported": performance } } deviceShadowHandler.shadowUpdate(json.dumps(payload), self.shadowUpdateCallback, 5) time.sleep(args.requestDelay) # Configures the MQTT shadow client for this thing. def configureMQTTClient(self): mqttClient = AWSIoTMQTTShadowClient(self.thingName) mqttClient.configureEndpoint(self.host, self.port) mqttClient.configureCredentials(self.rootCAPath, self.privateKeyPath, self.certificatePath) mqttClient.configureAutoReconnectBackoffTime(1, 32, 20) mqttClient.configureConnectDisconnectTimeout(10) mqttClient.configureMQTTOperationTimeout(5) return mqttClient # Returns the local device's CPU usage, memory usage, and timestamp. def readPerformance(self): cpu = psutil.cpu_percent() memory = psutil.virtual_memory().percent timestamp = time.time() return { "cpu": cpu, "memory": memory, "timestamp": timestamp } # Prints the result of a shadow update call. def shadowUpdateCallback(self, payload, responseStatus, token): print("[{}]".format(self.thingName)) print("Update request {} {}\n".format(token, responseStatus)) # Configures debug logging for the AWS IoT Device SDK for Python. def configureLogging(): logger = logging.getLogger("AWSIoTPythonSDK.core") logger.setLevel(logging.DEBUG) streamHandler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') streamHandler.setFormatter(formatter) logger.addHandler(streamHandler) # Runs the performance shadow client with user arguments. if __name__ == "__main__": parser = configureParser() args = parser.parse_args() if (args.enableLogging): configureLogging() thingClient = PerformanceShadowClient(args.thingName, args.host, args.port, args.rootCAPath, args.privateKeyPath, args.certificatePath, args.requestDelay) thingClient.run()
  8. 以下のパラメータを使用して、コマンドラインから thing_performance.py を実行します。

    • -n,--thingName— モノの名前 (など)SiteWiseTutorialDevice1

    • -e,--endpoint— カスタムAWS IoTこの手順で前に保存したエンドポイント。

    • -r,--rootCA— あなたのへのパスAWS IoTルート CA 証明書。

    • -c,--cert— あなたのへのパスAWS IoTモノの証明書。

    • -k,--key— あなたのへのパスAWS IoTモノの証明書のプライベートキー。

    • -d,--requestDelay— (オプション) 各デバイスシャドウ更新間の待機時間 (秒)。デフォルトは 1 秒です。

    • -v,--enableLogging— (オプション) このパラメータが存在する場合、スクリプトによってからのデバッグメッセージが出力されます。AWS IoT Device SDK for Python。

    コマンドは、次の例のようになります。

    python3 thing_performance.py \ --thingName SiteWiseTutorialDevice1 \ --endpoint identifier.iot.region.amazonaws.com \ --rootCA AmazonRootCA1.pem \ --cert device1/thing-id-certificate.pem.crt \ --key device1/thing-id-private.pem.key

    追加の AWS IoT のモノにスクリプトを実行する場合は、それに応じてモノの名前と証明書ディレクトリを更新します。

  9. デバイスでプログラムを開いたり閉じたりして、CPU およびメモリ使用率がどのように変化するかを確認します。スクリプトにより、各 CPU およびメモリ使用率の読み取りが出力されます。スクリプトがデータをデバイスシャドウサービスに正常にアップロードする場合、スクリプトの出力は次の例のようになります。

    [SiteWiseTutorialDevice1] CPU: 24.6% Memory: 85.2% [SiteWiseTutorialDevice1] Update request e6686e44-fca0-44db-aa48-3ca81726f3e3 accepted
  10. スクリプトがデバイスシャドウを更新していることを確認するには、次の手順を実行します。

    1. AWS IoT コンソールに移動します。

    2. 左側のナビゲーションペインで、[管理]、[モノ] の順に選択します。

    3. モノ (SiteWiseTutorialDevice 1) を選択します。

    4. モノのページの左側のナビゲーションペインで、[シャドウ] を選択します。

    5. [Shadow state (シャドウステータス)] が次の例のようになっていることを確認します。

      { "reported": { "cpu": 24.6, "memory": 85.2, "timestamp": 1579567542.2835066 } }
    6. モノのシャドウステータスが空であるか、前の例のようになっていない場合は、スクリプトが実行され、AWS IoT に正常に接続されていることを確認します。AWS IoT への接続時にスクリプトがタイムアウトし続ける場合は、このチュートリアルに従ってモノのポリシーが設定されていることを確認します。

  11. ルールアクションが AWS IoT SiteWise にデータを送信していることを確認するには、次の手順を実行します。

    1. AWS IoT SiteWise コンソールに移動します。

    2. 左側のナビゲーションペインで [Assets (アセット)] を選択します。

    3. デバイスフリートアセット (SiteWise Tutorial Device Fleet 1) の横にある矢印を選択してそのアセット階層を展開し、デバイスアセット (SiteWise Tutorial Device 1) を選択します。

    4. [測定] を選択します。

    5. [Latest value (最新値)] セルに、CPU Usage および Memory Usage プロパティの値があることを確認します。

      
                AWS IoT SiteWise "SiteWise Tutorial Device[測定] が強調表示された 1 アセット」ページのスクリーンショット。
    6. CPU Usage プロパティと Memory Usage プロパティ に最新の値がない場合は、ページを更新します。数分経過しても値が表示されない場合は、「ルールのトラブルシューティング」を参照してください。

  12. これで、このチュートリアルは終了です。データのライブ可視化を調べる場合は、AWS IoT SiteWise Monitor でポータルを設定できます。詳細については、「AWS IoT SiteWise Monitor によるデータのモニタリング」を参照してください。それ以外の場合は、コマンドプロンプトで Ctrl+C キーを押して、デバイスクライアントスクリプトを停止できます。Python プログラムが、料金がかかる量のメッセージを送信することはほとんどありませんが、終了したらプログラムを停止することをお勧めします。

チュートリアル後のリソースのクリーンアップ

チュートリアルを完了したら、追加料金が発生しないようにリソースをクリーンアップします。

AWS IoT SiteWise で階層アセットを削除するには
  1. に移動します。AWS IoT SiteWiseコンソール

  2. 左側のナビゲーションペインで [Assets (アセット)] を選択します。

  3. AWS IoT SiteWise でアセットを削除する場合は、まずアセットの関連付けを解除する必要があります。

    デバイスフリートアセットからデバイスアセットの関連付けを解除するには、次の手順を実行します。

    1. デバイスフリートアセット (SiteWise Tutorial Device Fleet 1) を選択します。

    2. [Edit] を選択します。

    3. [Assets associated to this asset (このアセットに関連付けられているアセット)] で、このデバイスフリートアセットに関連付けられている各デバイスアセットに対して [関連付け解除] を選択します。

    4. [Save asset (アセットの保存)] を選択します。

      これで、デバイスアセットが階層として編成されなくなったことがわかります。

      
                AWS IoT SiteWiseフラット化されたデバイスアセット階層のスクリーンショット。
  4. デバイスアセット (SiteWise Tutorial Device 1) を選択します。

  5. [Delete] (削除) を選択します。

  6. 確認フィールドに「Delete」と入力し、[削除] を選択します。

    
            AWS IoT SiteWise [Delete asset (アセットの削除)] ダイアログのスクリーンショット。

    アセットを削除すると、AWS IoT SiteWise はそのアセットのプロパティからすべてのデータを破棄します。

  7. デバイスアセットとデバイスフリートアセット (SiteWise Tutorial Device Fleet 1) ごとに、ステップ 4~6 を繰り返します。

AWS IoT SiteWise で階層アセットモデルを削除するには
  1. AWS IoT SiteWise コンソールに移動します。

  2. デバイスおよびデバイスフリートアセットを削除していない場合は、削除します。詳細については、前述の手順を参照してください。モデルから作成されたアセットがある場合は、そのモデルを削除できません。

  3. 左側のナビゲーションペインで [モデル] を選択します。

  4. デバイスフリートアセット (SiteWise Tutorial Device Fleet Model 1) を選択します。

    階層アセットモデルを削除する場合は、最初に親アセットモデルを削除する必要があります。

  5. [Delete] (削除) を選択します。

  6. 確認フィールドに「Delete」と入力し、[削除] を選択します。

    
            AWS IoT SiteWise [Delete model (モデルの削除)] ダイアログのスクリーンショット。
  7. デバイスのアセットモデル (SiteWise Tutorial Device Model) について、ステップ 4~6 を繰り返します。

AWS IoT Core でルールを無効化または削除するには
  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションペインで [Act (アクト)] を選択し、[ルール] を選択します。

  3. ルールのメニューを選択し、[無効化] または [削除] を選択します。

    
            AWS IoTルールのメニューが開いた状態で強調表示された「ルール」ページのスクリーンショット。

ルールのトラブルシューティング

CPU およびメモリ使用率データが想定通りに AWS IoT SiteWise で表示されない場合は、ここに記載されている手順に従って、ルールをトラブルシューティングします。この手順では、MQTT テストクライアントでエラーメッセージを表示するために、エラーアクションとして再パブリッシュルールアクションを設定します。また、にロギングを設定することもできます。CloudWatchトラブルシューティングするログ。詳細については、「AWS IoT SiteWise ルールアクションのトラブルシューティング」を参照してください。

再パブリッシュエラーアクションをルールに追加するには
  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションペインで [Act (アクト)] を選択し、[ルール] を選択します。

  3. 先ほど作成したルールを選択します。

    
            AWS IoT Core 「ルール」ページのスクリーンショット。
  4. [エラーアクション] で、[アクションの追加] を選択します。

  5. 選択にメッセージを再パブリッシュするAWS IoTトピック

    
            AWS IoT Core 再パブリッシュのアクションが強調表示された「アクションを選択してください」のページのスクリーンショット。
  6. ページの下部にある [アクションの設定] を選択します。

  7. [トピック] に sitewise/rule/tutorial/error と入力すると、AWS IoT Core がこのトピックにエラーメッセージを再パブリッシュします。

    
            AWS IoT Core [トピック] が強調表示された「Configure Republish action」のページのスクリーンショット。
  8. [選択] を選択して、エラーアクションを実行する AWS IoT Core アクセス許可を付与します。

  9. 選択Select前に作成したロールの横にある (例:SiteWiseTutorialDeviceRuleRole).

    
            AWS IoT Core [Role Select (ロール選択)] ボタンが強調表示された「Configure Republish action」のページのスクリーンショット。
  10. [ロールの更新] を選択して、追加のアクセス許可をロールに追加します。

    
            AWS IoT[ロールの更新] ボタンが強調表示された「Configure Republish action」のページのスクリーンショット。
  11. [Add action] を選択します。

  12. コンソールの左上にある戻る矢印を選択して、AWS IoT コンソールのホームに戻ります。

再パブリッシュエラーアクションを設定したら、AWS IoT Core の MQTT テストクライアントでエラーメッセージを見ることができます。

次の手順では、MQTT テストクライアントでエラートピックにサブスクライブします。

エラーアクショントピックをサブスクライブするには
  1. AWS IoT コンソールに移動します。

  2. 左側のナビゲーションページで、[テスト] を選択して MQTT テストクライアントを開きます。

  3. [トピックのサブスクリプション] フィールドで、sitewise/rule/tutorial/error と入力し、[トピックへのサブスクリプション] を選びます。

    
            AWS IoT Core [トピックへのサブスクライブ] ボタンが強調表示された「MQTT クライアント」ページのスクリーンショット。
  4. エラーメッセージが表示された場合は、エラーメッセージで failures 配列を表示して問題を診断します。考えられる問題とその解決方法の詳細については、「AWS IoT SiteWise ルールアクションのトラブルシューティング」を参照してください。

    エラーが表示されない場合は、ルールが有効になっていて、再パブリッシュエラーアクションで設定したトピックと同じトピックにサブスクライブしていることを確認します。それでもエラーが表示されない場合は、デバイススクリプトが実行され、デバイスのシャドウが正常に更新されていることを確認します。

    注記

    また、デバイスのシャドウ更新トピックをサブスクライブして、AWS IoT SiteWise アクションが解析するペイロードを表示することもできます。これを行うには、次のトピックをサブスクライブしてください。

    $aws/things/+/shadow/update/accepted