2017-06-01 15 views
1

1つのデバイスのブロックの簡易版である:Node-REDでグローバル変数を宣言し、ノード構成で使用することはできますか?私はMQTTプロトコルと以下の図で、多くのデバイスからの情報を受信して​​いたとすると

device one

それでは、また他のすべてのデバイスが正確に持っていると仮定してみましょうように第三のデバイスに対してと、第二の装置のためdevice2device3を変更しようとしているトピックの名前を除いて同じ図で、次のように

device two

問題は、ノードの構成内で名前を変更する方法を1つ1つずつ行う必要がないことです。関数だけでなくノード自体でも使用できるグローバル変数を宣言すること。たとえば、最後の画像はMYVARIABLE_temperatureAMYVARIABLE_temperatureBのようなものをトピックとして使用できます。

したがって、Node-REDを使用してこのようなことを行うことは可能ですか?または、ソリューションは、値を配置するための特定のフィールドを持つカスタマイズされたノードを作成することにありますか?

答えて

1

グローバルコンテキストを使用していますが、次の構文を使用して環境変数を使用できるわけではありません。

$(ENV_VAR_NAME) 

ですから、その後、再起動して(ノードを更新するために、これらを変更する環境変数を設定変数の接頭辞ができノード-REDの)

+0

見ています...しかし、どこで変数ENV_VAR_NAMEに値を追加できますか? – Ramuyko

+0

ノードレッドが実行されているかどうかによって異なりますが、ノードレッドを開始する前にcmd行で設定できます – hardillb

+0

ノードREDを起動する前に端末でシステム変数として設定することを意味しますか?詳細を教えてください。システム変数を設定しようとしましたが動作しませんでした:/ – Ramuyko

0

たぶんこのことができます:https://nodered.org/docs/writing-functions#global-context

をグローバル・コンテキスト

また、すべてのノードが共有してアクセスできるグローバルコンテキストもあります。たとえば、キャンバス全体にグローバル変数fooを利用できるようにするには:

global.set("foo","bar"); // this is now available to other nodes 

そして

var myfoo = global.get("foo"); // this should now be "bar" 
+0

他の答えで説明したように、グローバルコンテキストはこの質問には役に立ちません – hardillb

0

私はこれは古い記事です知っているが、現在の方法は、ニック・Oもprovicedをに.get使用して読み取ることができます次のように「ノード・赤のGoogleグループのリアリーは次のとおりです。

  1. 編集してノード・赤の設定ファイル(/home/pi/.node-red/settings.js)と追加(module.exports行の上)次のようになります。

    process.env.HOSTNAME = require( 'os')。

  2. restart Node-RED。 Et Voila - $(HOSTNAME)は現在動作します。

process.envオブジェクトの下で任意の環境変数を設定できます。

FOOを追加して「別のバー」に設定する場合は、次のように追加します。 process.env。FOO = 'ちょうど別のバー'。 となり、これを使用できるようになりました。

+0

'HOSTNAME'は何らかの理由で特別なケースです。NodeJSはこれを環境変数のリスト始動時に露出する。 'settings.js'ファイルで何かを設定する必要はなく、実際にはPaaS環境で行うのが難しい – hardillb

+0

このメソッドを使って変数を追加できます。追加する(module.exports行の上): zenofmud

関連する問題