mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Let RBE node be able to use any property as key (not just topic)
(not for publish until 2.0)
This commit is contained in:
parent
4bd657fcd8
commit
c890ca57d5
@ -10,7 +10,7 @@
|
||||
Other modes must provide a parseable number.</dd>
|
||||
<dt class="optional">topic <span class="property-type">string</span>
|
||||
</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. This property can be set by configuration.</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>
|
||||
@ -26,7 +26,7 @@
|
||||
<p>In RBE mode this node will block until the <code>msg.payload</code>,
|
||||
(or selected property) value is different to the previous one.
|
||||
If required it can ignore the intial value, so as not to send anything at start.</p>
|
||||
<p>The <a href="https://en.wikipedia.org/wiki/Deadband" target="_blank">Deadband</a> modes will block the incoming value
|
||||
<p>The <a href="https://en.wikipedia.org/wiki/Deadband" target="_blank">Deadband</a> modes will block the incoming value
|
||||
<i>unless</i> its change is greater or greater-equal than ± the band gap away from a previous value.</p>
|
||||
<p>The Narrowband modes will block the incoming value,
|
||||
<i>if</i> its change is greater or greater-equal than ± the band gap away from the previous value.
|
||||
@ -36,6 +36,6 @@
|
||||
<p>Both Deadband and Narrowband allow comparison against either the previous valid output value, thus
|
||||
ignoring any values out of range, or the previous input value, which resets the set point, thus allowing
|
||||
gradual drift (deadband), or a step change (narrowband).</p>
|
||||
<p><b>Note:</b> This works on a per <code>msg.topic</code> basis.
|
||||
<p><b>Note:</b> This works on a per <code>msg.topic</code> basis, though this can be changed to another property if desired.
|
||||
This means that a single rbe node can handle multiple different topics at the same time.</p>
|
||||
</script>
|
||||
|
@ -6,7 +6,7 @@
|
||||
"init": "Send initial value",
|
||||
"start": "Start value",
|
||||
"name": "Name",
|
||||
"septopics": "Apply mode for each msg.topic separately"
|
||||
"septopics": "Apply mode separately for each "
|
||||
},
|
||||
"placeholder":{
|
||||
"bandgap": "e.g. 10 or 5%",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name" : "node-red-node-rbe",
|
||||
"version" : "0.5.0",
|
||||
"version" : "0.6.0",
|
||||
"description" : "A Node-RED node that provides report-by-exception (RBE) and deadband capabilities.",
|
||||
"dependencies" : {
|
||||
},
|
||||
|
@ -30,7 +30,7 @@
|
||||
<div class="form-row">
|
||||
<label> </label>
|
||||
<input type="checkbox" id="node-input-septopics" style="display:inline-block; width:20px; vertical-align:baseline;">
|
||||
<span data-i18n="rbe.label.septopics"></span>
|
||||
<span data-i18n="rbe.label.septopics"></span> <input type="text" id="node-input-topi" style="width:27%;"/>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="rbe.label.name"></span></label>
|
||||
@ -49,7 +49,8 @@
|
||||
start: {value:""},
|
||||
inout: {value:"out"},
|
||||
septopics: {value:true},
|
||||
property: {value:"payload",required:true}
|
||||
property: {value:"payload",required:true},
|
||||
topi: {value:"topic",required:true}
|
||||
},
|
||||
inputs:1,
|
||||
outputs:1,
|
||||
@ -69,6 +70,7 @@
|
||||
$("#node-input-septopics").prop('checked', true);
|
||||
}
|
||||
$("#node-input-property").typedInput({default:'msg',types:['msg']});
|
||||
$("#node-input-topi").typedInput({default:'msg',types:['msg']});
|
||||
//$( "#node-input-gap" ).spinner({min:0});
|
||||
if ($("#node-input-inout").val() === null) {
|
||||
$("#node-input-inout").val("out");
|
||||
|
@ -13,7 +13,8 @@ module.exports = function(RED) {
|
||||
this.gap = parseFloat(this.gap);
|
||||
}
|
||||
this.g = this.gap;
|
||||
this.property = n.property||"payload";
|
||||
this.property = n.property || "payload";
|
||||
this.topi = n.topi || "topic";
|
||||
this.septopics = true;
|
||||
if (n.septopics !== undefined && n.septopics === false) {
|
||||
this.septopics = false;
|
||||
@ -23,8 +24,13 @@ module.exports = function(RED) {
|
||||
|
||||
node.previous = {};
|
||||
this.on("input",function(msg) {
|
||||
var topic;
|
||||
try {
|
||||
topic = RED.util.getMessageProperty(msg,node.topi);
|
||||
}
|
||||
catch(e) { }
|
||||
if (msg.hasOwnProperty("reset")) {
|
||||
if (node.septopics && msg.hasOwnProperty("topic") && (typeof msg.topic === "string") && (msg.topic !== "")) {
|
||||
if (node.septopics && topic && (typeof topic === "string") && (topic !== "")) {
|
||||
delete node.previous[msg.topic];
|
||||
}
|
||||
else { node.previous = {}; }
|
||||
@ -32,7 +38,7 @@ module.exports = function(RED) {
|
||||
var value = RED.util.getMessageProperty(msg,node.property);
|
||||
if (value !== undefined) {
|
||||
var t = "_no_topic";
|
||||
if (node.septopics) { t = msg.topic || t; }
|
||||
if (node.septopics) { t = topic || t; }
|
||||
if ((this.func === "rbe") || (this.func === "rbei")) {
|
||||
var doSend = (this.func !== "rbei") || (node.previous.hasOwnProperty(t)) || false;
|
||||
if (typeof(value) === "object") {
|
||||
|
Loading…
Reference in New Issue
Block a user