5. シナリオ1: センサーデータの送信

Intel Edisonに接続された照度センサーと温度センサーのデータをEdison上のプログラムで定期的にAWS IoTに送信します。AWS IoTではルールに基づきDynamoDBへ保存します。また、AWS IoTはルールに基づき、しきい値を下回った場合はSNSを使ってE-mailでアラートを送信します。WebサイトはS3で別途用意済みで、Webブラウザで開きDynamoDBに保存されたデータを確認できます。

_images/scenario1.png

送信するセンサーデータは以下のJSONフォーマットとします。

{
   "timestamp": "2015-10-24T14:16:37.305Z", ← ISO8601形式
   "illuminance": "300",                    ← 照度センサーのアナログ値
   "temperature": "200"                     ← 温度センサーのアナログ値
 }

使用するDynamoDBのテーブルやメール通知の設定は「AWS環境の準備」で作成したCloud Formationのスタックに含まれています。

5.1. DynamoDB保存のAWS IoT ルールを作成

マネージメントコンソールのサービス一覧から[AWS IoT]をクリックして開きます。

_images/4-servicemenu@2x.png

DynamoDBに保存するルールを作成します。メニューから [ルール] を選択します。以下の様な画面が表示された場合は、[ルールを作成する] をクリックします。

_images/5-create-rule-1@2x.png

あるいは、ルールの一覧が表示された場合は [作成] をクリックします。

_images/5-create-rule-2@2x.png

以下の項目について値を入力します。[アクションの追加] をクリックします。

設定項目
名前 SaveToDynamoDB_<参加者番号>
属性 * (アスタリスク)
トピックフィルター place-a/position-<参加者番号>

_images/5-create-rule-3@2x.png

[DynamoDB テーブルにメッセージを挿入する] を選択し、[アクションの設定] をクリックします。

_images/5-create-rule-4@2x.png

以下の項目について値を入力します。[テーブル名]、[IAM ロール名] は、リストから選択します。

設定項目
テーブル名 AWSIoTHandsonStack-<参加者番号>-SensorDataTable-<英数字>
ハッシュキー値 ${topic()}
レンジキーの値 ${timestamp()}
この列にメッセージデータを書き込む value
IAM ロール名 AWSIoTHandsonStack-<参加者番号>-SaveToDynamodbRole-<英数字> (リストから選択)

_images/5-create-rule-5@2x.png

[IAM ロール名] を選択した後、[ロールの更新] をクリックします。ロールが正常に更新されると、下記のメッセージが表示されます。

_images/role-successfully-updated.png

最後に、[アクションの追加] をクリックします。

[DynamoDB テーブルにメッセージを挿入する] が追加されたことを確認し、[ルールを作成] をクリックします。

_images/5-create-rule-6@2x.png

作成されたルールの情報が表示されます。[←]をクリックします。

_images/5-create-rule-7@2x.png

ルール一覧が表示され、作成したルールが表示されている事を確認します。

_images/5-create-rule-8@2x.png

5.2. メール通知のAWS IoT ルールを作成

ルールの一覧が表示された画面で、[作成] をクリックします。

_images/5-create-rule-2@2x.png

以下の項目について値を入力します。[アクションの追加] をクリックします。

項目
名前 NotifyToAdmin_<参加者番号>
属性 *, topic(1) AS place, topic(2) AS position
トピックフィルター place-a/position-<参加者番号>
条件 illuminance < 30

_images/5-create-rule-9@2x.png

[SNS プッシュ通知としてメッセージを送信する] を選択し、[アクションの設定] をクリックします。

_images/5-create-rule-10@2x.png

以下の項目について値を入力します。[SNS ターゲット]、[IAM ロール名] をリストから選択します。

項目
SNS ターゲット AWSIoTHandsonStack-<参加者番号>-NotifyToAdminTopic-<英数字>
IAM ロール名 AWSIoTHandsonStack-<参加者番号>-NotifyToSNSRole-<英数字>

_images/5-create-rule-11@2x.png

[IAM ロール名] を選択した後、[ロールの更新] をクリックします。ロールが正常に更新されると、下記のメッセージが表示されます。

_images/role-successfully-updated.png

最後に、[アクションの追加] をクリックします。

[SNS プッシュ通知としてメッセージを送信する] が追加されたことを確認し、[ルールを作成する] をクリックします。

_images/5-create-rule-12@2x.png

作成されたルールの情報が表示されます。[←]をクリックします。

_images/5-create-rule-13@2x.png

ルール一覧が表示され、作成したルールが表示されている事を確認します。

_images/5-create-rule-14@2x.png

CloudFormationでStack作成時にメール通知の宛先確認メールが届いているため、メール内の確認リンク[Confirm subscription]をクリックし、メールの受け取りを承認して下さい。

_images/5-email@2x.png

5.3. プログラムの実行

本ハンズオン用に用意されているzipファイルを解凍したaws-iot-handson-dojo-basicの配下scenario1にシナリオ1用のNode.jsプログラムがあります。プログラムを実行します。5秒ごとにメッセージが送られ続けます。このシナリオ終了時までそのまま動かし続けます。ハンズオン終了時にプログラムを終了させる場合はCtrl+Cを押します。

# cd ~/aws-iot-handson-dojo-basic/scenario1/
# node main.js
Connected to Message Broker
Publishing: {"timestamp":"2016-04-06T07:05:08.973Z","illuminance":343,"temperature":510}
Publishing: {"timestamp":"2016-04-06T07:05:14.035Z","illuminance":343,"temperature":512}
Publishing: {"timestamp":"2016-04-06T07:05:19.084Z","illuminance":343,"temperature":512}

5.4. データの受信を確認する

AWS IoTの テスト にて、”トピックのサブスクリプション” に “place-a/position-<任意の番号>” を入力し、[トピックへのサブスクライブ] をクリックすれば、左側の “サブスクリプション” 欄に、”place-a/position-<任意の番号>”が、表示されます。デバイスから送信されているセンサーデータがリアルタイムで表示されます。

_images/5-test-1.png _images/5-test-15.png

5.5. DynamoDBに保存されたデータの確認

AWSマネージメントコンソールのサービス一覧から[DynamoDB]をクリックして開きます。左側のメニューから[テーブル]をクリックし、テーブル一覧から ”AWSIoTHandsonStack-<参加者番号>-SensorDataTable-<英数字>” をクリックします。タブの[項目]を選択すると、テーブル内のデータが表示されます。

_images/5-dynamodb-1@2x.png

DynamoDBに保存されたデータをS3に保存されているWebサイトでも確認する事ができます。Webブラウザに読み込まれたJavaScriptはWebブラウザ上で動作して、CognitoでAWSにアクセスするための一時クレデンシャルを取得し、DynamoDBに直接アクセスしてデータを取得しグラフ表示します。

以下のURLをブラウザで開きます。

https://s3-ap-northeast-1.amazonaws.com/awsiot-handson-dojo-jp/scenario1/IoT+HandsOn+Dojo+Basic+-+Scenario+1_+Sensor+Graph.html

[Cognito Identity Pool ID]に「Cognito Identityを手動作成」の章で作成したCognito Identityの[Identity Pool ID]を入力し、[Member ID] に 参加者番号 を入力し、[Cognito Unauth Login]をクリックします。JavaScriptがバックグラウンドで定期的にDynamoDBにアクセスして新しいセンサー情報が得られればグラフは自動更新されます。

_images/5-webapp-1@2x.png

5.6. メール通知の確認

照度センサーを 手で覆い、30以下の照度になることをLCDで待ちます。その後、通知メールが届いている事を確認します。