ブロックを積みながら(104) Node-REDでSQLiteの練習その5

Joseph Halfmoon

前回はタイムスタンプの一致を検出、特定日付のデータだけを抽出しました。でもね、日付といったら何時から何時までと指定するのが普通でしょう。今回は前回メンドイとか言ってとりつけなかった第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様の日付関数関係の解説ページが以下に。

Date And Time Functions

しかし、日付比較に関しては以下の miztools様の日本語ページの方が処理例等も充実、大変勉強になります。ありがとうございます。

SQLite _ 日付期間比較

ダッシュボードにもう一つdate picker追加

前回設置した第1のdate pickerノードを開始日付の指定用に流用することとし、第2のdate pickerノードを終了日付の指定用に設置することにいたしました。開始と終了は対なので、同一グループに設置することにいたしました。グループの数は増えてないので、ダッシュボード側の変更は必要ありませぬ。NodeRedのフロー側で第2のdate pickerノードを配置すれば以下のように同じグループ内に2つのノードが見えるようになりました。DashBoardLayout

今回実験のフロー

今回実験のフローは、前回実験のフローの改造です。

    1. 上から3行目の日付設定フローをコピー(開始日付にお名前修正)
    2. 上から4行目に第2の日付設定フローとしてペースト(終了日付)
    3. 最下行のfunctionノードで生成しているSQL文にちょいと手をいれる

大した修正ではないのだけれど、前回はこれがメンドかった。怠慢。

DateCompFlow

さて4行目の終了日付設定の「キモ」は以下のfunctionノードでのflowストレージへのデータ格納です。前回がDATE_SELECTED1であったので、今回はDATE_SELECTED2というお名前でストアしましたが、終了日付とはわからないお名前でしたな。反省。

StoreEndDate

そして肝心要のSQL文の生成が以下に。flowストレージからとりだした設定を編み込んでSQL文を生成するところ。ここでのポイントはSQLite3では文字列として日付時刻が格納されているのだけれど、文字列のままでも自在に比較できるというところ(今回は日付部分のみ取り出して比較していることにご注意を。)SQLupdated

念のため、Debugノードに現れた生成後のSQL文を以下に。ちゃんと日付の大小比較がWHERE句の中に指定されておりますぞ。SQLdebug

実行結果

PC上のブラウダに映しているNode-Redのダッシュボード上に表示された実行結果が以下に。2つのドロップダウンリストと2つのデートピッカーで条件を指定後に EXEC QUERY BUTTON を押せば、該当のデータがテーブルに出力されてまいります。QueryResultsE

予定通り。でもテーブルだけじゃ物足らない?

ブロックを積みながら(103) Node-REDでSQLいての練習その4 へ戻る

ブロックを積みながら(105) Node-RED、SQLクエリ・ダッシュボードの整理? へ進む