概要
このハンズオン記事では、SORACOM GPSマルチユニットを使用して、温度・湿度の可視化を実現します。
可視化の方法の一つとしてIoT Analyticsを利用しておりますので、ぜひ最後まで挑戦してみてください。

今回は二通りの方法でデータの可視化をします。
* 一つ目はIoT CoreからDynamoDBに格納したデータを自社サービス「IoT.kyoto VIS」で可視化します。
* 二つ目はIoT Analyticsを使用してAmazon QuickSightでの可視化を試みます。
完成イメージ

GPSマルチユニットの説明
今回の主役です。
手に収まるサイズでとても可愛らしい見た目をしていますが、この見た目とは裏腹にかなり優秀な機能を携えています。

GPSマルチユニット SORACOM Editionは、京セラ社のGPSマルチユニットをベースに、ソラコムを利用するための設定が行われているソラコム独自モデルです。1台に位置情報(GPS)、温度、湿度、加速度センサーと充電式のバッテリーを内蔵しています。省電力なセルラーLPWANであるLTE-M通信を搭載しているので、電源を入れるだけでどこでも通信が可能です。ブラウザから簡単な設定をするだけで、SORACOMのプラットフォームと連携し、すぐにデータ取得から可視化を始めることができます。
GPSマルチユニットSORACOM Edition(バッテリー内蔵タイプ)スターターキット
要するにこれ一つで位置情報(GPS)・温度・湿度・加速度が取得できる超お手軽IoTデバイスです。
さらにSORACOMのSIMを挿入して、右側の四角形のボタンを押すだけで、データがSORACOMのコンソールに届きます。
ハンズオン
実施における注意点
当ハンズオンは有料サービスを利用します。発生した料金は受講者負担となりますので、ご理解の上で実施ください。
用意するもの
- PC(Windows/Mac)
- ブラウザ:Google Chrome
- SORACOMアカウント
- SORACOM アカウントに登録済みの SORACOM Air SIM (nanoサイズ)
- SORACOM GPSマルチユニット
- AWSアカウント(東京リージョンを使用)
ステップ1 IoT Coreにデータを送信する

SORACOMにはIoTデバイスからのデータを特定のクラウドサービスに直接転送できるSORACOM Funnelというサービスがあります。
このSORACOM Funnelを利用するとクラウドの接続先リソースを指定するだけで、デバイスにパスワードを保持させることなく、データを指定したリソースに送信することができます。
今回はこのSORACOM Funnelを利用して、GPSマルチユニットから送信されたデータをAWS IoT Coreに転送して、クラウド上にセンサーデータを送信したいと思います。
まずはじめに、GPSマルチユニットからデータが送信されていることを、SORACOMのコンソールから確認します。
正常にデータが送信されているのを確認した後に、SORACOM Funnelを使ってAWS IoT Coreにデータを転送します。
1-1 GPSマルチユニットの設定を行う
1-1-1 SORACOMのコンソール画面の[Menu]をクリックする

1-1-2 ガジェット管理の[GPSマルチユニット]をクリックする

1-1-3 GPSマルチユニットの一覧ページに移るので、[新規デバイス設定]をクリックする

1-1-4 登録されているSIMの一覧が表示されるので、GPSマルチユニットに挿入するSIMと同じIMSIのものを選択し、[次へ:グループを選択]をクリックする

1-1-5 SIMグループの設定画面に移るので、[新規グループを作成]をクリックし、下記の通りに入力し、[次へ:設定を編集]をクリックする
| 項目 | 入力内容 |
|---|---|
| グループ名 | GPSマルチユニット |

1-1-6 GPSマルチユニットの送信データの設定画面に移るので、下記の画像の通りに入力する

※ SORACOMにはIoT デバイスからのデータを収集、可視化およびファイルを保存できるSORACOM Harvestというサービスがあります。後ほどのステップで正常にデータが送信されているか確認したいので、チェックを入れてください。
※ 今回はGPS情報は必要ないので、チェックを外しても構いません(チェックが入っていてもハンズオン上、問題ありません)。


※ 今回はすぐにデータの確認を行いたいので、1分間隔で送信を行います。
その他の部分はそのままで問題ありません。上記の設定が記入できたら[保存]をクリックして下さい。

1-2 GPSマルチユニットを起動し、データが届いているか確認する
1-2-1 GPSマルチユニットを起動させる
GPSマルチユニットにSIMが差し込まれているのを確認して、画像の赤枠の部分のボタンを押してください。

※赤色に点滅している場合は電波が弱いです。電波が悪い状態で通信を行うと、正常にデータが送信されない場合がありますので、その際は電波が強い場所まで移動をしてから作業をして下さい。
※GPSマルチユニットの操作方法は下記のサイトを参考にして下さい。
GPS マルチユニット SORACOM Edition デバイスの使い方
1-2-2 GPSマルチユニットの一覧ページで、先ほど設定したSIMを選択し、[データを確認]をクリックする
1-1-2と同様にしてGPSマルチユニットの一覧ページに遷移してください。

1-2-3 GPSマルチユニットのデータがSORACOMのコンソールに届いているか確認する

データが届いていることを確認できたら、次のステップに移ってください。
1-3 IAMユーザーを作成する
1-3-1 IAMのコンソール画面から[Users]>[Add user]をクリックする

1-3-2 ユーザー名を入力し[Next: Permissions]をクリックする
ユーザー名とアクセスタイプを以下の通り入力します。
| 項目 | 入力内容 |
|---|---|
| User name | gps-multi-unit-handson-user |
| Access type | Programmatic access を選択 |

1-3-3 [Attach existing policies directly]>[Create policy]をクリックして、ポリシー作成画面に移る

1-3-3 ポリシーの作成を行う
下記のように入力した後、topicの[Add ARN]をクリックします。
| 項目 | 入力内容 |
|---|---|
| Service | IoT |
| Actions | Publish |

下記のような画面が表示されるので、画像の通り入力して[Add]をクリックします。
| 項目 | 入力内容 |
|---|---|
| Region | ap-northeast-1 (※IoT Coreを使用するリージョンを選択して下さい) |
| Account | 自分のAWSのアカウントID |
| Topic name | GPSMultiUnitHandson |

[Review Policy]をクリックして、ポリシー名の入力画面に移ります。

1-3-4 ポリシー名の入力して、[Create policy]をクリックして、IAMを作成していたブラウザに戻る
下記のように入力してください。
| 項目 | 入力内容 |
|---|---|
| Name | gps-multi-unit-handson-policy |

※現段階だとポリシーを作成しただけで、まだIAMユーザーに紐づいていないので、次のステップを忘れずに行ってください。
1-3-5 先ほど作成したポリシーを選択し、[Next: Tags]をクリックする

※先程作成したポリシーが無い場合は、画面右にあるリロードボタンをクリックしてください。
1-3-6 [Next: Review]をクリックし、作成確認画面に移り、[Create user]をクリックしてIAMユーザーを作成する
※ タグの入力画面では特に入力して頂くことはないので、そのまま進んで頂いて問題ありません。

1-3-7 アクセスキーIDとシークレットアクセスキーをメモする
後ほどSORACOMの認証情報を設定する際に使用するので両方ともメモします。
シークレットアクセスキーは[Show]をクリックすると見えるようになります。

1-4 AWS IoT Coreのエンドポイントを確認する
1-4-1 AWS IoT Coreのコンソール画面を開き、メニュー画面左下の[Settings]をクリックする

1-4-2 エンドポイントが表示されるのでメモをする

※次のSORACOM Funnelの設定の1-5-3で使用します。
1-5 SORACOM Funnelの設定をする
1-5-1 SORACOMコンソールの右上にあるユーザー名をクリックし、[セキュリティ]をクリックする

1-5-2 [認証情報ストア] → [認証情報を登録]をクリックする

1-5-3 認証情報の登録を行う
下記の通りに入力を行い、[登録]ボタンをクリックして、認証情報を登録します。
| 項目 | 入力内容 |
|---|---|
| 認証情報ID | gps_multi_unit_handson_key |
| 概要 | GPSマルチユニットのハンズオンで使用 |
| 種別 | AWS 認証情報 をプルダウンから選択 |
| AWS Access Key ID | 1-3-7でメモしたものを入力 |
| AWS Secret Access Key | 1-3-7でメモしたものを入力 |

1-5-4 SIMグループ名を選択 > [SORACOM Funnel設定]をクリックして、SIMグループの設定を行う


下記の通りに入力を行い、[保存]ボタンをクリックして、SIMグループの設定を行ってください。
| 項目 | 入力内容 |
|---|---|
| ON/OFF スイッチ | ONにセット(設定を有効化) |
| 転送先サービス | AWS IoT |
| 転送先URL | {1-4-2でメモしたエンドポイント}/GPSMultiUnitHandson |
| 認証情報 | gps_multi_unit_handson_key |
| 送信データ形式 | JSON |

1-6 IoT Coreにデータが送信されているか確認する
1-6-1 AWS IoT Coreのコンソール画面を開き、左メニュバーにある[Test]をクリック > Subscription topicの中身を記入 > [Subscribe to topic]をクリックする
Subscription topicには下記を入力します。
| 項目 | 入力内容 |
|---|---|
| Subscription topic | GPSMultiUnitHandson |

しばらくして下記のようなトピックが届いていれば成功です。

ステップ2 ルールエンジンでDynamoDBにデータを格納してからVISで可視化を行う

AWS IoT Coreのルールアクションを用いると、設定したルールをトリガーに各AWSサービスで処理を行ってくれます。
今回はこのルールアクションを用いて、GPSマルチユニットから受信したデータをDynamoDBに格納し、自社サイトのIoT.Kyoto VISで可視化します。
2-1 IoT Core の新しいルールを作成する
AWS IoT Coreのコンソール画面を開き、左メニューバーにある[Rules]をクリックして、画面右上の[Create]をクリックします。

ルールの作成画面に移るので、下記の通りに入力して、[Add action]をクリックしてください。
| 項目 | 入力内容 |
|---|---|
| Name | GPSMultiUnitHandsonRuleForDynamoDB |
| Description | GPSマルチユニットからのデータをDynamoDBに格納する |
| Rule query statement | SELECT operatorId, timestamp, payloads.temp as temperature, payloads.humi as humidity, payloads.bat as battery FROM 'GPSMultiUnitHandson' |

2-2 Action に[Split message into multiple columns of a DynamoDB table (DynamoDBv2)]を選択し追加する

2-3 DynamoDBの作成
2-3-1 [Create a new resource]をクリックし、DynamoDB に遷移する

2-3-2 DynamoDB に遷移した後、画面左のバーにある[Dashboard]をクリック > [Create table]をクリックする

2-3-3 新しく作成するテーブルの設定を行う
下記の通りに入力します。
| 項目 | 入力内容 |
|---|---|
| Table name | GPSMultiUnitHandsonDBTable |
| Partition Key | operatorId(String) |
| Add sort key | timestamp(Number) |

2-4 ルール作成画面に戻って、更新のアイコンをクリック > プルダウンから先ほど作成したDynamoDBのテーブル名を選択する > [Create Role]をクリックする

ロールを作成するポップアップが表示されるので、下記の通りに入力し、[Create role]をクリックしてください。
| 項目 | 入力内容 |
|---|---|
| Name | GPSMultiUnitHandsonDynamoDBRole |

2-5 ロールを作成し反映させた後に[Add action]をクリック > 設定したActionが反映されていることを確認して[Create rule]でルール作成を完了させる


2-6 DynamoDB のテーブルを表示し、データが格納されていることを確認する(少し時間がかかる場合があります)
更新アイコンをクリックしないと、テーブルが更新が反映されないので気をつけてください。

2-7 DynamoDB のデータを「IoT.kyoto VIS」で可視化する
下記サイトの5-5. [DynamoDB のデータを「IoT.kyoto VIS」で可視化(任意)]を参照してください。

これでGPSマルチユニットから送られてきたデータを可視化することができました。
ステップ3 IoT Analyticsでデータ分析する

AWS IoT Analyticsとは、膨大な量のIoTデータの分析を実行、操作できるマネージド型サービスです。
参照:AWS IoT Analytics
ステップ3ではAWSのIoTAnalyticsを構築します。3-1~3-3でGPSマルチユニットから受け取ったデータを分析し、3-4で必要なデータのみ収集を行います。
3-1 コンソールでIoT Analyticsを開く
3-1-1 サイドバーから[Channels]>[Create]の順でクリックする

3-1-2 チャネルIDを入力、ストレージタイプを[AWS managed S3 bucket]に変更して[Next]をクリックする


3-1-3 [IoT Core topic filter]を入力してroleを新規作成し、[Create Channel]でチャネルを作成する

| 項目 | 入力内容 |
|---|---|
| IoT Core topic filter | GPSMultiUnitHandson |
3-2-1 サイドバーから[Data stores]>[Create]の順でクリックする

3-2-2 ストアIDを入力して[Next]をクリックする

3-2-3 ストレージタイプをマネージド型にして[Next]をクリックする

3-2-4 データフォーマットをJSONにして[Create data store]でストアを作成する
3-3-1 サイドバーから[Pipelines]>[Create]の順でクリックする

3-3-2 パイプラインIDを入力しソースを選択して[Next]をクリックする

3-3-3 ChannelからStoreに格納する属性を選択して[Next]する

3-3-4 [Pipeline output]を選択して[Create pipeline]を選択する

3-4-1 サイドバーから[Data sets]>[Create]の順でクリックする

3-4-2 [Create SQL]を選択する

3-4-3 IDを入力しstoreのソースを選択、[Next]をクリックする

3-4-4 Queryはデフォルトのまま[Next]
3-4-5 データ更新頻度をNot scheduledに設定して[Next]をクリックする

3-4-6 あとは全てデフォルトのまま[Create data set]を選択する
3-4-7 Data setsから先ほど作成した「GPSMUltiUnitHandsonDataSet」を選択する
3-4-8 [Actions]>[Run now]を選択する
[Result preview]が表示されれば成功です。

ステップ4 QuickSightで可視化する

ステップ4では先程のステップ3で作成したIoT Analyticsを活用してQuickSightでデータの可視化を行います。
AWS QuickSightとはAWSで利用できるBIサービスです。利用する事で簡単に情報を可視化、分析しダッシュボードの作成を行えます。
参照:Amazon QuickSight
QuickSightは月額利用料がかかります。詳しくはこちらをご覧ください。
4-1 AWS ConsoleからQuickSightを開きユーザー登録を行う
4-2 画面右上のユーザーをクリックして[QuickSightの管理]をクリックする

4-3 左のタブから[セキュリティとアクセス権限]をクリックし、[追加または削除]をクリックする

4-4 IoT Analyticsをチェックして更新する

4-5 [新しい分析]をクリックする

4-6 [新しいデータセット]をクリックする

4-7 [AWS IoT Analytics]をクリックする

4-8データソース名に任意の名前を入力し、インポートしたいデータセットを選択して[データソースを作成]をクリックする

4-9 ビジュアライズタイプで折れ線グラフを選択する
フィールドウェルのx軸に[timestamp]、y軸に[temperature]を移動させてください。

可視化の完成です!
まとめ
このようにして、GPSマルチユニットとAWSを使用すれば、かなりお手軽に温度・湿度の可視化がすることができます。
今回使用したデータは温度と湿度だけですが、GPSマルチユニットは位置情報(GPS)機能や加速度を用いたサービスも構築できるデバイスですので、今回のハンズオンを通して気になった方は、ぜひご自身でサービスを構築してみてください。




