获取最后一个和上一个数字之间的差异

Get difference between last and previous number

我有这个函数可以解析在 mqtt 上收到的值。该值实际上是由 arduino 发送的时间戳,是 1234 、 1345 等数字...

var parts = msg.payload.trim().split(/[ |]+/);
var update = parts[10];
msg.payload = update;
return msg;

我想要的实际上是最后一个值(在我的例子中是更新变量)是为了获得最后一个接收到的值和前一个接收到的值之间的差异。 基本上如果我收到 1234 然后 1345,我想记住 1234 和函数返回的值是 1345 - 1234 = 111.

谢谢

如果您想存储一个值以便稍后比较,您需要了解如何使用 context 来存储它。

上下文通常是命名变量的内存存储,但它由 API 支持,可用于在重启之间保留上下文。

我想提出一个替代方法。 Node-RED 有几个核心节点,旨在跨序列工作,为此目的,它们保留了一个内部缓冲区。这些节点之一是批处理节点。某些用例(例如您的用例)可以利用此功能来存储值,因此不需要使用上下文内存。我在下面分享的流程使用一个批处理节点,该节点配置为按顺序对两条消息进行分组,这意味着它将始终向下游发送当前有效负载和前一个有效负载。然后一个连接节点将处理这样的序列以将有效负载减少到单个值,即时间戳之间的差异。您需要打开每个节点的配置对话框,以充分了解如何设置这些节点以实现预期目标。我将连接节点配置为应用修正表达式将有效负载除以一千,因此您得到的值以秒为单位(而不是毫秒)。

流量:

[{"id":"3121012f.c8a3ce","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"2ab0e0ba.9bd5f","type":"batch","z":"3121012f.c8a3ce","name":"","mode":"count","count":"2","overlap":"1","interval":10,"allowEmptySequence":false,"topics":[],"x":310,"y":280,"wires":[["342f97dd.23be08"]]},{"id":"17170419.f6b98c","type":"inject","z":"3121012f.c8a3ce","name":"","topic":"timedif","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":280,"wires":[["2ab0e0ba.9bd5f"]]},{"id":"342f97dd.23be08","type":"join","z":"3121012f.c8a3ce","name":"","mode":"reduce","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"payload-$A","reduceInit":"0","reduceInitType":"num","reduceFixup":"$A/1000","x":450,"y":280,"wires":[["e83170ce.56c08"]]},{"id":"e83170ce.56c08","type":"debug","z":"3121012f.c8a3ce","name":"Debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":600,"y":280,"wires":[]}]