node-red-contrib-random-event-generator でランダムなタイミングを試してみる

enebular で IoT や自動化のようにデータを受け取って何かする仕組みを作っていくと、実際に使えるようにしていくために、いろいろな開発ポイントがあります。

その中でも、いつも苦労するのが「不定期なタイミングでしっかり動作するか検証したい」という検証です。

定期的なタイミングであれば inject ノードで定期的に実行すればいいのですが、やはり不定期なタイミングとなると、そのために追加で自分で仕組みを作る必要があります。

ほかにも inject ノードで、まず 1 秒ごとのタイミングで定期的に発生させてランダムな判定を噛ませることで、以降に値が行ったり行かなかったりという実装をすれば、ランダムなタイミングはある程度作れますが、細かいタイミングは作れません。

node-red-contrib-random-event-generator というノードがある

そういうときに、不定期なタイミングを作り出せる、検証に便利なノードがあります。

node-red-contrib-random-event-generator (node) – Node-RED

image

このノードは、ランダムな分布から引き出された間隔でイベント(メッセージ)を生成できます。

Discover Flow

実際に使ってみた Discover Flow がこちらです。

Discover Flow : random-event-generator-try

image

node-red-contrib-random-event-generator でランダムなタイミングが発生し、その後、仮で温度と湿度のランダムな値が発生するようにしています。

動かしてみる

image

こちらのフローを読み込んで使ってみます。

image

開始時には、まだ止まっているので inject ノードから start という文字列をメッセージを送るとランダムなタイミングが発生しします。toggle という文字列をメッセージを送ると停止時は start 動作開始して、動作時は stop 停止する動作になります。

仮でつくった温度と湿度のランダムな値の部分は、みなさんのプロジェクトに応じて、必要になる値が変わると思うので変更してみてください。

image

node-red-contrib-random-event-generator ノードをダブルクリックしてプロパティ(設定)をみると、Commands では動作開始・停止のコマンドの定義が、Distribution ではランダム値の配布の仕方(ランダム生成のタイプや、ランダム分布の秒数間隔)を指定できます。

若干 Mean interval と Standard deviation が感覚的に分かりにくいので node-red-contrib-random-event-generatorのドキュメント を確認しつつ、感覚をつかんでみてください。

実は node-red-contrib-random-event-generator にランダムな値生成も付いていればいいのでは?と、当初は思っていたのですが「そうか。検証したい状況や内容によってランダムとはいえ欲しい値も変わりますよね。」と気づきまして、あらためて、使いどころが考えられたシンプルなノードだなと思いました。