前回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つを重ねてプロットしてみることにいたしました。
ダメじゃん。上のチャートの中のオレンジの線が気圧、PRES(Pa)で、下の青い線のあたりにTEMP_ALT(℃)とHUMI(%)が隠れてます。chartノードは到来する数値の単位などしったこっちゃないので、ともかく複数系列を同じスケールで描いてくれてしまいます。
気圧のときのスケーリングを追加
前々回のフローそのものには変更を加えていませんが、下の赤矢印のfunctionノードの部分にスケーリング計算を加えてみました。
function ノードの中で JavaScriptのコードで処理するのはシリーズの趣旨的にはなんだかな~なのですが、既存のノードに追加なのでまあいいかと。スケーリング計算は黄色のマーカ部分です。Pa単位を kPa(キロ・パスカル)単位に直してます。気圧の場合、気象庁式にはhPa(ヘクト・パスカル)ですが、工学系では圧力はkPaとかMPaとかだものね。
複数系列プロット
Dashboard上のSQLクエリ発行グループで、Dashboard Char Enabledスイッチをイネーブル(青色)に倒したまま、「Select Key で系列を選択し EXEC QUERY BUTTONを押す」という操作を複数回行うと重ね合わせプロットが生成されます。
TEMP_ALT(気温、℃)、HUMI(相対湿度、%)、PRES(気圧、kPa)を重ね合わせたものが以下に。カーソルをグラフ上にもっていくとデータ系列のお名前とその時点の具体的な数値が表示されます。
データ系列名は、SQLのフィールド名と変えてもよいのだから、もっとわかりやすいお名前(単位つき)にした方が良かったか?後の祭りぞなもし。