2023年11月26日

RaspberryPi Node-REDのインストールと設定

 

山口県長門市にある千畳敷から日本海を望む
山口県長門市にある千畳敷から日本海を望む



さて,前回までRaspberryPiへのOSインストールとSSHおよびVNCツールによる接続方法について学習しました。今回よりローコードツールであるNode-REDのインストール設定に入っていきます。

RaspberryPiで使用するプログラミング言語としては,PythonとNode-REDがポピュラーです。どちらもモジュールを沢山使えるので,コーディング負担が少なくて済むというメリットがあります。

Node-REDはフローを作ることでプログラミングでき,フローの中でjavascriptやHTMLなどの言語も扱えるので,拡張性にも秀い出ています。
プログラミングする過程では,Pythonも活用しないと分析しにくい時もありますので,将来的にはどちらも使っていくことになります。

それでは,学習を開始しましょう。

【準備機器】
  raspberry Pi (今回は,raspberry Pi4Model B 4G RAMを使います。)
  raspberry Pi 用 ACアダプタ
  micro SDカード(ストレージ用 64GB)
    LANケーブル
  PC               (VNCツールやTeraTerm5を使います。)

  Node-REDとは

Node-REDとは,あらかじめ用意されたパーツ(ノード)を繋いでいくことでプログラムを構築することができるローコードツールです。元はIBMのサービスチームによって開発され、 現在はOpenJS Foundationのプロジェクトの一部となっています。
システム構成的にはこの組織で扱っているNode.jsの上で動く仕組みで,Node.jsの影響を強く受ける特徴があります。

プログラムとは一定の理(ことわり)のもと,ある目的を達成するために作られた論理的産物ですが,これには「入力ー>処理ー>出力」という流れ(フロー)が必ず存在します。
これを古い概念では,リクエスト・アンサー型プログラムと言います。つまり,何らかの要求に対して何らかの処理をして返すということです。これを見事にビジュアル的に体現したのがNode-REDになります。

言葉ではなかなか理解できませんが,プログラムを作り始めると解ってきます。いろんな人がいろいろなノードを作っており,RaspberryPiとも親和性が高いのでIoTではメジャーなプログラム開発ツールになっています。

詳しくは,Node-RED User Group Japanのポームページをご覧ください。

Node-REDは,パレット上に左のノード群から部品を選択してきて,各部品ノードを線で結んでいきます。

プログラム作成には,そのためのルールが若干ありますので,それを習得する必要があります。


  RaspberryPi OSへのインストール

RaspberryPi OSへのインストールは,Node-RED User Group Japanのポームページにおいて,「ドキュメント>Getting Started >Raspberry Pi」のサイトに記載のある以下のインストールスクリプトを「/home/pi」ディレクトリ上で実行します。

コード

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Node-REDは,Node.js上で動作するため,Node.jsのバージョンと整合性をとるのが難しく,実際には上記インストールスクリプトで整合性を取ることが望ましいです。

何回か動作方法を聞いてきますが,基本的にはyesで回答すればよいです。


  Node_REDの「require」命令文の利用許可

Node-REDは,Node.jsの上に構成されており,外部ファイルを読んだり書いたりするのに,Node.jsのrequire命令を利用します。そのため,Node-REDで「require」命令文が使えるように設定します。

今回は,piユーザにNode-REDをインストールしましたので,Node-REDの設定ファイルは,「/home/pi/.node-red」のフォルダ下に「settings.js」という設定ファイルが作成されています。

この設定ファイルは,node-REDのパスワードやSSLなど重要な要素を定義するファイルになります。ファイルの中の該当する個所を,次のコマンドのように書き換えてください。(事前にバックアップを取ってから行ってください。)

コード

functionGlobalContext: {
   fs:require('fs')
   // os:require('os'),
},    

これにより,Node-redからfsオブジェクトを使って外部ファイルが読めるようになります。


気づき Vimエディターについて

このように設定ファイル「settings.js]の中を修正するのですが,vimエディターを使って編集する場合,vimが自動的にビジュアルモードになって,マウスによるCopy&Pasteがうまく動作しない時があります。これは,今回のRaspberrypiにインストールされているvim(詳しくはvim-tiny)の初期設定において自動的にマウスがビジュアルモード(コマンド入力できない)になるように設定されているからです。

その場合は,vimが自動的にビジュアルモードにならないように,vimを動かすディレクトリ上で次のファイル「~/.vimrc」を作成します。

コード

echo 'set mouse=' >> ~/.vimrc

「.vimrc」ファイルの中身が「set mouse=」になっていればOKです。これで,vimを動かしても自動でビジュアルモードに切り替わらないです。


  Node_REDのパスワード設定とポート番号変更

次に,エディターのパスワードの設定をします。デフォルトでは誰でも入室可能ですので,これを変更します。これについては,Node-RED User Group Japanホームページの「ドキュメント>ユーザーガイド>セキュリティ」のコチラを参照してください。

エディタに入室する際にユーザ認証を有効化するには、 設定ファイルのadminAuthプロパティを変更します。

adminAuthプロパティはユーザオブジェクトの配列です。 これを使うと複数のユーザが異なるアクセス許可を持つような設定が可能です。

先ほどのホームページにある設定例では,adminユーザがエディタ内のすべてを実施できる権限「*」を持っており, georgeユーザは読み込み権限しかありません。

パスワードは安全性を高めるためにbcryptアルゴリズムを使用してハッシュ化されています。

【参考:ポート番号の変更】
今回のRaspberryPiはIoTの発信側と考えているので,屋内LANに守られていることもあり,ポート番号の変更まで行いませんでしたが,必要であれば設定ファイル内のポート番号を変更してください。


  パスワードのハッシュ値生成

Node-RED 1.1.0 かそれ以降を使っている場合、次のコマンドを使って,任意の文字列をハッシュ化することができます。パスワードを聴いてきますので,入力します。

コード

node-red admin hash-pw

ほとんどは,このコマンドで出来ると思いますが,出来ない場合は先ほどのサイトをご確認下さい。また,さらに厳しい認証を必要とする場合も同様にこちらのサイトをご覧ください。


  HTTPノードのセキュリティ


HTTPノードによって公開されるルートはBasic認証を利用することで保護します。
設定ファイルの「httpNodeAuth」および「httpStaticAuth」プロパティによって、 Node-REDフローへアクセスできる単一のユーザ名およびパスワードを設定することができます。設定ファイルの中の以下のところを修正してください。

コード

httpNodeAuth:{user:"user",pass:"$2a$08$zZWtXTja0fB1pzyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
httpStaticAuth:{user:"user",pass:"$2a$08$zZWtXTja0fB1pzCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},

passプロパティは、adminAuthと同様の書式で利用することができます。詳細な情報はパスワードのハッシュ値生成を参照してください。

httpStaticプロパティによって設定された静的コンテンツへのアクセスは、 httpStaticAuthプロパティを同様の書式で利用することにより保護できます。

これで,最低限のセキュリティ対応が完了です。さらに強化したい場合は,Node-RED User Group Japanポームページの「ドキュメント>ユーザーガイド>セキュリティ」のコチラを参照してください。


  Node-REDの起動・停止・再起動

起動は,ログインユーザでコンソールからnode-red-startと入力します。また,ホームディレクトリ「/home/pi」の配下の「.node-red」フォルダ下に各種設定ファイルがあります。

【起動する時】

コード

node-red-start

【停止する時】

コード

node-red-stop

【再起動する時】

コード

node-red-restart

なお,これらのコマンドで起動した場合,Node-REDはバックグランドで動作しますので,TeraTermなどのVTターミナルを閉じても,Node-REDは停止しません。


  Node-REDの起動確認とRaspberryPi起動時に自動起動する

Node-REDが動作しているかを確かめるため,同じLANに接続されたPC等のブラウザから http://ホスト名:1880/ にアクセスします。

また,RaspberryPiのLAN内IPアドレスを使って、 http://IPアドレス:1880/ でアクセスしても開くことができます。

ここではSSL証明書がありませんので,暗号化されていない通信になります。Node-REDのログオン画面が出力されればOKです。

Node-REDにパスワードが設定されていると,ユーザIDとパスワードを入力する画面が出力されます。

また,Raspberry Piの電源がついたとき、またはブート時にNode-REDを起動させたい場合は、 以下のコマンドを実行することでサービスを自動起動させることができます。

コード

sudo systemctl enable nodered.service

サービスを無効にするため、以下のコマンドを実行します:

コード

sudo systemctl disable nodered.service


  最後に

基本的なRaspberryPi OSへのNode-REDのインストールはこれで終了です。あとは,Node-RED上でどんなプログラムを作るかになります。このNode-REDのプログラミング技法については,多くの書籍もありますし,説明サイトも増えてきましたので,参考にして頂ければいいかと思います。

RaspberryPi関係は今回で一旦終了して,次回はUbuntuサーバ側のNode-REDのインストールに入ります。基本的にはRaspberryPiと同じなのですが,SSLによる暗号化通信をサポートする必要がありますので,それが追加になります。

それでは,次回まで。

(注意)情報の正確性を期していますが,実施される場合には自己責任でお願いします。

0 件のコメント: