ブロックを積みながら(35) Node-RED、バージョンアップしたらSQLiteがいない

Joseph Halfmoon

Node-REDは以前からIoTネタで使わせていただいておったのです。しかし必要に応じて(泥縄式)使ってきたので、よく理解せず使っているところも大有り。この際「広く浅く」全貌をとらえるべしと思い立ち、『ブロックを積みながら』(Node-REDは「積まない」スタイルだけど)で勉強してみることにいたしました。まずは今回ソフトウエアのアップデートから。

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

Node-REDは「フローベースドプログラミングツール」ということで、前回までのMakeCodeエディタとは異なる系統の「ビジュアル」な環境です。ぶっちゃけ「ブロックを積む」のではなく、「ブロック(ノード)をつないだパイプの中をパケットが流れる」というべきか。本『ブロックを積みながら』は、細かいところにとやかく言いません。フローベースドも含めていいよね、OK!というノリです。でも、共通点が無いわけでもありません。どちらもビジュアルな画面の裏側にはJavaScriptがいます。

ここまでのところNode-REDを以下の構成で運用してきました。

    1. ハードウエアは Raspberry Pi 3 + HDD 機
    2. OSは Raspberry Pi OS (32bit) buster
    3. 同じハード上でMosqutto MQTTブローカが走っている
    4. MQTTへの「繋ぎ」は同じハード上で実行されているPythonスクリプト
    5. 「IoT」の末端マイコン達は、WiFiまたはBLE経由でPythonスクリプトと情報をやりとり

末端マイコンのそれぞれに対応するNode-RED Dashboard上の「タブ」を用意してあります。そこで送られてきたデータを確認したり、指令を送ったりできるようになっています。また、末端マイコンから送られてきたデータの蓄積にはSQLiteに接続するためのノードを使わせていただいております。

まずはNode-REDの更新

今回から、Node-REDのパレットに並ぶ各種の「ノード」を端から使ってみて「しみじみと体験」する決意(?)です。その前にNode-REDのバージョンを最新版に更新することにいたしました。Node-REDの手元のバージョンはこんな感じ。v1.2.7でした。古いんでないかい。

v1_2_7

現在では既に v2.0 がリリースされているようです。勉強するなら、更新してからにしたいです。しかし、Node-REDの更新ってどうやるの?こういうときに心強いのが、充実した日本語ドキュメントの Node-RED User Group Japan さんです。Node-REDのアップデートの方法についても情報があります。下記にURL貼り付けたページから1文引用させていただきます。

上述のインストールスクリプトを利用することを強く推奨します。

そう言われると拒む理由はありませんな。それにインストールのときに使用したスクリプト(実際にはcurlで都度スクリプトの本体をダウンロードして使うダウンロードのための1行)をそのまま使用でアップデートもできるみたいです。ユーザーグループさんのRaspberry Pi でのNode-REDのインストールと更新についてのページが以下です。

Raspberry Pi で実行する

インストールしたときの「1行スクリプト」、Diskに残ってました。一撃だね。とはいいつつちょっと嫌な予感がしたので、Node-REDを動かす前提となる node.jsのバージョンを確認しておきました。

$ node -v
v14.15.4

上記のページに掲載されているインストールスクリプトを起動。出だしはこんな感じ。update_script

着々と緑のチェックマークが付いていきます。しかし、途中からWARNINGがボロボロ出ますな。しかし、最後まで処理は完遂したようです。

update_script2Node-RED自体は、v2.0.5 に更新完了していました。WARNING出てたけど、更新自体は出来たのね。

マシンを再起動し、PC上のブラウザからRaspberry Pi  3上で走っているNode-REDに接続してみます。あれれエラーだよ。実際のエラー出力の様子はアイキャッチ画像をご参照ください。メッセージは以下です。

不明なノードが存在するため、フローを停止しました。

    • sqlitedb
    • sqlite

SQLite動かないと末端の奴らから上がってくるデータを保存できませぬな。たしか「SQLiteに接続するためのノード」はNode-REDのインストール時のデフォルトでは入っていなくて、パレット管理から個別にインストールしたような記憶です。幸い「フロー」は停止していてもNode-RED本体は元気に動いているみたいなので、とりあえずパレット管理を見てみます。palletSQLite

やっぱりMODULE_NOT_FOUNDという警告でています。また、1.0.0へ更新というボタンも表示されています。「更新」したらNOT FOUNDでなくなるかしら?ボタンを押してみました。そうは問屋が卸さない、エラーでした。そのエラーログを見れば、

node.js とその管理ツールである npm のバージョンの問題である

ことがようやく理解できました。まとめると

    • Node-REDの更新前のnode.jsのバージョンは v14.15.4 だった
    • 更新後のnode.jsのバージョンは v10.24.0 と先祖返りしていた
    • 更新前の npmのバージョンは不明、更新後の状態では 5.8.0

Raspbian OSなので、普通に apt でソフトウエアの更新が可能です。aptでやってみると、node.js、npmのバージョンは最新だと言われてしまいました。よくあることとは言えメンドイ。

とりあえず元のv14系に戻すことを考え以下のページを調べました。

NodeSource Node.js Binary Distributions

上記のページには、各バージョンをバイナリでインストールするスクリプトが並んでいます。最新版はv16ですが、コンサバにv14の “Ubuntu” 用のスクリプト(これまた2行です)をコピペして走らせました。結果のバージョンがこちら。

$ node -v
v14.17.6

$ npm -v
6.14.15

更新されたね。さて、Node-REDは動くのか? 念のため再起動後、PCからNode-REDに接続してみるとエラーは消えてます。そして消えていたSQLiteのノードが復活してました。

SQLiteReturns

 

毎度インストールとかアップデートとか、トラブルなあ。こないだはWindowsの更新も途中で止まって解決するまで大分時間かかったし。。。

 

 

ブロックを積みながら(34) MakeCode、Simulator、使える?使えない? へ戻る

ブロックを積みながら(36) Node-RED、何気に深いInjectとDebugノード へ進む