-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.js
78 lines (59 loc) · 2.03 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
const pkg = require('./package.json');
const utils = global.req('util');
const gpio = global.req('lib/gpio');
module.exports = async (SmartNodeClientPlugin) => {
let displayTimeout;
let config = SmartNodeClientPlugin.config;
let socket = SmartNodeClientPlugin.socket;
return {
init,
load,
unload,
unpair
}
function init() {
return [pkg, (data) => {
// console.log('init done', data);
}];
}
function unpair() {
}
async function load() {
global.muted('smartnode-statusdisplay loaded')
if (config.lcd && config.backlight) {
gpio.setup(config.backlight, gpio.DIR_OUT);
}
if (config.button) {
gpio.on('change', async (channel, value) => {
if (channel === config.button && value) {
if (displayTimeout) clearTimeout(displayTimeout);
await gpio.write(config.backlight, true);
displayTimeout = setTimeout(() => {
gpio.write(config.backlight, false);
}, (config.timeout || 10) * 1000);
}
});
gpio.setup(config.button, gpio.DIR_IN, gpio.EDGE_BOTH);
}
if (config.lcd) {
let lcd = new (require('./lib/lcd.js'))(Object.assign({cols: 8, rows: 2}, config.lcd));
socket.on('render', (globals, cb) => {
let lines = config.lines.map((line) => {
return line.replace(/{{([\w\.]+)}}/g, (m, p1) => {
return utils.getValueByPath(globals, p1);
})
});
console.log('render display with lines', lines);
cb(lines);
})
}
socket.emit('pluginloaded');
return true;
}
function unload() {
if (gpio) {
gpio.destroy();
}
return true;
}
}