-
Notifications
You must be signed in to change notification settings - Fork 6
/
test-device.js
87 lines (72 loc) · 1.71 KB
/
test-device.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
86
87
let Thing = require('Grow.js');
let testDevice = new Thing({
uuid: 'test',
token: 'test',
component: 'Thermostat',
// Properties can be updated by the API
properties: {
state: 'off',
growfile: {
temperature: {
min: 1,
ideal: 4,
max: 9,
pid: {
k_p: 300,
k_i: 0,
k_d: 200,
dt: 1
}
},
},
interval: 1000,
threshold: 0.2,
},
start: function () {
var interval = this.get('interval');
data_interval = setInterval(()=> {
this.temp_data();
}, interval);
var growfile = this.get('growfile');
this.registerTargets(growfile);
var threshold = this.get('threshold');
// Listen for correction events from our PID controller
this.on('correction', (key, correction) => {
// console.log(key, correction);
if (Math.abs(correction) > threshold) {
if (key === 'temperature') {
if (correction > 0) {
this.call('turn_on');
} else {
this.call('turn_off');
}
}
}
});
},
stop: function () {
clearInterval(data_interval);
this.removeAllListeners();
},
restart: function () {
this.stop();
this.removeTargets();
this.start();
},
// Note, there are probably more elegant ways of handling subthing methods.
turn_on: function () {
console.log('Heater on');
this.set('state', 'on');
},
turn_off: function () {
console.log('Heater off');
this.set('state', 'off');
},
temp_data: function () {
let temp = Math.random() * 10;
this.emit('temperature', temp);
console.log('temperature: ' + temp);
return temp;
}
});
testDevice.connect();