homebridge-plejd 1.3.8 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"plejdApi.js","sourceRoot":"","sources":["../src/plejdApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plejdApi.js","sourceRoot":"","sources":["../src/plejdApi.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,0CAA0C,CAAC;AAC9D,MAAM,YAAY,GAAG,gCAAgC,CAAC;AACtD,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAwBrD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,GAAG,CAAS;IACZ,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,oBAAoB,CAAU;IAE9B,YACE,GAAW,EACX,QAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,oBAA6B;QAE7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,GAAG,aAAa,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,wBAAwB,EAAE,UAAU;gBACpC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,oDAAoD,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAa;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,GAAG,iBAAiB,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,wBAAwB,EAAE,UAAU;gBACpC,uBAAuB,EAAE,KAAK;gBAC9B,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sDAAsD,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC3B,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAC/C,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAe,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAa,EAAE,KAAa;QAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,GAAG,oBAAoB,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,wBAAwB,EAAE,UAAU;gBACpC,uBAAuB,EAAE,KAAK;gBAC9B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uDAAuD,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAS,CAAC;QACnC,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import { Logger } from "homebridge";
2
- import { UserInputConfig } from "./model/userInputConfig.js";
1
+ import { Logger } from 'homebridge';
2
+ import { UserInputConfig } from './model/userInputConfig.js';
3
3
  export declare class PlejdService {
4
4
  private readonly config;
5
5
  readonly log: Logger;
@@ -7,22 +7,25 @@ export declare class PlejdService {
7
7
  private connectedPeripheral;
8
8
  private addressBuffer;
9
9
  private dataCharacteristic;
10
- private pingTimer;
11
- private queueTimer;
12
10
  private sendQueue;
13
11
  constructor(config: UserInputConfig, log: Logger, onUpdate: (identifier: number, isOn: boolean, dim?: number) => void);
14
- updateState: (identifier: number, isOn: boolean, brightness: number | null) => void;
15
- private stateChange;
16
- private startConnection;
17
- private discover;
18
- private connectToPeripheral;
19
- private discovered;
20
- private plejdAuth;
21
- private startPlejdQueue;
22
- private writePlejdQueueItems;
12
+ /**
13
+ *
14
+ * Update the state of a device
15
+ *
16
+ * @param identifier: The device identifier
17
+ * @param isOn: The new state of the device
18
+ * @param brightness: The new brightness of the device between 0-100
19
+ */
20
+ updateState: (identifier: number, isOn: boolean, brightness: number | null) => Promise<void>;
21
+ private onDiscover;
22
+ private discoverCaracteristics;
23
+ private setupDevice;
24
+ private sendToDeviceQueued;
25
+ private handleQueuedMessages;
23
26
  private startPlejdPing;
24
- private plejdPing;
25
- private disconnect;
26
- private gotData;
27
- private plejdWrite;
27
+ private handleNotification;
28
+ private startScanning;
29
+ private setupCommunication;
30
+ private authenticate;
28
31
  }
@@ -1,8 +1,9 @@
1
- import { plejdChalResp as plejdCharResp, plejdEncodeDecode, reverseBuffer, } from "./plejdUtils.js";
2
- import { randomBytes } from "crypto";
3
- import noble from "@abandonware/noble";
4
- import { PLEJD_WRITE_TIMEOUT } from "./settings.js";
5
- const NOBLE_IS_POWER_ON = "oweredOn";
1
+ import { plejdChalResp as plejdCharResp, plejdEncodeDecode, reverseBuffer, } from './plejdUtils.js';
2
+ import { randomBytes } from 'crypto';
3
+ import noble from '@abandonware/noble';
4
+ import { PLEJD_PING_TIMEOUT, PLEJD_WRITE_TIMEOUT } from './settings.js';
5
+ import { delay } from './utils.js';
6
+ const NOBLE_IS_POWER_ON = 'poweredOn';
6
7
  /**
7
8
  * Plejd BLE UUIDs
8
9
  */
@@ -17,15 +18,15 @@ var PlejdCharacteristics;
17
18
  })(PlejdCharacteristics || (PlejdCharacteristics = {}));
18
19
  var PlejdCommand;
19
20
  (function (PlejdCommand) {
20
- PlejdCommand["UpdateState"] = "097";
21
- PlejdCommand["StateBrightness"] = "0c8";
22
- PlejdCommand["Brightness"] = "098";
23
- PlejdCommand["Time"] = "01b";
24
- PlejdCommand["Scene"] = "021";
25
- PlejdCommand["RequestResponse"] = "102";
26
- PlejdCommand["RequestNoResponse"] = "110";
27
- PlejdCommand["RequestReadValue"] = "103";
28
- PlejdCommand["ButtonClick"] = "006";
21
+ PlejdCommand["OnOffState"] = "0097";
22
+ PlejdCommand["StateBrightness"] = "00c8";
23
+ PlejdCommand["Brightness"] = "0098";
24
+ PlejdCommand["Scene"] = "0021";
25
+ PlejdCommand["Time"] = "001b";
26
+ PlejdCommand["RequestResponse"] = "0102";
27
+ PlejdCommand["RequestNoResponse"] = "0110";
28
+ PlejdCommand["RequestReadValue"] = "0103";
29
+ PlejdCommand["ButtonClick"] = "0006";
29
30
  })(PlejdCommand || (PlejdCommand = {}));
30
31
  export class PlejdService {
31
32
  config;
@@ -34,8 +35,6 @@ export class PlejdService {
34
35
  connectedPeripheral;
35
36
  addressBuffer;
36
37
  dataCharacteristic;
37
- pingTimer;
38
- queueTimer;
39
38
  sendQueue;
40
39
  constructor(config, log, onUpdate) {
41
40
  this.config = config;
@@ -45,245 +44,170 @@ export class PlejdService {
45
44
  this.dataCharacteristic = null;
46
45
  this.connectedPeripheral = null;
47
46
  this.sendQueue = [];
48
- noble.on("stateChange", (state) => this.stateChange(state));
49
- noble.on("warning", (msg) => {
50
- this.log.debug("Noble warning: ", msg);
47
+ noble.on('stateChange', async (state) => {
48
+ await this.startScanning(state);
51
49
  });
50
+ noble.on('warning', (msg) => {
51
+ this.log.warn('Noble warning: ', msg);
52
+ });
53
+ noble.on('discover', async (peripheral) => await this.onDiscover(peripheral));
52
54
  }
53
- /// Brightness should be between 1-100
54
- updateState = (identifier, isOn, brightness) => {
55
- if (!this.dataCharacteristic || !this.addressBuffer) {
56
- this.log.warn(`UpdateState | characteristic (${this.dataCharacteristic}) or address (${this.addressBuffer}) not found`);
55
+ /**
56
+ *
57
+ * Update the state of a device
58
+ *
59
+ * @param identifier: The device identifier
60
+ * @param isOn: The new state of the device
61
+ * @param brightness: The new brightness of the device between 0-100
62
+ */
63
+ updateState = async (identifier, isOn, brightness) => {
64
+ if (!this.connectedPeripheral || !this.dataCharacteristic || !this.addressBuffer) {
65
+ await this.startScanning();
57
66
  return;
58
67
  }
59
- const dimming = brightness !== null;
60
- const command = isOn && dimming ? PlejdCommand.Brightness : PlejdCommand.UpdateState;
61
- const on = isOn ? "01" : "00";
62
- let payload = Buffer.from(identifier.toString(16).padStart(2, "0") +
63
- PlejdCommand.RequestNoResponse +
64
- command +
65
- on, "hex");
66
- if (dimming) {
67
- const dim = Math.round(2.55 * brightness); // Convert to Plejd 0-255
68
- this.log.debug(`Dim value sent over BLE ${dim}`);
69
- payload = Buffer.concat([
70
- payload,
71
- Buffer.from(dim.toString(16).padStart(4, "0"), "hex"),
72
- ]);
73
- }
74
- this.log.debug("UpdateState:", this.config.cryptoKey, this.addressBuffer, payload);
68
+ const payload = Buffer.from(!brightness || brightness === 0 ?
69
+ (identifier.toString(16).padStart(2, '0') +
70
+ PlejdCommand.RequestNoResponse +
71
+ PlejdCommand.OnOffState +
72
+ (isOn ? '01' : '00')) :
73
+ (identifier.toString(16).padStart(2, '0') +
74
+ PlejdCommand.RequestNoResponse +
75
+ PlejdCommand.Brightness +
76
+ '01' +
77
+ Math.round(2.55 * brightness).toString(16).padStart(4, '0')), 'hex');
75
78
  const data = plejdEncodeDecode(this.config.cryptoKey, this.addressBuffer, payload);
76
- this.sendQueue.push(data);
79
+ this.sendToDeviceQueued(data);
77
80
  };
78
81
  // -------------- Private -------------- \\
79
- stateChange = (state) => {
80
- if (state !== NOBLE_IS_POWER_ON) {
81
- this.log.debug("stateChange | Stopped | " + state);
82
- noble.stopScanning();
83
- }
84
- this.log.debug("stateChange | Started | " + state);
85
- this.startConnection();
86
- };
87
- startConnection = () => {
88
- if (this.connectedPeripheral === null || noble._state !== "poweredOn") {
89
- noble.startScanning([PlejdCharacteristics.Service], false, (e) => {
90
- if (e) {
91
- this.log.error("Unable to start scanning", e);
92
- }
93
- });
94
- noble.once("discover", (peripheral) => this.discover(peripheral));
82
+ onDiscover = async (peripheral) => {
83
+ this.log.debug(`Discovered | ${peripheral.advertisement.localName} | addr: ${peripheral.address} | RSSI: ${peripheral.rssi} dB`);
84
+ await noble.stopScanningAsync();
85
+ try {
86
+ await peripheral.connectAsync();
95
87
  }
96
- else {
97
- this.connectedPeripheral?.cancelConnect();
98
- this.connectedPeripheral.connect((e) => {
99
- this.log.error("Unable to reconnect", e);
100
- });
88
+ catch (error) {
89
+ this.log.error(`Connecting failed | ${peripheral.advertisement.localName} | addr: ${peripheral.address}) - err: ${error}`);
90
+ return;
101
91
  }
102
- };
103
- discover = (peripheral) => {
104
- noble.stopScanning();
105
- this.log.info(`Discovered | ${peripheral.advertisement.localName} | addr: ${peripheral.address} | RSSI: ${peripheral.rssi} dB`);
106
- peripheral.connect((error) => {
107
- if (error) {
108
- this.log.error(`Connecting failed | ${peripheral.advertisement.localName} | addr: ${peripheral.address}) - err: ${error}`);
109
- this.startConnection();
110
- return;
111
- }
112
- this.connectToPeripheral(peripheral);
92
+ this.connectedPeripheral = peripheral;
93
+ peripheral.once('disconnect', async () => {
94
+ this.connectedPeripheral?.removeAllListeners();
95
+ this.connectedPeripheral = null;
96
+ this.addressBuffer = null;
97
+ this.dataCharacteristic = null;
98
+ this.log.info('Disconnected from mesh');
99
+ await this.startScanning();
113
100
  });
101
+ const characteristics = await this.discoverCaracteristics(peripheral);
102
+ if (!characteristics) {
103
+ this.log.error('Failed to discover characteristics, disconnecting...');
104
+ await peripheral.disconnectAsync();
105
+ return;
106
+ }
107
+ await this.setupDevice(peripheral, characteristics);
114
108
  };
115
- connectToPeripheral = (peripheral) => {
109
+ discoverCaracteristics = async (peripheral) => {
116
110
  const addr = peripheral.address;
117
- this.log.info(`Connected | ${peripheral.advertisement.localName} (addr: ${addr})`);
118
- this.connectedPeripheral = peripheral;
119
- this.addressBuffer = reverseBuffer(Buffer.from(String(addr).replace(/:/g, ""), "hex"));
111
+ this.log.info(`Connected to mesh | ${peripheral.advertisement.localName} (addr: ${addr})`);
112
+ this.addressBuffer = reverseBuffer(Buffer.from(String(addr).replace(/:/g, ''), 'hex'));
120
113
  const services = [PlejdCharacteristics.Service];
121
- const characteristics = [
114
+ const characteristicIds = [
122
115
  PlejdCharacteristics.Data,
123
116
  PlejdCharacteristics.LastData,
124
117
  PlejdCharacteristics.Auth,
125
118
  PlejdCharacteristics.Ping,
126
119
  ];
127
- peripheral.discoverSomeServicesAndCharacteristics(services, characteristics, (error, services, characteristics) => {
128
- if (error) {
129
- this.log.error(`Discover failed | ${peripheral.advertisement.localName} (${peripheral.address}) | ${error}`);
130
- return;
131
- }
132
- this.discovered(peripheral, services, characteristics);
133
- });
134
- peripheral.once("disconnect", () => {
135
- this.log.info("Peripheral disconnected");
136
- });
120
+ try {
121
+ return (await peripheral.discoverSomeServicesAndCharacteristicsAsync(services, characteristicIds)).characteristics;
122
+ }
123
+ catch (error) {
124
+ this.log.error(`Failed to setup device | ${peripheral.advertisement.localName} (addr: ${addr}) - err: ${error}`);
125
+ return;
126
+ }
137
127
  };
138
- discovered = (peripheral, services, characteristics) => {
139
- characteristics.forEach((c) => this.log.info("Characteristic: ", c.uuid));
128
+ setupDevice = async (peripheral, characteristics) => {
140
129
  const authChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Auth);
141
130
  const lastDataChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.LastData);
142
131
  const pingChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Ping);
143
132
  this.dataCharacteristic =
144
133
  peripheral?.services[0]?.characteristics?.find((char) => char.uuid === PlejdCharacteristics.Data) ?? null;
145
134
  if (!authChar || !lastDataChar || !pingChar) {
146
- this.log.error("Unable to extract characteristic during discovery", authChar, lastDataChar, pingChar);
135
+ this.log.error('Unable to extract characteristic during discovery', authChar, lastDataChar, pingChar);
147
136
  return;
148
137
  }
149
- this.plejdAuth(authChar, () => {
150
- this.startPlejdPing(pingChar);
151
- this.startPlejdQueue();
152
- lastDataChar.subscribe((error) => {
153
- if (error) {
154
- this.log.error("Error subscribing | " + error);
155
- return;
156
- }
157
- lastDataChar.on("data", (data, isNotification) => this.gotData(data, isNotification));
158
- });
159
- });
138
+ await this.authenticate(authChar);
139
+ await this.setupCommunication(pingChar, lastDataChar);
160
140
  };
161
- plejdAuth = (authChar, callback) => {
162
- authChar.write(Buffer.from([0x00]), false, (error) => {
163
- if (error) {
164
- this.log.error("Error writing auth start | " + error);
165
- return;
166
- }
167
- authChar.read((error, data) => {
168
- if (error) {
169
- this.log.error("Error reading auth | " + error);
170
- return;
171
- }
172
- authChar.write(plejdCharResp(this.config.cryptoKey, data), false, (error) => {
173
- if (error) {
174
- this.log.error("Error writing auth char | " + error);
175
- return;
176
- }
177
- callback();
178
- });
179
- });
180
- });
181
- };
182
- startPlejdQueue = () => {
183
- if (this.queueTimer) {
184
- clearInterval(this.queueTimer);
185
- }
186
- this.queueTimer = setTimeout(() => this.writePlejdQueueItems(), PLEJD_WRITE_TIMEOUT);
187
- };
188
- writePlejdQueueItems = () => {
189
- const data = this.sendQueue.pop();
190
- if (this.dataCharacteristic && data) {
191
- this.plejdWrite(this.dataCharacteristic, data);
192
- this.queueTimer = setTimeout(() => this.startPlejdQueue(), PLEJD_WRITE_TIMEOUT / 2);
193
- }
194
- else {
195
- this.queueTimer = setTimeout(() => this.startPlejdQueue(), PLEJD_WRITE_TIMEOUT);
141
+ sendToDeviceQueued = async (data) => {
142
+ this.sendQueue.unshift(data);
143
+ if (this.sendQueue.length === 1) {
144
+ await this.handleQueuedMessages();
196
145
  }
197
146
  };
198
- startPlejdPing = (pingChar) => {
199
- if (this.pingTimer) {
200
- clearInterval(this.pingTimer);
201
- }
202
- this.pingTimer = setInterval(() => {
203
- if (this.connectedPeripheral) {
204
- this.plejdPing(pingChar, (pingOk) => {
205
- if (!pingOk) {
206
- this.disconnect(() => {
207
- this.startConnection();
208
- });
209
- }
210
- });
147
+ handleQueuedMessages = async () => {
148
+ while (this.sendQueue.length > 0 && this.connectedPeripheral && this.dataCharacteristic) {
149
+ const data = this.sendQueue.pop();
150
+ if (!data) {
151
+ return;
211
152
  }
212
- }, 1000 * 60 * 3);
153
+ this.log.debug(`BLE command sent to ${this.addressBuffer?.toString('hex') ?? 'Unknown'} | ${data.length} bytes | ${data.toString('hex')}`);
154
+ await this.dataCharacteristic.writeAsync(data, false);
155
+ await delay(PLEJD_WRITE_TIMEOUT);
156
+ }
213
157
  };
214
- plejdPing = (pingChar, callback) => {
215
- const ping = randomBytes(1);
216
- pingChar.write(ping, false, (error) => {
217
- if (error) {
218
- this.log.error("Error sending ping | " + error);
219
- return callback(false);
220
- }
221
- pingChar.read((error, pong) => {
222
- if (error) {
223
- this.log.error("Error reading pong | " + error);
224
- return callback(false);
225
- }
158
+ startPlejdPing = async (pingChar) => {
159
+ while (this.connectedPeripheral && pingChar) {
160
+ try {
161
+ const ping = randomBytes(1);
162
+ pingChar.writeAsync(ping, false);
163
+ const pong = await pingChar.readAsync();
226
164
  if (((ping[0] + 1) & 0xff) !== pong[0]) {
227
- this.log.error(`Ping failed: ${ping[0]} ${pong[0]}`);
228
- callback(false);
229
- }
230
- else {
231
- this.log.debug(`Ping success: ${ping[0]} ${pong[0]}`);
232
- callback(true);
165
+ this.log.error('Ping pong communication failed, missing pong response');
233
166
  }
234
- });
235
- });
236
- };
237
- disconnect = (callback) => {
238
- if (!this.pingTimer) {
239
- return;
240
- }
241
- clearInterval(this.pingTimer);
242
- if (this.connectedPeripheral) {
243
- this.log.info("Disconnecting peripheral");
244
- this.connectedPeripheral.disconnect();
245
- }
246
- if (callback) {
247
- callback();
167
+ await delay(PLEJD_PING_TIMEOUT);
168
+ }
169
+ catch (error) {
170
+ this.log.warn('Ping failed, device disconnected, will retry to connect to mesh: ', error);
171
+ await this.startScanning();
172
+ }
248
173
  }
249
174
  };
250
- gotData = (data, isNotification) => {
251
- if (!this.addressBuffer || this.addressBuffer?.byteLength === 0) {
175
+ handleNotification = async (data, isNotification) => {
176
+ if (!this.connectedPeripheral || !this.addressBuffer || this.addressBuffer?.byteLength === 0) {
252
177
  return;
253
178
  }
254
- this.log.debug("GotData:", this.config.cryptoKey, this.addressBuffer, data);
255
179
  const decodedData = plejdEncodeDecode(this.config.cryptoKey, this.addressBuffer, data);
256
180
  const id = parseInt(decodedData[0].toString(), 10);
257
- const command = decodedData.toString("hex", 3, 5);
258
- const isOn = parseInt(decodedData.toString("hex", 5, 6), 10) === 1;
181
+ const command = decodedData.toString('hex', 3, 5);
182
+ const isOn = parseInt(decodedData.toString('hex', 5, 6), 10) === 1;
259
183
  const commandType = Object.values(PlejdCommand).find((x) => x.toString() === command) ??
260
- "Unknown";
184
+ 'Unknown';
261
185
  const d = {
262
186
  id: id,
263
187
  command: command,
264
188
  commandType: commandType,
265
189
  on: isOn,
266
190
  Notification: isNotification,
267
- payload: decodedData.toString("hex"),
191
+ payload: decodedData.toString('hex'),
268
192
  };
269
- this.log.debug("GotData", d);
193
+ this.log.debug('Handle BLE notification', d);
270
194
  switch (command) {
271
195
  case PlejdCommand.Time: {
272
- const arg = parseInt(reverseBuffer(decodedData.subarray(5, 9)).toString("hex"), 16);
196
+ const arg = parseInt(reverseBuffer(decodedData.subarray(5, 9)).toString('hex'), 16);
273
197
  const date = new Date(arg * 1000);
274
- this.log.debug("Time sync: " + date.toString());
198
+ this.log.debug('Time sync: ' + date.toString());
275
199
  break;
276
200
  }
277
201
  case PlejdCommand.Brightness:
278
202
  case PlejdCommand.StateBrightness: {
279
- const dim = parseInt(decodedData.toString("hex", 7, 8), 16);
203
+ const dim = parseInt(decodedData.toString('hex', 7, 8), 16);
280
204
  // Convert to Homebridge 1-100
281
205
  const converted = dim === 0 ? 1 : (100 / 255) * dim;
282
206
  this.onUpdate(id, isOn, converted);
283
207
  break;
284
208
  }
285
209
  case PlejdCommand.Scene:
286
- case PlejdCommand.UpdateState:
210
+ case PlejdCommand.OnOffState:
287
211
  case PlejdCommand.ButtonClick:
288
212
  case PlejdCommand.RequestResponse:
289
213
  case PlejdCommand.RequestNoResponse:
@@ -293,17 +217,34 @@ export class PlejdService {
293
217
  }
294
218
  default: {
295
219
  this.onUpdate(id, isOn);
296
- this.log.debug(`Unknown | command: ${command} | id: ${id} | ${decodedData.toString("hex")}`);
220
+ this.log.warn(`Unknown | command: ${command} | id: ${id} | ${decodedData.toString('hex')}`);
297
221
  }
298
222
  }
299
223
  };
300
- plejdWrite = (dataChar, data) => {
301
- dataChar.write(data, false, (error) => {
302
- if (error) {
303
- this.log.error("Error writing data | " + error);
224
+ startScanning = async (state = undefined) => {
225
+ if (!state) {
226
+ state = noble._state;
227
+ }
228
+ if (state === NOBLE_IS_POWER_ON) {
229
+ this.log.debug('Scanning for Plejd devices');
230
+ await noble.startScanningAsync([PlejdCharacteristics.Service], false);
231
+ }
232
+ };
233
+ setupCommunication = async (pingChar, lastDataChar) => {
234
+ this.startPlejdPing(pingChar);
235
+ await lastDataChar.subscribeAsync();
236
+ lastDataChar.on('data', async (data, isNotification) => {
237
+ if (!lastDataChar || !this.connectedPeripheral) {
238
+ await lastDataChar.unsubscribeAsync();
304
239
  return;
305
240
  }
241
+ await this.handleNotification(data, isNotification);
306
242
  });
307
243
  };
244
+ authenticate = async (authChar) => {
245
+ await authChar.writeAsync(Buffer.from([0x00]), false);
246
+ const data = await authChar.readAsync();
247
+ await authChar.writeAsync(plejdCharResp(this.config.cryptoKey, data), false);
248
+ };
308
249
  }
309
250
  //# sourceMappingURL=plejdService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plejdService.js","sourceRoot":"","sources":["../src/plejdService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plejdService.js","sourceRoot":"","sources":["../src/plejdService.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { createCipheriv, createHash } from "crypto";
1
+ import { createCipheriv, createHash } from 'crypto';
2
2
  export const plejdChalResp = (key, chal) => {
3
- const intermediate = createHash("sha256").update(xor(key, chal)).digest();
3
+ const intermediate = createHash('sha256').update(xor(key, chal)).digest();
4
4
  const part1 = intermediate.slice(0, 16);
5
5
  const part2 = intermediate.slice(16);
6
6
  return xor(part1, part2);
@@ -11,16 +11,16 @@ export const plejdEncodeDecode = (key, addressBuffer, data) => {
11
11
  addressBuffer,
12
12
  addressBuffer.subarray(0, 4),
13
13
  ]);
14
- const cipher = createCipheriv("aes-128-ecb", key, "");
14
+ const cipher = createCipheriv('aes-128-ecb', key, '');
15
15
  cipher.setAutoPadding(false);
16
- let ct = cipher.update(buf).toString("hex");
17
- ct += cipher.final().toString("hex");
18
- const ctBuff = Buffer.from(ct, "hex");
19
- let output = "";
16
+ let ct = cipher.update(buf).toString('hex');
17
+ ct += cipher.final().toString('hex');
18
+ const ctBuff = Buffer.from(ct, 'hex');
19
+ let output = '';
20
20
  for (let i = 0, length = data.length; i < length; i++) {
21
21
  output += String.fromCharCode(data[i] ^ ctBuff[i % 16]);
22
22
  }
23
- return Buffer.from(output, "ascii");
23
+ return Buffer.from(output, 'ascii');
24
24
  };
25
25
  export const reverseBuffer = (src) => {
26
26
  const buffer = Buffer.allocUnsafe(src.length);
@@ -6,7 +6,8 @@ export declare const PLATFORM_NAME = "Plejd";
6
6
  * This must match the name of your plugin as defined the package.json
7
7
  */
8
8
  export declare const PLUGIN_NAME = "homebridge-plejd";
9
- export declare const PLEJD_WRITE_TIMEOUT = 100;
9
+ export declare const PLEJD_WRITE_TIMEOUT = 50;
10
+ export declare const PLEJD_PING_TIMEOUT = 3000;
10
11
  /**
11
12
  * Lights and switches from Plejd
12
13
  */
package/dist/settings.js CHANGED
@@ -6,7 +6,8 @@ export const PLATFORM_NAME = 'Plejd';
6
6
  * This must match the name of your plugin as defined the package.json
7
7
  */
8
8
  export const PLUGIN_NAME = 'homebridge-plejd';
9
- export const PLEJD_WRITE_TIMEOUT = 100;
9
+ export const PLEJD_WRITE_TIMEOUT = 50;
10
+ export const PLEJD_PING_TIMEOUT = 3000;
10
11
  /**
11
12
  * Lights and switches from Plejd
12
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;CACT,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AACvC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;CACT,CAAC;AACF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC;AACF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const delay: (ms: number) => Promise<unknown>;
package/dist/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ export const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
2
+ //# sourceMappingURL=utils.js.map