node-red-contrib-calcノードを使って、よくある計算処理を気軽に組んでみる

Node-RED で仕組みを作っていると、色々な計算処理が出てきます。たとえば、いくつかのデータの最大値を取りたかったり、数時間のセンサー値の平均を取りたかったり、全部の値から合計値を取って集計したいときがあったり。

もちろん、以前紹介した JSONata でも上記のような計算は可能ですが、JSONataの記法や挙動に慣れる必要があり、使いにくいケースもあるでしょう。複雑な処理の場合、ついつい function ノードで頑張ってしまい、こういった利用頻度の高い計算処理がうまく扱えたらと思っていました。

最近、node-red-contrib-calc というノードを見つけ、こういった用途に良い助けになると思いご紹介します。


また、記事連動のビデオを作成しました。本文と併せてお役立てください。


 

node-red-contrib-calc ノード

node-red-contrib-calc (node) – Node-RED
image

node-red-contrib-calc ノードはこちらです。

image

ページをみてみると、

  • 平均(avg):入力配列内のすべての数値の平均。
  • 最大(max):数値の配列から最大値の数値を取得します。
  • 最小(min):数値の配列から最小値の数値を取得します。
  • インクリメント(inc):数値に1を加算します。
  • デクリメント(dec):数値から1を引きます。
  • 整数部分(trunc):数値を整数部分に切り捨て(trunc)します。
  • 上向きに丸める(ceil):数値を上向きに丸める(ceil)最も近い整数に丸めます。
  • 下向きに丸める(floor):数値を下向きに丸める(floor)最も近い整数に丸めます。
  • 最も近い整数(丸め):数値を最も近い整数に丸めます。
  • 小数点以下の桁数の丸め(rdec):指定された小数点以下の桁数で数値を丸めます(2つの数値の配列から)。
  • 合計(sum):配列内のすべての数値の合計。
  • 減算(減算):配列内のすべての数値の減算。
  • 乗算(mult):配列内のすべての数値を乗算します。
  • 除算(devide):配列内のすべての数値の除算。
  • 余り(mod):配列内の2つの数値の除算の余りを取得します。
  • 絶対値(abs):数値の絶対値(abs)。

ほかにも色々と便利な計算処理が備わっています。

Discover Flow

使い方は上記ページが分かりやすいものの、実際に試したものを Discover Flow に載せました。

今回のフロー : flow-calc-node

image

試してみる

image

このようなフローがあります。ひとつひとつ試していきましょう。

合計値

image

[100,200,50,350,400,1,2] を合計してくれます。

image

inject ノードをクリックして [100,200,50,350,400,1,2] のデータが合計されます。

最大値

image

[100,200,50,350,400,1,2] から最大値を選びます。

image

inject ノードをクリックして [100,200,50,350,400,1,2] のデータから最大の値が選ばれます。

1を加算

image

[100,200,50,350,400,1,2]100000 に加算します。

image

[100,200,50,350,400,1,2] の inject ノードをクリックした場合は、

image

[100,200,50,350,400,1,2] の全ての値に1が加算されます。

image

100000 の inject ノードをクリックした場合は、

image

100000 に1が加算され 100001 になります。なにかの操作でカウントを取りたいときにおススメですね。

ほかにも色々な計算方法

image

node-red-contrib-calc ノードの設定は、このようになっています。これは先ほどの Sum のものです。Operationの部分で色々な計算方法を設定できるので、データを集めて何らかの分析をしたいときに計算が必要になったらぜひ検討してみてください!