プログラムによるアセットの作成

この演習を実施するかどうかは任意です。ワークショップを進める上で必須ではありません。

ここまで、AWS IoT SiteWise コンソール上でいくつかのアセットを作成してきましたが、これらは内部的には SiteWise API により作成されています。

大規模な環境で、リソースの CRUD (Create/Read/Update/Delete) をプログラムによって自動化したい場合、GUI ではなくコマンドラインまたは SDK を使用する必要があります。

この演習では、SDK を使用して Generator-4Generator-8 を作成し、データストリームをアセットプロパティに関連付け、発電機を発電所に関連付けます。

実行環境としては、Jupyter notebooksPython 及び Python 向け AWS SDK である Boto3 ライブラリを使用します。

この演習では、以下のノートブックを使用します。

  • 01_SW_Config.ipynb
  • 02_SW_Resources.ipynb

SageMaker インスタンスの Jupyter ノートブックにアクセス

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

  1. スタック SiteWiseWorkshop を選択
  2. 出力 セクションの AmazonSageMakerInstanceURL にあるリンクをクリック
  3. sitewise をダブルクリック
  4. 以下のノートブックがあるので、ダブルクリックして作業を開始します。
    • 01_SW_Config.ipynb
    • 02_SW_Resources.ipynb

Jupyter ノートブックの解説

01_SW_Config.ipynb

  1. Libraries
    • 各種ライブラリをインポートします。
  2. Get AWS region
    • CONFIG に各種設定情報を書き込みます
      • Jupyter ノートブックを起動しているリージョン
      • 利用するアセットモデル名

02_SW_Resources.ipynb

Generator model 262966 Doppler アセットモデルをベースにアセット Generator-4Generator-8 を作成し、アセットプロパティにデータストリームを関連付けます。そして、Power Plant 2 の下に Generator-4Power Plant 3 の下に Generator-8 の親子関係を定義します。

  1. Libraries
    • 各種ライブラリをインポートします。
  2. Restore configuration
    • CONFIG を取得します。
  3. Get the service resource
    • AWS IoT SiteWise のサービスリソースを取得します。
  4. Create Generators
    • 発電機と発電所のアセットモデルの ID を取得します。
  5. Create Generators
    • 発電機のアセットモデルを使ってアセット Generators-4Generator-8 を作成します。
    • アセットの作成結果を確認します。
      • アセット Generator-4Generator-8 の詳細情報が確認できます。以下は Generator-4 についての詳細情報です。
      response: {
        "assetId": "0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7",
        "assetArn": "arn:aws:iotsitewise:us-east-1:123456789012:asset/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7",
        "assetName": "Generator-4",
        "assetModelId": "7bc9da30-01fd-41ca-8e11-aab88c519b10",
        "assetProperties": [
          {
            "id": "0ef75631-3740-4578-8af6-d4b4b0871c9b",
            "name": "serial",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/0ef75631-3740-4578-8af6-d4b4b0871c9b",
              "state": "DISABLED"
            },
            "dataType": "STRING"
          },
          {
            "id": "7a9623a2-5022-4442-b631-1a95668a8575",
            "name": "watts_1m",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/7a9623a2-5022-4442-b631-1a95668a8575",
              "state": "DISABLED"
            },
            "dataType": "DOUBLE",
            "unit": "watts/m"
          },
          {
            "id": "cb13302e-dc1d-4642-9415-38885d48be86",
            "name": "temperature",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/cb13302e-dc1d-4642-9415-38885d48be86",
              "state": "DISABLED"
            },
            "dataType": "DOUBLE",
            "unit": "Celsius"
          },
          {
            "id": "23ca7338-7606-4668-b2b1-c815c4713b37",
            "name": "rpm",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/23ca7338-7606-4668-b2b1-c815c4713b37",
              "state": "DISABLED"
            },
            "dataType": "DOUBLE",
            "unit": "rpm"
          },
          {
            "id": "1c0a810b-8629-4170-9f25-b7105f1d8eeb",
            "name": "sum_watts_5m",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/1c0a810b-8629-4170-9f25-b7105f1d8eeb",
              "state": "DISABLED"
            },
            "dataType": "DOUBLE"
          },
          {
            "id": "5cec1191-b657-414a-a5b7-e4411f8fc496",
            "name": "ratio_avg_rpm_power_5m",
            "notification": {
              "topic": "$aws/sitewise/asset-models/7bc9da30-01fd-41ca-8e11-aab88c519b10/assets/0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7/properties/5cec1191-b657-414a-a5b7-e4411f8fc496",
              "state": "DISABLED"
            },
            "dataType": "DOUBLE"
          }
        ],
        "assetHierarchies": [],
        "assetCompositeModels": [],
        "assetCreationDate": "2019-12-10 01:18:15+00:00",
        "assetLastUpdateDate": "2019-12-10 01:18:15+00:00",
        "assetStatus": {
          "state": "CREATING"
        }
      }
      
  6. Replace the existing property ids, these are only examples
    • 下記の p_id_ で始まる変数の値を、上記のアセットの詳細情報に書かれた各プロパティ ID で置き換えます。
    • 以下は例です。実際の出力結果を確認した上で置換してください。
      # プロパティ名 "serial" の id
      p_id_serial = '0ef75631-3740-4578-8af6-d4b4b0871c9b' 
            
      # プロパティ名 "watts_1m" の id
      p_id_Power = '7a9623a2-5022-4442-b631-1a95668a8575'
            
      # プロパティ名 "temperature" の id
      p_id_Temperature = 'cb13302e-dc1d-4642-9415-38885d48be86'
            
      # プロパティ名 "rpm" の id
      p_id_rpm = '23ca7338-7606-4668-b2b1-c815c4713b37'
            
      # プロパティ名 "sum_watts_5m" の id
      p_id_w5m = '1c0a810b-8629-4170-9f25-b7105f1d8eeb'
            
      # プロパティ名 "ratio_avg_rpm_power_5m" の id
      p_id_ratio = '5cec1191-b657-414a-a5b7-e4411f8fc496'
      
  7. Associate property ids with data streams
    • 作成したアセット Generator-4Generator-8 のプロパティをデータストリームに関連付けます。
    • 成功すると、以下のようなログが確認できます。
      ---> i: 4 a_id: 0ed7f444-c7f5-4de6-ac59-c7ab5ae216d7 <---
      p_id_serial_alias: /DayOneEnergyCorp/4/Generator/serial serial: 05be6e08-59f2-4520-ac9d-7d008f8937c1
      r: {
        "ResponseMetadata": {
          "RequestId": "8430ddc3-79dc-4648-8d28-d48f430237f3",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "8430ddc3-79dc-4648-8d28-d48f430237f3"
          },
          "RetryAttempts": 0
        }
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "b54ed5f7-6d1d-4202-b1b0-8ce1457dbd0c",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "19",
            "connection": "keep-alive",
            "x-amzn-requestid": "b54ed5f7-6d1d-4202-b1b0-8ce1457dbd0c"
          },
          "RetryAttempts": 0
        },
        "errorEntries": []
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "8851c851-936d-4c9a-ba9c-cbdef8b1f399",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "8851c851-936d-4c9a-ba9c-cbdef8b1f399"
          },
          "RetryAttempts": 0
        }
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "1107bea3-437a-410c-86e3-af1fa8b6d409",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "1107bea3-437a-410c-86e3-af1fa8b6d409"
          },
          "RetryAttempts": 0
        }
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "69bd0ed6-7366-4839-b16f-894a1ba5daca",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "69bd0ed6-7366-4839-b16f-894a1ba5daca"
          },
          "RetryAttempts": 0
        }
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "5ccef71e-8cb2-4938-9ead-92c99724894e",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "5ccef71e-8cb2-4938-9ead-92c99724894e"
          },
          "RetryAttempts": 0
        }
      }
            
      r: {
        "ResponseMetadata": {
          "RequestId": "88542946-f93f-4e80-98a6-cf8f9464edd5",
          "HTTPStatusCode": 200,
          "HTTPHeaders": {
            "date": "Tue, 10 Dec 2019 01:44:28 GMT",
            "content-type": "application/json",
            "content-length": "0",
            "connection": "keep-alive",
            "x-amzn-requestid": "88542946-f93f-4e80-98a6-cf8f9464edd5"
          },
          "RetryAttempts": 0
        }
      }
      
  8. Verify property id settings
    • Generator-4Generator-8 の設定結果を確認します。
  9. List assets to get the asset ids
    • Power Plant 2Generator-4 のアセット ID を取得します。
  10. Describe the asset Power Plant 2
    • アセット Power Plant 2 の階層 ID を取得します。
  11. Finally associate the asset
    • Power Plant 2Generator-4 を関連付けます。
  12. Verify the association
    • Power Plant 2Generator-4 が関連付けられたことを確認します。
  13. It’s your turn
    • 手順 9 〜 12 を、対象アセットを Power Plant 3Generator-8 に置き換えて繰り返してください。

以上の演習が完了したら、ノートブックで自由に実験したり、コードを改良したり、新しいことを試してみてください。