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

Joseph Halfmoon

前回まででデータベースにSQLiteクエリを自在に投げられるようになったので(ホントか?)、今回はクエリ結果のデータのグラフ化と思ったのです。が、その前に散かってしまったダッシュボードを整理しておきたいです。また、クエリの成功の結果で空なのか、クエリ作成失敗の結果で空なのかも分かるようにしておきたいです。小ネタね。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。

    • Node-RED v2.0.5
    • node-red-dashboard 3.2.0
泥縄で作ってきたダッシュボードの問題

何か機能を追加する度にダッシュボードグループを追加して適当に改変してきたので、ダッシュボードの表示が酷いことになってました。パソコンのブラウザで横長の広い画面にするとこんな感じ。dashboardtoolong

茫漠と横にながく広がっていて「一体感」というものがありません。一つのSQLクエリの設定と実行、結果の表示なんだからまとめておきたいです。

右上のプルダウンメニューからダッシュボードを開きその配置を変更いたします。プルダウンリストとか日付選択とかが別々のダッシュボードグループになっていたものをQuery結果表示のグループにまとめてしまいました。ドラッグアンドドロップなので簡単。転居先を結果表示のグループにしたのはこれが一番「幅広」設定が必要だったからです。dashboardReLayout

なお、ダッシュボードの各種ノードの移転により空き地になったグループは消さなくても誤動作はしなかったです。しかしデプロイする度に「使ってない設定がある」みたいなことを指摘されるので消しておいた方がうるさくなくていいです。

ダッシュボードの配置を整理した後は、横長のブラウザ画面でも以下のようにいつも同じ配置で表示されるようになりました。一体感がでてきた?dashboardReLayoutResult

もう1個の問題とその対処

もう1個問題に感じていたのは、EXEC QUERY BUTTONを押したときの結果表示です。下に配置したテーブルにデータが詰まってくれば、Queryが成功して結果が得られたのだと分かります。しかし、テーブルが空の場合には2通りのケースが考えられます。設定したQueryに該当するデータがたまたま存在しなかった、という空に意味がある場合と、プルダウンリストの設定忘れとか、そもそも設定がまずい状態でボタンを押しまったといったエラーの場合です。

エラーの場合に生成されたSQLクエリは以下のようです。本来条件値がはいるべきフィールドに undefined が詰まってます。

undefined

そこで、前回までほぼ一直線だったQeury実行のフローに枝を一本はやしてみました。こんな感じ。flowUpdated

select DBとラベルしてあるfunctionノードの出力を2手にわけました。以下のようにfunctionノードの設定タブから出力数を2とすれば出口が2か所に分かれます。functionNode2

この2か所の使い方です。2要素の配列をfuctionノードから送出すれば、第1要素が上へ、第2要素が下へと送られるようです。また配列でなく1オブジェクトのみ送出の場合は上だけに送出されるみたいです。そこで第1の出力に ダッシュボードのnotificationノードを接続し、第2の出力にSQLクエリ実行のノードを接続しました。これでSQLクエリ生成に問題がある場合はエラー報告のみして、実際のクエリ実行は止めてしまいます。クエリ実行の場合も成功報告はするので、空の結果でもクエリ成功したけど結果が空なのよ、と分かる筈。

functionノードのコードは以下です。だんだんコードが増えてきたな、おい。funcotionNodeCode

notificationノードの設定が以下に。LayoutはTop Rightとなっています。ブラウザの画面が横長で広いところにダッシュボードを表示している場合は、右上のところにメッセージが5秒間表示されます。しかし、表示幅が足らないときは、勝手に画面の下側に回されてしまうみたいです。

notification

実行してみたところが以下に。今回は成功したクエリ、結果も詰まっておると。

DashboardUpdated

次回こそはグラフか。

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

ブロックを積みながら(105) Node-RED、SQLクエリの結果をグラフ化 へ進む