Node-REDを使ってみた

皆様こんにちは。
AMDlab Webエンジニアの塚田です。

今回はNode-REDについて学習してみました。

Node-REDとは

Node-REDとは、Webブラウザ上で作成できるフローベースのプログラミングツールです。
ノードと呼ばれるアイコンを線でつなぐことで、処理の流れを視覚的に構築できます。
もともとはIoT(モノのインターネット)分野で、さまざまなセンサーやデバイス、Webサービスを迅速に連携させる目的で開発されました。Raspberry Piなどのハードウェアとの相性も良く、物理デバイスから取得したデータをクラウドサービスやSNSなどの外部サービスと連携させる用途で広く利用されています。

開発前の準備

Node-REDをローカルで動かすには、事前に Node.js をインストールした上で、ターミナルから npm install node-red などのコマンドを実行して、必要なライブラリをインストールします。今回はダッシュボード機能(メーター表示など)も使用するため、併せて node-red-dashboard もインストールしました。以下のドキュメントを参考にしてください。

  • Node-RED Official Documentation (English)
https://nodered.org/docs/

  • Node-RED 日本語公式ドキュメント

https://nodered.jp/docs/

実装

Node-REDには以下のようにいろいろなノードが用意されています。

全体図

今回はシミュレーションとして、部屋が暑くなっていく中で特定のしきい値を超えたら扇風機が回り、温度が下がったら自動で停止する仕組みを作成しました。具体的には以下の内容で設定し、複数を同時に扱うのも簡単にできるか見るため、同様の部屋を3つ用意しました。

  1. 「2秒ごとに温度が0.3度ずつ上がる」(扇風機が止まっている間は、部屋の熱気で少しずつ暑くなっていく)
  2. 「30度を超えたら、自動で扇風機をONにする」(ここが自動監視のポイントです。しきい値を超えた瞬間に扇風機をONにします。)
  3. 「扇風機が回ると、2秒ごとに0.5度ずつ下がる」
  4. 「25度を切ったら(以下になったら)、自動で扇風機をOFFにする」

今回利用したノードはInjectノード、Function(ファンクション)ノード、Gaugeノード、Textノードです。

(Gaugeノード、Textノードは node-red-dashboard に含まれるものです。)

完成図です。

まず、Inject(Tick every 2s)ノードです。

2秒ごとに合図を送ります。上記のように数値入力等のみでコード不要です。

次にFunction(Simulation Logic)ノードです。

設定で出力3にします。

以下のコードを記述します。

 

このノードは

1.通常時: Inject(Tick every 2s)ノードの合図が来るたびに +0.3度。もし温度が 30度を超えたら、扇風機を ON に切り替える

2.扇風機が ON の間は、合図が来るたびに -0.5度(先ほどより冷やす)。

3.温度が 25度以下になったら 扇風機をOFFに戻す。

をシミュレーションしています。

温度表示用のGauge(Temperature)ノードについてです。

Function(Simulation Logic)ノードから届いた温度データをリアルタイムに可視化します。

表示ルールとして、15度~40度の範囲で表示し、直感的に状況がわかるよう色分け(25度まで緑、30度まで黄、30度以上は赤)を設定しました。こちらもデザインや色付けのコードは不要で、設定画面で数値を入力するだけで完了です。

最後に Text(Fan Status) ノードです。

扇風機が今動いているか(ON/OFF)を文字で表示します。データがtrueなら「ON (Cooling)」、falseなら「OFF」と表示を切り替える設定を入れました。

おわりに


今回はNode-REDを使って、3部屋の温度監視と扇風機の自動制御システムを作成しました。

実際に触ってみて感じたのは、「処理の流れがそのまま目に見える」という分かりやすさです。本来なら複雑なフロントエンドの実装が必要なダッシュボードも、ノードを配置するだけで完成させることができました。

今回はシミュレーションでしたが、実際の温度センサーや装置を利用すると、より便利さが見えてくる可能性があると感じました。


AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

AMDlabのSNSアカウントです!ぜひフォローお願いします✨

■ X(旧Twitter):https://x.com/amdlabinc
■ Instagram:https://www.instagram.com/amdlabinc/
■ Facebook:https://www.facebook.com/amdlab.lnc/

ARTICLES