如何在Node-RED中远程部署流文件?

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

是否可以将现有的Node-RED流文件myflow.json部署到运行Node-RED的远程计算机上?

经过大量的搜索之后,我偶然发现了相关Google小组中的this discussion,但这不是很有启发性。

UPDATE(在下面的建议答案之后)

这里是来自远程计算机的建议请求的输出:

[scripts]$ curl -v -X POST http://192.168.70.73:1880/flows -H "Content-Type: application/json"  --data "@remote_test.json" 
* About to connect() to 192.168.70.73 port 1880 (#0)
*   Trying 192.168.70.73... connected
* Connected to 192.168.70.73 (192.168.70.73) port 1880 (#0)
> POST /flows HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: 192.168.70.73:1880
> Accept: */*
> Content-Type: application/json
> Content-Length: 1088
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
< HTTP/1.1 204 No Content
< X-Powered-By: Express
< Date: Fri, 10 Feb 2017 11:45:24 GMT
< Connection: keep-alive
< 
* Connection #0 to host 192.168.70.73 left intact
* Closing connection #0

具有204响应(指示success)。

这是本地计算机控制台中的相应输出:

10 Feb 13:45:24 - [info] Stopping flows
10 Feb 13:45:24 - [info] Stopped flows
10 Feb 13:45:24 - [info] Starting flows
10 Feb 13:45:24 - [info] Started flows

此后什么也没发生。

待部署流程remote_test.json确实显示在本地计算机的GUI中,但未运行;此外,当我尝试手动注入或启用调试节点时,我在本地GUI中得到一个Error: node not deployed(并且“部署”按钮处于不活动状态)。

这是超简单的流程:

remote_test.json

format节点仅每隔5秒就分析一次从get_temp接收到的温度测量并添加时间戳:

var temp = parseFloat(msg.payload.replace( /[^\d\.]*/g, ''));
var time = new Date().toISOString().replace(/\..+/, '');

msg.payload = {'measurements' : [ { 'time'        : time }, 
                                  { 'temperature' : temp } ]
};
console.log(msg.payload);
return msg;

这是在本地部署流时的控制台输出:

10 Feb 14:08:25 - [info] Stopped flows
10 Feb 14:08:25 - [info] Starting flows
10 Feb 14:08:25 - [info] Started flows
{ measurements: [ { time: '2017-02-10T12:08:30' }, { temperature: 34.7 } ] }
{ measurements: [ { time: '2017-02-10T12:08:35' }, { temperature: 34.2 } ] }
{ measurements: [ { time: '2017-02-10T12:08:40' }, { temperature: 33.6 } ] }
{ measurements: [ { time: '2017-02-10T12:08:45' }, { temperature: 33.6 } ] }

node-red-startnode-red启动服务,以及在请求中是否包含参数-H "Node-RED-Deployment-Type: full",都没有任何区别。

系统配置:

  • Raspberry Pi 3
  • Node.js 7.4.0
  • Node-RED 0.13.4

UPDATE 2

似乎问题出在Node.js和/或Node-RED版本。在运行Node.js 6.9.5和Node-RED 0.16.2的其他Pi上进行了尝试,它可以正常运行。

node-red
1个回答
9
投票

Node-RED运行时公开了REST api,该api提供了用于在运行时上部署新流配置的方法。

有问题的特定API记录在这里:http://nodered.org/docs/api/admin/methods/post/flows/

它允许您执行HTTP POST,其中包含要部署运行时的流配置。

例如,如果流文件在myflow.json中,而Node-RED在http://localhost:1880上运行,则可以使用curl进行部署:

curl -X POST http://localhost:1880/flows -H "Content-Type: application/json" --data "@myflow.json"
© www.soinside.com 2019 - 2024. All rights reserved.