homebridge-plejd 1.6.2 → 1.7.0-beta-1

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.
@@ -1,8 +1,7 @@
1
- import { plejdChalResp as plejdCharResp, plejdEncodeDecode, reverseBuffer, } from "./plejdUtils.js";
2
1
  import { randomBytes } from "crypto";
3
2
  import noble from "@abandonware/noble";
4
- import { PLEJD_PING_TIMEOUT, PLEJD_WRITE_TIMEOUT } from "./settings.js";
5
- import { delay, race } from "./utils.js";
3
+ import { DEFAULT_BRIGHTNESS_TRANSITION_MS, PLEJD_PING_TIMEOUT, PLEJD_WRITE_TIMEOUT, } from "./constants.js";
4
+ import { delay, race, plejdChallageResp as plejdCharResp, plejdEncodeDecode, } from "./utils.js";
6
5
  /**
7
6
  * Plejd BLE UUIDs
8
7
  */
@@ -15,7 +14,7 @@ var PlejdCharacteristics;
15
14
  PlejdCharacteristics["Auth"] = "31ba000960854726be45040c957391b5";
16
15
  PlejdCharacteristics["Ping"] = "31ba000a60854726be45040c957391b5";
17
16
  })(PlejdCharacteristics || (PlejdCharacteristics = {}));
18
- var PlejdCommand;
17
+ export var PlejdCommand;
19
18
  (function (PlejdCommand) {
20
19
  PlejdCommand["OnOffState"] = "0097";
21
20
  PlejdCommand["StateBrightness"] = "00c8";
@@ -50,28 +49,55 @@ export class PlejdService {
50
49
  this.log = log;
51
50
  this.onUpdate = onUpdate;
52
51
  }
52
+ /**
53
+ *
54
+ * @returns the current queue items
55
+ */
56
+ readQueue() {
57
+ return [...this.sendQueue];
58
+ }
53
59
  /**
54
60
  *
55
61
  * Update the state of a device
56
62
  *
57
63
  * @param identifier: The device identifier
58
- * @param isOn: The new state of the device
59
- * @param brightness: The new brightness of the device between 0-100
64
+ * @param turnOn: The new state of the device
65
+ * @param targetBrightness: The new brightness of the device between 0-100
66
+ * @param currentBrightness: The current brightness of the device between 0-100
67
+ * @param transitionMS: split brightness into steps, adding a transition to the brightness change
60
68
  */
61
- updateState = async (identifier, isOn, brightness) => {
62
- const payload = Buffer.from(!brightness || brightness === 0
63
- ? identifier.toString(16).padStart(2, "0") +
69
+ updateState = async (identifier, turnOn, opt = {}) => {
70
+ const deviceIdHex = identifier.toString(16).padStart(2, "0");
71
+ const brightnessCommandPrefix = deviceIdHex + PlejdCommand.RequestNoResponse + PlejdCommand.Brightness;
72
+ this.sendQueue = this.sendQueue.filter((cmd) => !cmd.toString("hex").startsWith(brightnessCommandPrefix.toLowerCase()));
73
+ if (!turnOn || !opt.targetBrightness || opt.targetBrightness === 0) {
74
+ const payload = deviceIdHex +
64
75
  PlejdCommand.RequestNoResponse +
65
76
  PlejdCommand.OnOffState +
66
- (isOn ? "01" : "00")
67
- : identifier.toString(16).padStart(2, "0") +
77
+ (turnOn ? "01" : "00");
78
+ this.log.debug(`BLE: Turning ${turnOn ? "on" : "off"} device ${identifier}`);
79
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
80
+ return;
81
+ }
82
+ if (opt.targetBrightness &&
83
+ opt.targetBrightness === opt.currentBrightness) {
84
+ return;
85
+ }
86
+ const trans = opt.transitionMs || DEFAULT_BRIGHTNESS_TRANSITION_MS;
87
+ const steps = trans > 0 ? Math.round(trans / PLEJD_WRITE_TIMEOUT) : 1;
88
+ this.log.debug(`BLE: Setting brightness for device ${identifier} to ${opt.targetBrightness}% over ${trans}ms in ${steps} steps`);
89
+ const startBrightness = opt.currentBrightness || 0;
90
+ const brightnessDifference = opt.targetBrightness - startBrightness;
91
+ for (let step = 1; step <= steps; step++) {
92
+ const currentStepBrightness = Math.min(100, Math.max(0, startBrightness + (brightnessDifference * step) / steps));
93
+ const eightBitBrightness = Math.round(currentStepBrightness * 2.55);
94
+ const payload = deviceIdHex +
68
95
  PlejdCommand.RequestNoResponse +
69
96
  PlejdCommand.Brightness +
70
97
  "01" +
71
- Math.round(2.55 * brightness)
72
- .toString(16)
73
- .padStart(4, "0"), "hex");
74
- this.sendQueue.unshift(payload);
98
+ eightBitBrightness.toString(16).padStart(4, "0");
99
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
100
+ }
75
101
  };
76
102
  configureBLE = () => {
77
103
  this.startBlacklistCleanup();
@@ -86,11 +112,11 @@ export class PlejdService {
86
112
  // -------------- Private -------------- \\
87
113
  onDiscover = async (peripheral) => {
88
114
  if (peripheral.rssi < -90) {
89
- this.log.debug(`Skipping device with weak signal: ${peripheral.address} (${peripheral.rssi} dB)`);
115
+ this.log.info(`Skipping device with weak signal: ${peripheral.address} (${peripheral.rssi} dB)`);
90
116
  return;
91
117
  }
92
118
  if (this.isDeviceBlacklisted(peripheral.address)) {
93
- this.log.debug(`Skipping blacklisted device: ${peripheral.address}`);
119
+ this.log.info(`Skipping blacklisted device: ${peripheral.address}`);
94
120
  return;
95
121
  }
96
122
  if (this.isConnecting) {
@@ -98,7 +124,7 @@ export class PlejdService {
98
124
  return;
99
125
  }
100
126
  this.log.info(`Discovered | ${peripheral.advertisement.localName} | addr: ${peripheral.address} | Signal strength: ${this.mapRssiToQuality(peripheral.rssi)} (${peripheral.rssi} dB)`);
101
- this.log.debug(`Stopping scan`);
127
+ this.log.info(`Stopping scan`);
102
128
  await noble.stopScanningAsync();
103
129
  let retryCount = 0;
104
130
  const maxRetries = 3;
@@ -116,7 +142,7 @@ export class PlejdService {
116
142
  this.cleanup();
117
143
  if (retryCount < maxRetries) {
118
144
  retryCount++;
119
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
145
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
120
146
  await connectWithRetry();
121
147
  }
122
148
  else {
@@ -143,7 +169,7 @@ export class PlejdService {
143
169
  await this.tryDisconnect(peripheral);
144
170
  if (retryCount < maxRetries) {
145
171
  retryCount++;
146
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
172
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
147
173
  await connectWithRetry();
148
174
  }
149
175
  else {
@@ -179,7 +205,7 @@ export class PlejdService {
179
205
  }
180
206
  }
181
207
  discoverCaracteristics = async (peripheral) => {
182
- this.log.debug("Discovering characteristics");
208
+ this.log.info("Discovering characteristics");
183
209
  const services = [PlejdCharacteristics.Service];
184
210
  const characteristicIds = [
185
211
  PlejdCharacteristics.Data,
@@ -188,11 +214,11 @@ export class PlejdService {
188
214
  PlejdCharacteristics.Ping,
189
215
  ];
190
216
  const { characteristics } = await peripheral.discoverSomeServicesAndCharacteristicsAsync(services, characteristicIds);
191
- this.log.debug("Characteristics discovered");
217
+ this.log.info("Characteristics discovered");
192
218
  return characteristics;
193
219
  };
194
220
  setupDevice = async (peripheral, characteristics) => {
195
- this.log.debug("Locating relevant characteristics");
221
+ this.log.info("Locating relevant characteristics");
196
222
  const authChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Auth);
197
223
  const lastDataChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.LastData);
198
224
  const pingChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Ping);
@@ -202,7 +228,7 @@ export class PlejdService {
202
228
  await this.tryDisconnect(peripheral);
203
229
  return;
204
230
  }
205
- const addressBuffer = reverseBuffer(Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex"));
231
+ const addressBuffer = Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex").reverse();
206
232
  await this.authenticate(peripheral, authChar);
207
233
  await this.setupCommunication(peripheral, pingChar, lastDataChar, dataChar, addressBuffer);
208
234
  };
@@ -217,7 +243,7 @@ export class PlejdService {
217
243
  return;
218
244
  }
219
245
  const data = plejdEncodeDecode(this.config.cryptoKey, addressBuffer, payload);
220
- this.log.debug(`BLE command sent to ${addressBuffer?.toString("hex") ?? "Unknown"} | ${data.length} bytes | ${data.toString("hex")}`);
246
+ this.log.info(`BLE command sent to ${addressBuffer?.toString("hex") ?? "Unknown"} | ${data.length} bytes | ${data.toString("hex")}`);
221
247
  let retryCount = 0;
222
248
  const maxRetries = 3;
223
249
  const tryWrite = async () => {
@@ -227,8 +253,8 @@ export class PlejdService {
227
253
  catch (error) {
228
254
  if (retryCount < maxRetries) {
229
255
  retryCount++;
230
- this.log.debug(`Retrying write (${retryCount}/${maxRetries})`);
231
- await delay(100);
256
+ this.log.info(`Retrying write (${retryCount}/${maxRetries})`);
257
+ await delay(PLEJD_WRITE_TIMEOUT);
232
258
  return tryWrite();
233
259
  }
234
260
  throw error;
@@ -291,7 +317,7 @@ export class PlejdService {
291
317
  this.log.debug("Handle BLE notification", d);
292
318
  switch (command) {
293
319
  case PlejdCommand.Time: {
294
- const arg = parseInt(reverseBuffer(decodedData.subarray(5, 9)).toString("hex"), 16);
320
+ const arg = parseInt(Buffer.from(decodedData.subarray(5, 9)).reverse().toString("hex"), 16);
295
321
  const date = new Date(arg * 1000);
296
322
  this.log.debug("Time sync: " + date.toString());
297
323
  break;
@@ -320,12 +346,12 @@ export class PlejdService {
320
346
  }
321
347
  };
322
348
  setupCommunication = async (peripheral, pingChar, lastDataChar, dataChar, addressBuffer) => {
323
- this.log.debug("Setting up ping pong communication with Plejd device");
349
+ this.log.info("Setting up ping pong communication with Plejd device");
324
350
  this.startPlejdPing(peripheral, pingChar);
325
351
  this.log.debug("Starting queue handler for messages to Plejd device");
326
352
  this.handleQueuedMessages(dataChar, addressBuffer);
327
353
  try {
328
- this.log.debug("Subscribing to incomming messages");
354
+ this.log.info("Subscribing to incomming messages");
329
355
  await race(() => lastDataChar.subscribeAsync());
330
356
  lastDataChar.on("data", async (data, isNotification) => {
331
357
  await this.handleNotification(data, isNotification, addressBuffer);
@@ -345,14 +371,14 @@ export class PlejdService {
345
371
  return;
346
372
  }
347
373
  try {
348
- this.log.debug("Authenticating to Plejd device");
374
+ this.log.info("Authenticating to Plejd device");
349
375
  await race(() => authChar.writeAsync(Buffer.from([0x00]), false));
350
376
  await delay(100);
351
377
  const data = await race(() => authChar.readAsync());
352
378
  await delay(100);
353
379
  await authChar.writeAsync(plejdCharResp(this.config.cryptoKey, data), false);
354
380
  await delay(100);
355
- this.log.debug("Authentication successful");
381
+ this.log.info("Authentication successful");
356
382
  this.isAuthenticated = true;
357
383
  }
358
384
  catch (e) {
@@ -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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"}
package/dist/utils.d.ts CHANGED
@@ -1,2 +1,6 @@
1
1
  export declare const delay: (ms: number) => Promise<unknown>;
2
2
  export declare const race: <T>(operation: () => Promise<T>, timeoutMs?: number) => Promise<T>;
3
+ export declare const plejdChallageResp: (key: Buffer, chal: Buffer) => Buffer;
4
+ export declare const plejdEncodeDecode: (key: Buffer, addressBuffer: Buffer, data: Buffer) => Buffer;
5
+ export declare const isDimmable: (type: string) => boolean;
6
+ export declare const isAddon: (type: string) => boolean;
package/dist/utils.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { createCipheriv, createHash } from "crypto";
2
+ import { PLEJD_LIGHTS, PLEJD_ADDONS } from "./constants.js";
1
3
  export const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
2
4
  /*
3
5
  * Set a timeout for a function
@@ -10,4 +12,41 @@ export const race = async (operation, timeoutMs = 5000) => {
10
12
  new Promise((_, reject) => setTimeout(() => reject(new Error("BLE operation timeout")), timeoutMs)),
11
13
  ]);
12
14
  };
15
+ export const plejdChallageResp = (key, chal) => {
16
+ const intermediate = createHash("sha256").update(xor(key, chal)).digest();
17
+ const part1 = Buffer.from(intermediate.subarray(0, 16));
18
+ const part2 = Buffer.from(intermediate.subarray(16));
19
+ return xor(part1, part2);
20
+ };
21
+ export const plejdEncodeDecode = (key, addressBuffer, data) => {
22
+ const buf = Buffer.concat([
23
+ addressBuffer,
24
+ addressBuffer,
25
+ addressBuffer.subarray(0, 4),
26
+ ]);
27
+ const cipher = createCipheriv("aes-128-ecb", key, "");
28
+ cipher.setAutoPadding(false);
29
+ let ct = cipher.update(buf).toString("hex");
30
+ ct += cipher.final().toString("hex");
31
+ const ctBuff = Buffer.from(ct, "hex");
32
+ let output = "";
33
+ for (let i = 0, length = data.length; i < length; i++) {
34
+ output += String.fromCharCode(data[i] ^ ctBuff[i % 16]);
35
+ }
36
+ return Buffer.from(output, "ascii");
37
+ };
38
+ export const isDimmable = (type) => {
39
+ const normalizedType = type.toLowerCase();
40
+ // Check if the model starts with any of the basic dimmer types
41
+ return PLEJD_LIGHTS.some((light) => normalizedType.includes(light.toLowerCase()) ||
42
+ normalizedType.includes("dim"));
43
+ };
44
+ export const isAddon = (type) => !!PLEJD_ADDONS.find((addon) => type.toLowerCase().includes(addon.toLowerCase()));
45
+ const xor = (first, second) => {
46
+ const result = Buffer.alloc(first.length);
47
+ for (let i = 0; i < first.length; i++) {
48
+ result[i] = first[i] ^ second[i];
49
+ }
50
+ return result;
51
+ };
13
52
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EACvB,SAA2B,EAC3B,SAAS,GAAG,IAAI,EACJ,EAAE;IACd,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,SAAS,EAAE;QACX,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,CACxE;KACF,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EACvB,SAA2B,EAC3B,SAAS,GAAG,IAAI,EACJ,EAAE;IACd,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,SAAS,EAAE;QACX,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,CACxE;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;IAC7D,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAE1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAW,EACX,aAAqB,EACrB,IAAY,EACJ,EAAE;IACV,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,aAAa;QACb,aAAa;QACb,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE7B,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;IACzC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,YAAY,CAAC,IAAI,CACtB,CAAC,KAAK,EAAE,EAAE,CACR,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC5C,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CACtC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CACjD,CAAC;AAEJ,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,MAAc,EAAU,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/jest.config.js CHANGED
@@ -2,19 +2,18 @@ export default {
2
2
  transform: { "^.+\\.ts?$": "ts-jest" },
3
3
  preset: "ts-jest",
4
4
  testEnvironment: "node",
5
- testPathIgnorePatterns: ["/node_modules/", ".next", "dist", "supabase"],
5
+ testPathIgnorePatterns: ["/node_modules/", "dist", "cache"],
6
6
  coverageDirectory: "./coverage",
7
7
  coveragePathIgnorePatterns: [
8
8
  "node_modules",
9
9
  "tests",
10
- "src/generated",
11
10
  "dist",
11
+ "cache",
12
12
  "**/*/**.spec*",
13
13
  ],
14
14
  rootDir: ".",
15
+ extensionsToTreatAsEsm: [".ts"],
15
16
  moduleNameMapper: {
16
- "^src/(.*)": "<rootDir>/src/$1",
17
- "^dto/(.*)": "<rootDir>/dto/$1",
18
- "^dto$": "<rootDir>/dto",
17
+ "^(\\.{1,2}/.*)\\.js$": "$1",
19
18
  },
20
19
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "displayName": "Plejd",
4
4
  "name": "homebridge-plejd",
5
5
  "author": "Herlix",
6
- "version": "1.6.2",
6
+ "version": "1.7.0-beta-1",
7
7
  "description": "HomeKit support for the Plejd BLE platform using Homebridge",
8
8
  "license": "Apache-2.0",
9
9
  "type": "module",
@@ -15,23 +15,23 @@
15
15
  "url": "https://github.com/Herlix/homebridge-plejd/issues"
16
16
  },
17
17
  "engines": {
18
- "node": ">=18.20.4",
18
+ "node": "^18 || ^20 || ^22 || ^24",
19
19
  "homebridge": "^1.8.0 || ^2.0.0-beta.0"
20
20
  },
21
21
  "main": "dist/index.js",
22
22
  "scripts": {
23
23
  "lint": "eslint src/**.ts --max-warnings=0",
24
- "watch": "npm run build && npm link && nodemon",
24
+ "dev": "npm run build && npm link && nodemon",
25
25
  "build": "rimraf ./dist && tsc",
26
26
  "prepublishOnly": "npm run lint && npm run build",
27
- "test": "jest ./**/*.spec.* --detectOpenHandles --forceExit --silent=false --runInBand"
27
+ "test": "jest ./**/*.spec.* --detectOpenHandles --forceExit --silent=false"
28
28
  },
29
29
  "keywords": [
30
30
  "homebridge-plugin",
31
31
  "plejd"
32
32
  ],
33
33
  "dependencies": {
34
- "@abandonware/noble": "^1.9.2-25"
34
+ "@abandonware/noble": "^1.9.2-26"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@eslint/js": "^9.9.0",
@@ -0,0 +1,125 @@
1
+ import { Logger } from "homebridge/lib/logger";
2
+ import { PlejdCommand, PlejdService } from "../src/plejdService";
3
+ import { PLEJD_WRITE_TIMEOUT } from "../src/constants";
4
+
5
+ describe("PlejdService updateState", () => {
6
+ let service: PlejdService;
7
+
8
+ beforeEach(() => {
9
+ service = new PlejdService(
10
+ {
11
+ devices: [],
12
+ cryptoKey: Buffer.from("FooBar", "utf8"),
13
+ },
14
+ Logger.withPrefix("PlejdServiceTests"),
15
+ () => {},
16
+ );
17
+ });
18
+
19
+ describe("Turn off scenarios", () => {
20
+ it.each([
21
+ ["isOn=false, brightness=undefined", false, undefined],
22
+ ["isOn=false, brightness=0", false, 0],
23
+ ["isOn=true, brightness=0", true, 0],
24
+ ["isOn=true, brightness=undefined", true, undefined],
25
+ ])("%s should queue a turn off command", async (_, isOn, brightness) => {
26
+ const deviceId = 42;
27
+ await service.updateState(deviceId, isOn, {
28
+ targetBrightness: brightness,
29
+ });
30
+
31
+ const queue = service.readQueue();
32
+ expect(queue.length).toBe(1);
33
+
34
+ const command = queue[0].toString("hex");
35
+ const expected =
36
+ deviceId.toString(16).padStart(2, "0") +
37
+ PlejdCommand.RequestNoResponse +
38
+ PlejdCommand.OnOffState +
39
+ "00";
40
+
41
+ expect(command).toBe(expected);
42
+ });
43
+ });
44
+
45
+ describe("Brightness transition scenarios", () => {
46
+ it("should return if no brightness change is made", async () => {
47
+ const deviceId = 42;
48
+ const brightness = 50; // 50% brightness
49
+ const transitionMS = 500;
50
+ await service.updateState(deviceId, true, {
51
+ currentBrightness: brightness,
52
+ targetBrightness: brightness,
53
+ transitionMS: transitionMS,
54
+ });
55
+ const queue = service.readQueue();
56
+ expect(queue.length).toBe(0);
57
+ });
58
+
59
+ it("should queue multiple brightness commands for a transition", async () => {
60
+ const deviceId = 42;
61
+ const brightness = 50; // 50% brightness
62
+ const transitionMS = 500;
63
+
64
+ await service.updateState(deviceId, true, {
65
+ targetBrightness: brightness,
66
+ transitionMS: transitionMS,
67
+ });
68
+
69
+ const queue = service.readQueue();
70
+
71
+ // Calculate expected number of steps
72
+ const expectedSteps = Math.round(transitionMS / PLEJD_WRITE_TIMEOUT);
73
+ expect(queue.length).toBe(expectedSteps);
74
+
75
+ // Check that all commands are brightness commands
76
+ queue.forEach((item) => {
77
+ const command = item.toString("hex");
78
+ expect(command.substring(2, 6)).toBe(PlejdCommand.RequestNoResponse);
79
+ expect(command.substring(6, 10)).toBe(PlejdCommand.Brightness);
80
+ expect(command.substring(10, 14)).toBe("0100"); // isOn = true
81
+ });
82
+
83
+ // Check that the brightness is distributed correctly
84
+ const newBrightness = Math.round(2.55 * brightness);
85
+ const brightnessStep = Math.round(newBrightness / expectedSteps);
86
+
87
+ queue.forEach((item) => {
88
+ const command = item.toString("hex");
89
+ const brightnessHex = command.substring(14, 18);
90
+ const brightnessValue = parseInt(brightnessHex, 16);
91
+ expect(brightnessValue).toBe(brightnessStep);
92
+ });
93
+ });
94
+
95
+ it("should handle a 1-second transition with default parameters", async () => {
96
+ const deviceId = 42;
97
+ const brightness = 100;
98
+
99
+ await service.updateState(deviceId, true, {
100
+ targetBrightness: brightness,
101
+ transitionMS: 1000,
102
+ });
103
+ const queue = service.readQueue();
104
+
105
+ // With default 1000ms and assuming PLEJD_WRITE_TIMEOUT = 100
106
+ const expectedSteps = 10;
107
+ expect(queue.length).toBe(expectedSteps);
108
+ });
109
+
110
+ it("should handle a 0-ms transition with default parameters", async () => {
111
+ const deviceId = 42;
112
+ const brightness = 100;
113
+
114
+ await service.updateState(deviceId, true, {
115
+ targetBrightness: brightness,
116
+ });
117
+
118
+ const queue = service.readQueue();
119
+
120
+ // With default 1000ms and assuming PLEJD_WRITE_TIMEOUT = 100
121
+ const expectedSteps = 1;
122
+ expect(queue.length).toBe(expectedSteps);
123
+ });
124
+ });
125
+ });