定期的にセンサー値をストリームで受信しているとします。 センサーからのメッセージ送信が止まった際に、同じ間隔でプレースホルダーとなる値を送信したいとします。
例として、センサーデータをダッシュボードに流しているいる場合、
センサーの値送信が止まった場合、ダッシュボード上のチャートでは値の更新が止まってしまいます。
センサーが止まったことを示すためにも、チャートを更新するためのプレースホルダーのメッセージとなる 0
値の送信が必要になります。
Trigger
ノードを使用して、あらかじめ定義した間隔でセンサー値を受信していないことを検知し、
2つめの Trigger
ノードでプレースホルダーメッセージを定期的に送信します。
[{"id":"9ccdf268.c96ff","type":"inject","z":"ac14500e.2c57d","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":1660,"wires":[["38950a5.28d15f6","2c532f67.0330e"]]},{"id":"38950a5.28d15f6","type":"debug","z":"ac14500e.2c57d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":610,"y":1660,"wires":[]},{"id":"2c532f67.0330e","type":"trigger","z":"ac14500e.2c57d","op1":"reset","op2":"true","op1type":"str","op2type":"bool","duration":"2","extend":true,"units":"s","reset":"","bytopic":"all","name":"","x":260,"y":1700,"wires":[["e4e42b96.97a338"]]},{"id":"e4e42b96.97a338","type":"trigger","z":"ac14500e.2c57d","op1":"0","op2":"0","op1type":"num","op2type":"str","duration":"-2","extend":false,"units":"s","reset":"reset","bytopic":"all","name":"","x":420,"y":1700,"wires":[["38950a5.28d15f6"]]}]
例のフローでは、上部のブランチで Inject
ノードから
Debug
ノードへの通常のメッセージのフローを示しています。
メッセージは、2つめのブランチの先頭の Trigger
ノードへも流れています。
ノードは最初に "reset"
のpayloadを送信し、2秒待って "timeout"
メッセージを送信するよう設定されています。
新しいメッセージを受信した場合、この遅延を延長するオプションも選択されています。
つまり、メッセージを継続的に受信し続ける限り、ノードは何もしないということです。
最後のメッセージ受信から2秒を経過すると、一度だけ "timeout"
メッセージを送信します。
タイムアウトメッセージは後続の Trigger
ノードに送信されます。
このノードは2秒ごとに 0
を送信するように設定されており、一番上のブランチに合流します。
ノードは msg.payload
が "reset"
の場合、送信を停止するようにも設定されています。
これは、先頭の Trigger
ノードがセンサーのメッセージを受信することにより、そこから最初のメッセージが送信され、
センサー自身の値送信が再開されたとき、2番目の Trigger
ノードが初期化されます。
Node-RED: Low-code programming for event-driven applications.
Copyright OpenJS Foundation and Node-RED contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
The OpenJS Foundation | Terms of Use | Privacy Policy | OpenJS Foundation Bylaws | Trademark Policy | Trademark List | Cookie Policy