Intern

Node-RED100本ノックに挑戦(16)

出力先の変換

以前、データの送信場所の指定をやりましたが、今回は
出力先の指定
をやっていきたいと思います。

何が違うのかというと、前回は、3つのものを3か所に分けていったと思います。
しかし、今回は1つのものが複数のデータを扱うときに行う送信場所の指定をやっていきます。

何回もやっていますので、まず図のようにinject、debug、switch、chengeをそれぞれ並べてみましょう。

図のように並べたら、changeにくっついている3つのinjectに数字を振ります。(今回は1,2,3)次にchangeを開き、ルールを

値の代入flow.set(setでなくてもいい)
対象の値 msg.payload

にします。
これは、「繋がっているinjectのmsg.payloadが送られてきたとき、flow.setに値を入れる」
となっています。そのため、下図では、100が押された際setには100という数字がセットされることになります。

前回の応用

ここからは前回の応用です。
前回はinjectが3つありましたが、今回は1つになります。そこで、どうやっているのでしょうか。

まず、injectをセットしましたら、msg.タイムスタンプになっていると思いますので、これはそのままで大丈夫です。
switchの中身を見てみましょう。

前回とほとんど変わりませんが、今回はmsg.topicを設定していません。なぜなら、今回injectは1つしかないためtopicを指定しても何も起きません。
ではどうするか、今回ステータスが変わるものが1つあります。それは
「flow.set」
です。プロパティのmsg.からflow.に変え、setと入力。値は、下のinjectに入れた値(今回は100,200,300)を1,2,3に入れます。
最後に、デバッグを開き、ノードステータスにチェックを入れてデプロイします。

デバッグで、injectの100を押しタイムスタンプを押すとset 1、200を押してタイムスタンプを押すとset 2、300を押してタイムスタンプを押すとset 3と表示場所が変わっていることが確認できます。

現在の保持ステータス

今、タイムスタンプが持っているステータスはどれなのかを見るために、もう1つ作りたいと思います。

図のように、inject、change、debugをフローに追加します。
ここで中身を変えるのは「change」のみになります。なぜかというと、ステータスを持っているのは「flow.set」だからです。
changeの中身を開き、ルールで「msg.payload対象の値をflow.set」にします。
デプロイを押してデバックしてみると、最後に触った300の値が出てきます。
200を押してタイムスタンプを押すと200が返ってきます。
このように持っているステータスによって出力先の変換や、そもそもの出力の変換もできるようになります。