今回はtriggerノードです。到来したメッセージに対して所定の遅延時間後に別なメッセージを送信することができるもの。人感センサが反応したら3分間だけ点灯するとか、所定時間内にメッセージが到来しなかった場合にタイムアウトを知らせるインターバルタイマ的な使用など、設定次第でいろいろな目的に使えそうなノードです。
まずは以下に今回の実験フローを掲げます。シンプルです。injectノードはデフォルト設定のまま、ボタンを押すとタイムスタンプを後続の triggerノードに投げつけます。triggerノードは受信したタイムスタンプそのものは「捨ててしまい」到着したことをトリガーとして「設定した」動作をします。今回は実験フローなので結果は Debug ノードで確認です。
triggerノードの設定
tiggerノードは以下のような動作となるように設定を行いました。
-
- msgを受信したら “waiting” という文字列を送信する
- 5秒間待機する
- 待機時間の間に次のmsgを受信したら待機時間を延長する(送信はしない)
- 待機時間の間に次のmsgが到着しなければ、”Expire!”という文字列を送信
後方のノードでは、waitingが来れば「監視状態」に入ったのね、と分かり、Expire!が来れば「タイムアウト」に遅れたのね、と分かると。
今回は、実験なので5秒としましたが、デフォルト設定は ミリ秒単位です。長い方は時間単位まで可能です。かなり長時間の「待ち」が入れられるようです。
実機動作結果
Raspberry Pi 3 model B+(Raspberry Pi OS 32bit buster)上で動作している Node-RED(v2.0.5)で確認した実機動作結果を下に示します。
Injectボタンを押すと、waitingというメッセージが届きます。そのまま何もしないでいると、5秒後に以下のように Expire! と報告がきます。
5秒立つ前に Injectボタンを押すことを繰り返すと、初回の waiting 後は、何もおこらずそのままです。しかし、押すことを止めて5秒立つとExpire!します。予定どおりかね。