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

Joseph Halfmoon

前回はfunctionノードの中で、require(‘os’)的な操作をする方法を練習。これでNode-REDの中から node.js の各種パッケージが使えるようになり嬉しいです。でも「出来合い」のモジュールだけじゃあな。自前のも使いたい、ということで今回は自前モジュールも同じ方法で使えることを確かめました。

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

※Node-REDのfunctionノード内での追加モジュールのロードの方法については、以下の解説ページに書かれています。

Writing Functions

実験に使った「自前」のモジュール

今回Node-REDから呼び出した自前のモジュールは以下の2行だけの簡単なものです。千里の道も2行から、違うか。

// test module
exports.abc = 'ABC';
exports.inc = function(a) { return a+1; }

これは普通のJavaScriptコードなので、Node-REDつかわずエディタで書いてます。今回はVScode使用なので、上記のモジュールのテスト用コードも書いて、node.js で動作することを確認してあります(冒頭のアイキャッチ画像。)

「自前」モジュールの呼び出し設定

上記モジュールを require()するために ~/.node-red/settings.js 内に1行追加いたします。前回、 os:requreの行のコメントを外したところの直下に1行追加いたしました。モジュールの在り処はフルパスで指定しとります。settingsjs_mod_again

変更後、node-red-restart かけてます。

今回実験のフロー

今回実験のフローは外形的には前回と同じです。真ん中の functionノードのコードを差し替えただけです。functionノードでやることは2つ。

    1. 到来するmsgに載っているpayloadをモジュール内のinc()使ってインクリメント
    2. topicプロパティにモジュール内のabcプロパティの値を載せる

usermod_flow

functionノードの設定が以下に。global.get(‘tst’)すると、requre()相当の処理がされてモジュールが使えるようになると。funNodeSetting

実行結果

予定通り動きました。当たり前か。usermod_result

今回は「以下同文」の回でチョロすぎ。流してんじゃねーよ。連休だし。

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

ブロックを積みながら(86) Node-RED、DashboardにTableノード追加 へ進む