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

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

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

このチュートリアルでは、実際のデバイスを使用してデータを報告することはありません。代わりに、スクリプトを実行して AWS IoT Thing のデバイスシャドウを 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 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 Thing 証明書へのパス。

    • -k, --key — AWS IoT Thing 証明書のプライベートキーへのパス。

    • -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 他の目的でスクリプトを実行する場合は、それに応じて Thing 名と証明書ディレクトリを更新してください。

  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

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

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

      Thing のシャドウステートが空の場合、または前の例と異なる場合は、スクリプトが実行されていて、に正常に接続されていることを確認してください AWS IoT。に接続してもスクリプトがタイムアウトし続ける場合は AWS IoT、Thing ポリシーがこのチュートリアルに従って設定されていることを確認してください

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

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

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

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

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

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

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

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