5. エッジアプリ開発

5.1. Node-REDによるフロー開発

エッジアプリの開発には、Node-REDと呼ぶIoT向けの開発ツールを用います。 Node-REDは下の図のようにWebブラウザ上で動作し、 マウス操作によってフローの作成を行います(フローベース開発)。 左側のパレットから処理内容に応じたノード(色つきボックス)を 画面中央のワークスペースに配置し、それらをワイヤー接続(グレーの配線)することで データの流れをつくるという直感的なビジュアルプログラミングを行います。

../../_images/221015122026.png

今回は、ある程度出来上がったフローを用いて開発をすすめます。

5.1.1. Node-REDの起動

WebブラウザからMy-IoTストアにアクセスし、左サイドバーから管理エッジ一覧の順にクリックします。 自分のエッジ名をクリックし、フロー開発をクリックすることでNode-REDが起動します。

注意

Node-REDが起動しない: メンテナンス機 になっていますか?⇒「3.5. Raspberry Piの起動確認」

5.1.2. フローの読み込み

Node-REDの右上にあるハンバーガーアイコン(≡)をクリックし、メニュー内の読み込みをクリックします。

../../_images/221017103446.png

「フローを読み込み」がポップアップするので、その内の読み込むファイルを選択をクリックして、 セットアップ時にダウンロードした不快指数測定システムのフローファイル (nodered-thi-calc.json)をNode-RED内のクリップボードに読み込みます。 また、下方の読み込み先は新規のタブを選択し、右下の読み込みボタンをクリックします。

../../_images/221017220006.png

5.1.3. 不快指数測定システムの動作

読み込んだ不快指数測定システムのフローは以下の3つの動きをします。

  1. エッジ周辺の温度と湿度を定期的にクラウドに送信する。

  2. 最新の温度と湿度から不快指数をクラウドが計算(処理) し、エッジに送信する。

  3. 不快指数をクラウドから受信し、表示(アクチュエート) する。

次にそれぞれの処理が Node-REDのフローで、どのように実装(プログラミング)されているかを説明します。

5.1.3.1. 処理1/処理2

下図のフローにおいて、上半分が処理1、下半分が処理2を行います。

../../_images/221017221100.png

処理1: My-IoTストアに「環境データ」を送信

※【】はNode-REDのフロー(色つきボックス)を示します。

  1. 【温度設定】【湿度設定】: それぞれのノードで温度と湿度を計測します。 ただし、本ガイドではダッシュボードのスライドバーでの入力としています。 将来、Raspberry Piにセンサーをつないだ場合はこのノードを拡張してください。

  2. 【データ結合】: Node-REDでは、ノードの入力から出力に流れるデータは、JSONオブジェクト (JSON形式で記述されたデータ集合)です。温度と湿度の二つのJSONオブジェクトを、 一つのオブジェクトにまとめます。

  3. 【3秒毎に送信】: クラウドに送信するデータ量を3秒間に1回と抑制します。 センサーからデータがこなかった場合は、現在保持している値を送信します。

  4. 【MyIoT out】: エッジアプリで核となるノードです。入力データをクラウドに送信します。 この送信時に「2. My-IoTシステム構築手順」で説明したコネクタとの整合性をチェックします。 クラウド側では、受信したデータをMy-IoTデータストアに順次格納していきます。

  5. 【内容表示】: My-IoTストアに送られるJSONデータをモニタリングします。

処理2: My-IoTストアに「不快指数の計算」と「My-IoTエッジへの送信」をリクエスト

  1. 【3秒毎にリクエスト】: クラウドに不快指数を要求するリクエストを、3秒に1度つくります。

  2. 【http request】: My-IoTストアにリクエストを送信します。 開発するシステムごとに異なる送信先をこのノードに設定する必要があります。 クラウドでは、このリクエストを受信しクラウドアプリを起動します。

5.1.3.2. 処理3/Raspberry Pi停止

下図のフローにおいて、上半分が処理3、下半分がRaspberry Piのシャットダウンを行います。

../../_images/221017221105.png

処理3: My-IoTストアから「不快指数」を受信

  1. 【My-IoT in】不快指数をクラウドから受信します。

  2. 【指数分離】: 受信したデータから不快指数を抽出します。

  3. 【不快指数メーター】: ダッシュボードのメーターパネルに不快指数を表示します。

  4. 【内容表示】: クラウドから送られてきた不快指数値をモニタリングします。

処理4: Raspberry Pi 停止

  1. 【停止ボタン】: Raspberry Piの停止リクエストを生成します。

  2. 【ラズパイ停止】: Raspberry Piをシャットダウンする命令を発行します。

5.2. My-IoT out のコネクタ設定

ワークスペース内のオレンジ色の【MyIoT out】ノードをダブルクリックして編集します。 「プロパティ」タブの「コネクタID」に、「4. コネクタ開発」でメモしたコネクタIDを入力(コピー&ペースト)してください。 つぎに、「コネクタ定義」に、"connector.json"ファイルの中身をそのまま入力(コピー&ペースト)してください。 そして、完了ボタンを押して編集を終了します。

../../_images/221018005651.png

Tip

コピー&ペーストをする際、不要な文字が入りやすいためバグの原因となります。 コピーした後にいったんテキストエディタにペーストし、再コピーしてから入力項目にペーストするのがおすすめです。

5.3. http request のURL設定

初めてのエッジアプリ開発時は、先に「6. クラウドアプリ開発」に進んでください。

※下記の注意をお読み下さい。

注意

エッジアプリ開発の初回時は、クラウドアプリの呼出先であるAPI URLが存在しません。 まず、「6. クラウドアプリ開発」を行い、 次に、「7.システム構築」でMy-IoTに クラウドアプリのインストール(パッケージ作成とグループ作成) を行うことで、 API URLが出力されます。その時に、ここに戻ってきて下さい。

API URLが出力されたら、それに引数を追加します。

このシステムで開発したクラウドアプリは、connectorIdedgeId を引数に取ります。 API URLGETメソッドコネクタIDエッジID のように連結した文字列をプロパティのURLに設定します。

以下は、連結例(スペース記号なしで一行)です。

https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/myiot-stage/get?connectorId=7e02fa8a-ee5a-43a2-b6fb-ef1eab809707&edgeId=E4:5F:01:XX:XX:XX

ワークスペース内の 【http request】 ノードを ダブルクリック して編集します。 「プロパティ」の「URL」にクラウドアプリを呼び出すAPI URL(引数付き)を設定します。

../../_images/221018023859.png

URLの入力後、右上の完了ボタンをクリックしてください。 これで、エッジアプリはクラウドアプリと連携を取ることができるようになりました。

以上で、エッジアプリ開発は終了です。

「4. クラウドアプリ開発」と 「5. システム構築」が終了している場合は、 「6. テスト実行」に進んでください。

エッジアプリ開発のポイント

  1. Node-REDを使ってアプリを開発する

  2. My-IoT out のコネクタ設定をする

  3. http request のAPI URLを設定する