NodeRED:修改flows.json后配置丢失

问题描述 投票:1回答:1

我有一个使用MQTT发布者和订阅节点以及一个代理配置的工作流程。一切正常。

启动NodeRED之前,我必须使用环境变量MQTT_BROKER_IPMQTT_BROKER_PORT更改MQTT代理ip和端口。

我使用的是

sed -i -e "s/^\([[:blank:]]*\"broker\":[[:blank:]]*\)\"[^\"]*\",/\1\"$MQTT_BROKER_IP\",/g" /data/flows.json
sed -i -e "s/^\([[:blank:]]*\"port\":[[:blank:]]*\)\"[^\"]*\",/\1\"$MQTT_BROKER_PORT\",/g" /data/flows.json

替换有效。

现在,问题是,当NodeRED启动时,日志文件中有错误:

[info] Starting flows
[error] [mqtt out:2b1fba1a.efa24e] missing broker configuration
[error] [mqtt in:58c7bd6b.0e8664] missing broker configuration

当我进入NodeRED编辑器时,打开MQTT节点,保存它们而不进行任何修改并部署流程,一切正常,并且MQTT节点显示绿色的“已连接”指示灯。

为什么会这样?如何在NodeRED外部正确修改flows.json?

mqtt node-red
1个回答
1
投票

问题是流中的多个条目将json字段broker用于不同的事物。例如

您要编辑的mqtt-broker配置节点:

{
    "id": "c2ba2a60.80ae38",
    "type": "mqtt-broker",
    "z": "",
    "name": "",
    "broker": "192.168.1.116",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "compatmode": false,
    "keepalive": "60",
    "cleansession": true,
    "birthTopic": "",
    "birthQos": "0",
    "birthPayload": "",
    "closeTopic": "",
    "closeQos": "0",
    "closePayload": "",
    "willTopic": "",
    "willQos": "0",
    "willPayload": ""
  }

mqtt-in节点:

{
  "id": "98d0e95b.c28c2",
  "type": "mqtt in",
  "z": "a4de5120.cd3f58",
  "name": "",
  "topic": "#",
  "qos": "0",
  "datatype": "auto",
  "broker": "c2ba2a60.80ae38",
  "x": 190,
  "y": 80,
  "wires": [
    []
  ]
}

如您所见,当您运行sed脚本时,它还将更改broker指向mqtt-inmqtt-broker节点中的条目。

打开/保存可能有效,因为您仅定义了一个mqtt-broker,因此将默认在列表中选择它,因此在部署时会修复该条目。

[如果您想做这种事情,您将需要更复杂的东西,它知道要更新的每个JSON条目中的type条目。

© www.soinside.com 2019 - 2024. All rights reserved.