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

Joseph Halfmoon

前回までJSONataの練習をしてましたが、今回からSQLiteノードを使ってデータベースへのアクセスの練習をしてみたいと思います。SQLiteノードは以前何度か使っており、SQLiteのDBもセットアップ済で常時稼働可能な状態です。しかし、忘却力の年寄は使い方忘れてしまいました。まずはテーブルを表示するところから。

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

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

    • Node-RED v2.0.5
    • node-red-dashboard 3.2.0
SQLiteのホームページ

データベース素人が勝手なことを書くと、SQLiteは、多くのSQLエンジンがサーバとして動作するのに対して、アプリ組み込みのライブラリから操作する方式のSQLエンジンです。とってもお手軽だけれどもSQL文でアクセスできると。詳しくは以下の御本家ホームページをどうぞ。

SQLite

sqliteノードの活用状況

SQLクエリを使ってSQLiteデータベースへアクセスできるsqliteノードはお手軽にリレーショナル・データベースをNode-REDから使えるノードであります。

別シリーズ「IoT何をいまさら」などで、各種のマイコンで収集したデータなどをデータベースに蓄えておくのに、sqlite ノードを使わせていただいております。sqlite ノードの「お世話になっている」デバイスどもを列挙するだけで以下のようです。

    • M5ATOM Lite
    • M5Stack
    • M5StickC
    • BBC micro:bit V2

上記はいずれもWiFiもしくはBLEなど無線機能を持っているマイコンです。マイコンは無線経由でMQTTブローカに接続し、Node-RED側でもMQTTブローカとやりとりするようにすれば接続が楽。そしてMQTTでやりとりする内容もJSONオブジェクトに統一しておけば、さらに楽です。なお当方の「サーバ機」Raspberry Pi 3 model B+上では、定番のMQTTブローカ Mosquitte を走らせてます。Mosquittoのホームページはこちら

本シリーズでも以下の2回で、マイコンとsqliteノードの接続をやってみています。

ブロックを積みながら(27) BBC micro:bitとラズパイでサウンドモニタ その4

ブロックを積みながら(54) Node-RED、ATOMLiteフローにSqlite追加

今回実験のフロー

sqliteノードの使い方をほぼほぼ忘れている今回は、既存のデータベースの中に含まれる小さなテーブル一つを読み出し、表形式でNode-REDダッシュボードに表示してみることにいたします。実験用のフローが以下に。SQL1_Flow

中央、オレンジ色で何やら「羽毛」のようなアイコンのかかれているノードが本題の sqlite ノードです。設定が以下に。

SQL1_setting

ここで「SQLクエリ」を見ると mgs.topic経由となっているので、上流ノードからmsg.topicに載せて流してくれたら処理すっからね、という塩梅(外部からの情報をSQL文に埋め込んだりするとSQLインジェクションが心配なところですが、今回は内部で閉じてっからね。)肝心要の設定はデータベース欄のデータベースの実体であるファイル名です。ファイルパスさえわかれば操作は可能。

その「上流」のInjectノードの設定が以下です。SQL1_InjectSetting

msg.payloadにはデフォルト値の「日時」載せてますが、今回は無視されます。msg.topicに載せている文字列が SQLクエリ の実体です。

select * from devices

SQL素人が勝手なことを書くと、データベースファイル内に複数存在しているテーブルの中から、devices という名のテーブルの全レコードを選択せよ、という具合です。

ちなみに devices という名のテーブルは、データを報告してくる先っぽのマイコンボード名とそのID番号を格納してある台帳です。他のテーブルにはID番号を格納しておき、必要に応じてこの表とガチャンコすることでどのマイコンボードのデータなのかわかると。

実際にInjectノードからsqliteノードに上記のクエリを送出すると、クエリの結果が返ってきます。その内容をDebugノードでダンプしてみると以下のようです。SQL1_debug

レコード数だけのarrayオブジェクトがpayloadに載せられています。その中に id と nameというプロパティが見えてますが、これは該当のテーブルのフィールド名そのものです。

SQLクエリの結果は上記のようなJSONオブジェクトで返ってきます。これをNode-REDダッシュボードの table ノードで表形式にして表示するための設定が以下に。SQL1_TableSetting

SQLクエリの結果をダッシュボードにテーブル表示

小テーブル全体が一度に表示できるようにサイズを設定した結果が以下に。

SQL1_Results

勿論、画面サイズには限りがあるので、表示しきれない部分があれば上下、左右のスクロールバーが現れます。

ちょっとは思い出した?今回はリハビリ。

ブロックを積みながら(98) Node-REDでJSONataの練習その3 へ戻る

ブロックを積みながら(100) Node-RED、SQLクエリの結果でドロップダウンリスト へ進む