2017-06-01 33 views
1

假設我是從許多設備接收與所述MQTT協議信息和下面的圖是一個設備的塊的簡化版本:是否可以在Node-RED中聲明全局變量並在節點配置中使用它們?

device one

因此,讓我們還假設所有其他設備具有完全相同相同的圖,不同的是將改變到device2用於第二設備,用於device3第三設備等的主題名稱,如下所示:

device two

問題是我想要一種在節點配置內更改名稱的方法,而不必一個接一個地完成。就像聲明一個全局變量一樣,它不僅可以在函數中使用,而且可以在節點本身中使用。例如,最後一張照片可以使用如下內容: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

讀我知道這是一個老的文章,但目前的方法proviced是尼克Ø奧利裏的節點 - 紅谷歌組如下:

  1. 編輯您的節點紅色設置文件(/home/pi/.node-red/settings.js),並添加以下(在module.exports行之上):

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

  2. 重新啓動Node-RED。 Et Voila - $(HOSTNAME)現在可以使用。

您可以在process.env對象下設置所需的任何env變量。

假設您想添加FOO並將其設置爲'只是另一個欄',您可以添加以下內容: process.env。FOO ='只是另一個酒吧'; ,你現在可以使用它。

+0

'HOSTNAME'是一個特殊情況,因爲NodeJS從環境變量列表中刪除了它在啓動時暴露。通過'settings.js'文件設置其他任何東西並不是必需的,而且在PaaS環境中確實很難做到 – hardillb

+0

您可以使用此方法添加任何變量。添加(在module.exports行之上): zenofmud

相關問題