ブロックを積みながら(84) Node-RED、追加モジュールのロード

Joseph Halfmoon

前回までで手元のNode-RED環境のパレットにあるノードをひとわたり触れたことになりました。これからはも少し「掘ったり」「新たなノードを追加」したりしてみたいと思います。まずは何でもできる function ノード、も少し詳しくなりたいです。今回はrequire(‘xxx’)的に外部モジュールを呼び出したいです。

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

function ノードは、グラフィックエディタ上で箱(ノード)を接続していけばいろいろできてしまうNode-REDの中において異分子とも言えます。中身にJavaScriptのコードを書かないとピクリとも動かないので。その代わり Node-REDの裏側で動いている node.js で出来ることは多分大抵のことができる筈。今回は、node-js上でスクリプトを動かすときに require(‘xxx’) xxxはモジュール名、とすれば使えるような機能をNode-REDのfunctionノード内で使ってみることを試みたいと思います。

Node-REDのfunctionノードの解説ページが以下に

Writing Functions

今回は上記のページの以下の小見出しの部分を実験してみました。

Using the functionGlobalContext option

Settings.js

Node-REDのSettings.jsには、functionGlobalContextというプロパティが存在し、そこにrequire()すべきモジュールとそれを呼び出すためのプロパティを追加しておくと、functionノード内でglobalコンテキストから呼び出せるようです。

settings.jsは手元環境では以下にあります。

~/.node-red/settings.js

デフォルトでは、冒頭のアイキャッチ画像に掲げたとおり、内部にコメントアウトされた「例」があるだけです。最初の例は、node.js の標準モジュールである os モジュールを呼び出す例と思われたので、そこのコメントを外して生かしてみました。こんな感じ。

settingsJsMOD

ここでNode-REDにsettings.jsを再読み込みしてもらえれば上記が生きてる筈。なお、node.js のOSモジュールのAPIについてのドキュメントは以下に。

Node.js v18.9.0 documentation >> api >> os

上記にごちゃまんとあるAPIが皆使えるのかと思うと嬉しい限り。

今回実験に使用したフロー

フローは以下のようです。

    1. Injectノード、トリガをかけるためのmsgを送出するだけ(中身はなんでもよい)
    2. functionノード、globalコンテキストからosモジュールを呼び出す。ここではとりあえずos.type()を調べて msg.payloadに載せる
    3. debugノード、送られてきた msg をデバッグウインドウに表示

flow

肝心のfunctionノードの設定が以下に。

functionSetting

実験結果

msg.payloadには “Linux” が載っております。ちゃんと os.type()動いているようです。GlobalGetResult

次は自前でモジュール作っておいてロードか?いろいろ野望が広がるけれども。

ブロックを積みながら(83) Node-RED、Rpi-keyboardノードでキー入力 へ戻る

ブロックを積みながら(85) Node-RED、自作モジュールのロード へ進む