前回はタイムスタンプの一致を検出、特定日付のデータだけを抽出しました。でもね、日付といったら何時から何時までと指定するのが普通でしょう。今回は前回メンドイとか言ってとりつけなかった第2のdatepickerノードを設定、日付範囲でデータ抽出を行えるようにしてみます。これでようやくまともになった?
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。
-
- Node-RED v2.0.5
- node-red-dashboard 3.2.0
※御本家、SQLite.org様の日付関数関係の解説ページが以下に。
しかし、日付比較に関しては以下の miztools様の日本語ページの方が処理例等も充実、大変勉強になります。ありがとうございます。
ダッシュボードにもう一つdate picker追加
前回設置した第1のdate pickerノードを開始日付の指定用に流用することとし、第2のdate pickerノードを終了日付の指定用に設置することにいたしました。開始と終了は対なので、同一グループに設置することにいたしました。グループの数は増えてないので、ダッシュボード側の変更は必要ありませぬ。NodeRedのフロー側で第2のdate pickerノードを配置すれば以下のように同じグループ内に2つのノードが見えるようになりました。
今回実験のフロー
今回実験のフローは、前回実験のフローの改造です。
-
- 上から3行目の日付設定フローをコピー(開始日付にお名前修正)
- 上から4行目に第2の日付設定フローとしてペースト(終了日付)
- 最下行のfunctionノードで生成しているSQL文にちょいと手をいれる
大した修正ではないのだけれど、前回はこれがメンドかった。怠慢。
さて4行目の終了日付設定の「キモ」は以下のfunctionノードでのflowストレージへのデータ格納です。前回がDATE_SELECTED1であったので、今回はDATE_SELECTED2というお名前でストアしましたが、終了日付とはわからないお名前でしたな。反省。
そして肝心要のSQL文の生成が以下に。flowストレージからとりだした設定を編み込んでSQL文を生成するところ。ここでのポイントはSQLite3では文字列として日付時刻が格納されているのだけれど、文字列のままでも自在に比較できるというところ(今回は日付部分のみ取り出して比較していることにご注意を。)
念のため、Debugノードに現れた生成後のSQL文を以下に。ちゃんと日付の大小比較がWHERE句の中に指定されておりますぞ。
実行結果
PC上のブラウダに映しているNode-Redのダッシュボード上に表示された実行結果が以下に。2つのドロップダウンリストと2つのデートピッカーで条件を指定後に EXEC QUERY BUTTON を押せば、該当のデータがテーブルに出力されてまいります。
予定通り。でもテーブルだけじゃ物足らない?