-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcounter.js
85 lines (79 loc) · 2.43 KB
/
counter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* Copyright 2016 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
module.exports = function(RED) {
"use strict";
function counter(n) {
RED.nodes.createNode(this, n);
this.start = parseFloat(n.start);
this.increment = parseFloat(n.increment);
this.name = n.name;
this.presetValue = parseFloat(n.preset);
this.presetTopic = n.presetTopic;
this.resetTopic = n.resetTopic;
this.topic = n.topic;
this.value = this.start;
this.preset = false;
var node = this;
this.on('input', function(msg) {
if (msg.hasOwnProperty('topic') && msg.topic === node.resetTopic) {
node.value = node.start;
node.send({
topic:msg.topic,
payload: node.value
});
} else if (msg.hasOwnProperty('topic') && msg.topic === node.presetTopic) {
if (msg.hasOwnProperty('payload') && (typeof msg.payload === 'boolean' || typeof msg.payload === 'number')) {
if (msg.payload) {
node.preset = true;
} else {
node.preset = false;
}
if (node.preset) {
node.send({
topic:msg.topic,
payload: node.presetValue
});
} else {
node.send({
topic:msg.topic,
payload: node.value
});
}
}
} else if (node.preset) {
node.send({
topic:msg.topic,
payload: node.presetValue
});
} else {
//console.log(msg.payload);
if (msg.hasOwnProperty('payload') && (typeof msg.payload === 'boolean' || typeof msg.payload === 'number')) {
if (msg.payload) {
node.value += node.increment;
} else {
node.value -= node.increment;
}
//console.log(node.value);
node.send({
topic:msg.topic,
payload: node.value
});
}
}
});
}
RED.nodes.registerType("counter", counter);
};