2017-06-01 1555 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

相关问题