AWS IoT Core を介したデータの取り込み

Cloud9 インスタンスには、発電機のデータをランダムに生成し、AWS IoT Core のトピック sitewise/ingest に送信するスクリプトが予め用意されています。スクリプトの実行を開始する前に、このトピックに送信されたメッセージを AWS IoT SiteWise にルーティングするためのトピックルールを作成します。

IoT サービスがアカウント内の AWS IoT SiteWiseに データを転送することを許可するには、サービスロールが必要です。必要なロールは、CloudFormation によって既に作成されています。

ロール名は AWS CloudFormation コンソール の出力セクションの IoTServiceRoleName で確認できます。ロール名は文字列 IoTServiceRole と一意な文字列によって CloudFormation により自動生成されています。AWS IoT Core でルールを作成するため、このロール名をメモしてください。

以下はロール名のサンプルです。

  • SiteWiseWorkshop-MiscResources-UNIQUE_STRING-IoTServiceRole-UNIQUE_STRING
  • mod-UNIQUE_STRING-SiteWiseWorksh-UNIQUE_STRING-IoTServiceRole-UNIQUE_STRING.

AWS IoT Core コンソール へ移動します。

  1. ACT の下の ルール をクリック
  2. ルールが 1 つもない場合は ルールの作成 、そうでなければ 作成 をクリック
  3. 名前: SiteWiseIngestRule を入力
  4. SQL バージョンの使用: 2016-03-23 を選択
  5. ルールクエリステートメント: SELECT entryId, propertyAlias, value, timeInSeconds, quality FROM 'sitewise/ingest' を入力
  6. 1 つ以上のアクションを設定する: アクションの追加 をクリック
  7. アクションを選択してください: AWS IoT SiteWise アセットプロパティにメッセージデータを送信 を選択
  8. アクションの設定: プロパティエイリアス別 を選択
  9. 以下の値を入力
    • プロパティエイリアス: ${propertyAlias}
    • エントリ ID: ${entryId}
    • 時間 (秒): ${timeInSeconds}
    • オフセット (ナノ秒単位): 空白のまま
    • : ${value}
    • データ型: Double
    • 品質: ${quality}
  10. ルートアセット名: ルートアセットが選択されていません のまま
  11. ロール (AWS IoT SiteWise へのアクセスが必要): メモしたロール名を選択
  12. アクションの追加 をクリック
  13. ルールの作成 をクリック

AWS IoT Core にデータを送信するため、データジェネレーター (sitewise-iot-ingest.py) を実行しましょう。

Cloud9 ターミナル で ec2-user ユーザーとして以下のコマンドを実行します。

cd ~/sitewise
./sitewise-iot-ingest.py

トピック sitewise/ingest にサブスクライブすると、AWS IoT Core に以下のようなデータが届くことを確認できます。

{
  "entryId": "d641597a-e093-4662-b6c2-793673455092",
  "propertyAlias": "/DayOneEnergyCorp/8/Generator/rpm",
  "value": 94,
  "timeInSeconds": 1616027541,
  "quality": "GOOD"
}

トピック $aws/sitewise/asset-models/+/assets/+/properties/+ にサブスクライブすることで、より多くのデータを確認することもできます。

また、前の演習でも説明したように、SiteWise コンソールでもアセットの最新の値を確認できます。アセット Generator-7 を表示し、値を確認してみましょう。

データが受信されていることが確認できたら、Cloud9 ターミナルで Ctrl + C を入力して sitewise-iot-ingest.py スクリプトを停止してください。