今回は rangeノードです。シンプル機能のノードです。ある範囲内の数値を別な範囲に変換するだけです。変換といっても入力範囲の最大を出力範囲の最大、入力範囲の最小を出力範囲の最小にマップするだけの「線形」な変換のみです。難しい変換はできません。範囲外だったらサチらせるとか、ラップさせるとかできるので、ま、十分か。
※「ブロックを積みながら」投稿順 index はこちら
※Node-REDは Raspberry Pi 3 model B+ (Raspberry Pi OS, 32bit)上で動作させています。
実験用フローとそのセッティング
実験に使用したフローは以下です。Dashboardのnumericノードで設定した数値、0から32000の範囲を、rangeノードで0から100までの範囲に変換してGaugeノードで表示しようとするもの。
上記左端に、RESETとかかれたInjectノードが置かれているのは、Numericノードを強制リセット、ボタン一発で0に復帰させるためです。単にmsg.payloadに0を載せて送るだけのもの。
dashboardのnumericノードの設定
入力可能な数値についてはrangeノードで指定する入力範囲のやや外側まで入力できるようにしてあります。範囲外であったらサチらせる機能をテストするためです。
肝心の range ノードの設定は以下です。入力範囲外については最大、最小にサチらせるようにしてしてあります。また、デフォルトでは変換結果は浮動小数点数値になるのですが、整数値に四捨五入を指定しています。これは後で gauge ノードに表示したときの「スッキリした見栄え」のためです。
上記 range ノードで変換済の範囲をDashboardに表示する gauge ノードの設定が以下です。0~100なので%表示ということにしています。
動作確認
入力範囲上限を超えるところ(32040)までUPさせたときの表示が以下に。ゲージは100%と振り切ってます。
中間値については冒頭のアイキャッチ画像をご覧ください。シンプルなノードなので波乱もなくて良かった。ホントか。