Node-REDのHowTo(その1)

Node-REDのインストール他のメモ

Node-REDをインストールや、フローを作成する際の手順のメモ。
鶏頭で忘れっぽいのでメモ。

ubuntu に Node-RED をインストールする。

Node.jsとnpmのインストール

自動起動とかやらないなら、Node.js は nodenv とか使っても良い気がするが、 念のためシステムに直接インストールしておく。

apt install だと古いバージョンになってしまうので、
nコマンド をインストールし、
nコマンドで安定版をインストールする。
その後、apt でインストールしたNode.jsは削除。

# インストール
sudo apt install nodejs-legacy npm

# バージョン確認
node -v

# nコマンドのインストール
sudo npm install -g n

# 安定版のインストール
sudo n stable

# aptでインストールしたnode.jsをアンインストール
sudo apt purge -y nodejs-legacy npm

# バージョン確認
node -v

Node-REDのインストール

sudo npm install -g --unsafe-perm node-red node-red-admin

どうも、ノードの追加とかすると、npmのキャッシュをアクセスするときにpermission deniedと言われてしまうみたいなので、 以下のコマンドで .npm ディレクトリ以下の所有権を自分にしておく。
(キャッシュだから削除しても良い気がするが)

sudo chown -R `whoami`:`whoami` ~/.npm

起動

node-red

ブラウザで http://対象IPアドレス:1880 に接続

停止

CTRL-Cで停止する。

参考

https://qiita.com/seibe/items/36cef7df85fe2cefa3ea
https://nodered.jp/docs/getting-started/local

Windows10 に Node-RED をインストールする。

Node.js と npmの インストール

npm install -g npm

Node-REDのインストール

npm install -g --unsafe-perm node-red
node-red

なお、初めてNode-REDを起動したとき、 『このアプリの機能のいくつかがWindows Defender ファイアウォールでブロックされています』 と警告が表示されることがある。

この場合、 「通信を許可するネットワーク」を選択して「アクセスを許可する」をクリック すれば良い。

ちょっとヒトコトメモ

(ぜんぜんヒトコトじゃないけど。。。)

Node-REDを起動したPCからのアクセス(ブラウザ接続など)は成功するのに、 外部PCやRaspberryPi(もちろん、同一サブネット上の)からのアクセス(ブラウザやWebsocket接続)が失敗する場合がある。

考えられる原因は色々あるが、最も多そうな原因のひとつにファイアウォールでのブロックが考えられる。
上の警告ダイアログでアクセス許可した際に、プライベートネットワークのみに通信を許可していて、 かつ、現在接続されているネットワークがパブリックネットワークである場合である。

ファイアウォールでのブロックされているかはNode-REDを起動した状態で以下のコマンドで確認できる。

以下のコマンドを実行

nc -zv 《IPアドレス》 《ポート番号》

例えば、こんな感じ。

nc -zv 192.168.1.2 1880

ブロックされていれば、コマンドが終了しないので、CTRL+Cで終了する。
ブロックされていなければ(正常であれば)、Connection to 《IPアドレス》 《ポート番号》port [tcp/*] succeeded!と表示される。

Windows Poewrshellで(コマンドプロンプトでは不可)以下のコマンドを実行

Test-NetConnection 《IPアドレス》  -port 《ポート番号》

例えば、こんな感じ。

Test-NetConnection 192.168.1.2 -port 1880

ブロックされていれば、TcpTestSucceeded : Falseと表示される。
ブロックされていなければ(正常であれば)、TcpTestSucceeded : Trueと表示される。

これを解決するには、Node-REDを実行しているWindows PCで
「コントロールパネル」→「Windows Defender ファイアウォール」を開き、
左側のリストから「Windows Defender ファイアウォールを介したアプリまたは機能を許可」をクリック
「設定の変更」をクリック 下のリストから「Node.js: Server-side JavaScript」の右側 パブリックのチェックボックスにチェックを入れる
「OK」をクリック

この状態で再度RaspberryPi または PCからファイアウォールでのブロックの確認を実行し、ブロックされていないことを確認してください。

Raspbian に Node-RED をインストールする。

Node.js と npm と Node-RED のインストール

インストールスクリプトを実行すればイッパツで解決。

# インストールスクリプトの取得
wget  https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered

# 必要なら中身確認してね

# インストールスクリプトの実行
bash update-nodejs-and-nodered 

起動

node-red-start 

CTRL-Cでログ表示のみ止まる(Node-RED自体は動作したまま)

ブラウザで http://対象IPアドレス:1880 に接続

ログ表示

Node-RED で console.log などを実行したときは、ログに表示される。
node-red-startしたままなら表示されるが、CTRL-Cでログ表示を止めていた場合は 以下のコマンドでログ表示を再開できる。

node-red-log

停止

Node-RED自体を停止する。

node-red-stop

参考

https://qiita.com/utaani/items/7155c62d6c5e96822afb
https://nodered.jp/docs/getting-started/local

フローの操作

フローを保存する(エクスポート)

作成したフローは保存することができます。
しばらく使わないフローを削除したり、別の環境にコピーする場合に保存しておくと良いでしょう。

フローを読み込む(インポート)

保存したフローは読み込んで使用することができます(当然か)

フローを削除する

使用しなくなったフローをいつまでも残しておくとトラブルの元ですから、削除しましょう。
(念のため保存しておくのを忘れずに)

フローを一時的に停止する

後で使うから削除したくはないけど、今デバッグしてる作業の邪魔になる、というような場合、 作成したフローを削除せずに一時的に停止することができます。

再開する場合は上記手順と同じで、状態を「有効」にする。

フローを全削除する

色々フローを作成したけど、一回チャラにしてやりなおしたいときは、 一旦Node-REDを停止(ブラウザ切断だけじゃなく、サーバプログラムを停止)して 以下の2つのファイルを削除する

もちろん、念のためバックアップ取っておくのが好ましい。
バックアップから復元すれば元通りになるはず。

その後、Node-Redを起動すると、フローが綺麗さっぱり消えているハズ。

その2以降の「フローの例」について

「フローの例」に書かれたJSONコードはテスト用に作成したフローをエクスポート(書き出し)したものです。
このコードの表示部分にマウスを乗せると、右上に「Copy」ボタンが表示されますので、このボタンをクリックしてください。JSONコードがクリップボードにコピーされます(マウスをドラッグしての選択は不要)。

この状態で、上記フローを読み込む(インポート)に示した方法でフローをインポートするとフローがコピーされます。

[!NOTE] 複数のフローをインポートした場合、既に存在するノードと同名のノードは別のノードとして生成されます。このとき、名前に「(_1)」などの別ノードを識別できるような記号は付きません。
特に、WebsocketのノードやDashboardのタブ/グループはシステムの動作や見た目に影響しますので、注意してください。
自動でよしなにする方法はありませんので、手動でチマチマと修正してください。
サイドバー(右側のペイン)の「▼」ボタンをクリックし、ノードの設定を表示でノードの設定を表示し、
各ノードの右側の数字をクリックすると、そのノードを参照しているノードの一覧が表示されます。
さらにそのノード一覧の各ノードをダブルクリックすると、そのノードが点滅表示されるので、そのノードのプロパティで参照先を変更すれば良いでしょう。