ようやく色々なセンサからデータを取ってくることができるようになったので、そのデータを結合することを覚えたいと思います。

あとは、データ取得日時もしっかりと記録したい。

 

そんなわけで、本日は下記2点を行いました。

  1. データ取得日時の記録
  2. 日時データと複数のセンサの値を結合

 

まずはデータ取得日時から。

 

Node-REDのタイムスタンプがあるので、何も問題無くいけるかと思ったらそうでもなかった。

色々と調べてみると、「node-red-contrib-moment」というものを使うと良いらしいことが分かりました。

 

 

 

まずはノードの追加ですね。

 

似たようなのがたくさん出てきますが、上記に書いた「node-red-contrib-moment」というのが最近まで更新されていることがわかります。

他のは数年前で更新が止まっていました。

 

 

 

うまく追加できると、ノードが2つ追加されます。

 

 

今回使ったのは、「Date/Time Formatter」というノードです。

 

 

まずはシンプルに下記のようなフローを作成。

 

 

 

ノードの中身は下記のようにしました。

 

Date/Time Formatter

 

Output Formatは、初めは空白でしたが、上記のように入れました。

こうすることで、出力される日時の形式が設定できます。

 

こんな感じ。

例えば、「/」を「-」や「.(ドット)」に変えても良いですし、その辺はお好みで。

 

 

 

次に、複数のデータを結合するのですが、それは「Join」ノードを使いました。

これは初めから入っているノードなので、追加は無し。

参考にした記事はこちら。

 

 

 

今回結合したいデータは6個。

  • データ取得日時 :1個
  • BME280 の 温度・湿度・気圧データ :3個
  • MH-Z19C の CO2濃度・温度データ :2個

 

各センサからのデータ取得は以前に確認済みですので、これらを繋げるだけ。

以前の記事は下記を参照ください。

 

 

 

 

今回のハードはこんな感じになりました。

 

 

RaspberryPi + BME280 + MH-Z19C

以前使ったのをそのまま足しただけ。

配線などは以前の記事を参照してください。

 

 

フローは、下記のようにしました。

 

 

一見複雑そうですが、赤色の枠で囲った部分が今回新たに追加したノードです。

Joinノードは色々と触っていって、ようやくうまくいく方法を見つけた感じです。

内容は、センサノードからの出力と日時データはそのまま結合できないので、センサの出力は数字のみを取り出してから結合、というフローになっています。

 

 

Join

 

初期設定から3か所変更しています。

  • 動作 :「手動」 (初期設定は「自動」)
  • 出力 :「配列」 (初期設定は「文字列」)
  • 指定数のメッセージパーツを受信後 :6 (初期設定は空白)

 

今回はCSVファイルに出力することにしましたので、出力は配列が都合が良かったです。

カンマ区切りなので、CSVと相性が良いですね。

「6」は結合するデータ数になるので、ここは場合によって変えないといけないです。

 

 

出力形式は色々ありますが、オブジェクト同士なら「結合オブジェクト」も使えるのかもしれない。

まだやってないので何とも言えませんが。

 

 

これらがうまく動くと、下記のような出力が得られました。

 

 

Joinノード後で青い色になっているのは、MH-Z19Cの出力ですね。

赤色が文字列青色が数字、になっているような気がする。

 

 

そして、最終的には下記のようなCSVファイルが出力されました。

 

 

空白が入っているのが気になるーーーー。

無駄な改行を消せば直りそうだけど、今日は気力切れ。

手動でサクッと消してグラフ化してみました。

 

 

 

よし!

こういうのをやりたかった!!

 

 

今回はかなり有益なことができた気がします。

「コード書いたほうが早くね?」というツッコミもあるかもしれませんが、コードが書けない人でもここまで出来るNode-REDは本当に凄い。

 

この記事が誰かの助けになれば幸いです。