homebridge-broadlink-rm-blaster 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -6,9 +6,10 @@ export interface TemperatureHumidityReading {
|
|
|
6
6
|
}
|
|
7
7
|
export declare class BroadlinkClient {
|
|
8
8
|
private readonly log;
|
|
9
|
-
private readonly
|
|
9
|
+
private readonly broadlinkInstances;
|
|
10
10
|
private readonly devices;
|
|
11
11
|
constructor(log: Logger);
|
|
12
|
+
private getBroadlink;
|
|
12
13
|
private getDevice;
|
|
13
14
|
sendCode(ip: string, hexCode: string): Promise<void>;
|
|
14
15
|
readTemperatureHumidity(ip: string): Promise<TemperatureHumidityReading>;
|
package/dist/broadlinkClient.js
CHANGED
|
@@ -15,20 +15,46 @@ const READ_TIMEOUT_MS = 10_000;
|
|
|
15
15
|
function parseHexCode(hexCode) {
|
|
16
16
|
return Buffer.from(hexCode.replace(/\s+/g, ''), 'hex');
|
|
17
17
|
}
|
|
18
|
+
// The manual/direct-by-IP placeholder MAC. Confirmed (via a real regression:
|
|
19
|
+
// see the comment on broadlinkInstances below) that real Broadlink RM4 Pro
|
|
20
|
+
// units silently refuse to authenticate at all if this is anything other
|
|
21
|
+
// than all-zero - the actual device cares about this value even though it
|
|
22
|
+
// doesn't need to match a real MAC. Never change this to anything else
|
|
23
|
+
// without re-testing against real hardware directly (e.g. via the CLI, with
|
|
24
|
+
// nothing else running) first.
|
|
25
|
+
const PLACEHOLDER_MAC = Buffer.alloc(6, 0);
|
|
18
26
|
class BroadlinkClient {
|
|
19
27
|
log;
|
|
20
|
-
|
|
28
|
+
// kiwicam-broadlinkjs-rm's own Broadlink.addDevice() keys its internal
|
|
29
|
+
// device registry by MAC address, not by IP. Every device has to use the
|
|
30
|
+
// same PLACEHOLDER_MAC (see above - the device itself breaks on any other
|
|
31
|
+
// value), so a single shared Broadlink instance would let a second
|
|
32
|
+
// device's addDevice() collide with the first's registry entry and
|
|
33
|
+
// silently no-op, never authenticating. Giving each IP its own Broadlink
|
|
34
|
+
// instance means each has its own private registry, so the identical
|
|
35
|
+
// placeholder MAC never collides across devices.
|
|
36
|
+
broadlinkInstances = new Map();
|
|
21
37
|
devices = new Map();
|
|
22
38
|
constructor(log) {
|
|
23
39
|
this.log = log;
|
|
24
40
|
}
|
|
41
|
+
getBroadlink(ip) {
|
|
42
|
+
let instance = this.broadlinkInstances.get(ip);
|
|
43
|
+
if (!instance) {
|
|
44
|
+
instance = new kiwicam_broadlinkjs_rm_1.default();
|
|
45
|
+
this.broadlinkInstances.set(ip, instance);
|
|
46
|
+
}
|
|
47
|
+
return instance;
|
|
48
|
+
}
|
|
25
49
|
getDevice(ip) {
|
|
26
50
|
let devicePromise = this.devices.get(ip);
|
|
27
51
|
if (devicePromise) {
|
|
28
52
|
return devicePromise;
|
|
29
53
|
}
|
|
54
|
+
const broadlink = this.getBroadlink(ip);
|
|
30
55
|
devicePromise = new Promise((resolve, reject) => {
|
|
31
56
|
const timeout = setTimeout(() => {
|
|
57
|
+
broadlink.removeListener('deviceReady', onReady);
|
|
32
58
|
reject(new Error(`Timed out authenticating with Broadlink RM at ${ip}`));
|
|
33
59
|
}, AUTH_TIMEOUT_MS);
|
|
34
60
|
const onReady = (device) => {
|
|
@@ -36,12 +62,12 @@ class BroadlinkClient {
|
|
|
36
62
|
return;
|
|
37
63
|
}
|
|
38
64
|
clearTimeout(timeout);
|
|
39
|
-
|
|
65
|
+
broadlink.removeListener('deviceReady', onReady);
|
|
40
66
|
this.log.info(`Connected to Broadlink RM at ${ip}`);
|
|
41
67
|
resolve(device);
|
|
42
68
|
};
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
broadlink.on('deviceReady', onReady);
|
|
70
|
+
broadlink.addDevice({ address: ip, port: BROADLINK_PORT }, PLACEHOLDER_MAC, MANUAL_RM_DEVICE_TYPE);
|
|
45
71
|
});
|
|
46
72
|
devicePromise.catch(() => this.devices.delete(ip));
|
|
47
73
|
this.devices.set(ip, devicePromise);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadlinkClient.js","sourceRoot":"","sources":["../src/broadlinkClient.ts"],"names":[],"mappings":";;;;;;AAUA,oCAEC;AAZD,oFAA2D;AAG3D,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;
|
|
1
|
+
{"version":3,"file":"broadlinkClient.js","sourceRoot":"","sources":["../src/broadlinkClient.ts"],"names":[],"mappings":";;;;;;AAUA,oCAEC;AAZD,oFAA2D;AAG3D,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,4EAA4E;AAC5E,+BAA+B;AAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAO3C,MAAa,eAAe;IAYG;IAX7B,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,mEAAmE;IACnE,mEAAmE;IACnE,yEAAyE;IACzE,qEAAqE;IACrE,iDAAiD;IAChC,kBAAkB,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9D,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAEpC,YAAY,CAAC,EAAU;QAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,gCAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,SAAS,CAAC,EAAU;QAC1B,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAExC,aAAa,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,SAAS,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC,EAAE,eAAe,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;gBACjC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBACD,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,SAAS,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,SAAS,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACrC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACpC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAe;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,EAAU;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAExC,OAAO,IAAI,OAAO,CAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,EAAE,EAAE,CAAC,CAAC,CAAC;YACzE,CAAC,EAAE,eAAe,CAAC,CAAC;YAEpB,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAE,EAAE;gBAC9D,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;gBACpD,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC;YAEF,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YACxC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAhFD,0CAgFC"}
|