From 032a9d64357177dc967ec098bcd452473e6a0266 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 20 Dec 2017 16:28:32 +0000 Subject: [PATCH] add reset capability to rue node --- function/rbe/package.json | 2 +- function/rbe/rbe.html | 3 ++ function/rbe/rbe.js | 6 ++++ test/function/rbe/rbe_spec.js | 61 +++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) diff --git a/function/rbe/package.json b/function/rbe/package.json index 57d0abfb..6b1af48d 100644 --- a/function/rbe/package.json +++ b/function/rbe/package.json @@ -1,6 +1,6 @@ { "name" : "node-red-node-rbe", - "version" : "0.1.13", + "version" : "0.1.14", "description" : "A Node-RED node that provides report-by-exception (RBE) and deadband capability.", "dependencies" : { }, diff --git a/function/rbe/rbe.html b/function/rbe/rbe.html index 6839c83f..ecf951c2 100644 --- a/function/rbe/rbe.html +++ b/function/rbe/rbe.html @@ -41,6 +41,9 @@
topic string
if specified the function will work on a per topic basis.
+
resetany
+
if set clears the stored value for the specified msg.topic, or + all topics if msg.topic is not specified.

Outputs

diff --git a/function/rbe/rbe.js b/function/rbe/rbe.js index d68f51ff..50bfa1e8 100644 --- a/function/rbe/rbe.js +++ b/function/rbe/rbe.js @@ -18,6 +18,12 @@ module.exports = function(RED) { node.previous = {}; this.on("input",function(msg) { + if (msg.hasOwnProperty("reset")) { + if (msg.hasOwnProperty("topic") && (typeof msg.topic === "string") && (msg.topic !== "")) { + delete node.previous[msg.topic]; + } + else { node.previous = {}; } + } if (msg.hasOwnProperty("payload")) { var t = msg.topic || "_no_topic"; if ((this.func === "rbe") || (this.func === "rbei")) { diff --git a/test/function/rbe/rbe_spec.js b/test/function/rbe/rbe_spec.js index fa892001..e19249ab 100644 --- a/test/function/rbe/rbe_spec.js +++ b/test/function/rbe/rbe_spec.js @@ -102,6 +102,67 @@ describe('rbe node', function() { }); }); + it('should send output if queue is reset (rbe)', function(done) { + var flow = [{"id":"n1", "type":"rbe", func:"rbe", gap:"0", wires:[["n2"]] }, + {id:"n2", type:"helper"} ]; + helper.load(testNode, flow, function() { + var n1 = helper.getNode("n1"); + var n2 = helper.getNode("n2"); + var c = 0; + n2.on("input", function(msg) { + if (c === 0) { + msg.should.have.a.property("payload", "a"); + c+=1; + } + else if (c === 1) { + msg.should.have.a.property("payload", "b"); + c+=1; + } + else if (c === 2) { + msg.should.have.a.property("payload", "a"); + c+=1; + } + else if (c === 3) { + msg.should.have.a.property("payload", "b"); + c+=1; + } + else if (c === 4) { + msg.should.have.a.property("payload", "b"); + c+=1; + } + else if (c === 5) { + msg.should.have.a.property("payload", "b"); + c+=1; + } + else if (c === 6) { + msg.should.have.a.property("payload", "a"); + c+=1; + } + else { + msg.should.have.a.property("payload", "c"); + done(); + } + }); + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {reset:true}); // reset all + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {topic:"b", reset:""}); // reset b + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {reset:""}); // reset all + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {topic:"c"}); // don't reset a non topic + n1.emit("input", {topic:"b", payload:"b"}); + n1.emit("input", {topic:"a", payload:"a"}); + n1.emit("input", {topic:"c", payload:"c"}); + }); + }); + it('should only send output if x away from original value (deadbandEq)', function(done) { var flow = [{"id":"n1", "type":"rbe", func:"deadbandEq", gap:"10", inout:"out", wires:[["n2"]] }, {id:"n2", type:"helper"} ];