Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Nathanaël Lécaudé 2018-01-03 15:22:36 -05:00
commit 072d4911dd
8 changed files with 76 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{ {
"name" : "node-red-node-rbe", "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.", "description" : "A Node-RED node that provides report-by-exception (RBE) and deadband capability.",
"dependencies" : { "dependencies" : {
}, },

View File

@ -41,6 +41,9 @@
<dt class="optional">topic <span class="property-type">string</span> <dt class="optional">topic <span class="property-type">string</span>
</dt> </dt>
<dd>if specified the function will work on a per topic basis.</dd> <dd>if specified the function will work on a per topic basis.</dd>
<dt class="optional">reset<span class="property-type">any</span></dt>
<dd>if set clears the stored value for the specified msg.topic, or
all topics if msg.topic is not specified.</dd>
</dl> </dl>
<h3>Outputs</h3> <h3>Outputs</h3>
<dl class="message-properties"> <dl class="message-properties">

View File

@ -18,6 +18,12 @@ module.exports = function(RED) {
node.previous = {}; node.previous = {};
this.on("input",function(msg) { 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")) { if (msg.hasOwnProperty("payload")) {
var t = msg.topic || "_no_topic"; var t = msg.topic || "_no_topic";
if ((this.func === "rbe") || (this.func === "rbei")) { if ((this.func === "rbe") || (this.func === "rbei")) {

View File

@ -115,7 +115,7 @@ WeMoNG.prototype.start = function start() {
//console.log("searching"); //console.log("searching");
var _wemo = this; var _wemo = this;
_wemo.setMaxListeners(0); _wemo.setMaxListeners(0);
_wemo._client = new Client(); _wemo._client = new Client({'explicitSocketBind': true});
_wemo._client.setMaxListeners(0); _wemo._client.setMaxListeners(0);
_wemo._client.on('response', function (headers, statusCode, rinfo) { _wemo._client.on('response', function (headers, statusCode, rinfo) {
var location = url.parse(headers.LOCATION); var location = url.parse(headers.LOCATION);

View File

@ -1,6 +1,6 @@
{ {
"name": "node-red-node-wemo", "name": "node-red-node-wemo",
"version": "0.1.13", "version": "0.1.14",
"description": "Input and Output nodes for Belkin WeMo devices", "description": "Input and Output nodes for Belkin WeMo devices",
"repository": "https://github.com/node-red/node-red-nodes/tree/master/hardware", "repository": "https://github.com/node-red/node-red-nodes/tree/master/hardware",
"main": "WeMoNG.js", "main": "WeMoNG.js",
@ -19,7 +19,7 @@
}, },
"license": "APACHE-2.0", "license": "APACHE-2.0",
"dependencies": { "dependencies": {
"node-ssdp": "~2.9.1", "node-ssdp": "~3.2.5",
"request": "~2.74.0", "request": "~2.74.0",
"xml2js": "~0.4.13", "xml2js": "~0.4.13",
"util": "~0.10.3", "util": "~0.10.3",

View File

@ -11,7 +11,7 @@
"split": "入力の分割方法", "split": "入力の分割方法",
"deliver": "分割後の配信データ", "deliver": "分割後の配信データ",
"output": "出力", "output": "出力",
"serial": "シリアル", "serial": "serial",
"none": "なし" "none": "なし"
}, },
"placeholder": { "placeholder": {

View File

@ -1,6 +1,6 @@
{ {
"name" : "node-red-node-serialport", "name" : "node-red-node-serialport",
"version" : "0.6.1", "version" : "0.6.2",
"description" : "Node-RED nodes to talk to serial ports", "description" : "Node-RED nodes to talk to serial ports",
"dependencies" : { "dependencies" : {
"serialport" : "^6.0.4" "serialport" : "^6.0.4"

View File

@ -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) { 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"]] }, var flow = [{"id":"n1", "type":"rbe", func:"deadbandEq", gap:"10", inout:"out", wires:[["n2"]] },
{id:"n2", type:"helper"} ]; {id:"n2", type:"helper"} ];