Contents
- 新規機能ノードの追加
- 1.概要
- 2.インストールしておくと便利なノード一覧
- 3.ノードのインストール方法
- 3-1. シリアルポート ノードの追加
- 3-2. ダッシュボード ノードの追加
- 3-3. Date/Time Formatter のノードの追加
- 3-4.LEDノードの追加
- ■ LEDノードの使い方の簡単な説明
- 3-5. MQTT ブローカ ノードの追加
- 3-6.email ノードの追加
- 3-7. line-notifyのノードの追加(2025年3月末でサービス停止)
- 3-8. ftpのノードの追加
- 3-9. gateノードの追加
- ■ gateノードの使い方の簡単な説明
- 3-10. calculatorノードの追加
- 3-11. line-messaging-apiノードの追加
新規機能ノードの追加
1.概要
R-CPSを構築するのに、Node-REDは欠かせないツールです。特に、R-MSMとPDHのデータのやりとりやデータのダッシュボード表示、クラウドとのMQTTによるデータ送受信などに多く使用しています。
Node-REDの醍醐味は、ノードとして提供されている機能を追加することで新しい機能をどんどん使っていくことができることです。そして、たんにライブラリとしてではなく、視覚的に線を繋いで機能を作っていけるところがとても便利で、良いところです。
R-CPSのHPでもPDHをはじめ、Node-REDを使った使用例をたくさん挙げています。それらの使用例では、Node-REDをインストールしたままの状態では、含まれていないノードも使用しています。
ここでは、あらかじめNode-REDに含まれてないノードだが、R-CPSのHPで事例で使用しており、是非インストールしておくと便利なノードの紹介とインストール方法を紹介します。
2.インストールしておくと便利なノード一覧
ノード名 |
機能 |
PDHへの導入 |
OS別Node-REDのインストール状況 |
||
Rasberry Pi |
Ubuntu |
Windows |
|||
1) node-red-node-serialport |
シリアルポート |
済 |
済 |
未 |
未 |
2) node-red-dashboard |
ダッシュボードへの表示 |
済 |
未 |
未 |
未 |
3) node-red-contrib-moment |
時刻表示形式の指定 |
済 |
未 |
未 |
未 |
4) node-red-contrib-ui-led |
ダッシュボードでのLED表示 |
済 |
未 |
未 |
未 |
5) node-red-contrib-aedes |
MQTTのブローカー |
未 |
未 |
未 |
未 |
6) node-red-node-email |
gmailの送信 |
未 |
未 |
未 |
未 |
7) node-red-contrib-line-notify |
LINE Notifyの送信(2025年3月末でサービス停止) |
未 |
未 |
未 |
未 |
8) node-red-contrib-ftp |
ftp, sftpの実行(list, get, put, |
未 |
未 |
未 |
未 |
9) node-red-contrib-simple-gate |
データの通過の許可 |
未 |
未 |
未 |
未 |
10) node-red-conrib-calc |
配列データの計算処理 |
未 |
未 |
未 |
未 |
11) node-red-contrib-line-messaging-api |
Line Message APIによるメッセージの送信 |
未 |
|
|
|
3.ノードのインストール方法
ここでは、前の一覧表に載せたノードのインストール方法を説明します。
1) シリアルポート ノード
2) ダッシュボード ノード
3) Date/Time formatterのノード
4) LEDノード
5) MQTT ブローカノード
6) email ノード
7) line-notifyのノード
8) ftp/sftpのノード
9) gateノード
10) calculatorノード
11) line-messaging-apiのノード
3-1. シリアルポート ノードの追加
R-MSMは、センサのデータをシリアル通信フォーマットで送り、コマンドもシリアル通信フォーマットで受け取ります。そのため、R-MSMを使うシステムでは必須のノードです。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”serialport”と入力します。すると、” node-red-node-serialport”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、Serial Portのノードが追加されています。
3-2. ダッシュボード ノードの追加
R-MSMから送られてきたデータをグラフやチャートにして確認することはとても大事なことです。その可視化をダッシュボードのノードを使えば簡単にできます。これも必須のノードです。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に” node-red-dashboard”と入力します。すると、” node-red-dashboard”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、ダッシュボードのノードが追加されています。
3-3. Date/Time Formatter のノードの追加
Date/Time Formatter は、Date/Time オブジェクトやストリングを指定した読みやすいフォーマットに変更してくれるノードです。PDH(Pysical Data Hub)のNode-REDにはインストールされていますが、標準のNode-REDのノードには含まれていません。必要に応じて追加する必要があります。R-MSMのセンサデータの取得時間を追加するのに必須のノードです。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”moment”と入力します。すると、” node-red-contrib-moment”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、Date/TIme Formatterのノードが追加されています。
3-4.LEDノードの追加
ダッシュボード画面で、ON:赤、OFF:緑のように色を変えることができるLED表示はなにかと重宝するノードです。必須機能ではありませんが、あると便利です。PDHには導入済みです。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”ui-led”と入力します。すると、” node-red-contrib-ui-led”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、LEDのノードが追加されています。
■ LEDノードの使い方の簡単な説明
LEDノードは、ダッシュボードに指定した色のシグナルを表示する単純なノードです。
ここでは、ダッシュボードのTrueのボタンを押すと赤に、Falseのボタンを押すと緑になるLEDを作りました。
使い方は、プロパティ画面に設定するだけです。
① 表示するダッシュボードのグループ/タブを設定します。
② ダッシュボード上の表示サイズを指定します。
③ ラベル名を記入します。
④ LEDの形状を設定します。円と四角が選べます。
⑤ ここに設定した条件に合ったmsg.payload値が来た場合に、 LEDの色がその横に設定した色変わります。
ここでは、msg.payload = false : 赤
msg.payload = true : 緑
条件が合わない場合には、グレーになります。
もう一つの例を紹介します。
信号機を作ってみます。LEDノードを3つ並べます。それぞれ、 msg.payload=0なら赤に、 msg.payload=1なら緑に、msg.payload=2ならになるように設定します。
LEDノードがmsg.payloadの値が合致しない場合には、グレーに消灯することを利用して、以下の様に、1秒毎に色が変わる信号機を作りました。
1秒毎のタイミングを作っているのは、injectノードです。
数字を0→1→2→0と変化させているのは、functionノードで行っています。
LEDノードの設定は、3つとも異なります。
<信号機のフロー>
[{"id":"1a4577881f4870ab","type":"tab","label":"LEDノード例","disabled":false,"info":"","env":[]},{"id":"efbfa2af49c7ef7d","type":"ui_led","z":"1a4577881f4870ab","order":3,"group":"348e4572aebd17af","width":2,"height":2,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"0","valueType":"num"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"red","x":350,"y":40,"wires":[]},{"id":"9198e64b4a87f210","type":"inject","z":"1a4577881f4870ab","name":"1sec","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":80,"wires":[["e6daad482e46dcea"]]},{"id":"e6daad482e46dcea","type":"function","z":"1a4577881f4870ab","name":"生成","func":"// もしまだカウンタが存在していなければ0に初期化\nvar count = context.get('count') || 0;\nmsg.payload = count;\ncount += 1;\nif (count > 2){\n count = 0;\n}\ncontext.set('count', count);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":230,"y":80,"wires":[["efbfa2af49c7ef7d","e29323d59fe2491f","e6432b0079db9a8a"]]},{"id":"e29323d59fe2491f","type":"ui_led","z":"1a4577881f4870ab","order":1,"group":"348e4572aebd17af","width":2,"height":2,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#008000","value":"1","valueType":"num"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"green","x":350,"y":80,"wires":[]},{"id":"e6432b0079db9a8a","type":"ui_led","z":"1a4577881f4870ab","order":2,"group":"348e4572aebd17af","width":2,"height":2,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ffff00","value":"2","valueType":"num"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"yellow","x":350,"y":120,"wires":[]},{"id":"3cf730a08d0c59b1","type":"ui_spacer","z":"1a4577881f4870ab","name":"spacer","group":"348e4572aebd17af","order":6,"width":2,"height":1},{"id":"7fae8574af965797","type":"ui_spacer","z":"1a4577881f4870ab","name":"spacer","group":"348e4572aebd17af","order":8,"width":2,"height":1},{"id":"348e4572aebd17af","type":"ui_group","name":"シグナル","tab":"19df17d5f8a80c20","order":1,"disp":true,"width":6,"collapse":false,"className":""},{"id":"19df17d5f8a80c20","type":"ui_tab","name":"LED","icon":"dashboard","disabled":false,"hidden":false}]
3-5. MQTT ブローカ ノードの追加
MQTT ブローカーへのパブリッシャとMQTT ブローカーからのサブスクライバ用のノードはあらかじめNode-REDのノードのリストに存在しています。そのため、MQTT ブローカーへのパブリシュやMQTT ブローカーからのサブスクライブはこれらのノードを使って容易に実現できます。しかし、MQTT ブローカーのノードは、自分でノードを追加する必要があります。その方法を説明します。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に” aedes”と入力します。すると、” node-red-contrib-aedes”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、MQTT ブローカのノードが追加されています。
3-6.email ノードの追加
Node-REDからgmailを簡単に送信できるノードです。gmailに送信するためには、Googleアカウントでアプリパスワードの取得が必要です。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”email”と入力します。すると、” node-red-node-email”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、emailのノードが追加されています。
3-7. line-notifyのノードの追加(2025年3月末でサービス停止)
Line-Notifyのサービスは、2025年3月末でサービスが停止です。以降は、代替としてLine-Message-APIを使ったメッセージの送信サービスが使えます。Line-Message-APIのノードのインストールは、3-11. line-messaging-apiのノードの追加を参照して下さい。
Node-REDからスマートフォンへメッセージを送る方法として、LineのNotify機能を使うことができます。例えば、R-MSM で温度データを取得していて、温度が設定値を上回った時に、LineのNotifyにメッセージを送り、連絡するというような使い方が想定されます。
Line Notifyでメッセージを送信する方法に関しては、こちら(Node-REDからLine-Notifyを送信)をご覧ください。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”line-notify”と入力します。すると、” node-red-contrib-line-notify”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、line-notifyのノードが追加されています。
3-8. ftpのノードの追加
Node-REDからWindows PCやPDH(Raspberry Pi)やEdge Server(Ubuntu)などへファイルを送受信する必要が発生しることがあります。Node-REDでftpやsftpを実行するためのノードが’node-red-contrib-ftp’です。ここでは、このftpノードの導入方法を説明します。
sftpでファイルを送信する方法に関しては、こちら(送信側のみNode-REDが実装されている場合:sftp 送信)をご覧ください。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”node-red-contrib-ftp”と入力します。すると、” node-red-contrib-ftp”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、ftpのノードが追加されています。
3-9. gateノードの追加
データを後段に送るかどうかを切り替えることのできるノードにgateノードがあります。
gateノードは、入力されたmsg.topicが、”control”だった場合に、msg.payloadの値をチェックします。
msg.payloadが、open, close, toggle, default, statusのいずれかの場合、その指示に従った動作をします。
gateには、openとcloseの状態があります。状態は、statusノードでモニタすることもできます。そのgateノードの追加方法を説明します。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”simple-gate”と入力します。すると、” node-red-contrib-simple-gate”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、gateノードが追加されています。
■ gateノードの使い方の簡単な説明
gateノードは、入力されたmsg.topicが、”control”だった場合に、msg.payloadの値をチェックします。
そして、msg.payload=“open”の場合には、ゲートを開けてメッセージを通します。msg.payload=“close”の場合には、ゲートを閉じてメッセージを通しません。
msg.payload=“toggle”の場合には、ゲートが開いていれば閉じます。閉じていれば開けます。また、msg.payload=“default”の場合はプロパティ画面のdefaultの設定に変更します(defaultは、open or closeを選べます)。
以下に、簡単なフローを示します。
左上のinjectノードは、2秒ごとに0~100の間の疑似乱数を生成します。その下のinjectノードは、msg.topic=“control”とmsg.payload=“toggle”を生成します。gateノードはdefault status =“close”にしています。デプロイ直後はゲートは閉じています。
下のinjectボタンを押すとゲートが開き、乱数がデバッグ画面に表示されます。もう一度押すとゲートが閉じて、データと止まります。それを繰返します。
msg.payload=”open”, msg.payload=”close”でも同じことができます。
3-10. calculatorノードの追加
calculatorノードは、配列データに対して、基本的な計算をすることができます。配列内のデータの平均値や最大値、最小値を計算する、昇順や降順でソートするなど、様々な計算が準備されています。詳細は、”node-red-contrib-calc”をご覧ください。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”node-red-cotrib-calc”と入力します。すると、” node-red-contrib-calc”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、calculatorのノードが追加されています。
3-11. line-messaging-apiノードの追加
Node-REDからスマートフォンへメッセージを送る方法として、Lineのmessaging-apiの機能を使うことができます。例えば、R-MSM で温度データを取得していて、温度が設定値を上回った時に、Lineのにmessaging-apiのBroadcastの機能を使って友達になっているメンバー全員に連絡するというような使い方ができます。以下、line-messaging-apiのインストール方法を示します。
line-messaging-apiのBroadcast機能を使ったでメッセージの送信に関しては、こちら(Node-REDからline-messaging-apiのBroadcast機能を使って送信)をご覧ください。
⓪ Node-REDのエディタ画面を開きます。
① 右上の三本線をクリックします。
② ポップアップメニューから「パレットの管理」をクリックします。
③ ポップアップメニューが出てきますので、「ノードを追加」のタブを選択します。
④ 「ノードを検索」の窓に”line-messaging-api”と入力します。すると、” node-red-contrib-line-messaging-api”というノードが出てきます。
⑤ 右下の「ノードを追加」ボタンをクリックします。
⑥ 確認画面が出てきたら、右の「追加」をクリックします。追加処理が開始され、しばらくすると追加が完了します。
⑦ 完了したら、「閉じる」をクリックして、「ユーザ設定」の画面を閉じます。
⑧ 左端のノードの一覧に、line-notifyのノードが追加されています。