homebridge-plejd 1.6.2 → 1.7.0-beta

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,48 @@ 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
64
  * @param isOn: The new state of the device
59
- * @param brightness: The new brightness of the device between 0-100
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, isOn, opt) => {
70
+ if (isOn === false || !opt.targetBrightness || opt.targetBrightness === 0) {
71
+ const payload = identifier.toString(16).padStart(2, "0") +
64
72
  PlejdCommand.RequestNoResponse +
65
73
  PlejdCommand.OnOffState +
66
- (isOn ? "01" : "00")
67
- : identifier.toString(16).padStart(2, "0") +
74
+ "00";
75
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
76
+ return;
77
+ }
78
+ if (opt.targetBrightness === opt.currentBrightness) {
79
+ return;
80
+ }
81
+ // Plejd 8bit range 0-255, HomeKit uses 0-100
82
+ const brightnessDiff = Math.round(2.55 * (opt.targetBrightness - (opt.currentBrightness || 0)));
83
+ const trans = opt.transitionMS || DEFAULT_BRIGHTNESS_TRANSITION_MS;
84
+ const steps = trans > 0 ? Math.round(trans / PLEJD_WRITE_TIMEOUT) : 1;
85
+ const brightnessStep = Math.round(brightnessDiff / steps);
86
+ for (let x = 0; x < steps; x++) {
87
+ const payload = identifier.toString(16).padStart(2, "0") +
68
88
  PlejdCommand.RequestNoResponse +
69
89
  PlejdCommand.Brightness +
70
- "01" +
71
- Math.round(2.55 * brightness)
72
- .toString(16)
73
- .padStart(4, "0"), "hex");
74
- this.sendQueue.unshift(payload);
90
+ (isOn ? "01" : "00") +
91
+ brightnessStep.toString(16).padStart(4, "0");
92
+ this.sendQueue.unshift(Buffer.from(payload, "hex"));
93
+ }
75
94
  };
76
95
  configureBLE = () => {
77
96
  this.startBlacklistCleanup();
@@ -86,11 +105,11 @@ export class PlejdService {
86
105
  // -------------- Private -------------- \\
87
106
  onDiscover = async (peripheral) => {
88
107
  if (peripheral.rssi < -90) {
89
- this.log.debug(`Skipping device with weak signal: ${peripheral.address} (${peripheral.rssi} dB)`);
108
+ this.log.info(`Skipping device with weak signal: ${peripheral.address} (${peripheral.rssi} dB)`);
90
109
  return;
91
110
  }
92
111
  if (this.isDeviceBlacklisted(peripheral.address)) {
93
- this.log.debug(`Skipping blacklisted device: ${peripheral.address}`);
112
+ this.log.info(`Skipping blacklisted device: ${peripheral.address}`);
94
113
  return;
95
114
  }
96
115
  if (this.isConnecting) {
@@ -98,7 +117,7 @@ export class PlejdService {
98
117
  return;
99
118
  }
100
119
  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`);
120
+ this.log.info(`Stopping scan`);
102
121
  await noble.stopScanningAsync();
103
122
  let retryCount = 0;
104
123
  const maxRetries = 3;
@@ -116,7 +135,7 @@ export class PlejdService {
116
135
  this.cleanup();
117
136
  if (retryCount < maxRetries) {
118
137
  retryCount++;
119
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
138
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
120
139
  await connectWithRetry();
121
140
  }
122
141
  else {
@@ -143,7 +162,7 @@ export class PlejdService {
143
162
  await this.tryDisconnect(peripheral);
144
163
  if (retryCount < maxRetries) {
145
164
  retryCount++;
146
- this.log.debug(`Attempting to reconnect (attempt ${retryCount})`);
165
+ this.log.info(`Attempting to reconnect (attempt ${retryCount})`);
147
166
  await connectWithRetry();
148
167
  }
149
168
  else {
@@ -179,7 +198,7 @@ export class PlejdService {
179
198
  }
180
199
  }
181
200
  discoverCaracteristics = async (peripheral) => {
182
- this.log.debug("Discovering characteristics");
201
+ this.log.info("Discovering characteristics");
183
202
  const services = [PlejdCharacteristics.Service];
184
203
  const characteristicIds = [
185
204
  PlejdCharacteristics.Data,
@@ -188,11 +207,11 @@ export class PlejdService {
188
207
  PlejdCharacteristics.Ping,
189
208
  ];
190
209
  const { characteristics } = await peripheral.discoverSomeServicesAndCharacteristicsAsync(services, characteristicIds);
191
- this.log.debug("Characteristics discovered");
210
+ this.log.info("Characteristics discovered");
192
211
  return characteristics;
193
212
  };
194
213
  setupDevice = async (peripheral, characteristics) => {
195
- this.log.debug("Locating relevant characteristics");
214
+ this.log.info("Locating relevant characteristics");
196
215
  const authChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Auth);
197
216
  const lastDataChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.LastData);
198
217
  const pingChar = characteristics.find((char) => char.uuid === PlejdCharacteristics.Ping);
@@ -202,7 +221,7 @@ export class PlejdService {
202
221
  await this.tryDisconnect(peripheral);
203
222
  return;
204
223
  }
205
- const addressBuffer = reverseBuffer(Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex"));
224
+ const addressBuffer = Buffer.from(String(peripheral.address).replace(/:/g, ""), "hex").reverse();
206
225
  await this.authenticate(peripheral, authChar);
207
226
  await this.setupCommunication(peripheral, pingChar, lastDataChar, dataChar, addressBuffer);
208
227
  };
@@ -217,7 +236,7 @@ export class PlejdService {
217
236
  return;
218
237
  }
219
238
  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")}`);
239
+ this.log.info(`BLE command sent to ${addressBuffer?.toString("hex") ?? "Unknown"} | ${data.length} bytes | ${data.toString("hex")}`);
221
240
  let retryCount = 0;
222
241
  const maxRetries = 3;
223
242
  const tryWrite = async () => {
@@ -227,8 +246,8 @@ export class PlejdService {
227
246
  catch (error) {
228
247
  if (retryCount < maxRetries) {
229
248
  retryCount++;
230
- this.log.debug(`Retrying write (${retryCount}/${maxRetries})`);
231
- await delay(100);
249
+ this.log.info(`Retrying write (${retryCount}/${maxRetries})`);
250
+ await delay(PLEJD_WRITE_TIMEOUT);
232
251
  return tryWrite();
233
252
  }
234
253
  throw error;
@@ -291,7 +310,7 @@ export class PlejdService {
291
310
  this.log.debug("Handle BLE notification", d);
292
311
  switch (command) {
293
312
  case PlejdCommand.Time: {
294
- const arg = parseInt(reverseBuffer(decodedData.subarray(5, 9)).toString("hex"), 16);
313
+ const arg = parseInt(Buffer.from(decodedData.subarray(5, 9)).reverse().toString("hex"), 16);
295
314
  const date = new Date(arg * 1000);
296
315
  this.log.debug("Time sync: " + date.toString());
297
316
  break;
@@ -320,12 +339,12 @@ export class PlejdService {
320
339
  }
321
340
  };
322
341
  setupCommunication = async (peripheral, pingChar, lastDataChar, dataChar, addressBuffer) => {
323
- this.log.debug("Setting up ping pong communication with Plejd device");
342
+ this.log.info("Setting up ping pong communication with Plejd device");
324
343
  this.startPlejdPing(peripheral, pingChar);
325
344
  this.log.debug("Starting queue handler for messages to Plejd device");
326
345
  this.handleQueuedMessages(dataChar, addressBuffer);
327
346
  try {
328
- this.log.debug("Subscribing to incomming messages");
347
+ this.log.info("Subscribing to incomming messages");
329
348
  await race(() => lastDataChar.subscribeAsync());
330
349
  lastDataChar.on("data", async (data, isNotification) => {
331
350
  await this.handleNotification(data, isNotification, addressBuffer);
@@ -345,14 +364,14 @@ export class PlejdService {
345
364
  return;
346
365
  }
347
366
  try {
348
- this.log.debug("Authenticating to Plejd device");
367
+ this.log.info("Authenticating to Plejd device");
349
368
  await race(() => authChar.writeAsync(Buffer.from([0x00]), false));
350
369
  await delay(100);
351
370
  const data = await race(() => authChar.readAsync());
352
371
  await delay(100);
353
372
  await authChar.writeAsync(plejdCharResp(this.config.cryptoKey, data), false);
354
373
  await delay(100);
355
- this.log.debug("Authentication successful");
374
+ this.log.info("Authentication successful");
356
375
  this.isAuthenticated = true;
357
376
  }
358
377
  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":"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"}
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",
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
+ });