AWS IoT モノ AWS IoT SiteWise から にデータを取り込む - AWS IoT SiteWise

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

AWS IoT モノ AWS IoT SiteWise から にデータを取り込む

このチュートリアルでは、デバイスシャドウを使用して AWS IoT 、モノのフリート AWS IoT SiteWise から にデータを取り込む方法について説明します。デバイスシャドウは、 AWS IoT デバイスの現在の状態情報を保存する JSON オブジェクトです。詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[Device shadow service] (デバイスシャドウサービス) を参照してください。

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

  • データを AWS IoT EventsAmazon DynamoDB、およびその他の AWS サービスにストリーミングするための追加ルールを設定します。詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[Rules] (ルール) を参照してください。

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

  • でデバイスを監査して保護します AWS IoT Device Defender。詳細については、「AWS IoT デベロッパーガイド」の 「AWS IoT Device Defender」を参照してください。

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

前提条件

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

  • AWS アカウント。アカウントをお持ちでない場合は、「AWS アカウントを設定する」を参照してください。

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

  • 管理者権限を持つ AWS Identity and Access Management (IAM) ユーザー。

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

ステップ 1: AWS IoT ポリシーを作成する

この手順では、このチュートリアルで使用されるリソースへのアクセスを AWS IoT モノに許可する AWS IoT ポリシーを作成します。

Console

コンソールを使用して AWS IoT ポリシーを作成するには、 AWS IoT Core 次の手順に従います。

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

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

  3. AWS IoT コンソールに移動します。[デバイスに接続] ボタンが表示されたら、それを選択します。

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

  5. [作成] を選択します。

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

  7. [ポリシードキュメント][JSON] を選択して 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*" } ] }
  8. [作成] を選択します。

AWS CLI
重要

このポリシーでは、ワイルドカードを使用して CLI AWS IoT SiteWise のサイズ制限内に留まります。明示的なトピックパスを使用したより制限の厳しいアクセス許可については、代わりに AWS IoT SiteWise コンソールを使用してポリシーを作成します。詳細については、 タブで提供されている IoT ポリシーの例を参照してください。

次の AWS CLI コマンドを使用して IoT IoT ポリシーを作成します。

aws iot create-policy \ --policy-name "SiteWiseTutorialDevicePolicy" \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:region:account-id:client/SiteWiseTutorialDevice*" }, { "Effect": "Allow", "Action": ["iot:Publish", "iot:Receive"], "Resource": [ "arn:aws:iot:region:account-id:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:region:account-id:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/*" ] }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": "arn:aws:iot:region:account-id:thing/SiteWiseTutorialDevice*" } ] }'

ポリシーが正常に作成されたことを確認するには、次のコマンドを使用します。

aws iot get-policy --policy-name "SiteWiseTutorialDevicePolicy"

このポリシーにより、 AWS IoT デバイスは MQTT メッセージを使用して接続を確立し、デバイスシャドウと通信できるようになります。MQTT メッセージの詳細については、「MQTT とは」を参照してください。デバイスシャドウを操作するために、 AWS IoT モノは で始まるトピックで MQTT メッセージを発行および受信します$aws/things/thing-name/shadow/。このポリシーには、${iot:Connection.Thing.ThingName} と呼ばれるモノのポリシー変数が組み込まれています。この変数は、各トピックで接続されたモノの名前に置き換わります。iot:Connect ステートメントはデバイスが接続を確立できる制限を設定し、モノのポリシー変数は、SiteWiseTutorialDevice で始まる名前のみに置き換えることができます。

詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[Thing policy variables] (シングポリシー変数) を参照してください。

注記

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

ステップ 2: AWS IoT のモノを作成および設定する

この手順では、 AWS IoT モノを作成して設定します。開発用コンピュータを AWS IoT モノとして指定できます。進行するにつれて、ここで学習している原則は実際のプロジェクトに適用できることに注意してください。や FreeRTOS など、 AWS IoT SDK を実行できる任意のデバイスで AWS IoT モノを柔軟に作成 AWS IoT Greengrass およびセットアップできます。詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[AWS IoT SDKs] (SDK) を参照してください。

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

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

    mkdir device1

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

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

  4. 左側のナビゲーションペインで、[管理] セクションの [すべてのデバイス] を選択します。[モノ] を選択します。

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

  6. [モノを作成する] ページで、[単一のモノを作成する] を選択し、[次へ] を選択します。

  7. [モノのプロパティを指定する] ページで、 AWS IoT のモノの名前 (例: SiteWiseTutorialDevice1) を入力し、[次へ] を選択します。追加のモノを作成する場合は、それに応じてモノの名前の番号を増やします。

    重要

    モノの名前は、ステップ 1: ポリシーの作成で作成した AWS IoT ポリシーで使用される名前と一致する必要があります。それ以外の場合、デバイスは に接続できません AWS IoT。

  8. デバイス証明書の設定 - オプションページで、新しい証明書の自動生成 (推奨) を選択し、次を選択します。証明書により AWS IoT 、 はデバイスを安全に識別できます。

  9. 証明書にポリシーをアタッチする - オプションページで、ステップ 1: ポリシーの作成で作成した AWS IoT ポリシーを選択し、モノの作成を選択します。

  10. [証明書とキーのダウンロード] ダイアログボックスで、次の操作を行います。

    1. [ダウンロード] リンクを選択して、モノの証明書、パブリックキー、プライベートキーをダウンロードします。モノの証明書用に作成したディレクトリ (例: iot-sitewise-rule-tutorial/device1) に 3 つのファイルをすべて保存します。

      重要

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

    2. [ダウンロード] のリンクを選択し、ルート CA 証明書をダウンロードします。ルート CA 証明書を iot-sitewise-rule-tutorial に保存します。Amazon Root CA 1 をダウンロードすることをお勧めします。

  11. [完了] をクリックします。

AWS CLI

を使用して AWS IoT モノを作成および設定するには、次の手順に従います AWS CLI。

  1. コマンドラインを開き、次のコマンドを実行して、このチュートリアル用のディレクトリを作成します。

    mkdir iot-sitewise-rule-tutorial
  2. チュートリアルディレクトリに移動します。

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

    mkdir device1

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

  4. AWS IoT モノを作成します。

    aws iot create-thing --thing-name "SiteWiseTutorialDevice1"
    重要

    モノの名前は、ステップ 1 で作成したポリシーで使用される名前パターンと一致する必要があります。それ以外の場合、デバイスは に接続できません AWS IoT。

  5. 証明書を作成し、ファイルを保存します。出力の証明書 ARN を書き留めます。次のステップで必要になります。

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "device1/device.pem.crt" \ --public-key-outfile "device1/public.pem.key" \ --private-key-outfile "device1/private.pem.key"
  6. ステップ 1 で作成したポリシーを証明書にアタッチします。

    aws iot attach-policy \ --policy-name "SiteWiseTutorialDevicePolicy" \ --target "certificate-arn"
  7. モノに証明書をアタッチします。

    aws iot attach-thing-principal \ --thing-name "SiteWiseTutorialDevice1" \ --principal "certificate-arn"
  8. Amazon ルート CA 証明書をダウンロードします。

    curl https://www.amazontrust.com/repository/AmazonRootCA1.pem > AmazonRootCA1.pem

    この証明書は、デバイスが に正常に接続するために必要です AWS IoT。

重要

証明書とキーを安全に保存します。これらの認証情報は、作成後に再度ダウンロードすることはできません。

これで、コンピュータに AWS IoT モノが登録されました。次のいずれかのステップを実行します。

  • ステップ 3: 追加のモノを作成せずにデバイスアセットモデルを作成するに進みます。 AWS IoT このチュートリアルは、1 つのモノだけで完了できます。

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

  • 同じデバイス (コンピュータ) でこのセクションのステップを繰り返して、さらに多くの AWS IoT のモノを作成します。各 AWS IoT モノはコンピュータから同様の CPU とメモリの使用状況データを受け取るため、このアプローチを使用して、複数のデバイスから一意でないデータを取り込む方法を示します。

ステップ 3: デバイスアセットモデルを作成する

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

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

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

  3. アセットモデルの作成 を選択します。

  4. [モデルの詳細] で、モデルの名前を入力します。例えば、SiteWise Tutorial Device Model

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

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

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

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

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

  6. 2 つ目の測定プロパティを追加する場合は、[新しい測定の追加] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  11. (オプション) デバイスごとのコンピューティングに関心のあるその他のメトリクスを追加します。興味深い関数には、minmax などがあります。詳細については、「数式を使用する」を参照してください。「ステップ 4: デバイスフリートアセットモデルを作成する」では、デバイスのフリート全体のデータを使用してメトリクスを計算できる親アセットを作成します。

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

ステップ 4: デバイスフリートアセットモデルを作成する

この手順では、 でアセットモデルを作成し AWS IoT SiteWise 、デバイスのコレクションをシンボル化します。このアセットモデル内で、多数のデバイスアセットを 1 つの包括的なフリートアセットにリンクできる構造を確立します。その後、フリートアセットモデルのメトリクスの概要を示し、接続されたすべてのデバイスアセットのデータを統合します。このアプローチにより、フリート全体の総合的なパフォーマンスに関する包括的なインサイトが得られます。

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

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

  3. アセットモデルの作成 を選択します。

  4. [モデルの詳細] で、モデルの名前を入力します。例えば、SiteWise Tutorial Device Fleet Model

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

    1. [階層名] に「Device」と入力します。

    2. [階層モデル] で、デバイスアセットモデル (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. [メトリクス定義] の 2 行目で、次の操作を実行します。

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

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

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

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

  9. (オプション) デバイスのフリート全体のコンピューティングに関心のあるその他のメトリクスを追加します。

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

ステップ 5: デバイスアセットを作成および設定する

この手順では、デバイスアセットモデルに基づくデバイスアセットを生成します。次に、測定プロパティごとにプロパティエイリアスを定義します。プロパティエイリアスは、アセットプロパティを識別する一意の文字列です。後で、アセット ID とプロパティ ID の代わりにエイリアスを使用して、データアップロードのプロパティを識別できます。詳細については、「のデータストリームを管理する AWS IoT SiteWise」を参照してください。

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

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

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

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

  5. [アセット情報] で、アセットの名前を入力します。例えば、SiteWise Tutorial Device 1

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

  7. 新しいデバイスアセットの場合は、 [編集] を選択します。

  8. 測定値の下:

    1. CPU Usage で、プロパティエイリアスとして /tutorial/device/SiteWiseTutorialDevice1/cpu と入力します。 AWS IoT モノの名前をプロパティエイリアスに含めると、単一の AWS IoT ルールを使用してすべてのデバイスからデータを取り込むことができます。

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

  9. [保存] を選択します。

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

ステップ 6: デバイスフリートアセットを作成および設定する

この手順では、デバイスフリートアセットモデルからデバイスフリートアセットを作成します。次に、個々のデバイスアセットをフリートアセットにリンクします。この関連付けにより、フリートアセットのメトリクスプロパティは、複数のデバイスからのデータをコンパイルおよび分析できます。このデータにより、フリート全体の集合的なパフォーマンスをまとめて確認できます。

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

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

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

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

  5. [アセット情報] で、アセットの名前を入力します。例えば、SiteWise Tutorial Device Fleet 1

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

  7. 新しいデバイスフリートアセットの場合は、 [編集] を選択します。

  8. [このアセットに関連付けられているアセット] で、[関連付けられたアセットの追加] を選択し、以下を行います。

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

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

  9. (オプション) 以前に複数のデバイスアセットを作成した場合は、作成したデバイスアセットごとにステップ 8~10 を繰り返します。

  10. [保存] を選択します。

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

ステップ 7: AWS IoT Core でルールを作成してデバイスアセットにデータを送信する

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

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

  2. 左側のナビゲーションペインで [メッセージルーティング] を選択し、[ルール] を選択します。

  3. [‬ルールを作成]‭ を選択します。

  4. ルールの名前と説明を入力し、[次へ] を選択します。

  5. 次の SQL ステートメントを入力し、[次へ] を選択します。

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

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

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

  6. [ルールのアクション] で、[ AWS IoT SiteWiseのアセットプロパティにメッセージデータを送信する] を選択し、次の操作を行います。

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

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

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

      注記

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

    3. [エントリ ID - オプション]${concat(topic(3), "-cpu-", floor(state.reported.timestamp))} と入力します。

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

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

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

    5. [オフセット (ナノ秒) - オプション] に ${floor((state.reported.timestamp % 1) * 1E9)} と入力します。

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

      注記

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

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

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

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

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

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

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

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

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

      3. [エントリ ID - オプション]${concat(topic(3), "-memory-", floor(state.reported.timestamp))} と入力します。

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

      5. [オフセット (ナノ秒) - オプション] に ${floor((state.reported.timestamp % 1) * 1E9)} と入力します。

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

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

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

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

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

  8. [次へ] を選択します。

  9. 設定を確認し、[作成] を選択してルールを作成します。

ステップ 8: デバイスクライアントスクリプトを実行する

このチュートリアルでは、データをレポートするために実際のデバイスは使用していません。代わりに、スクリプトを実行して CPU とメモリの使用量で AWS IoT モノのデバイスシャドウを更新し、実際のセンサーデータを模倣します。スクリプトを実行するには、まず、必要な 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 Developer Guide] (デベロッパーガイド) の[AWS IoT Device SDK for Python]を参照してください。

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

    pip3 install psutil

    詳細については、[Python Package Index] (パッケージインデックス) の[psutil]を参照してください。

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

    import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT 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 = AWSIoTPyMQTT.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. モノの SiteWiseTutorialDevice1 を選択します。

    4. [デバイスシャドウ] タブを選択し、[クラシックシャドウ] を選択して、シャドウの状態が次の例のようになっていることを確認します。

      { "reported": { "cpu": 24.6, "memory": 85.2, "timestamp": 1579567542.2835066 } }

      モノのシャドウの状態が空であるか、前の例のようになります。スクリプトが実行され、正常に接続されていることを確認します AWS IoT。への接続時にスクリプトが引き続きタイムアウトする場合は AWS IoT、このチュートリアルに従ってモノのポリシーが設定されていることを確認します。

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

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

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

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

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

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

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

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

ステップ 9: チュートリアル後にリソースをクリーンアップする

注記

このチュートリアルで作成したリソースは、データを SiteWise Edge に統合チュートリアルに必要です。このステップを完了する予定がある場合は、このステップのリソースをクリーンアップしないでください。

AWS IoT モノからのデータの取り込みに関するチュートリアルを完了したら、追加料金が発生しないようにリソースをクリーンアップします。

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

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

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

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

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

    2. [編集] を選択します。

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

    4. [保存] を選択します。

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

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

  5. [削除] をクリックします。

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

  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. [削除] を選択します。

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

  7. デバイスのアセットモデル (SiteWise Tutorial Device Model) について、ステップ 4~6 を繰り返します。

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

  2. 左側のナビゲーションペインで [メッセージルーティング] を選択し、[ルール] を選択します。

  3. ルールを選択し、[削除] を選択します。

  4. 確認ダイアログボックスでルール名を入力し、[削除] を選択します。