(16/100)メッセージをコンテキストの値によってルーティングする / Node-RED100本ノック

最近話題になっているNode-RED。
使い方を学びたいという声を聞くことがあります。
そのような方のために、Node-REDのフローを100個作ってその様子を動画で紹介する「Node-RED100本ノック」という企画を立ち上げました。

Node-REDの公式サイトにあるNode-REDクックブックに紹介されているフローや自分で行ってみたフローについて、実際に作る方法とフローの解説していく第16回目です。

第15回はEnOceanマルチセンサーとTP-Linkスマートプラグの連携Part2です。

メッセージをコンテキストの値によってルーティングする

今回は、Node-REDクックブックの”Route or block a message based on a context value”の解説です。

フローコンテキストの値によってメッセージをルーティングします。

Node-REDのフローのコピーはこちらから
JPサイト ⇒ https://cookbook.nodered.jp/basic/route-on-context
グローバルサイト ⇒ https://cookbook.nodered.org/basic/route-on-context

第17回はNode-REDダッシュボード Part1です。

Node-RED100本ノックの動画

Node-RED100本ノックのYoutube再生リストはこちらです。⇒ Node-RED100本ノック

ぜひチャンネル登録をお願いいたします。⇒ DALI KNX EnOcean照明制御チャンネル

【文字起こし】Injectノードとdebugノード

文字起こし

はい、みなさんこんにちは。

スマートライトの中畑です。

Node-RED100本ノック第16回目、やっていこうと思います。

今日はですね、こちらメッセージをコンテキストの値によってルーティングするというフロー、やってみたいと思います。

それでここまでNode-RED100本ノックを今日で16回目になるんですけど、やってみてこう思ったのが、やっぱりNode-REDの一番重要なのは他の人が理解しやすいフローを作るっていうのが、多分すごい大事なんだなっていうふうに思いました。

というのもNode-REDはjavascriptで書けば、まぁだいたい自分がやりたいことできるんですけど、ただファンクションNode使ってJavascriptで色々書くと間にコメントとかもちろん入れるんですけど、でもやっぱり後から見るとすっごいわかりにくいですよね。

Node-REDの良いところはスイッチNodeとかチェンジNodeとか色々元からあるNodeを使えば、後からそのフローを見た人が結構その理解しやすいような作りにすることができるんですね。

完全にjavascriptで作るようなところはそこはサブフロー化してしまえば、ここはこういうことやってるんだなっていうのはすごいわかりやすいので、この他の人が理解しやすいフローを作る。

わざわざスイッチNodeとかチェンジNodeを使ってそういうふうなフローを作る、っていうことが大事だと思うので なるべくこれを意識してやっていきたいと思います。

では、いってみましょう!

今日のフローはですね、Node-REDと cookbook、まあ今日からもう日本語でもうやっていこうと思うんですが、この中に、これですね、メッセージをコンテキストの値によってルーティングするというフローがあります。

これ、どんなフローなのか、まずはちょっとNode-REDでこのフローをインポートしてやってみたいと思います。

はい、じゃあNode-REDを立ち上げます。

ここでさっきのはい、これをコピーして、でここで読み込む、import、これで読み込んで貼り付けます。

じゃあ、まずはどんな動きをするかというのを見ていきたいと思います。

デバッグNodeにして、デバッグモードにしてこれでまずインジェクトやると、はい、インジェクトを押したけどデバッグには何も表示されてないです。

で、ここでステータス0にすると、まだ出ないですね。

これは、あーやっと、えーステータス1にすると出ましたね。

じゃあ、今度ステータス2で、はい。

ここ見てください。

あのアウトプット1、これがアウトプット1です。

ステータス1にした時にアウトプット1に出た、と。

で、これをステータス2のこのインジェクトNodeを押した時にアウトプットに出ました。

で、ここですね、ステータス3にしました。

で、ここでインジェクト。

そうするとアウトプット3に出ました、と、いうふうになります。

つまりここのインジェクトNodeを押すことによって、このステータスが変わって、この出力先が変わるというNodeです。

じゃあ、まずはこっちのインジェクトNodeは単純にタイムスタンプを送っていると。

こっちのスイッチNodeですね、スイッチNodeはフロー state っていうプロパティに 1、2、3っていうのを送ってますね。

違う違う、このスイッチNodeではフロー state が1の時、2の時、3の時でそれぞれ振り分けています。

このセットフロー state っていうのは、えっとここで、ペイロードに0ですね、state 0だからstate、まぁ0送られていると、こちらはメッセージペイロードに1を送っています。

そうすると、セット、このチェンジNodeでチェンジNodeで、フローstate がメッセージペイロードの値に設定されるというふうになっています、はい。

このフロー state っていうのが、フロー state。

このフローstateというのはここですね、コンテクストスコープっていうのがあって、これはフローは同じフローまたはエディタのタブのすべてのNodeがアクセスできますと。

なので、まぁ要はそのPHPなんかでいうそのグローバル変数みたいなものですね。

なのでこのフローステートの値を見れるようにしたいと思いますはい。

やる場合はインジェクトNode、チェンジNode、デバッグNode、で、これつなげますと。

で、セットメッセージペイロードじゃなくて、メッセージペイロードをフローステイト。

メッセージペイロードにフローステートの値を入れるというふうにしました。

これちょっとやっていきたいと思います。

これを送ると、はい、3になってますね。

はい、これもう1回ちょっと説明すると、今ここを押すとフロー state っていう値がデバックNodeで表示されます。

で、今はここ3なんですけど、これを押すと、はい、フロー state は0になりました。

でこれ押すとフローステイトが1になりました。

なので、このインジェクトNodeとこのチェンジNodeはそのフローステートの状態にあってアウトプット1、2、3とこういうふうに分岐する。

フロー state っていうのはこちらのセットフローステートで設定されている。

で、実際にどんなフロー state が入っているのかというのはこちらのフローをつくって確認しました。

状態によって出力先が変わるとき、僕は今まで普通にファンクションNodeでこの1番2番3番とか振り分けてたんですけど、それがこれでできるというのは今日初めて知りましたね。

なので、じゃあこれどんなふうに使うのかというのは、今後いろんなデバイスを繋げてみてフローをつくってちょっと、ああこういうところで使えるんだっていうのを、まぁ自分の中でも探しながらやっていきたいと思います。

と、いうことで本日は以上になります。

ご視聴ありがとうございました。

また、ご覧ください。

では皆さん、さようなら