Armadillo-IoT G3でAWS IoTを動かす

Armadillo-IoT G3でAWS IoTを動かす:

Armadillo-IoT G3(以下、Armadillo)より、AWS IoTに接続するまでの手順を紹介します。

AWS IoTはインターネットに接続したデバイスとAWSの双方向通信を可能にするサービスです。


AWS IoTへのモノの登録

AWS IoTでは「モノ」という単位でデバイスを管理します。

モノとしてArmadilloを登録することで、ArmadilloからAWS IoTが使用可能となります。

実際に登録する手順を記載します。

  1. AWSマネジメントコンソールにログイン後、https://aws.amazon.com/iot にアクセスします。
  2. 左のペインから「管理」を選択します。
  3. ページから「作成」をクリック後、遷移したページで「単一のモノを作成する」を選択します。
  4. モノの名前を入力し、ページ下部の「次へ」をクリックします。
  5. 証明書の作成をクリックします。
  6. 3つのファイルすべてをダウンロードします。その後、証明書を有効化します。そして、ページ下部の「完了」を選択します。
  7. 左のペインの「安全性」から「ポリシー」を選択します。
  8. ポリシーの名前と、アクション(iot:*)を入力後、許可にチェックを入れ、「作成」をクリックします。
  9. 左のペインの「安全性」から「証明書」を選択します。
  10. 先ほど作成した証明書の右上の「・・・」をクリックし、ポリシーのアタッチを選択します。
  11. 先ほど作成したポリシーにチェックを入れ、アタッチをクリックします。
  12. https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/managing-device-certs.html#server-authentication よりAmazon ルート CA 1をダウンロードし、root-CA.crtにリネームしてください。
これで、AWS IoTへのモノの登録が完了します。


Armadillo上での準備

  1. ArmadilloにPython3をインストールします。
[Armadillo ~]# apt update 
[Armadillo ~]# apt install python3 
  1. pipを用いて、「AWS IoT Python SDK」をインストールします。
[Armadillo ~]# pip install AWSIoTPythonSDK 
  1. Armadillo上に作業フォルダを用意します。
[armadillo ~]# mkdir AWSIoT 
[armadillo ~]# mkdir AWSIoT/certs 
  1. certsフォルダに、「AWS IoTへのモノの登録」6. と12. でダウンロードした証明書をftp等を用いてコピーします。


サンプルコード

以下のサンプルコードではArmadilloの機能を用いて、CPUの温度を取得し、AWS IoTの「シャドウ」と呼ばれる場所にアップロードします。

Armadillo上のAWSIoTディレクトリに、以下のコードを置いてください。

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTShadowClient 
import time 
 
# Callback function 
 
def callback(payload, status, token): 
    if status == "accepted": 
        print("Connection accepted. token: " + token) 
    elif status == "rejected": 
        print("Connection rejected. token: " + token) 
    elif status == "timeout": 
        print("Connection timeout. token: " + token) 
    else: 
        print("Unknown error. token: " + token) 
 
# Configure 
rootCAPath = "Root CA path" 
certificatePath = "Your certicifate key path" 
privateKeyPath = "Your private key path" 
thingName = "Name of your thing" 
endPoint = "Your endpoint" 
 
clientId = "AWSIoTGettingStarted" 
port = 8883 
 
tempFile = "/sys/class/thermal/thermal_zone1/temp" 
 
# Create a client 
client = AWSIoTMQTTShadowClient(clientId) 
client.configureEndpoint(endPoint, port) 
client.configureCredentials(rootCAPath, privateKeyPath, certificatePath) 
 
# Client configuration 
client.configureAutoReconnectBackoffTime(1, 32, 20) 
client.configureConnectDisconnectTimeout(10) 
client.configureMQTTOperationTimeout(5) 
 
# Connect to AWS IoT 
client.connect() 
 
# Create a deviceShadowHandler 
handler = client.createShadowHandlerWithName(thingName, True) 
 
# Delete the shadow document 
handler.shadowDelete(callback, 5) 
 
# Write the temperature of the CPU on shadow 
while True: 
    try: 
        fileHandler = open(tempFile) 
        temp = str(int(fileHandler.read().strip()) / 1000.0) 
        json = '{"state":{"desired":{"property":"' + temp + '"}}}' 
    except Exception as e: 
        print(e) 
        json = '{"state":{"desired":{"property":"Client threw an Exception"}}}' 
    finally: 
        handler.shadowUpdate(json, callback, 5) 
        time.sleep(1) 
17行目から20行目は、証明書等のパス等をご入力ください。

21行目には、以下の手順で入手できるエンドポイントを入力します。

  1. 左のペインから管理を選択します。
  2. 先ほど作成したモノを選択します。
  3. 左のメニューから操作を選択します。
以下の場所にエンドポイントがあります。



img09.png


サンプルコードを書き換えましたら、実行できます。

Connection accepted. と表示されましたら、接続に成功しています。

Connection rejected Connection timeout と表示されましたら、接続に失敗しています。もう一度手順をご確認ください。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)