ブロックを積みながら(109) Node-RED、複数データ系列の重ね合わせプロット

Joseph Halfmoon

前回SQLiteデータベースの一部のフィールドにフォーマットのエラーがあったのをNode-REDフローから修正。これでようやく目論んでいた「複数データ系列の重ね合わせ」プロットができるというものです。Chart化をイネーブルにしたままデータベースへ複数回のQueryをかけるとそれぞれの系列を重ね合わせてくれるもの。

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

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

    • Node-RED v2.0.5
    • node-red-dashboard 3.2.0
実際に重ね合わせて問題発覚

Dashboardのchartノードは、msg.payloadにグラフ化する数値データが載っていることを期待してます。複数のデータ系列を識別することも可能で、その場合、msg.topicに系列名を載せておけば、別々の系列として重ね合わせプロットしてくれます。

前々回、この機能が使えるように密に?テコ入れしてありました。しかし、大本のSQLデータベースの問題が発覚して、この機能の確認が延期となっていました。今回はその仕切り直しであります。

データベースに格納されているATOMLite機の測定データには以下のようなフィールドが含まれてます。

    • 温度(TEMPERATURE)
    • 温度(TEMP_ALT)
    • 湿度(HUMI)
    • 気圧(PRES)
    • 明るさ(CDS_RAW)

温度は2種類ありますが、TEMP_ALTの方が精度が良いめの外部センサによるものです。そこで、TEMP_ALT、HUMI、PRESの3つを重ねてプロットしてみることにいたしました。

結果が以下に。chartScaleProblem

ダメじゃん。上のチャートの中のオレンジの線が気圧、PRES(Pa)で、下の青い線のあたりにTEMP_ALT(℃)とHUMI(%)が隠れてます。chartノードは到来する数値の単位などしったこっちゃないので、ともかく複数系列を同じスケールで描いてくれてしまいます。

気圧のときのスケーリングを追加

前々回のフローそのものには変更を加えていませんが、下の赤矢印のfunctionノードの部分にスケーリング計算を加えてみました。

flowUpdated

function ノードの中で JavaScriptのコードで処理するのはシリーズの趣旨的にはなんだかな~なのですが、既存のノードに追加なのでまあいいかと。スケーリング計算は黄色のマーカ部分です。Pa単位を kPa(キロ・パスカル)単位に直してます。気圧の場合、気象庁式にはhPa(ヘクト・パスカル)ですが、工学系では圧力はkPaとかMPaとかだものね。toKPascal

複数系列プロット

Dashboard上のSQLクエリ発行グループで、Dashboard Char Enabledスイッチをイネーブル(青色)に倒したまま、「Select Key で系列を選択し EXEC QUERY BUTTONを押す」という操作を複数回行うと重ね合わせプロットが生成されます。multipleProt

TEMP_ALT(気温、℃)、HUMI(相対湿度、%)、PRES(気圧、kPa)を重ね合わせたものが以下に。カーソルをグラフ上にもっていくとデータ系列のお名前とその時点の具体的な数値が表示されます。chartUpdated

データ系列名は、SQLのフィールド名と変えてもよいのだから、もっとわかりやすいお名前(単位つき)にした方が良かったか?後の祭りぞなもし。

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

ブロックを積みながら(110) Node-RED、プロット区間の最大値、最小値をゲージ表示 へ進む