こんにちは!園部です。

「IoTのためのクラウドシステム構築」の続きです。今回はセンサデータの可視化をやっていきます!

◇ 全体の流れ

  • cognito(認証サービス)の設定をする

  • Opensearchにドメインを立てる

  • IoTCoreのルールを設定する

  • センサデータをAWSに送るプログラムを作成し、実行する

  • OpenSearch Dashboardsでグラフ化

※ 前提としてAWSアカウントは持っているものとします

1.cognitoの設定

1-1.ユーザープールの作成

  • cognitoの画面に行き、ユーザープールの作成ボタンを押す

  • Cognito “ユーザープールのサインインオプション”で”ユーザー名”を選択し他はそのまま次へ

  • セキュリティ要件を設定画面では”多要素認証”の設定で”MFA なし”を選択し、”ユーザーアカウントの復旧”のチェックを外して次へ

  • サインアップエクスペリエンスを設定画面では”セルフサービスのサインアップ”の”自己登録を有効化”のチェックを外し”属性検証とユーザーアカウントの確認”の”Cognito が検証と確認のためにメッセージを自動的に送信することを許可 – 推奨”からチェックを外し次へ

  • メッセージ配信を設定画面では”E メールプロバイダー”で”Cognito で E メールを送信”を選択し次へ

  • アプリケーションを統合画面では”ユーザープール名”と”アプリケーションクライアント名”を入力し”クライアントのシークレットを生成しない”を選択し次へ

  • 確認および作成画面で設定を確認しユーザープールを作成

  • 作ったユーザープールの画面に入り、ユーザーを作成する(自分でテストする分には画像の設定がおすすめです)

cognito ユーザーを作成

記事内画像

1-2.フェデレーティッド ID作成

  • cognitoの画面左のメニューの”フェデレーティッド ID”を選択

  • 新しい ID プールの作成画面に来たら、”ID プール名”を入力し”認証されていない ID に対してアクセスを有効にする”にチェックを入れて”プールの作成”ボタンを押す

  • “Identify the IAM roles to use with your new identity pool”と書かれた画面に飛んだらそのまま許可する(詳細のロールの設定は”新しいIAMロールの作成”のままで大丈夫です。)

記事内画像

  • 作成したロールに”ESHttpGet”を許可する

  • 最後にユーザープールの”Cognitoドメイン”を作成する

ドメインは使用可能であれば何でも良いです。

記事内画像

2.Opensearchドメインを立てる

  • Amazon OpenSearch Serviceの画面で、”ドメインの作成ボタン”を押す

  • ドメイン名を入力する

※これ以下は今回設定することだけを書くので、それ以外はそのままで大丈夫です。

  • デプロイタイプで”開発およびテストを選ぶ

  • データノードの”アベイラビリティーゾーン”、”インスタンスタイプ”、”ノードの数”を画像のように設定する

記事内画像

  • Amazon Cognito 認証で”Amazon Cognito 認証を有効化”にチェックする

  • リージョンを先ほどcognitoのプールを作成したリージョンにする

  • Cognito ユーザープールルとCognito ID プールを設定する

記事内画像

  • ネットワークをパブリックアクセスにする

  • きめ細やかなアクセスコントロールで”きめ細やかなアクセスコントロールを有効化”のチェックを外す

  • アクセスポリシーで”ドメインレベルのアクセスポリシーの設定”を選択し、アクションを許可に変更、プリシンパルに自分のIAMユーザーのARNを入力

記事内画像

※IAMユーザーのARNはIAMの画面から持って来れます。

記事内画像

  • 作成ボタンを押す

※ドメインの作成には数分かかります。

これでドメインの設定は以下のようになったと思います。

記事内画像

記事内画像

3.IoTCoreのルールを設定する

  • IoTCoreの画面、左メニューの”メッセージのルーティング”→”ルール”を選択し、ルールを作成ボタンを選択する

  • ルール名を入力し次へ

  • SQL ステートメントを設定画面で”SQLステートメント”に「SELECT * FROM ’任意のトピック’」を記入する。今回はトピック名を’SENDtoOS’にし次へ

  • 作成ボタンを押しルール作成完了

  • ”ルールアクション”で”Amazon OpenSearch Serviceにメッセージを送信します”を選択

  • “ドメイン名”先ほど作ったドメインを選択

  • “インデックス名”に任意の名前(今回は「bme_sensor」)、”ドキュメントID”に「${newuuid()}」、”ドキュメントタイプ”に任意の名前(今回は「sensor_data」)を入力する

  • ”IAMロール”を選択し、”次へ”を押す(今回はAmazonESFullAccessがついているもの)

記事内画像

4.センサデータをAWSに送るプログラムを作成し、実行する

■ 実行プログラムの作成

bme280toS3.py

  • #coding: utf-8

  • from smbus2 import SMBus

  • import time

  • import datetime

  • import json

  • import clientConfig as client

  • from bme280_get_data import BME280

  • #AWS SDKsのインポート

  • from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

  • sensor = BME280()

  • clientName = client.clientName

  • endpoint_path = client.endpoint_path

  • amazonroot_path = client.amazonroot_path

  • privatekey_path = client.privatekey_path

  • certificate_path = client.certificate_path

  • #クライアント情報を設定する

  • def set_mqttclient(name=clientName,endpoint=endpoint_path,root=amazonroot_path,key=privatekey_path,certificate=certificate_path):

  • MQTTClient = AWSIoTMQTTClient(name)

  • MQTTClient.configureEndpoint(endpoint, 8883)

  • MQTTClient.configureCredentials(root, key, certificate)

  • MQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Pubblish queueing

  • MQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz

  • MQTTClient.configureConnectDisconnectTimeout(10) # 10 sec

  • MQTTClient.configureMQTTOperationTimeout(5) # 5 sec

  • return MQTTClient

  • if name == ‘main’:

  • myMQTTClient = set_mqttclient()

  • try:

  • myMQTTClient.connect()

  • while True:

  • messageJson = sensor.getMessage()

  • myMQTTClient.publish(‘your topic’, messageJson, 1) #publish関数の第一引数をマネコンで設定したトピックに置き換える

  • time.sleep(60)

  • except KeyboardInterrupt:

  • pass

※ インポートされている”clientConfig”は前回記事の物と同じです。

5.OpenSearch Dashboardsでグラフ化

  • AWSでOpenSearch Serviceの画面を開く

  • 作成したドメインを選択する

  • OpenSearch dashboadのリンクを押す

  • 先ほど設定したcognitoのユーザーのユーザー名とパスワードでサインインする

  • 左のメニューから”Stack Management”を選択

  • ”Index patterns”のCreate index patternボタンを押す

  • “Index pattern name”に”*_sensor”と入力し、Nextstepボタンを押す

  • “Time field”のリストは”timestamp”を選択する

  • “Create index pattern”を押下 (※画面下部に小さく表示されている)

  • “Create new visualization”ボタンを押下

  • 左のメニューから”Visualize”を選択

  • メニューの中から”Line”を選択

  • インデックスパターンの”timestamp”を選択

  • MetricsのY-axis Countを開き、AggregationのリストでAverageを選択し、Fieldのリストでsensor.tempを選択

  • BucketsのAddボタンを押下し、X-axisを選択。AggregationのリストでDateHistogramを選択

  • Updateボタンを押下

記事内画像0

ダッシュボードを作成する場合

  • 右上Saveボタンを押下し、titleを付けて保存する

  • 左のメニューから”Dashboard”を選択

  • 右上”Add”を押下し、作成したグラフを追加する

以上、AmazonOpensearchSearviceを使って、センサデータの可視化をやってみました。

簡単な可視化でしたが、モノ、セキュリティ、データベースなど構成要素が多くて盛りだくさんな内容になってしまいました。IoTらしくなってきましたね。

OpensearchDashboardsは、色々なセンサデータを使ってダッシュボードを充実させてみると面白いと思います!

次回はセンサデータを使って、メールの自動配信をやっていきます!

{if(@exists_phrase && ($param[‘tag_1925’] || $param[‘tag_2133’]))}