ブロックを積みながら(39) Node-RED、行き先切り替え、Switchノード

Joseph Halfmoon

前回のChangeノードは、「積荷」を載せ替えたりするためのものでした。今回のSwitchノードは、「行き先」への仕分けを担うもの、という感じです。仕分けの方法もいろいろあって非常に便利です。今回はその基本部分を使ってみますが、一見しただけでもなかなか便利。

※「ブロックを積みながら」投稿順 index はこちら

Switchノードのアイコンを見ると、二股に分かれた矢印になっています。当然ながら、2股どころかN股?に仕分けができる優れものです。今回はお勉強のためなので、下のように到来する側は6つ股?仕分けて出ていく先は4つ股といたしました。

Switch_test_flow

行き先は 全て msgオブジェクトをデバッグウインドウに表示する同じ機能のDebugノードです。しかし、仕分け先に届いたことを確かめられるようにお名前を付けてあります。期待しているのは以下のような仕分けです。

    1. GE10。payloadに10以上の数字が載っていたときに受け取る
    2. hasABC。payloadに積まれているオブジェクトに”ABC”というプロパティ名が含まれている場合に受け取る
    3. JSONata。SWITCHの中に仕込んである JSONata式に適合する payloadのみ受け取る
    4. Other。上の3つの分類に適合しないものは全て受け取る

switchノードの設定は以下のようです。

SWITCH_1234switchノードの初期状態では仕分け先は1個しかないですが、左下の方にある「+追加」ボタンを押すことで「仕分けルール」を追加していけます。また、その下に「最初に合致した条件で終了」とあるのは、上から順にルールを適用し、最初の行き先に仕分けたらおしまいにする方法です。ここを「全ての条件を適用」にすればマッチする行き先全てにCOPYを配布する方式も可能となります。

みれば分かる感じですが、上からPayloadが

    1. 数値の10より大きかったら1番へ送る
    2. ABCというキーを持っていたら2番に送る
    3. 書いてあるJSONata式(payloadの中のdataという名のオブジェクトの要素数を数えて、2よりも大きいとき)に適合したら3番送る
    4. それ以外は皆4番に送る

です。

数値10を送るinjectボタンと、数値9を送るinjectボタンを押したときは以下です。payload:10は GE10ノードに受け取られ、payload:9は Otherに受け取られています。

GE10_SWITCH次に、payloadにオブジェクトを載せているABCと、ABのボタンを押してみます。ABCを押すと、オブジェクトの中にプロパティ”ABC”が含まれます。するとhasABCノードに送られているのが分かります。ABボタンだと、オブジェクト内には、AとBの2つのプロパティがありますが、条件に適合しないので Otherへ送られます。

hasABC_SWITCH次は data3ボタンと、data1ボタンを押してみます。どちらもpayloadの中にはdataという名のプロパティがあり、その実体はarrayです。data3ボタン側には3要素のarrayが載っており、data1側には1要素のarrayです。

記述したJSONata式は、dataというプロパティ内の要素数を数えて >2 であったらSWITCHするものなので、data3は通しますが、data1はOther送りとなります。

JSONata_SWITCH基本的な使い方をやってみましたが、まだやっていないのが「メッセージ列」に対する操作です。こちらは別なノード split と一緒に使ってみる予定です。

ブロックを積みながら(38) Node-RED、Changeノード、実は超強力 へ戻る

ブロックを積みながら(39) Node-RED、配列をSplitして、Switchで仕分け へ進む