是否可以在Node-RED中声明全局变量并在节点配置中使用它们?

时间:2017-06-01 03:53:58

标签: node-red

假设我从许多使用MQTT协议的设备接收信息,下图是一个设备块的简化版本:

device one

因此,我们还假设所有其他设备具有完全相同的图表,除了第二个设备将更改为device2的主题名称,第三个设备更改为device3,依此类推,如下:

device two

问题是我想要一种在节点配置中更改名称的方法,而不必逐个进行。就像声明一个全局变量一样,它不仅可以在函数中使用,还可以在节点本身中使用。例如,最后一张图片可以使用:MYVARIABLE_temperatureAMYVARIABLE_temperatureB作为主题。

那么,是否可以使用Node-RED做这样的事情?或者解决方案只是创建一个具有用于放置值的特定字段的自定义节点?

3 个答案:

答案 0 :(得分:2)

不使用全局上下文,但您可以使用以下语法使用环境变量:

$(ENV_VAR_NAME)

因此,您可以使用Environment变量为配置变量添加前缀,然后更改这些变量以更新节点(重新启动Node-RED)

答案 1 :(得分:1)

也许这会有所帮助:https://nodered.org/docs/writing-functions#global-context

全球背景

还有一个全局上下文可供所有节点共享和访问。例如,要使变量foo在画布中全局可用:

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

然后可以使用.get

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

答案 2 :(得分:0)

我知道这是一个老帖子,但目前的方法是节点红色谷歌组中的Nick O&#Le; Leary如下:

  
      
  1. 编辑节点红色设置文件(/home/pi/.node-red/settings.js)并添加以下内容(在module.exports行上方):

         

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

  2.   
  3. 重新启动Node-RED。 Et Voila - $(HOSTNAME)现在有效。

  4.         

    您可以在process.env对象下设置所需的任何env var。

假设您要添加FOO并将其设置为“另一个栏”,您可以添加以下内容:     process.env.FOO ='只是另一个酒吧&#39 ;; 你现在可以使用它了。