将mqtt值与node-red求和

时间:2018-08-05 23:06:09

标签: node-red

从MQTT提要中我得到了很多值:

06/08/2018, 01:59:06View all 'emon/#' MQTT traffic
emon/emontx3/power1 : msg.payload : string [3]
588

emon/emontx3/power2 : msg.payload : string [3]
354

emon/emontx3/power3 : msg.payload : string [3]
740

我如何编写函数或使用另一个红色节点将总值加到一个(588 + 354 + 740 = 1682)

2 个答案:

答案 0 :(得分:0)

与其将emonTx节点的3个幂值作为3条单独的MQTT消息发送,不如将其作为一条MQTT消息发送。

例如,在我的设置中,我设法将其发送为:

  

{“ topic”:“ emonhub / rx / 10 / values”,“有效负载”:“ 180,-209,37,1,261”,“ qos”:0,“ retain”:false,“ _ msgid”:“ a142b96c.e678d8“}

仅供参考,我已经在我的node-red函数节点中使用以下代码来解析上述MQTT消息:

var parts        = msg.payload.split(",");
var CT1_power    = parseFloat(parts[0]);
var CT2_power    = parseFloat(parts[1]);
var CT3_power    = parseFloat(parts[2]);
var solar_power  = parseFloat(parts[3]);
var voltage      = parseFloat(parts[4]);
var phase1_power = CT1_power + solar_power;
var phase2_power = - CT2_power;
var phase3_power = CT3_power;
var total_power  = phase1_power + phase2_power + phase3_power;
msg.payload = { "total_power"  : total_power,
                "solar_power"  : solar_power,
                "voltage"      : voltage,
                "phase1_power" : phase1_power,
                "phase2_power" : phase2_power,
                "phase3_power" : phase3_power,
                "CT1_power"    : CT1_power,
                "CT2_power"    : CT2_power,
                "CT3_power"    : CT3_power,
};
return msg;

在我的情况下,输出msg.payload中的“ total_power”是emonTx节点测量的三相使用的功率之和。

答案 1 :(得分:0)

这3条消息是否在大约同一时间可靠地发送,并且各组消息之间有相当大的间隔?如果是这样,您可以使用联接节点将三则消息合并为一个。然后,后续的更改节点或功能节点可以添加值(请参见下文)。如果没有,您可以将这些值存储在流变量中,直到需要它们为止。但是,您需要知道添加它们的条件。

enter image description here