-
Notifications
You must be signed in to change notification settings - Fork 0
/
neeoDevice.js
47 lines (37 loc) · 1.66 KB
/
neeoDevice.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
'use strict';
const neeoapi = require('neeo-sdk');
module.exports = class NeeoDevice {
constructor(lircClient, remoteName) {
this.lircClient = lircClient;
this.remoteName = remoteName;
// Reverse NEEO name to LIRC key map
this.neeoButtonMap = new Map();
this.neeoDevice = neeoapi.buildDevice('gateway ' + remoteName.replace('_', ' '))
.setManufacturer('LIRC')
.setType('MEDIAPLAYER') // TODO: better device type available? This is super annoying with NEEO's cable salad insisting on TV or AVR :-(
.addAdditionalSearchToken('SDK')
.addAdditionalSearchToken('irsend')
.addButtonHander((name, deviceid) => this.onButtonPressed(name, deviceid));
}
getDevice() {
return this.neeoDevice;
}
addButton(neeoName, label, lircCmd) {
this.neeoButtonMap.set(neeoName, lircCmd);
this.neeoDevice.addButton({ name: neeoName, label: label });
}
onButtonPressed(name, deviceid) {
var lircKey = this.neeoButtonMap.get(name);
if (lircKey) {
console.log('[NEEO] ButtonPressed "%s" on %s: Sending LIRC key %s to %s', name, deviceid, lircKey, this.remoteName);
// TODO use SEND_START and SEND_STOP for repeatable buttons like volume up / down
this.lircClient.cmd('SEND_ONCE', this.remoteName, lircKey, function (err) {
if (err) {
console.error('ERROR [LIRC] SEND_ONCE failed:', err);
}
});
} else {
console.warn('WARN [NEEO] Undefined LIRC key for button name "%s" on %s for remote %s.', name, deviceid, this.remoteName);
}
}
};