ブロックを積みながら(107) Node-RED、SQLクエリの結果グラフ化その2

Joseph Halfmoon

前回、過去データに対するSQLクエリの結果をグラフ化してみたのですが、狭い範囲の室温をグラフ化したので、スイッチがチャタリングでも起こしたような波形になってしまいました。その割にデータ点数多すぎ。今回は取り出したデータに「フィルタ」をかけても少し見やすくしてみます。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。

    • Node-RED v2.0.5
    • node-red-dashboard 3.2.0
Smoothノード

今回データの「フィルタ」に使用するのは smoothノードです。filterノードというノードもあるのですが、こちらはデータの値に対するフィルタというより、時間に対するフィルタ機能です。smoothノードについては以下の過去回で実験してみてます。

ブロックを積みながら(59) Node-RED、統計?信号処理? smoothノード

smoothノードは、最大、最小、平均などの「ありがちな」処理以外に、ローパスフィルタ、ハイパスフィルタというオプションもあります。ただ、その「周波数特性」はどこにも見つかりませんでした。フィルタいうなら特性くらい書かんかい!そこで勝手に計算してみた別シリーズ回もあります。

ソフトな忘却力(20) Node-REDのsmoothノードのフィルタ特性を推定

一種の「IIRフィルタ」であると思います。勝手に考察した差分方程式と伝達関数は上の記事に掲げました。

今回、ローパスフィルタを使うかとも思ったのですが、無駄に多すぎるデータも間引きしたかったのです。smoothノードが備える「平均」機能を選択した場合、データの間引き(10点を平均して1点のデータに集約)が可能。一方、ローパスフィルタ設定にすると間引きは別ノードにゆだねなければなりません。お楽が一番ということで、今回は平均としてしまいました。ほぼ1分1回の測定結果を10点に1点の割合に間引き(と平均)しているので10分に1回、1時間に6回のデータとなります。

今回実験のフロー

今回実験のフローは前回フローのchartノードの直前に smoothノードを挿入しただけです。以下の図の赤で囲ってある部分。chartAgainFlow

smoothノードの設定が以下に。”Return the mean value” で “over the most recent 10 values”なので、10点のデータの平均をとってます。さらに Reduceのところにチェックを入れているので、N=10に1回ということで間引きも実施。ついでにちゃっかり小数点以下1桁の表示になるように丸めも入れてます。(元データが℃単位なのに、小数点以下2桁まで無駄に00入力されていたのをここで無いことにしてしまいました。)

chartAgainSmoothSetting

上記に対応して後続の chartノードの設定も若干変更を加えました。前回は直近1日分のみ表示になっていたのを直近1週間分に改め、かつ時間軸のX軸に年月日、時分までを表示するように「カスタム」設定してみました。あらかじめ準備されている選択肢には年月日を入れると時分が表示できるものが無かったためです。なお、日本語化していると選択肢が日本語で表されているため、年月日の指定がY-M-Dでよいことがわからず、ちょっと探しまわりました。chartAgainChartSetting

実験結果、アップデートされたグラフ

SQLクエリでmicro:bit V2が測定した2日分の室温データを取り出すように指定して返ってきたデータをチャート化したものが以下に。エアコンで狭い範囲に制御している室温データをsmoothノードで処理して「少しなめらか」にしてみたので、前回よりはずっと「らしい」グラフになってます。しかしエコでない設定じゃないのか。そのときの設定値をメモっておけばよかった。chartUpdated

測定点が無い夜間のところが飛んで直線になっているのは、元データの問題なのでまあ仕方がないか。

左側の6月30日分は、前回の生データそのままの表示だと以下のようだったので、大分見やすいです(個人の感想です。)chartResult

しかし、micro:bit V2からATOMLiteのデータを処理しようとして躓きました。元のSQLite3データベースに格納してある時間文字列のフォーマットが違う!だめじゃん。動かしているときは「ライブ」でチャート表示していたのでSQLに格納するデータ形式が違っているのに気づかなかったんかい?お間抜け。

ブロックを積みながら(106) Node-RED、SQLクエリの結果をグラフ化 へ戻る

ブロックを積みながら(108) Node-RED、データベース・フィールドのバグを修正 へ進む