前回ようやくSQLデータベースからの複数データ系列の重ね合わせプロットができました。今回はちょいと処理を追加してみます。特定のデータ系列のプロット範囲での最大、最小の表示です。ただ数字だけを表示するのも寂しいので、ダッシュボード上にはゲージ表示としてみました。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。
-
- Node-RED v2.0.5
- node-red-dashboard 3.2.0
今回実験のフロー
前回使用したフローの先っぽ(以下の図の赤線の下側)に3ノード追加しました。ダッシュボードのchartノードと並列に、データ処理のためのfunctionノードを追加し、その後ろにgaugeノード2つを並べました。
MIN、MAXなどの処理は第59回でやったsmoothノードでも可能ですが、smoothノードの場合、処理を行う「スパン」が固定長のようです。最近100点のデータのMIN/MAXとか、平均とかは可能ですが、今回のように成り行きのグラフ範囲全体でどうよ?というケースには使いずらいと思いました。
困ったときの functionノードということで(functionノードを使うと「ブロックを積んだ」ことにならんな、と密にやましく思います)使ってしまいました。
まずはfunctionノードの設定タブにて出口を2つにしておきます。msgを流し出す際に、出口の数だけの要素数の配列を送出すれば各出口に「分配」されます。
今回は、MIN、MAXの検出なので、その比較初期値を「初期化処理」タブにてflowストレージに格納しておきます。
そして最後、コードタブで最大、最小を検出して配列メッセージにして送出するコードを記述っと。なお、上流から空の配列(length==0)が流れてきたら、グラフのクリアと連動して最大、最小値も初期値に戻してます。
最大、最小を検出した結果を表示するgaugeの設定が以下に。氷点下と25℃以上で色を変えるようにしてみました(冬とはいえ室内温度データなので色が変わるようなデータは入ってなかったのですがね。)
実行結果
前回同様、測定デバイスをATOMLite、測定項目をTEMP_ALT(外付け温度センサ)、期間を2022年1月1日から31日に指定してQueryかけた結果が以下に。期間1か月内で動かしていたのはたった3日のそれも一部の時間帯なので、結果は以下のようでした。
最大、最小のゲージ表示できてますな。まあ、最大、最小なら上のチャートみても読み取れるケド。チャートみても分からないような指標にすればよかったか?