Node-RED Advent Calendar 2016の18日目の記事です。
Blumix上のNode-REDでもRaspberry PiのNode-REDでも言えることなのですが、Node-REDを起動しっぱなしにしているときにフローを止めておきたいときってありますよね。
たとえばこんなフロー。
こういう連携を組むことは多いのですが、MilkcocoaノードとWio Nodeを連携しているものですが、
- milkcocoa受信が例えば1秒間隔で頻繁すぎると、Wio Nodeの反応があやしくなるとき
- Wio Nodeセンサー取得→milkcocoa出力に流すときに10秒ごと動かすのが頻繁すぎるとき
といったときに 一時的にフローを止めておきたい といった欲求が出てきます。
今までやっていた手法とデメリット
今までやっていた手法はこんな感じ。
ごくごくシンプルにフローを切る形で止めます。
しかしこの流れ。特に登壇やデモ時に事故りやすい。よくあるのは、お披露目の直前にフローをつなぎ忘れたり、見た目が切断済みで再接続時につなぐところを間違えたりします。
いちばんミスった最悪の例。つなぐところが違う...(しかも登壇時テンパると元のつなぎ方思い出せない)
見た目分かりやすく止めておくフローブロックFunctionをつくる
まだ発展途上ではあるのですが、もう少し見た目分かりやすく止めておくことはできないかと思って、取り入れた手法があります。
Node-RED日本ユーザ会 : Functions Nodeの書き方
こちらを見てみると、フローは常にmsgオブジェクトを各ブロックでリレーしていますが、ここに書いてあるとおり null を渡すと、以降のフローは実行されません。止めてくれるというわけですね。
これを利用します。
まず、Functionフローを作ります。
中身はこんな感じ。
このように書かれています。
// フローブロック
msg = null;
return msg;
シンプルに null を渡してます。
これでフローブロックが出来上がりました。
ほんのちょっとですが、このソースも置いておきます。
[{"id":"9277a3cb.9ac2c","type":"function","z":"2b17c715.853ec8","name":"[x]","func":"// フローブロック\nmsg = null;\n\nreturn msg;","outputs":1,"noerr":0,"x":839,"y":1470,"wires":[["8259a8a.fa88e58"]]}]
実際使ってみる
実際にフローを止めてみます。
Node-REDのつながっている部分は、間に入れたいものを乗せて、、、
パッと離すと、割り込んでくれます。便利!
これで実際フローをデプロイすると、ちゃんと以降のフローが止まってくれます。
今回の例にあるフローを各所で止めてみます。
このように各所で止められているので、MilkcocoaやNode-REDにアクセスする部分が沈黙します。
戻すとき
デモ前の持ち運び時はこのようにブロックしておいて、直前に目視でフローブロックFunctionと除去してやれば、前述の切断状態よりは間違いにくくフローを戻すことが可能です。
もっとスマートな方法ないかなと思いつつ、いまはこの手法に落ち着いています。
フローを一時的に止めておきたいとき、よろしければご参考下さい。