mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
add ignore first message option to rue node
This commit is contained in:
parent
8799b1e85b
commit
76e33acae5
@ -2,6 +2,7 @@
|
||||
"rbe": {
|
||||
"label": {
|
||||
"func": "Mode",
|
||||
"init": "Send initial value",
|
||||
"start": "Start value",
|
||||
"name": "Name"
|
||||
},
|
||||
@ -11,6 +12,7 @@
|
||||
},
|
||||
"opts": {
|
||||
"rbe": "block unless value changes",
|
||||
"rbei": "block unless value changes (ignore initial value)",
|
||||
"deadband": "block unless value change is greater than",
|
||||
"deadbandEq": "block unless value change is greater or equal to",
|
||||
"narrowband": "block if value change is greater than",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name" : "node-red-node-rbe",
|
||||
"version" : "0.1.8",
|
||||
"version" : "0.1.9",
|
||||
"description" : "A Node-RED node that provides report-by-exception (RBE) and deadband capability.",
|
||||
"dependencies" : {
|
||||
},
|
||||
|
@ -4,6 +4,7 @@
|
||||
<label for="node-input-func"><i class="fa fa-wrench"></i> <span data-i18n="rbe.label.func"></span></label>
|
||||
<select type="text" id="node-input-func" style="width:74%;">
|
||||
<option value="rbe" data-i18n="rbe.opts.rbe"></option>
|
||||
<option value="rbei" data-i18n="rbe.opts.rbei"></option>
|
||||
<option value="deadbandEq" data-i18n="rbe.opts.deadbandEq"></option>
|
||||
<option value="deadband" data-i18n="rbe.opts.deadband"></option>
|
||||
<option value="narrowbandEq" data-i18n="rbe.opts.narrowbandEq"></option>
|
||||
@ -78,7 +79,7 @@
|
||||
outputs:1,
|
||||
icon: "rbe.png",
|
||||
label: function() {
|
||||
var ll = (this.func||"").replace("Eq","")||"rbe";
|
||||
var ll = (this.func||"").replace("Eq","").replace("rbei","rbe")||"rbe";
|
||||
return this.name||ll||"rbe";
|
||||
},
|
||||
labelStyle: function() {
|
||||
@ -90,7 +91,7 @@
|
||||
$("#node-input-inout").val("out");
|
||||
}
|
||||
$("#node-input-func").on("change",function() {
|
||||
if ($("#node-input-func").val() === "rbe") {
|
||||
if (($("#node-input-func").val() === "rbe")||($("#node-input-func").val() === "rbei")) {
|
||||
$("#node-bandgap").hide();
|
||||
} else {
|
||||
$("#node-bandgap").show();
|
||||
|
@ -13,24 +13,26 @@ module.exports = function(RED) {
|
||||
this.gap = parseFloat(this.gap);
|
||||
}
|
||||
this.g = this.gap;
|
||||
|
||||
var node = this;
|
||||
|
||||
node.previous = {};
|
||||
this.on("input",function(msg) {
|
||||
if (msg.hasOwnProperty("payload")) {
|
||||
var t = msg.topic || "_no_topic";
|
||||
if (this.func === "rbe") {
|
||||
if ((this.func === "rbe") || (this.func === "rbei")) {
|
||||
var doSend = (this.func !== "rbei") || (node.previous.hasOwnProperty(t)) || false;
|
||||
if (typeof(msg.payload) === "object") {
|
||||
if (typeof(node.previous[t]) !== "object") { node.previous[t] = {}; }
|
||||
if (!RED.util.compareObjects(msg.payload, node.previous[t])) {
|
||||
node.previous[t] = msg.payload;
|
||||
node.send(msg);
|
||||
if (doSend) { node.send(msg); }
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (msg.payload !== node.previous[t]) {
|
||||
node.previous[t] = msg.payload;
|
||||
node.send(msg);
|
||||
if (doSend) { node.send(msg); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +62,46 @@ describe('rbe node', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('should only send output if payload changes - ignoring first value (rbei)', function(done) {
|
||||
var flow = [{"id":"n1", "type":"rbe", func:"rbei", 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", "b");
|
||||
msg.should.have.a.property("topic", "a");
|
||||
c+=1;
|
||||
}
|
||||
else if (c === 1) {
|
||||
msg.should.have.a.property("payload", "b");
|
||||
msg.should.have.a.property("topic", "b");
|
||||
c+=1;
|
||||
}
|
||||
else if (c === 2) {
|
||||
msg.should.have.a.property("payload", "c");
|
||||
msg.should.have.a.property("topic", "a");
|
||||
c+=1;
|
||||
}
|
||||
else {
|
||||
msg.should.have.a.property("payload", "c");
|
||||
msg.should.have.a.property("topic", "b");
|
||||
done();
|
||||
}
|
||||
|
||||
});
|
||||
n1.emit("input", {payload:"a", topic:"a"});
|
||||
n1.emit("input", {payload:"a", topic:"b"});
|
||||
n1.emit("input", {payload:"a", topic:"a"});
|
||||
n1.emit("input", {payload:"b", topic:"a"});
|
||||
n1.emit("input", {payload:"b", topic:"b"});
|
||||
n1.emit("input", {payload:"c", topic:"a"});
|
||||
n1.emit("input", {payload:"c", topic:"b"});
|
||||
});
|
||||
});
|
||||
|
||||
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"} ];
|
||||
|
Loading…
Reference in New Issue
Block a user