TWELITE PAL のPulseCounterから送信されたデータから、カウントされたパルス数と送信回数を抽出まではこれまでにやってきた。
ここでは、送信回数からガス使用量を表示するためのデータ処理を行うフローを作成する。
Nodeフロー全体
ここで使用するフローの説明は下記で行っている。
ここで説明するフロー全体のJSONファイルは下記からダウンロード。TWELITEの通信データ受信から全てのフローになっている。ガス使用量を計測する➀のフローも含めています。
➀送信回数の増分を算出
最新の送信回数と、前回の送信回数の差を求めて増分を算出する。
差は1となるはずだが、TWELITEからの通信信号の受信に失敗していることがあるために計算させている。
➀ー1
TWELITE/Node-RED:ガスメーターのパルス発信をカウントして、ガス使用量を計測する②の
ガス使用量を計測する➀で作成したフローから少し変更されたフローから、flowオブジェクトを呼び出して値を受け取っている。※最新のTWELITE送信回数。
トリガーは、呼び出すflowオブジェクトが更新された時となっている。
- complete: 指定したフローの完了をトリガーにしている。
指定するフロー 送信回数を②flow.transmission-timesに代入 - change:前回の送信回数を受け取る
前回の送信回数を flow.1-back-count から受け取る。
値の代入 msg.payload、前回の送信回数を受け取る
対象の値 flow.transmission-times、最新の送信回数
TWELITE送信回数毎のパルスカウント数も受信しており、そのパルスカウント数にもズレはある。このズレは送信されるパルスカウント数が間違っているだけのようで、ガスメーターとの差に影響が無いため、今のところは活用していない。ズレの原因は不明。
➀ー2
ひとつ前に受信したTWELITEの送信回数で、②の最後まで処理が終わった値を戻すようにしている。
②で行っている、送信回数が最大(65535)になって、リセットされた時の処理が必要となるため。
- complete: 指定したフローの完了をトリガーにしている。
指定するフロー 送信回数を②flow.transmission-timesに代入 - change:前回の送信回数を受け取る
前回の送信回数を flow.1-back-count から受け取る。
値の代入 msg.payload、前回の送信回数を受け取る
対象の値 flow.1-back-count、前回の送信回数
”➀ー1”と”➀ー2”の差を計算
- join:2つの値が流れてくるまで待機(最新と前回の送信回数)
動作 手動
結合 msg.payload
出力 配列
指定数のメッセージパーツを受信後 2 - calculator:差の計算をするために配列を降順に並べ替え。値が小さい方の➀ー2が、配列の先になるので、順番を入れ替える必要がある。
通常…最新→前回 送信回数がリセット…前回→最新
Input field msg.payload
Output field msg.payload
Operation Sort descending - calculator:差を計算している。
Input field msg.payload
Output field msg.payload
Operation Subtract
②TWELITEの送信回数が最大→リセットされた場合の対処
送信回数が最大数65535になった後、送信回数がリセットされる。その時、差は65535前後になるため、リセットされた場合の対処と、受信済みの送信回数を➀へ返すのと、次のフローへ渡すようにflowオブジェクトへ値を代入している。
②ー1
- join:最新と一つ前の送信回数を配列にしている。
降順に並べ替えた状態のmsg.payloadと、差を計算したmsg.payload の2つを受信して次のフローへ渡す。
動作 手動
結合 msg.payload
出力 配列
指定数のメッセージパーツを受信後 2 - switch:リセットされたかどうかで出力先を変更。
差が60000未満→上側へ出力 リセットされていないと判断
差が60000超 →下側へ出力 リセットされたと判断
プロパティ msg.payload[1]
< (数値)60000
> (数値)60000
②ー2
msg.payload のパスについて、
受け取ったフローに複数の値がある時、格納されている値のパスを確認する方法。
debug で表示された内容から、パスを確認する方法は、>_ をクリックすれば、Payloadのパスをクリップボードにコピーされる。
▼が付いていると、下の階層があることを表している。
- payload[0][0]:1003
- payload[0][1]:1002
- payload[1]:1
- payload[1階層][2階層]
- change:送信回数はリセットされていない。
最新の送信回数を flow.1-back-countへ代入。値は➀ー1へ渡す。
値の代入 flow.1-back-count、最新の送信回数を受け取る
対象の値 msg.payload[0][0]、最新の送信回数 - change:送信回数はリセットされていない。
差の計算結果を msg.payload へ代入。ガス使用量の増分。
値の移動 msg.payload[1]、差の計算結果
対象の値 msg.payload 、ガス使用量の増分を受け取る - change:送信回数がリセットされている。
最新の送信回数を msg.payload へ代入。ガス使用量の増分。
値の移動 msg.payload[0][1]、最新の送信回数 →ガス使用量の増分
対象の値 msg.payload 、ガス使用量の増分を受け取る - change:送信回数がリセットされている。
最新の送信回数を flow.1-back-countへ代入。値は➀ー1へ渡す。
値の代入 flow.1-back-count、最新の送信回数を受け取る
対象の値 msg.payload[0][1]、最新の送信回数 - change:ガス使用量の増分
ガス使用量の増分を flow.gas-m-pulsecount へ代入。値は、③ー1へ渡す。
値の代入 flow.gas-m-pulsecount、ガス使用量の増分を受け取る
対象の値 msg.payload、ガス使用量の増分
③ガス使用量を出力
- change:ガス使用量の増分
ガス使用用の増分を flow.gas-m-pulsecount より、受け取る。
値の代入 msg.payload、ガス使用量の増分を受け取る
対象の値 flow.gas-m-pulsecount 、ガス使用量の増分 - change:現在のガス使用量
現在のガス使用量を ⑤ flow.gas-m-count より、受け取る。
値の代入 msg.payload、現在のガス使用量を受け取る
対象の値 flow.gas-m-count 、⑤ 現在のガス使用量 - join:ガス使用量の増分 と 現在のガス使用量の2つを受け取るまで待機
- calculator:ガス使用量の増分 と 現在のガス使用量を加算
Operation Sum - change:現在のガス使用量 最新
増分が加算されたガス使用量を flow.gas-m-count に代入。最新のガス使用量
値の代入 flow.gas-m-count、最新のガス使用量をmsg.payloadより受け取る
対象の値 msg.payload 、最新のガス使用量
送信回数の値1がガスメーターから発信されたパルス数10カウント分なので、
送信回数1回=10ℓ(0.01㎥)。
④毎月1日0時にリセット
ノードを追加している。”node-red-contrib-cron-plus”
毎月1日0時に、毎月のガス使用量を0リセットしている。
cornplusの設定方法:Node-RED:フローの使い方②
- cronplus:毎月1日に実行。
Outputs 1 output: All messages to output 1
cron 0 0 0 1 * * - change:現在のガス使用量 最新
増分が加算されたガス使用量を flow.gas-m-count に代入。最新のガス使用量
値の代入 flow.gas-m-count、最新のガス使用量をmsg.payloadより受け取る
対象の値 msg.payload 、最新のガス使用量
⑤値のリセット(テスト時にのみ使用)
テスト時に値をリセットしたいとき用に作成したリセットボタン。
値を0にする。
④flow.1-back-count と ⑥flow.gas-m-count の値が0になる。
- inject:フローのボタンを押すとmsg.payloadの値”0”を出力する。
ペイロード (数値) 0 - change:TWELITEの送信回数
flow.1-back-count の payload に”0” を代入。
値の代入 flow.1-back-count、数値”0”をmsg.payloadより受け取る
対象の値 msg.payload - change:ガス使用量
flow.gas-m-count の payload に”0” を代入。
値の代入 flow.gas-m-count、数値”0”をmsg.payloadより受け取る
対象の値 msg.payload
ガス使用量を見えるようにする。グラフとメーター
③ガス使用量を出力の flow.gas-m-count の値を使ってグラフとメーターに表示させ、見える化を行う。
ノードを追加:node-red-dashboard
complete: 指定したフローの完了をトリガーにしている。
指定するフロー ③ガス使用量を出力 の ⑥flow.gas-m-count に今月のガス使用量が代入された
change:ガス使用量を受け取る
ガス使用量を flow.gas-m-count から受け取る。
値の代入 msg.payload、ガス使用量を受け取る
対象の値 flow.gas-m-count、ガス使用量
gauge:メーターを表示(node-red-dashboard)
Type Gauge
Label 今月のガス使用量
Units m3
Range min 0 max 100
chart:線グラフを表示(node-red-dashboard)
Label 今月のガス使用量 m3
Type Line chart
X-axis last 1 weeks
X-axis Label HH:mm:ss
Blank label m3
コメント