翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS IoT モノからデータを取り込む
このチュートリアルでは、デバイスシャドウを使用して 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 機能を設定できます。
-
、Amazon DynamoDBAWS IoT Events、およびその他の にデータをストリーミングするための追加のルールを設定します 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 アカウント。アカウントをお持ちでない場合は、「のセットアップ AWS アカウント」を参照してください。
-
にアクセスUnixするための Windows、macOS、Linux、または を実行する開発用コンピュータ AWS Management Console。詳細については、「AWS Management Consoleの開始方法」を参照してください。
-
管理者権限を持つ AWS Identity and Access Management (IAM) ユーザー。
-
Python 開発用コンピュータにインストールされている 3、または AWS IoT モノとして登録するデバイスにインストールされている 3。
ステップ 1: AWS IoT ポリシーを作成する
この手順では、モノがこのチュートリアルで使用するリソース AWS IoT にアクセスできるようにする AWS IoT ポリシーを作成します。
AWS IoT ポリシーを作成するには
-
AWS Management Console
にサインインします。 -
AWS IoT SiteWise がサポートされているAWS リージョンを確認します。必要に応じて、これらのサポートされているいずれかのリージョンに切り替えます。
-
AWS IoT コンソール
に移動します。デバイス接続ボタンが表示されたら、それを選択します。 -
左のナビゲーションペインで、[安全性] を選択し、[ポリシー] を選択します。
-
[Create] (作成) を選択します。
-
AWS IoT ポリシーの名前を入力します (例:
SiteWiseTutorialDevicePolicy
)。 -
ポリシードキュメント JSONで、次のポリシーをJSONフォームに入力することを選択します。置換
region
また、account-id
と などのリージョンとアカウント IDus-east-1
を入力します123456789012
。{ "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メッセージを使用してデバイスシャドウと通信できるようになります。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
で始まるモノに適用されます。モノに別の名前を使用するには、それに応じてポリシーを更新する必要があります。 -
[Create] (作成) を選択します。
ステップ 2: モノを作成して設定する AWS IoT
この手順では、 AWS IoT モノを作成して設定します。開発用コンピュータを AWS IoT モノとして指定できます。進行するにつれて、ここで学習する原則を実際のプロジェクトに適用できることに注意してください。や無料 など AWS IoT SDK、 を実行できるあらゆるデバイスで AWS IoT モノを柔軟に作成 AWS IoT Greengrass してセットアップできますRTOS。詳細については、「 AWS IoT デベロッパーガイドAWS IoT SDKs」の「」を参照してください。
AWS IoT モノを作成して設定するには
-
コマンドラインを開き、次のコマンドを実行して、このチュートリアル用のディレクトリを作成します。
mkdir iot-sitewise-rule-tutorial cd iot-sitewise-rule-tutorial
-
次のコマンドを実行して、モノの証明書用のディレクトリを作成します。
mkdir device1
追加のモノを作成する場合は、それに応じてディレクトリ名の番号を増やして、どの証明書がどのモノに属しているかをわかるようにします。
-
AWS IoT コンソール
に移動します。 -
左側のナビゲーションペインで、管理セクションのすべてのデバイスを選択します。[モノ] を選択します。
-
[まだモノがありません] ダイアログボックスが表示された場合は、[モノの作成] を選択します。それ以外の場合は、[モノの作成] を選択します。
-
[モノを作成する] ページで、[単一のモノを作成する] を選択し、[次へ] を選択します。
-
[モノのプロパティを指定する] ページで、 AWS IoT のモノの名前 (例:
SiteWiseTutorialDevice1
) を入力し、[次へ] を選択します。追加のモノを作成する場合は、それに応じてモノの名前の番号を増やします。重要
モノの名前は、ステップ 1: ポリシー の作成で作成した AWS IoT ポリシーで使用される名前と一致する必要があります。それ以外の場合、デバイスは に接続できません AWS IoT。
-
[デバイス証明書を構成する - オプション] ページで [新しい証明書を自動生成する (推奨)] を選択し、[次へ] を選択します。証明書により、 AWS IoT はデバイスを安全に識別できます。
-
証明書にポリシーをアタッチする - オプションページで、ステップ 1: ポリシーの作成で作成した AWS IoT ポリシーを選択し、モノの作成を選択します。
-
[証明書とキーのダウンロード] ダイアログボックスで、次の操作を行います。
-
[ダウンロード] リンクを選択して、モノの証明書、パブリックキー、プライベートキーをダウンロードします。モノの証明書用に作成したディレクトリ (例:
iot-sitewise-rule-tutorial/device1
) に 3 つのファイルをすべて保存します。重要
モノの証明書とキーをダウンロードできるのは今回だけです。この証明書とキーは、デバイスが AWS IoTに正常に接続するために必要です。
-
[ダウンロード] のリンクを選択し、ルート CA 証明書をダウンロードします。ルート CA 証明書を
iot-sitewise-rule-tutorial
に保存します。Amazon Root CA 1 をダウンロードすることをお勧めします。
-
-
[完了] をクリックします。
これで、コンピュータに AWS IoT モノが登録されました。次のステップのいずれかを実行します。
-
ステップ 3: 追加のモノを作成せずにデバイスアセットモデルを作成するに進みます。 AWS IoT このチュートリアルは、1 つのモノだけで完了できます。
-
別のコンピュータまたはデバイスでこのセクションの手順を繰り返して、さらに多くの AWS IoT のモノを作成します。このチュートリアルでは、複数のデバイスから一意CPUおよびメモリ使用量データを取り込むことができるように、このオプションに従うことをお勧めします。
-
同じデバイス (コンピュータ) でこのセクションのステップを繰り返して、さらに多くの AWS IoT のモノを作成します。各 AWS IoT モノはコンピュータから同様の CPUおよびメモリ使用量データを受け取るため、このアプローチを使用して、複数のデバイスから一意でないデータを取り込む方法を示します。
ステップ 3: デバイスアセットモデルを作成する
この手順では、 でアセットモデルを作成し AWS IoT SiteWise 、 CPUおよびメモリ使用量データをストリーミングするデバイスを表します。デバイスのグループを表すアセット内のデータを処理するために、アセットモデルは同じタイプの複数のアセットに一貫した情報を適用します。詳細については、「産業アセットのモデル化」を参照してください。
デバイスを表すアセットモデルを作成するには
-
AWS IoT SiteWise コンソール
に移動します。 -
左のナビゲーションペインで [モデル] を選択します。
-
[モデルの作成] を選択します。
-
[モデルの詳細] で、モデルの名前を入力します。例えば、
SiteWise Tutorial Device Model
と指定します。 -
[測定定義] で、次の操作を実行します。
-
[名前] に「
CPU Usage
」と入力します。 -
[単位] に「
%
」と入力します。 -
[データ型] は [倍精度浮動小数点型] のままにします。
測定プロパティは、デバイスの raw データストリームを表します。詳細については、「機器からのデータストリームを定義する (測定値)」を参照してください。
-
-
2 つ目の測定プロパティを追加する場合は、[新しい測定の追加] を選択します。
-
[測定定義] の 2 行目で、次の操作を実行します。
-
[名前] に「
Memory Usage
」と入力します。 -
[単位] に「
%
」と入力します。 -
[データ型] は [倍精度浮動小数点型] のままにします。
-
-
[メトリクス定義] で、次の操作を実行します。
-
[名前] に「
Average CPU Usage
」と入力します。 -
[計算式] に「
avg(CPU Usage)
」と入力します。表示されたら、自動入力リストから CPU Usage を選択します。 -
[時間間隔] に「
5 minutes
」と入力します。
メトリクスプロパティは、ある間隔ですべての入力データポイントを処理し、間隔ごとに 1 つのデータポイントを出力する集計計算を定義します。このメトリクスプロパティは、各デバイスの平均CPU使用量を 5 分ごとに計算します。詳細については、「プロパティやその他のアセット (メトリクス) からのデータを集約する」を参照してください。
-
-
[新しいメトリクスの追加] を選択して、2 つ目のメトリクスプロパティを追加します。
-
[メトリクス定義] の 2 行目で、次の操作を実行します。
-
[名前] に「
Average Memory Usage
」と入力します。 -
[計算式] に「
avg(Memory Usage)
」と入力します。表示されたら、自動入力リストから Memory Usage を選択します。 -
[Time interval (時間間隔) ] に「
5 minutes
」と入力します。
このメトリクスプロパティは、各デバイスの平均メモリ使用率を 5 分ごとに計算します。
-
-
(オプション) デバイスごとのコンピューティングに関心のあるその他のメトリクスを追加します。興味深い関数には、
min
、max
などがあります。詳細については、「数式を使用する」を参照してください。「ステップ 4: デバイスフリートアセットモデルを作成する」では、デバイスのフリート全体のデータを使用してメトリクスを計算できる親アセットを作成します。 -
[モデルの作成] を選択します。
ステップ 4: デバイスフリートアセットモデルを作成する
この手順では、 でアセットモデルを作成し AWS IoT SiteWise 、デバイスのコレクションをシンボル化します。このアセットモデル内では、多数のデバイスアセットを 1 つの包括的なフリートアセットにリンクできる構造を確立します。次に、フリートアセットモデルのメトリクスの概要を示し、接続されているすべてのデバイスアセットのデータを統合します。このアプローチにより、フリート全体の総パフォーマンスに関する包括的なインサイトが得られます。
デバイスフリートを表すアセットモデルを作成するには
-
AWS IoT SiteWise コンソール
に移動します。 -
左のナビゲーションペインで [モデル] を選択します。
-
[モデルの作成] を選択します。
-
[モデルの詳細] で、モデルの名前を入力します。例えば、
SiteWise Tutorial Device Fleet Model
と指定します。 -
[階層定義] で、次の操作を実行します。
-
[階層名] に「
Device
」と入力します。 -
[階層モデル] で、デバイスアセットモデル (
SiteWise Tutorial Device Model
) を選択します。
階層は、親 (フリート) アセットモデルと子 (デバイス) アセットモデルの間の関係を定義します。親アセットは、子アセットのプロパティデータにアクセスできます。後でアセットを作成する場合は、親アセットモデルの階層定義に従って、子アセットを親アセットに関連付ける必要があります。詳細については、「アセットモデル階層の定義」を参照してください。
-
-
[Metric definitions (メトリクス定義) ] で、次の操作を実行します。
-
[名前] に「
Average CPU Usage
」と入力します。 -
[計算式] に「
avg(Device | Average CPU Usage)
」と入力します。自動入力リストが表示されたら、[Device] を選択して階層を選択し、[Average CPU Usage] を選択して前に作成したデバイスアセットからメトリクスを選択します。 -
[Time interval (時間間隔) ] に「
5 minutes
」と入力します。
このメトリクスプロパティは、
Device
階層を通じてフリートアセットに関連付けられているすべてのデバイスアセットの平均CPU使用量を計算します。 -
-
[新しいメトリクスの追加] を選択して、2 つ目のメトリクスプロパティを追加します。
-
[メトリクス定義] の 2 行目で、次の操作を実行します。
-
[名前] に「
Average Memory Usage
」と入力します。 -
[計算式] に「
avg(Device | Average Memory Usage)
」と入力します。自動入力リストが表示されたら、[Device] を選択して階層を選択し、[Average Memory Usage] を選択して前に作成したデバイスアセットからメトリクスを選択します。 -
[Time interval (時間間隔) ] に「
5 minutes
」と入力します。
このメトリクスプロパティは、
Device
階層を通じてフリートアセットに関連付けられているすべてのデバイスアセットの平均メモリ使用率を計算します。 -
-
(オプション) デバイスのフリート全体のコンピューティングに関心のあるその他のメトリクスを追加します。
-
[モデルの作成] を選択します。
ステップ 5: デバイスアセットを作成して設定する
この手順では、デバイスアセットモデルに基づくデバイスアセットを生成します。次に、測定プロパティごとにプロパティエイリアスを定義します。プロパティエイリアスは、アセットプロパティを識別する一意の文字列です。後で、アセット ID とプロパティ ID の代わりにエイリアスを使用して、データアップロードのプロパティを識別できます。詳細については、「産業データストリームをアセットプロパティにマッピングする」を参照してください。
デバイスアセットを作成し、プロパティエイリアスを定義するには
-
AWS IoT SiteWise コンソール
に移動します。 -
左側のナビゲーションペインで [アセット] を選択します。
-
[アセットの作成] を選択します。
-
[モデル情報] で、デバイスアセットモデル
SiteWise Tutorial Device Model
を選択します。 -
[アセット情報] で、アセットの名前を入力します。例えば、
SiteWise Tutorial Device 1
と指定します。 -
[アセットの作成] を選択します。
-
新しいデバイスアセットの場合は、 [編集] を選択します。
-
CPU Usage で、プロパティエイリアスとして
/tutorial/device/SiteWiseTutorialDevice1/cpu
と入力します。 AWS IoT モノの名前をプロパティエイリアスに含めると、1 つの AWS IoT ルールを使用してすべてのデバイスからデータを取り込むことができます。 -
Memory Usage で、プロパティエイリアスとして
/tutorial/device/SiteWiseTutorialDevice1/memory
と入力します。 -
[Save] を選択します。
以前に複数の AWS IoT モノを作成した場合は、デバイスごとにステップ 3 ~ 10 を繰り返し、それに応じてアセット名とプロパティエイリアスの数を増やします。たとえば、2 つ目のデバイスアセットの名前は SiteWise Tutorial Device 2
となり、そのプロパティエイリアスは /tutorial/device/SiteWiseTutorialDevice2/cpu
および /tutorial/device/SiteWiseTutorialDevice2/memory
となります。
ステップ 6: デバイスフリートアセットを作成して設定する
この手順では、デバイスフリートアセットモデルから派生したデバイスフリートアセットを作成します。次に、個々のデバイスアセットをフリートアセットにリンクします。この関連付けにより、フリートアセットのメトリクスプロパティは、複数のデバイスからのデータをコンパイルおよび分析できます。このデータにより、フリート全体の総パフォーマンスを一元的に把握できます。
デバイスフリートアセットを作成してデバイスアセットを関連付けるには
-
AWS IoT SiteWise コンソール
に移動します。 -
左側のナビゲーションペインで [アセット] を選択します。
-
[アセットの作成] を選択します。
-
[モデル情報]で、デバイスフリートアセットモデル
SiteWise Tutorial Device Fleet Model
を選択します。 -
[アセット情報] で、アセットの名前を入力します。例えば、
SiteWise Tutorial Device Fleet 1
と指定します。 -
[アセットの作成] を選択します。
-
新しいデバイスフリートアセットの場合は、 [編集] を選択します。
-
このアセットに関連付けられたアセット で、関連付けられたアセットを追加 を選択し、以下を実行します。
-
[階層] で、[Device] を選択します。この階層は、デバイスとフリートアセットの間の階層関係を識別します。この階層は、このチュートリアルで前にデバイスフリートアセットモデルで定義しました。
-
[アセット] で、デバイスアセット (SiteWise Tutorial Device 1) を選択します。
-
-
(オプション) 以前に複数のデバイスアセットを作成した場合は、作成したデバイスアセットごとにステップ 8~10 を繰り返します。
-
[Save] を選択します。
これで、デバイスアセットが階層として編成されているのがわかります。
ステップ 7: AWS IoT Core でルールを作成してデバイスアセットにデータを送信する
この手順では、 でルールを確立します AWS IoT Core。このルールは、デバイスシャドウからの通知メッセージを解釈し、 のデバイスアセットにデータを送信するように設計されています AWS IoT SiteWise。デバイスのシャドウが更新されるたびに、 AWS IoT はMQTTメッセージを送信します。MQTT メッセージに基づいてデバイスシャドウが変更されたときにアクションを実行するルールを作成できます。この場合、目的は、更新メッセージを処理し、プロパティ値を抽出して、 のデバイスアセットに送信することです AWS IoT SiteWise。
AWS IoT SiteWise アクションを使用してルールを作成するには
-
AWS IoT コンソール
に移動します。 -
左側のナビゲーションペインで [メッセージルーティング] を選択し、[ルール] を選択します。
-
ルールの作成を選択します。
-
ルールの名前と説明を入力し、[次へ] を選択します。
-
次のSQLステートメントを入力し、次へ を選択します。
SELECT * FROM '$aws/things/+/shadow/update/accepted' WHERE startsWith(topic(3), "SiteWiseTutorialDevice")
このルールクエリステートメントは、デバイスシャドウサービスがシャドウの更新を
$aws/things/
にパブリッシュするため、機能します。デバイスシャドウの詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の [Device shadow service] (デバイスシャドウサービス) を参照してください。thingName
/shadow/update/acceptedWHERE
句では、このルールクエリステートメントはtopic(3)
関数を使用して、トピックの 3 番目のセグメントからモノの名前を取得します。次に、このステートメントは、名前がチュートリアルのデバイス名と一致しないデバイスを除外します。の詳細については AWS IoT SQL、「 AWS IoT デベロッパーガイド」の「 AWS IoT SQLリファレンス」を参照してください。 -
[ルールのアクション] で、[ AWS IoT SiteWiseのアセットプロパティにメッセージデータを送信する] を選択し、次の操作を行います。
-
[プロパティエイリアスによる] を選択します。
-
[Pプロパティエイリアス] に「
/tutorial/device/${topic(3)}/cpu
」と入力します。${...}
構文は置換テンプレートです。 は中括弧内のコンテンツ AWS IoT を評価します。この置換テンプレートは、トピックからモノの名前を取得し、モノごとに固有のエイリアスを作成します。詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[Substitution templates] (置換テンプレート) を参照してください。注記
置換テンプレート内の式は
SELECT
ステートメントとは別に評価されるため、AS
句を使用して作成されたエイリアスは置換テンプレートを使用して参照することはできません。サポートされている関数と演算子に加えて、元のペイロードに存在する情報のみを参照できます。 -
[エントリ ID - オプション] に
${concat(topic(3), "-cpu-", floor(state.reported.timestamp))}
と入力します。エントリは、各値エントリの試行をIDs一意に識別します。エントリがエラーを返す場合は、エラーの出力でエントリ ID を検索して、問題をトラブルシューティングすることができます。このエントリ ID の置換テンプレートは、モノの名前とデバイスの報告されたタイムスタンプを組み合わせたものです。たとえば、結果のエントリ ID は
SiteWiseTutorialDevice1-cpu-1579808494
のようになります。 -
[時間 (秒)] に「
${floor(state.reported.timestamp)}
」と入力します。この置換テンプレートは、デバイスの報告されたタイムスタンプから秒単位で時間を計算します。このチュートリアルでは、デバイスは Unix エポック時間でタイムスタンプ (秒) を浮動小数点数として報告します。
-
[オフセット (ナノ秒) - オプション] に
${floor((state.reported.timestamp % 1) * 1E9)}
と入力します。この置換テンプレートは、デバイスの報告されたタイムスタンプの小数部分を変換して、秒単位の時間からのナノ秒オフセットを計算します。
注記
AWS IoT SiteWise では、データに Unix エポックタイムの現在のタイムスタンプが必要です。デバイスが正確に時間を報告しない場合、[timestamp () ] (タイムスタンプ) を使って AWS IoT ルールエンジンから現在の時間を取得することができます。この関数は、時刻をミリ秒単位で報告するため、ルールアクションの時間パラメータを次の値に更新する必要があります。
-
[Time in seconds (時間 (秒)) ] に「
${floor(timestamp() / 1E3)}
」と入力します。 -
[オフセット (ナノ秒)] に「
${(timestamp() % 1E3) * 1E6}
と入力します。
-
-
[データ型] で、[Double (倍精度浮動小数点型) ] を選択します。
このデータ型は、アセットモデルで定義したアセットプロパティのデータ型と一致する必要があります。
-
[値] には「
${state.reported.cpu}
」と入力します。置換テンプレートでは、.
演算子を使用して、JSON構造内から値を取得します。 -
[エントリの追加] を選択して、メモリ使用率プロパティに新しいエントリを追加し、そのプロパティに対して次の手順を再度実行します。
-
[プロパティエイリアスによる] を選択します。
-
[Pプロパティエイリアス] に「
/tutorial/device/${topic(3)}/memory
」と入力します。 -
[エントリ ID - オプション] に
${concat(topic(3), "-memory-", floor(state.reported.timestamp))}
と入力します。 -
[時間 (秒)] に「
${floor(state.reported.timestamp)}
」と入力します。 -
[オフセット (ナノ秒) - オプション] に
${floor((state.reported.timestamp % 1) * 1E9)}
と入力します。 -
[データ型] で、[倍精度浮動小数点型] を選択します。
-
[値] には「
${state.reported.memory}
」と入力します。
-
-
IAM ロール で、新しいロールの作成 を選択して、このルールアクションの IAM ロールを作成します。このロールにより、 AWS IoT はデバイスフリートアセットとそのアセット階層のプロパティにデータをプッシュできます。
-
ロール名を入力し、[作成] を選択します。
-
-
(オプション) ルールのトラブルシューティングに使用できるエラーアクションを設定します。詳細については、「ルールのトラブルシューティング (AWS IoT SiteWise)」を参照してください。
-
[次へ] を選択します。
-
設定を確認し、[作成] を選択してルールを作成します。
ステップ 8: デバイスクライアントスクリプトを実行する
このチュートリアルでは、実際のデバイスを使用してデータをレポートしません。代わりに、スクリプトを実行して AWS IoT モノのデバイスシャドウを で更新CPUし、メモリ使用量を実際のセンサーデータを模倣します。スクリプトを実行するには、まず必要なPythonパッケージをインストールする必要があります。この手順では、必要なPythonパッケージをインストールし、デバイスクライアントスクリプトを実行します。
デバイスクライアントスクリプトを設定および実行するには
-
AWS IoT コンソール
に移動します。 -
左側のナビゲーションペインの下部にある [設定] を選択します。
-
デバイスクライアントスクリプトで使用するためにカスタムエンドポイントを保存します。このエンドポイントを使用して、モノのシャドウとやり取りします。このエンドポイントは、現在のリージョンのアカウントに固有です。
カスタムエンドポイントは、次の例のようになります。
identifier
.iot.region
.amazonaws.com -
コマンドラインを開き、次のコマンドを実行して、先ほど作成したチュートリアル用のディレクトリに移動します。
cd iot-sitewise-rule-tutorial
-
以下のコマンドを実行して、 AWS IoT Device SDK for Pythonをインストールします。
pip3 install AWSIoTPythonSDK
詳細については、[AWS IoT Developer Guide] (デベロッパーガイド) の[AWS IoT Device SDK for Python]を参照してください。
-
次のコマンドを実行して、psutil をインストールします。psutil は、クロスプラットフォームプロセスおよびシステムユーティリティライブラリです。
pip3 install psutil
詳細については、[Python Package Index] (パッケージインデックス) の[psutil]
を参照してください。 -
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()
-
以下のパラメータを使用して、コマンドラインから
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 モノのためにスクリプトを実行している場合は、それに応じてモノの名前と証明書ディレクトリを更新します。
-
-
デバイスでプログラムを開いたり閉じたりして、 CPUとメモリの使用量がどのように変化するかを確認してください。このスクリプトは、各 CPUとメモリ使用量の読み取り値を出力します。スクリプトがデータをデバイスシャドウサービスに正常にアップロードする場合、スクリプトの出力は次の例のようになります。
[SiteWiseTutorialDevice1] CPU: 24.6% Memory: 85.2% [SiteWiseTutorialDevice1] Update request e6686e44-fca0-44db-aa48-3ca81726f3e3 accepted
-
スクリプトがデバイスシャドウを更新していることを確認するには、次の手順を実行します。
-
AWS IoT コンソール
に移動します。 -
左側のナビゲーションペインで、[すべてのデバイス] を選択し、[モノ] を選択します。
-
モノ、 を選択しますSiteWiseTutorialDevice。
-
[デバイスシャドウ] タブを選択し、[クラシックシャドウ] を選択して、シャドウの状態が次の例のようになっていることを確認します。
{ "reported": { "cpu": 24.6, "memory": 85.2, "timestamp": 1579567542.2835066 } }
モノのシャドウ状態が空であるか、前の例のように見えない場合は、スクリプトが実行され、正常に に接続されていることを確認します AWS IoT。への接続時にスクリプトが引き続きタイムアウトする場合は AWS IoT、このチュートリアルに従ってモノのポリシーが設定されていることを確認します。
-
-
ルールアクションが AWS IoT SiteWiseにデータを送信していることを確認するには、次の手順を実行します。
-
AWS IoT SiteWise コンソール
に移動します。 -
左側のナビゲーションペインで [Assets (アセット) ] を選択します。
-
デバイスフリートアセット (SiteWise Tutorial Device Fleet 1 1) の横にある矢印を選択してそのアセット階層を展開し、デバイスアセット (SiteWise Tutorial Device 1) を選択します。
-
[測定] を選択します。
-
最新値 セルに、CPU Usage および Memory Usage プロパティの値があることを確認します。
-
CPU Usage プロパティと Memory Usage プロパティ に最新の値がない場合は、ページを更新します。数分経過しても値が表示されない場合は、「ルールのトラブルシューティング (AWS IoT SiteWise)」を参照してください。
-
これで、このチュートリアルは終了です。データのライブ可視化を調べる場合は、 AWS IoT SiteWise Monitorでポータルを設定できます。詳細については、「でデータをモニタリングする AWS IoT SiteWise Monitor」を参照してください。それ以外の場合は、コマンドプロンプトで CTRL+C を押して、デバイスクライアントスクリプトを停止できます。Python プログラムが、料金がかかる量のメッセージを送信することはほとんどありませんが、終了したらプログラムを停止することをお勧めします。
ステップ 9: チュートリアルの後にリソースをクリーンアップする
AWS IoT モノからのデータの取り込みに関するチュートリアルを完了したら、追加料金が発生しないようにリソースをクリーンアップします。
で階層アセットを削除するには AWS IoT SiteWise
-
[AWS IoT SiteWise console]
(コンソール) に移動します。 -
左側のナビゲーションペインで [Assets (アセット) ] を選択します。
-
でアセットを削除するときは AWS IoT SiteWise、まずアセットの関連付けを解除する必要があります。
デバイスフリートアセットからデバイスアセットの関連付けを解除するには、次の手順を実行します。
-
デバイスフリートアセット (SiteWise Tutorial Device Fleet 1) を選択します。
-
[編集] を選択します。
-
[このアセットに関連付けられているアセット] で、このデバイスフリートアセットに関連付けられている各デバイスアセットに対して [関連付け解除] を選択します。
-
[Save] を選択します。
これで、デバイスアセットが階層として編成されなくなったことがわかります。
-
-
デバイスアセット (SiteWise Tutorial Device 1) を選択します。
-
[削除] をクリックします。
-
確認フィールドに「
Delete
」と入力し、[削除] を選択します。 -
デバイスアセットとデバイスフリートアセット (SiteWise Tutorial Device Fleet 1) ごとに、ステップ 4~6 を繰り返します。
で階層アセットモデルを削除するには AWS IoT SiteWise
-
AWS IoT SiteWise コンソール
に移動します。 -
デバイスおよびデバイスフリートアセットを削除していない場合は、削除します。詳細については、前述の手順を参照してください。モデルから作成されたアセットがある場合は、そのモデルを削除できません。
-
左のナビゲーションペインで [モデル] を選択します。
-
デバイスフリートアセット (SiteWise Tutorial Device Fleet Model 1) を選択します。
階層アセットモデルを削除するときは、まず親アセットモデルを削除します。
-
[削除] を選択します。
-
確認フィールドに「
Delete
」と入力し、[削除] を選択します。 -
デバイスのアセットモデル (SiteWise Tutorial Device Model) について、ステップ 4~6 を繰り返します。
でルールを無効化または削除するには AWS IoT Core
-
AWS IoT コンソール
に移動します。 -
左側のナビゲーションペインで [メッセージルーティング] を選択し、[ルール] を選択します。
-
ルールを選択し、[削除] を選択します。
-
確認ダイアログボックスでルール名を入力し、[削除] を選択します。