アプリケーション開発
Node-REDの利用方法
ステップ2:Node-RED利用手順
ここでは、赤外線学習リモコンを使って、「指定の気温に達したらエアコンが作動する」アプリケーションの作成を紹介します。
前提条件
- Node-REDの基本操作を理解していること。
※基本操作については、Node-REDの公式ドキュメントをご覧ください。(https://nodered.jp/docs/) - 赤外線リモコンとエアコンがIoTアクセス制御エンジンへデバイス登録されていること。
仕様は以下の通りです。
- 気温を3分ごとに取得
- 気温が25℃以上の場合、エアコンをつける
token injectノードの追加
左側のパレットからワークスペース上に[Symphony]カテゴリ内のtoken injectノードをドラッグして追加します。
以降、ノードの追加は左側のパレットの指定カテゴリ内より選択し、追加してください。
ノードを選択すると、右側のサイドバーでノードの詳細を確認できます。
Injectノードの追加
[入力]カテゴリ内のInjectノードをドラッグして追加します。
配置したInjectノードをダブルクリックし、繰り返しの項目を「指定した時間間隔」に設定し、時間間隔を「3分」に設定します。
get:devicesノードの追加
[Symphony]カテゴリ内のget:devicesノードをドラッグして追加します。get:devicesノードは、IoTアクセス制御エンジンに登録されているデバイスの一覧を取得できます。
filterノードの追加
[Symphony]カテゴリ内のfilterノードをドラッグして追加します。filterノードは、指定のデバイス、ニックネーム、タグと一致する情報を抽出します。
filterノードをダブルクリックし、フィルタの種類を「profile」にします。プロファイルを「temperature」にします。
temperatureノードの追加
[Symphony]カテゴリ内のtemperatureノードをドラッグして追加します。temperatureノードは、temperatureプロファイルのデバイスAPIを実行します。(気温の取得ができます)
debugノードの追加
[出力]カテゴリ内のdebugノードをドラッグして追加します。
全てのノードをワイヤーで接続
ノードの右側(出力ポート)からノードの左側(入力ポート)へマウスをドラッグしてノード同士を繋ぎます。
※ワイヤーの接続方法や削除方法について詳しくはNode-RED公式のエディタガイドをご確認ください。
token injectノードの出力とget:devicesノードの入力Injectノードの出力とget:devicesノードの入力get:devicesノードの正常終了時出力とfilterノードの入力filterノードの正常終了時の出力とtemperatureノードの入力temperatureノードの正常終了時の出力とdebugノードの入力get:devicesノードのエラー時出力とdebugノードの入力filterノードのエラー時出力とdebugノードの入力temperatureノードのエラー時出力とdebugノードの入力
ワイヤーを全て接続すると以下のようになります。
※正しくワイヤーが接続されていれば、ノードの配置は図の通りでなくても問題ありません。
switchノードの追加
[機能]カテゴリ内のswitchノードをドラッグして追加します。
配置したswitchノードをダブルクリックし、プロパティに「payload.temperature」と入力します。
条件を「>=」と数値による評価に変更し、値に「25」を設定します。
追加ボタンで条件を追加し、「その他」を設定します。
get:devicesノードの追加
[Symphony]カテゴリ内のget:devicesノードをドラッグして追加します。
filterノードの追加
[Symphony]カテゴリ内のfilterノードをドラッグして追加します。
filterノードをダブルクリックし、フィルタの種類を「profile」にします。
プロファイルを選択式から文字列に変更し、「airConditioner」を入力します。
device apiノードの追加
[Symphony]カテゴリ内のdevice apiノードをドラッグして追加します。device apiノードは、任意のデバイスAPIを実行します。
device apiノードをダブルクリックし、実行Actionパスに「/airConditioner」を設定し、実行Actionメソッドに「put」を指定します。
debugノードの追加
[出力]カテゴリ内のdebugノードをドラッグして追加します。
ノードをワイヤーで接続
ノードの右側(出力ポート)からノードの左側(入力ポート)へマウスをドラッグしてノード同士を繋ぎます。
temperatureノードの出力とswitchノードの入力switchノードの「>=25」とget:devicesノードの入力get:devicesノードの正常終了時出力とfilterノードの入力filterノードの正常終了時出力とdevice apiノードの入力device apiノードの正常終了時の出力とdebugノードの入力switchノードの「その他」とdebugノードの入力get:devicesノードのエラー時出力とdebugノードの入力filterノードのエラー時出力とdebugノードの入力device apiノードのエラー時出力とdebugノードの入力
ワイヤーを全て接続すると以下のようになります。
※正しくワイヤーが接続されていれば、ノードの配置は図の通りでなくても問題ありません。
デプロイ
デプロイボタンをクリックすることでランタイムにフローをデプロイします。
フローの実行
token injectノードの左側にあるボタンを押します。これでフローが実行されます。
このフローは3分ごとに実行され、気温を取得します。取得した気温が25℃以上の場合、エアコンが起動します。
フローの実行後、右側のタブからデバッグを選択すると、msg.payload の中を確認できます。
気温が25℃以上だった場合は、 temperature API 実行時のレスポンスと airConditioner API 実行時のレスポンスが表示されます。
上が temperature API 実行時のレスポンスで、気温が25.4℃であることがわかります。( temperature: 25.4 )
下が airConditioner API 実行時のレスポンスで、エアコンが起動したことがわかります。( powerState: "ON" )
気温が25℃未満だった場合は、temperature API 実行時のレスポンスのみ表示されます。 airConditioner API はフローの条件に当てはまらず実行されないため、 airConditioner API 実行時のレスポンスは表示されません。
本チュートリアルでは、「気温を3分ごとに取得し、気温が25℃以上の場合、エアコンをつける」というフローを作成しましたが、作成したいフローに合わせて取得する時間や条件を変更して試してみてください。