@mschaeffler/node-red-logic 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/math_mean.html +14 -0
- package/math_mean.js +13 -6
- package/package.json +1 -1
- package/tools.js +5 -0
package/math_mean.html
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
return v!=='' && !isNaN(v) && Number(v)>0;}
|
|
14
14
|
},
|
|
15
15
|
filter:{value:"0", validate:RED.validators.number()},
|
|
16
|
+
filterVal:{value:"0", validate:RED.validators.number()},
|
|
17
|
+
filterMul:{value:"10", validate:RED.validators.number()},
|
|
16
18
|
zeroIsZero:{value:false},
|
|
17
19
|
showState:{value:false}
|
|
18
20
|
},
|
|
@@ -59,6 +61,14 @@
|
|
|
59
61
|
<label for="node-input-filter"><i class="fa fa-filter "></i> Filterzeit</label>
|
|
60
62
|
<input type="text" id="node-input-filter">
|
|
61
63
|
</div>
|
|
64
|
+
<div class="form-row">
|
|
65
|
+
<label for="node-input-filterVal"><i class="fa fa-filter "></i> Filter Wert</label>
|
|
66
|
+
<input type="text" id="node-input-filterVal">
|
|
67
|
+
</div>
|
|
68
|
+
<div class="form-row">
|
|
69
|
+
<label for="node-input-filterMul"><i class="fa fa-filter "></i> Filter Wiederholungsfaktor</label>
|
|
70
|
+
<input type="text" id="node-input-filterMul">
|
|
71
|
+
</div>
|
|
62
72
|
<div class="form-row">
|
|
63
73
|
<label for="node-input-zeroIsZero"><i class="fa fa-exclamation-circle"></i> Null ist Null</label>
|
|
64
74
|
<input type="checkbox" id="node-input-zeroIsZero" style="display:inline-block; width:20px; vertical-align:baseline;">
|
|
@@ -104,6 +114,10 @@
|
|
|
104
114
|
<dd> min. amount of data points to generate an output.</dd>
|
|
105
115
|
<dt>Filterzeit <span class="property-type">number</span></dt>
|
|
106
116
|
<dd> send output only after this time.</dd>
|
|
117
|
+
<dt>Filter Wert <span class="property-type">number</span></dt>
|
|
118
|
+
<dd> send output only if change is bigger.</dd>
|
|
119
|
+
<dt>Filter Wiederholungsfaktor <span class="property-type">number</span></dt>
|
|
120
|
+
<dd> do send output if change is lower then <code>Filter Wert</code> after n times <code>Filterzeit</code>.</dd>
|
|
107
121
|
<dt>Null ist NUll <span class="property-type">boolean</span></dt>
|
|
108
122
|
<dd> If 0 is received, 0 is send immediately.</dd>
|
|
109
123
|
<dt>Status <span class="property-type">boolean</span></dt>
|
package/math_mean.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
module.exports = function(RED) {
|
|
2
|
+
var tools = require('./tools.js');
|
|
2
3
|
|
|
3
4
|
function MeanNode(config) {
|
|
4
5
|
RED.nodes.createNode(this,config);
|
|
@@ -9,7 +10,9 @@ module.exports = function(RED) {
|
|
|
9
10
|
this.propertyType = config.propertyType ?? "msg";
|
|
10
11
|
this.deltaTime = Number( config.deltaTime ?? 60 )*1000;
|
|
11
12
|
this.minData = Number( config.minData ?? 1 );
|
|
12
|
-
this.
|
|
13
|
+
this.filterTime = Number( config.filter ?? 0 )*1000;
|
|
14
|
+
this.filterValue = Number( config.filterVal ?? 0 );
|
|
15
|
+
this.filterLongTime = this.filterTime * Number( config.filterMul ?? 10 );
|
|
13
16
|
this.zeroIsZero = Boolean( config.zeroIsZero );
|
|
14
17
|
this.showState = Boolean( config.showState );
|
|
15
18
|
if( this.propertyType === "jsonata" )
|
|
@@ -88,9 +91,9 @@ module.exports = function(RED) {
|
|
|
88
91
|
{
|
|
89
92
|
msg.payload = value;
|
|
90
93
|
msg.count = count;
|
|
91
|
-
last[msg.topic] = now;
|
|
94
|
+
last[msg.topic] = {value:value,time:now};
|
|
92
95
|
context.set( "last", last );
|
|
93
|
-
node.status({fill:"green",shape:"dot",text:`${item.length} / ${
|
|
96
|
+
node.status({fill:"green",shape:"dot",text:`${item.length} / ${value.toPrecision(4)}`});
|
|
94
97
|
send( msg );
|
|
95
98
|
}
|
|
96
99
|
|
|
@@ -105,13 +108,17 @@ module.exports = function(RED) {
|
|
|
105
108
|
{
|
|
106
109
|
sum += value.value;
|
|
107
110
|
}
|
|
108
|
-
|
|
111
|
+
const help = last[msg.topic];
|
|
112
|
+
const value = sum/item.length;
|
|
113
|
+
if( help === undefined ||
|
|
114
|
+
( help.time + node.filterTime < now && tools.distance( help.value, value ) >= node.filterValue ) ||
|
|
115
|
+
( node.filterLongTime > 0 && help.time + node.filterLongTime < now ) )
|
|
109
116
|
{
|
|
110
|
-
sendValue(
|
|
117
|
+
sendValue( value, item.length );
|
|
111
118
|
}
|
|
112
119
|
else
|
|
113
120
|
{
|
|
114
|
-
node.status({fill:"gray",shape:"dot",text:`${item.length} / ${
|
|
121
|
+
node.status({fill:"gray",shape:"dot",text:`${item.length} / ${value.toPrecision(4)}`});
|
|
115
122
|
}
|
|
116
123
|
}
|
|
117
124
|
else
|
package/package.json
CHANGED