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秒間)遅らせることを意味しています。逆の見方をすれば、待機時間内にメッセージを受け取らなかったら再送信データを送信します。
整理すると、
- Triggerノードはメッセージを受信すると5秒間待ちます
- 5秒以内にメッセージを受け取ったら何もしません
- 5秒を超えてメッセージを受け取らなかったらmsg.payloadに「timeout」の文字列を設定してメッセージを出力します
何か時間のかかる処理を実行して、指定した時間内にその処理が終わらなかったら強制的にフローを流す、みたいないわゆるタイムアウト機構として使えそうです。
まとめ
今回の内容をまとめます。
- メッセージ受信をトリガとして別のメッセージを流すことができる
- タイムアウト機構が作れる
コメント
コメントを投稿