Statusノードを使う

 今回は、Statusノードを使ってみます。ヘルプには以下のようなことが書いてあります。

  • 同じタブ内のノードのステータスメッセージを取得します
  • このノードはpayloadを設定しません

ステータスと言えば、Debugノードの記事で出てきたノードの下部に表示できる短いテキストです。とりあえず、いつも通りサンプルフローを読み込んで動かしてみます。

Statusノードのサンプルフロー

メニューから「読み込み > サンプル > flows > node-red > common > complete > 01 - Handle status message output」を選択してサンプルフローを読み込みます。Injectノードのボタンを選択してフローを実行すると、「Hello World!」のログとstatusプロパティを持つログが1件ずつ出力されます。後者がStatusノードが拾ったイベントをトリガにして出力されたログです。その後、もう一度Injectノードのボタンを選択してみましたが、今度は「Hello World」のログしか出力されません。


フローの設定を確認すると、Injectノードと最初のDebugノードのステータスを拾っているようです。Completeノードと同じようなノリでラインがなくてもノード間が論理的に繋がっているようです。Injectノードにはステータスがないのでログは出力されないのだと思います。


Statusノードが受け取るmsgオブジェクト

Statusノードが受け取るmsgオブジェクトをジッと見つめてみます。冒頭で「Statusノードはpayloadプロパティを設定しない」と書いた通り、「payload」プロパティは見当たりません。一方、「status」プロパティの下に「fill」だの「shape」だの「text」だの「source」だのといくつかプロパティが見えます。ステータスについてはドキュメントに詳しく書いてあります。ステータスに表示するアイコンの色や形状も指定できるんですね。ポップな雰囲気で好感が持てます。なんとなく機器との接続状態をステータスで表現して、状態が変化したらフローを実行するみたいな使い方が想定されてそうな感じがします。


Statusノードがイベントを受け取る条件

先ほど、2回目のInjectノードのボタン選択でStatusノードが実行されなかったのは、恐らくステータスに変化がないためかと思います。フローを少しいじって検証してみます。

以下のようにInjectノードとDebugノードの間にFunctionノードを追加します。


Functionノードでは、payloadの末尾にランダムな数字を付加して、実行するたびに時々payloadが変化させます。


この状態でフローを実行すると、ログは以下のように、status.textの値が変化した時だけStatusノードが実行されていることが確認できます。


まとめ

ラインがなくてもフローが実行できる点でCompleteノードやCatchノードと似ていますが、Statusノードはステータスが変化した時だけ実行できるのが特徴です。イベントドリブンな実装に必須の汎用ノードのオーラを感じます。

コメント

このブログの人気の投稿

Execノードを使う

Joinノードを使う(その4)

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)