ブロックを積みながら(62) Node-RED、時間経過で引き金を引く、triggerノード

Joseph Halfmoon

今回はtriggerノードです。到来したメッセージに対して所定の遅延時間後に別なメッセージを送信することができるもの。人感センサが反応したら3分間だけ点灯するとか、所定時間内にメッセージが到来しなかった場合にタイムアウトを知らせるインターバルタイマ的な使用など、設定次第でいろいろな目的に使えそうなノードです。

まずは以下に今回の実験フローを掲げます。シンプルです。injectノードはデフォルト設定のまま、ボタンを押すとタイムスタンプを後続の triggerノードに投げつけます。triggerノードは受信したタイムスタンプそのものは「捨ててしまい」到着したことをトリガーとして「設定した」動作をします。今回は実験フローなので結果は Debug ノードで確認です。

flow

triggerノードの設定

tiggerノードは以下のような動作となるように設定を行いました。

    1. msgを受信したら “waiting” という文字列を送信する
    2. 5秒間待機する
    3. 待機時間の間に次のmsgを受信したら待機時間を延長する(送信はしない)
    4. 待機時間の間に次のmsgが到着しなければ、”Expire!”という文字列を送信

後方のノードでは、waitingが来れば「監視状態」に入ったのね、と分かり、Expire!が来れば「タイムアウト」に遅れたのね、と分かると。

triggerSetting

今回は、実験なので5秒としましたが、デフォルト設定は ミリ秒単位です。長い方は時間単位まで可能です。かなり長時間の「待ち」が入れられるようです。

実機動作結果

Raspberry Pi 3 model B+(Raspberry Pi OS 32bit buster)上で動作している Node-RED(v2.0.5)で確認した実機動作結果を下に示します。

Injectボタンを押すと、waitingというメッセージが届きます。そのまま何もしないでいると、5秒後に以下のように Expire! と報告がきます。

TriggerDebug

5秒立つ前に Injectボタンを押すことを繰り返すと、初回の waiting 後は、何もおこらずそのままです。しかし、押すことを止めて5秒立つとExpire!します。予定どおりかね。

ブロックを積みながら(61) Node-RED、変化の有無でフィルタするfilterノード へ戻る

ブロックを積みながら(63) Node-RED、流量制限ができる、delayノード へ進む