前回「次回は、タイムスタンプでの絞り込みかね。」と呟いたので、そのとおりに日付でのデータ絞り込み機能を追加してみます。でもね現状はおおきく手抜きです。本当は前後日付時刻を指定してある期間を絞りこみするべきなのでしょうが、今回は日付選択1個のみ。二つにするのがメンドイので刻むことにいたしました。根性無だな、自分。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。
-
- Node-RED v2.0.5
- node-red-dashboard 3.2.0
※今回、DatePickerで選択した日付時刻を加工するのにJSONata式を使っています。その件についてはJSONataホームの以下ページを参照させていただいております。
全体フローに手抜きな日付選択を追加
以下に全体フローを掲げました。上半分がダッシュボードからの検索条件の設定用、下半分がSQLクエリの実行とその表示です。
まずは、ダッシュボードに配置した date pickerノードです。以下では配置グループの指定くらいで、特段なにも設定しない素のまま、です。
つづいて date pickerノードからやってくる日時時刻をSQLのクエリ向けにフォーマットを変換いたします。過去、第90回でダッシュボードのdate pickerについては動かしてみています。ダッシュボードからpayloadに載ってやってくるのは「いつもの」数値形式の日時時刻です。いっぽうSQLite3の日時は特有の文字列で記録されております。今回はNode-RED側の日付を文字列に直してSQLite3に渡して一致した日付のデータだけを取り出す所存です。手抜き。
変換には毎度お世話になっております JSONata式を使わせていただきます。これがお楽。
変換した文字列を、次のfunctionノードで、flowのストレージへと一たん格納するのは前回の他の条件と同様です。
SQL文に日付条件を追加
さて、条件がflowストレージに格納されている筈(格納されてないときの対処をまだしてないケド)なので前回のSQL文に手を入れてみます。
上記の黄色のマーカ部分が追加の行です。選択日付の加工済文字列をとりだしてwhere句に条件を追加してます。
実行結果
さてブラウザ上でDashboardを開いたところが以下に。まずは追加したDatePickerを開いて、データが存在する筈の日付を選択しておきます。
前回同様、報告者(Device)?は micro:bit V2機、報告内容(Key)は TEMPERATUREということで指定して、EXEC QUERY BUTTONを押しました。結果が以下に。
該当日付の該当装置の温度測定結果が取り出せたみたい。次回は「手抜き」の部分を改善しろよ、自分。