制作例(5)では、H10からAWS(正しくはAWS IoT)にMQTT形式でデータを送信することができました。
AWS IoTは、データの受信だけを行うパッケージなので、単体ではそれ以上のことはできません。
ここから、S3やRDSなどに橋渡しをすることで蓄積したり、Lambdaと連携して取得したデータの内容に合わせた処理を行うサービスプログラムを展開することで、機能します。
ここでは、連携方法としては最も手軽なCloudWatchを使用して、こちらの図のようなダッシュボードを作っていきます。
こちらの機能を使用するためには、H10がAWS IoTと連携できていなければなりません。
製作例(5)AWSと連携するをご覧いただき、AWSマネジメントコンソール画面から[AWS IoT]->[テスト]で動作確認を予め済ませておく必要があります。
(1)H10の電源を入れます。
(2)AWSマネジメントコンソールを開き、IoT Core(AWS IoTのダッシュボード(設定画面)へのリンクをクリックします。
AWS IoTの構築から時間が経過していたり、パソコンを買い換えた場合は、ショートカットのリンクが表示されないことがあります。
AWSマネジメントコンソールの画面からIoT Coreの文字が見当たらない場合は、検索窓(ブラウザの検索窓ではありませんのでご注意ください。)にIoTと入力して表示される候補をクリックします。
(3)AWS IoT画面の左カラムから[テスト]をクリックします。
(4)H10の副MCUに書き込んだプログラム(Arduinoソフトウェア画面)の中で書いたトピック名を[トピックのフィルター]に入力し、[サブスクリプション]をクリックします。
(5)制作例のサンプルプログラムをそのままお使いの場合、およそ1分ごとに測定値をアップロードしています。
1分以内にデータが届きますので待ちます。
このようなものが表示されたらデータは正しく届いております。
動作の確認ができたら、CloudWatchと連携するための設定を行います。
このままの画面で、次に進んでください。
数分待ってもデータが届かない場合、製作例(5)AWSと連携する
に戻って、設定やプログラムを見直してください。
・H10本体のジャンパピンは通常モードに戻されていますか。
・WiFiにアクセスするためのSSIDや、キー(パスワード)は、プログラムの中に正しく書かれていますか。
・AWSから発行された認証キーなどは、正しい場所に正しく記述していますか。
・SSIDやキー、認証キーなどをプログラムに書き込む際、誤って前後のダブルクォーテーション記号( ” )やバックスラッシュ記号( \ )を削除していませんか。
・バックスラッシュ記号( \ )を誤って削除した時、誤ってスラッシュ記号( / )に書き換えていませんか。
・エンドポイントのURLは、正しくコピーアンドペーストされていますか。
(1)MQTTの受信確認を行なった画面の左カラムから[ACT]->[ルール]をクリックします。
(2)はじめて使う場合、次の画面が表示されるので、[ルールの作成]をクリックします。
(3)ルールに名前を付けます。名前は自由に付けることができます。
(4)[ルールクエリステートメント]の背景が黒の部分を次のように編集します。
SELECT * FROM 'my_h10'
SELECT * FROM ‘*********’の * 記号以外の部分は編集しないでください。
* 記号の部分を、副MCUのプログラム内で記述したトピック名に書き換えます。
(5)画面の中央よりやや下にある[]をクリックします。
(6)[CloudWatch Logs にメッセージデータを送信する]を選択し、画面下の[アクションの設定]をクリックします。
(7)【アクションの設定】画面が表示されるので、[新しいリソースを作成する]をクリックします。
(8)CloudWatchの画面に切り替わります。
[ロググループの作成]をクリックします。
(9)蓄積するログを記録するストレージを作成します。
ストレージの名称を入力して[作成]をクリックします。
作成が成功すると、以下の画面が表示されます。
CloudWatchは、新しいタブやウインドウで開いているはずですので、そのまま閉じます。
(10)AWS IoTのアクション設定画面に戻ったら、図の赤枠の中にある更新ボタンを押します。
更新ボタンを押すと、先ほど作成したロググループが選べる状態になるので、選択します。
(11)次に ロール を作成します。
ロールは、AWS IoTからCloudWatchにメッセージを届けるための橋渡し役のことです。
AWS IoTやCloudWatchに限らず、Lambdaなども含めて全てのAWSサービスは、ロールを使わずに直接データをつなぎ込むことはできません。
直接つなげる仕組みだと、セキュリティに穴があきやすくなるため、データの授受ができる役を限定して、役自体を信頼するように構築することで、高いセキュリティ性能と使いやすさを両立しています。
画面内の[ロールの作成]をクリックします。
(12)ロールに名前を付けます。自由に入力して[ロールの作成]をクリックします。
(13)【ルールの作成】画面に戻るので、[ルールの作成]をクリックします。
(14)ルールの一覧画面が表示されます。
ここまでの操作で作成したルールの右端にあるメニューボタンを押し、表示されたリストから[有効化]をクリックします。
(15)ステータスバーに「ルールは正常に有効化されました」と表示されれば、成功です。
画面左上のAWSマークをクリックして、AWSマネジメントコンソール画面に戻ります。
(16)AWSマネジメントコンソールの画面から、[CloudWatch]をクリックします。
(17)左カラムの[ダッシュボード]をクリックします。
(18)[ダッシュボードの作成]をクリックします。
(19)自由に名前をつけます。
(20)ヴィジェットのタイプを選ぶ画面が表示されます。
ここでは[線]を選択し、[次へ]をクリックします。
(21)[ログ]を選択して、[設定]をクリックします。
(22)ヴィジェットの構築画面が表示されます。
プルダウンメニューをクリックして、使用するデータを選択します。
(23)(9)で作成したロググループを選択します
(24)プログラムのようなものが書かれている部分に、以下の内容を記述し、[クエリの実行]をクリックします。
fields @timestamp,TEMP,HUMI,CDS,NOISE,SMELL,HUMAN,CO,CO2
| sort @timestamp desc
| limit 20
これは、要素[timestamp]を主系列に、TEMP,HUMI,CDS,NOISE,SMELL,HUMAN,CO,CO2の内容を最新の20レコード分リストアップしなさいという意味です。
これを実行すると、以下のようにリストとして表示されます。
[ログ]タブをクリックした時、このような表示が出ればAWS IoTとCloudWatchの連携は成功しています。
(25)連携できていることが確認できたら、今度は以下のSQLを記述します。
fields @timestamp,TEMP,HUMI,CDS,NOISE,SMELL,HUMAN,CO,CO2
|stats avg(TEMP),avg(HUMI),avg(HUMAN) by bin(1m)
(26)[クエリの実行]を押すと、以下のようにグラフ表示されます。
ここでは、温度・湿度・人感センサの反応値の3つだけ表示させています。
(27)[ヴィジェットの作成]をクリックします。
CloudWatchのダッシュボードに、作成したヴィジェットがこのように追加されます。
他のセンサーは、扱う数字が数千単位であるため、同じ画面で表示させると小さい数字の変動が埋もれてしまうため、別にヴィジェットを作ります。
(28)画面上部にある[ヴィジェットの追加]をクリックし、(20)〜(27)を繰り返しながら、以下のクエリも登録していきます。
fields @timestamp,TEMP,HUMI,CDS,NOISE,SMELL,HUMAN,CO,CO2
|stats avg(SMELL),avg(CO2),avg(CO) by bin(1m)
fields @timestamp,TEMP,HUMI,CDS,NOISE,SMELL,HUMAN,CO,CO2
|stats avg(CDS) by bin(1m)
(29)以下のように表示されたら、完成です。
(30)最後に、画面上部にある[ダッシュボードの保存]をクリックします。
この操作を忘れないでください。
(29)のような画面が一度出ると安心しがちですが、ダッシュボードの保存を忘れると(20)以降の全ての操作を再度やり直すことになります。
この画面のように、[ダッシュボードの保存]ボタンが無効表示になっていれば、ダッシュボードは保存されています。
AWSマネジメントコンソール画面に戻り、再度CloudWatchにアクセスして、ダッシュボードを呼び出せば、いつでもこの画面を見ることができます。