赤外線センサーの結果をRaspberryPi 3 Model B+からAWS IoT経由でQuickSightでグラフ化するまで(その4)
Contents
はじめに
赤外線距離センサーでカウントした値をブラウザでグラフ形式で表示するまでを試してみた時の備忘録。
赤外線距離センサー、RaspberryPiの設定に関してはその1の記事を参照の事。
Pythonのプログラムについてはその2の記事を参照の事。
AWS IoT Coreの設定についてはその3の記事を参照の事。
今回はAWS IoT Analyticsの設定についての記事とする。
なるべく分かりやすように丁寧に書いているつもりですが分かりづらい所や間違いがあればコメントを貰えるとありがたいです。
事前準備
RaspberryPi側でPythonのプログラムを動かして赤外線距離センサーの値をAWS IoT Coreにパブリッシュする状態にする。
またAWS IoT Coreの設定も済んでいる前提とする。
AWS IoT Analyticsの設定
AWS IoT Analyticsでチャネル、データストア、パイプライン、データストア、データセットの設定を行う。
まずはAWSサービスメニューからIoT Analyticsを選択する。
チャネルの登録
チャネルを登録する事によりAWS IoT Coreからの受け口が作成される。
左のメニューから”チャネル”を選択して「作成」ボタンをクリックする。
なお、下記の画面ショットは既にチャネルが一つ作成されているので初めてチャネルを作成する画面とは異なる。
- チャネルID:chennel01
- rawデータを保持する期間の設定:テストなので1年間を指定(デフォルトは無期限)
「次へ」をクリックする。
メッセージの表示
IoT Coreトピックフィルタにプログラム、AWS IoTCoreで指定したトピック(count/pub)を指定して「メッセージの表示」ボタンをクリックする。
赤外線距離センサーの値がAWS IoT Coreを経由してリアルタイムにメッセージ表示される。
IAM※ロールの作成
※Identity and Access Managementの略
AWS IoT Coreがこのチャネルにアクセスする為のロールを作成する。
「新規作成」をクリックして
- 名前:analytics-role01
として「ロールの作成」ボタンをクリックする。
先程作成されたロールが選択されているので「チャネルの作成」をクリックする。
ちなみに作成されたロールはAWSのメニューから”セキュリティ、ID、およびコンプライアンス”のIAMを選択してメニューから”ロール”をクリックすると表示される。
Channel01が作成された。
データストアの作成
次にデータストアを作成する※
※パイプラインを先に作成して最後にデータストアを作成しても大丈夫。
メニューから”データストア”を選択して「作成」ボタンをクリックする。
- ID:datastore01
- 処理済みデータを保持する期間の設定:テストなので1年間を指定(デフォルトは無期限)
「データストアの作成」をクリックする。
datastore01が作成された。
パイプラインの作成
チャネルとデータストアを結びつけるパイプラインを作成する。
パイプラインではフィルターやLambda関数での計算が可能だが今回はパイプラインでは何もせずにチャネルとデータストアを結びつけるのみとする。
メニューから”パイプライン”を選択して「作成」ボタンをクリックする。
- パイプラインID:”pipeline01”
- パイプラインソース:編集を選択して選択一覧から先ほど作成したchennel01を選択する
次へをクリックする。
AWS IoT Coreより受け取ったメッセージより自動的に項目名と属性が設定されるので「次へ」をクリックする。
尚、項目を一つづつ「新規追加」で手動で設定するかJSON形式でドキュメントをアップロードする事ができる(未検証)
アクティビティ※は追加せずに「次へ」をクリックする。
※アクティビティではメッセージの属性の削除、追加、Lambda関数での計算、フィルターなどを追加することができるが今回は使用しない。
- パイプライン出力:先ほど作成したdatastore01を選択
「パイプラインを作成する」ボタンをクリックする。
パイプラインが作成された。
データセットの作成
データストアからSQL文を使ってデータを取り出すデータセットを作成する。
メニューから”データセット”を選択して「作成」をクリックする。
タイプの選択で「SQLの作成」ボタンをクリックする。
- ID:dataset01
- データストアの選択:先ほど作成したdatastore01を選択
「次へ」をクリックする。
SQL文を必要に応じて編集して「次へ」をクリックする。
デフォルトでは”SELECT * FROM datastore01”と表示されているので、時系列でデータを取得したかったので” order by sk_date,sk_time,microsecond”を追加した。
データ選択フィルターは設定せずに「次へ」ボタンをクリックする。
- 頻度:1分毎(デフォルトはスケジュールされていません)
「次へ」ボタンをクリックする。
なお、頻度は最短で1分となっている。
他には5分、15分、20分、30分、毎時、毎日、毎週、毎月が選択可能だが最短でも1分なのでリアルタイムでデータを取り出したい要件などには向かないと思う。
またAWS QuckSightでグラフ化する際もStandard Editionで最短で毎日、Enterprise Editionでも最短で毎時なので、いずれにしてもリアルタイムで集計するのでは無くIoT機器でためた過去データをある程度まとめて読み込んで分析する様な要件向けのサービスだと思う。
分析結果の設定はデフォルトの90日間のままで「データセットの作成」ボタンをクリックする。
1分毎にデータセットが更新されるdataset01が作成された。
データの取り出し
データセットを実行してデータを抽出してみる。
上記で作成したdataset01を選択した後、アクションー>今すぐ実行をクリックする。
”データセットのクエリが正常に開始されました”とメッセージが表示されてしばらく待つと結果のプレビューが表示される。
メニューで”コンテンツ”を選択すると結果のCSVが作成されているのでダウンロードする事ができる。
尚、当方の環境では画面が「作成中」のまま変わらなかったのでF5で更新したり、一度メニュー外で出た後戻ってきたりしたら正常に表示されていた。
尚、結果を表示して初めて気がついたのだが1番右に__dtの項目が自動的に追加されている。
どうやらこの項目はタイムスタンプとして使うためにIoT Analyticsが自動的に追加してくれる項目の模様。
IoT Analyticsを使うのであればPythonのプログラムでDateやTimeやmicrosecondを出力する必要は無かった事が後からわかった。
動画
AWS IoT Analytics設定の様子を動画で解説している。
実際にAWS IoT Coreからデータを受信してIoT Analyticsで表示するまでを解説しているので見て欲しい。
つづき
AWS IoT Analyticsの設定はこれで終了。
次回はAWS QuickSightで上記データセットの値をグラフ化する。
最近のコメント