mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Merge 870e9cdd45 into 97f8e03c71
				
					
				
			This commit is contained in:
		@@ -14,6 +14,7 @@
 | 
				
			|||||||
            <option value="max">Return the maximum value seen</option>
 | 
					            <option value="max">Return the maximum value seen</option>
 | 
				
			||||||
            <option value="min">Return the minimum value seen</option>
 | 
					            <option value="min">Return the minimum value seen</option>
 | 
				
			||||||
            <option value="mean">Return the mean value</option>
 | 
					            <option value="mean">Return the mean value</option>
 | 
				
			||||||
 | 
					            <option value="median">Return the median value</option>
 | 
				
			||||||
            <option value="sd">Return the standard deviation</option>
 | 
					            <option value="sd">Return the standard deviation</option>
 | 
				
			||||||
            <option value="low">Perform low pass filter</option>
 | 
					            <option value="low">Perform low pass filter</option>
 | 
				
			||||||
            <option value="high">Perform high pass filter</option>
 | 
					            <option value="high">Perform high pass filter</option>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,17 @@ module.exports = function(RED) {
 | 
				
			|||||||
                            v[top].tot = v[top].tot + n - v[top].pop;
 | 
					                            v[top].tot = v[top].tot + n - v[top].pop;
 | 
				
			||||||
                            value = v[top].tot / v[top].a.length;
 | 
					                            value = v[top].tot / v[top].a.length;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        if (node.action === "median") {
 | 
				
			||||||
 | 
					                            var sortedForMedian = v[top].a.slice().sort((a, b) => a - b);                            
 | 
				
			||||||
 | 
					                            var medianIndex = Math.floor(v[top].iter / 2);
 | 
				
			||||||
 | 
					                            if (v[top].iter % 2 === 0) {
 | 
				
			||||||
 | 
					                                value = (sortedForMedian[medianIndex - 1] + sortedForMedian[medianIndex]) / 2;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            else {
 | 
				
			||||||
 | 
					                                value = sortedForMedian[medianIndex]
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
                        if (node.action === "sd") {
 | 
					                        if (node.action === "sd") {
 | 
				
			||||||
                            v[top].tot = v[top].tot + n - v[top].pop;
 | 
					                            v[top].tot = v[top].tot + n - v[top].pop;
 | 
				
			||||||
                            v[top].tot2 = v[top].tot2 + (n*n) - (v[top].pop * v[top].pop);
 | 
					                            v[top].tot2 = v[top].tot2 + (n*n) - (v[top].pop * v[top].pop);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,6 +48,31 @@ describe('smooth node', function() {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should average over a number of inputs using median', function(done) {
 | 
				
			||||||
 | 
					        var flow = [{"id":"n1", "type":"smooth", action:"median", count:"5", round:"true", 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) {
 | 
				
			||||||
 | 
					                c += 1;
 | 
				
			||||||
 | 
					                if (c === 4) { msg.should.have.a.property("payload", 55); }
 | 
				
			||||||
 | 
					                if (c === 5) { msg.should.have.a.property("payload", 100); }
 | 
				
			||||||
 | 
					                if (c === 6) { msg.should.have.a.property("payload", 550); done(); }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:1});
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:10});
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:100});
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:1000});
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:10000});
 | 
				
			||||||
 | 
					            n1.emit("input", {payload:100000});
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('should average over a number of inputs - another property - foo', function(done) {
 | 
					    it('should average over a number of inputs - another property - foo', function(done) {
 | 
				
			||||||
        var flow = [{"id":"n1", "type":"smooth", action:"mean", count:"5", round:"true", property:"foo", wires:[["n2"]] },
 | 
					        var flow = [{"id":"n1", "type":"smooth", action:"mean", count:"5", round:"true", property:"foo", wires:[["n2"]] },
 | 
				
			||||||
            {id:"n2", type:"helper"} ];
 | 
					            {id:"n2", type:"helper"} ];
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user