Triggerノードを使う(その1)

ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回からTriggerノードシリーズです。

間隔を開けて2つの値を出力する

今回確認するサンプルは「flows > node-red > function > trigger > 01 - Outputs two value with interval」です。直訳すると間隔をあけて2つの値を出力するようです。Triggerノードのプロパティはこんな感じです。



最初にメッセージを受け取ったタイミングで送信データ「1」を出力した後、2秒待機して再送信データ「0」を出力するようです。遅延させるという意味では前回紹介したDelayノードと似ていますが、あるメッセージ受信をトリガとして、別のメッセージを送信できるのがこのノードの本質的な機能でしょうか。何に使うことを想定したノードかはわかりませんが、とりあえず挙動は確認できました。

タイムアウト機構を実現する

次に確認するサンプルは「flows > node-red > function > trigger > 02 - Trigger a flow if a message is not received after defined time」です。今度は、規定の時間メッセージを受信しなかったらトリガを発動させるパターンです。Triggerノードのプロパティを確認すると、赤枠の部分が先程のサンプルと違っています。


送信データ「なし」は最初にメッセージ受信時に出力しないことを意味しています。「新たなメッセージを受け取った時に遅延を延長」はメッセージを受信したら再送信データの送信を待機時間分(この例だと5秒間)遅らせることを意味しています。逆の見方をすれば、待機時間内にメッセージを受け取らなかったら再送信データを送信します。

整理すると、
  1. Triggerノードはメッセージを受信すると5秒間待ちます
  2. 5秒以内にメッセージを受け取ったら何もしません
  3. 5秒を超えてメッセージを受け取らなかったらmsg.payloadに「timeout」の文字列を設定してメッセージを出力します
何か時間のかかる処理を実行して、指定した時間内にその処理が終わらなかったら強制的にフローを流す、みたいないわゆるタイムアウト機構として使えそうです。

まとめ

今回の内容をまとめます。
  • メッセージ受信をトリガとして別のメッセージを流すことができる
  • タイムアウト機構が作れる

コメント

このブログの人気の投稿

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

Execノードを使う

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