Node-RED で仕組みを作っていると、色々な計算処理が出てきます。たとえば、いくつかのデータの最大値を取りたかったり、数時間のセンサー値の平均を取りたかったり、全部の値から合計値を取って集計したいときがあったり。
もちろん、以前紹介した JSONata でも上記のような計算は可能ですが、JSONataの記法や挙動に慣れる必要があり、使いにくいケースもあるでしょう。複雑な処理の場合、ついつい function ノードで頑張ってしまい、こういった利用頻度の高い計算処理がうまく扱えたらと思っていました。
最近、node-red-contrib-calc というノードを見つけ、こういった用途に良い助けになると思いご紹介します。
また、記事連動のビデオを作成しました。本文と併せてお役立てください。
node-red-contrib-calc ノード
node-red-contrib-calc (node) – Node-RED
node-red-contrib-calc ノードはこちらです。
ページをみてみると、
- 平均(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
試してみる
このようなフローがあります。ひとつひとつ試していきましょう。
合計値
[100,200,50,350,400,1,2]
を合計してくれます。
inject ノードをクリックして [100,200,50,350,400,1,2]
のデータが合計されます。
最大値
[100,200,50,350,400,1,2]
から最大値を選びます。
inject ノードをクリックして [100,200,50,350,400,1,2]
のデータから最大の値が選ばれます。
1を加算
[100,200,50,350,400,1,2]
や 100000
に加算します。
[100,200,50,350,400,1,2]
の inject ノードをクリックした場合は、
[100,200,50,350,400,1,2]
の全ての値に1が加算されます。
100000
の inject ノードをクリックした場合は、
100000
に1が加算され 100001
になります。なにかの操作でカウントを取りたいときにおススメですね。
ほかにも色々な計算方法
node-red-contrib-calc ノードの設定は、このようになっています。これは先ほどの Sum のものです。Operationの部分で色々な計算方法を設定できるので、データを集めて何らかの分析をしたいときに計算が必要になったらぜひ検討してみてください!