-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.js
91 lines (70 loc) · 2.43 KB
/
client.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
88
89
90
91
const pkg = require('./package.json');
const Logger = global.req('classes/Log.class');
module.exports = async (SmartNodeClientPlugin) => {
let temperatureInterval;
let sensor;
let gpio;
let config = SmartNodeClientPlugin.config;
let socket = SmartNodeClientPlugin.socket;
let logger = new Logger();
return {
init,
load,
unload,
unpair
}
function init() {
return [pkg, (data) => {
// console.log('init done', data);
}];
}
function unpair() {
}
async function load() {
if (config.sensor) {
sensor = require('./lib/sensors.js')(config.sensor.model);
let temperature = await _getTemperature();
logger.info('Send temperature', temperature);
socket.emit('temperature', { value: temperature, time: Date.now() });
temperatureInterval = setInterval(async () => {
temperature = await _getTemperature();
logger.info('Send temperature', temperature);
socket.emit('temperature', { value: temperature, time: Date.now() });
}, (config.sensor.interval || 30) * 1000);
}
if (config.relay) {
gpio = global.req('lib/gpio');
gpio.setup(config.relay, gpio.DIR_HIGH, () => {
// gpio is ready
socket.on('on', (cb) => {
gpio.write(config.relay, true, cb);
});
socket.on('off', (cb) => {
gpio.write(config.relay, false, cb);
});
socket.on('identify', (paired, cb) => {
logger.debug('HomeKit identify - paired:', paired);
cb({ success: true });
})
});
}
socket.emit('pluginloaded');
return true;
}
function unload() {
socket.emit('pluginunloaded');
clearInterval(temperatureInterval);
if (gpio) {
gpio.destroy();
}
return true;
}
async function _getTemperature() {
if (config.sensor.model = 'ds1820') {
return sensor.readDevice(config.sensor.address).then((data) => {
return data.value;
});
}
return new Promise((resolve, reject) => { resolve(false); });
}
}