前回の記事では、Armadillo-IoT G3(以下、Armadillo)よりAWS IoTへ接続する手順をご紹介しました。
この記事では、ストレージサービス「Amazon S3」へのデータの蓄積方法を記載します。
ルールの登録
AWS IoTでは、ルールに従ってデータを処理することができ、その処理の一つとして、Amazon S3へのデータの蓄積が行えます。
AWS IoTにデータを送信するためには、メッセージブローカーというサービスを使用します。
ここでは、データをメッセージ、メッセージを送信する動作をパブリッシュ、受信する動作をサブスクライブと呼びます。
また、サブスクライブするメッセージを振り分けるためにトピックというものが設定されます。
パブリッシュされたメッセージのうち、指定されたトピックのものを抽出するのがルールになります。
以下はその手順です。
-
左のペインからACTを選択し、作成をクリックします。
-
ルールの名前と説明を入力します。
-
ルールクエリステートメントを設定します。TEMPERATUREというトピックにパブリッシュするので、次の文字列を入力します:
SELECT * FROM "TEMPERATURE"
-
アクションの追加をクリックし、「Amazon S3バケットにメッセージを格納する」を選択します。
-
「新しいリソースを作成する」をクリックします。S3のコンソールが表示されますので、「バケットを作成する」を選択します。
-
バケット名を入力します。これ以外の設定は変更しなくても問題ありません。
-
元のコンソールに戻り、プルダウンメニューの横の更新マークをクリックした後、先ほど作成したバケットをプルダウンメニューから選択します。
-
キーに次の文字列を入力します:
temperature-${timestamp()}.json
-
「新しいロールの作成」をクリックし、適当な名前を入力します。その後、「新しいロールの作成」をクリックします。
-
プルダウンメニューの横の更新マークをクリックした後、先ほど作成したロールを選択します。
-
アクションの追加をクリックし、元の画面に戻ります。その後、ルールの作成をクリックします。
ルールの登録はこれで完了です。
サンプルコードの実行
(Armadillo上での準備は、前回の記事をお読みください。)
AWSIoTディレクトリに、以下のコードを置いてください。
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
import datetime
import time
# 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 = AWSIoTMQTTClient(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()
# Publish message to AWS IoT
while True:
try:
fileHandler = open(tempFile)
temp = str(int(fileHandler.read().strip()) / 1000.0)
json = '{"date": "' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + '", "temperature":"' + temp + '"}'
client.publish("TEMPERATURE", json, 1)
print("SUCCESS")
except Exception as e:
print(e)
time.sleep(60 * 5)
前回と同じように、サンプルコード内に証明書等のパス、エンドポイントをご入力ください。
その後、サンプルコードを実行します。SUCCESS
と表示されましたら、送信に成功しています。
もし例外が表示されましたら、送信に失敗しています。もう一度手順をご確認ください。