前回まで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ノードの活用状況
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ダッシュボードに表示してみることにいたします。実験用のフローが以下に。
中央、オレンジ色で何やら「羽毛」のようなアイコンのかかれているノードが本題の sqlite ノードです。設定が以下に。
ここで「SQLクエリ」を見ると mgs.topic経由となっているので、上流ノードからmsg.topicに載せて流してくれたら処理すっからね、という塩梅(外部からの情報をSQL文に埋め込んだりするとSQLインジェクションが心配なところですが、今回は内部で閉じてっからね。)肝心要の設定はデータベース欄のデータベースの実体であるファイル名です。ファイルパスさえわかれば操作は可能。
msg.payloadにはデフォルト値の「日時」載せてますが、今回は無視されます。msg.topicに載せている文字列が SQLクエリ の実体です。
select * from devices
SQL素人が勝手なことを書くと、データベースファイル内に複数存在しているテーブルの中から、devices という名のテーブルの全レコードを選択せよ、という具合です。
ちなみに devices という名のテーブルは、データを報告してくる先っぽのマイコンボード名とそのID番号を格納してある台帳です。他のテーブルにはID番号を格納しておき、必要に応じてこの表とガチャンコすることでどのマイコンボードのデータなのかわかると。
実際にInjectノードからsqliteノードに上記のクエリを送出すると、クエリの結果が返ってきます。その内容をDebugノードでダンプしてみると以下のようです。
レコード数だけのarrayオブジェクトがpayloadに載せられています。その中に id と nameというプロパティが見えてますが、これは該当のテーブルのフィールド名そのものです。
SQLクエリの結果は上記のようなJSONオブジェクトで返ってきます。これをNode-REDダッシュボードの table ノードで表形式にして表示するための設定が以下に。
SQLクエリの結果をダッシュボードにテーブル表示
小テーブル全体が一度に表示できるようにサイズを設定した結果が以下に。
勿論、画面サイズには限りがあるので、表示しきれない部分があれば上下、左右のスクロールバーが現れます。
ちょっとは思い出した?今回はリハビリ。