homebridge-cync-app 0.1.0 → 0.1.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.
- package/CHANGELOG.md +16 -0
- package/dist/cync/tcp-client.d.ts +8 -2
- package/dist/cync/tcp-client.js +64 -12
- package/dist/cync/tcp-client.js.map +1 -1
- package/package.json +6 -1
- package/src/cync/tcp-client.ts +88 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.2 – 2025-11-26
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
- Improve reliability when HomeKit scenes toggle multiple Cync plugs at once.
|
|
8
|
+
- Serialize LAN power commands through a send queue so multiple `On.set` calls share a single TCP session instead of opening parallel connections.
|
|
9
|
+
- Reuse an existing LAN socket for burst traffic and pace packets slightly to avoid race conditions with the Cync bridge.
|
|
10
|
+
- Ensure per-device LAN updates are consistently received for both outlets after scene execution.
|
|
11
|
+
|
|
12
|
+
### Internal
|
|
13
|
+
|
|
14
|
+
- Add a queued send path to `TcpClient` with a `flushQueue()` helper that writes packets in order over one socket.
|
|
15
|
+
- Guard `ensureConnected()` with a shared `connecting` promise so concurrent calls don’t race separate `establishSocket()` attempts.
|
|
16
|
+
- Make the socket `close` handler only null out `this.socket` when it corresponds to the active instance (avoids stray listeners from older sockets).
|
|
17
|
+
|
|
18
|
+
|
|
3
19
|
## 0.1.0 – LAN Control Preview
|
|
4
20
|
|
|
5
21
|
- Implemented TCP client for Cync LAN bridge using the cloud-provided login code.
|
|
@@ -19,6 +19,9 @@ export declare class TcpClient {
|
|
|
19
19
|
private heartbeatTimer;
|
|
20
20
|
private rawFrameListeners;
|
|
21
21
|
private controllerToDevice;
|
|
22
|
+
private connecting;
|
|
23
|
+
private readonly sendQueue;
|
|
24
|
+
private sending;
|
|
22
25
|
private parseSwitchStateFrame;
|
|
23
26
|
private parseLanSwitchUpdate;
|
|
24
27
|
constructor(logger?: CyncLogger);
|
|
@@ -36,7 +39,8 @@ export declare class TcpClient {
|
|
|
36
39
|
}): void;
|
|
37
40
|
/**
|
|
38
41
|
* Ensure we have an open, logged-in socket.
|
|
39
|
-
* If
|
|
42
|
+
* If multiple callers invoke this concurrently, they will share a single
|
|
43
|
+
* connection attempt via `this.connecting`.
|
|
40
44
|
*/
|
|
41
45
|
private ensureConnected;
|
|
42
46
|
/**
|
|
@@ -48,6 +52,7 @@ export declare class TcpClient {
|
|
|
48
52
|
private openTcpSocket;
|
|
49
53
|
private startHeartbeat;
|
|
50
54
|
private nextSeq;
|
|
55
|
+
private flushQueue;
|
|
51
56
|
private buildPowerPacket;
|
|
52
57
|
disconnect(): Promise<void>;
|
|
53
58
|
onDeviceUpdate(cb: DeviceUpdateCallback): void;
|
|
@@ -57,7 +62,8 @@ export declare class TcpClient {
|
|
|
57
62
|
onRawFrame(listener: RawFrameListener): void;
|
|
58
63
|
/**
|
|
59
64
|
* High-level API to change switch state.
|
|
60
|
-
*
|
|
65
|
+
* Now enqueues a power packet so multiple HomeKit scene writes are
|
|
66
|
+
* serialized over a single TCP session.
|
|
61
67
|
*/
|
|
62
68
|
setSwitchState(deviceId: string, params: {
|
|
63
69
|
on: boolean;
|
package/dist/cync/tcp-client.js
CHANGED
|
@@ -30,6 +30,9 @@ export class TcpClient {
|
|
|
30
30
|
heartbeatTimer = null;
|
|
31
31
|
rawFrameListeners = [];
|
|
32
32
|
controllerToDevice = new Map();
|
|
33
|
+
connecting = null;
|
|
34
|
+
sendQueue = [];
|
|
35
|
+
sending = false;
|
|
33
36
|
parseSwitchStateFrame(frame) {
|
|
34
37
|
if (frame.length < 16) {
|
|
35
38
|
return null;
|
|
@@ -120,7 +123,8 @@ export class TcpClient {
|
|
|
120
123
|
}
|
|
121
124
|
/**
|
|
122
125
|
* Ensure we have an open, logged-in socket.
|
|
123
|
-
* If
|
|
126
|
+
* If multiple callers invoke this concurrently, they will share a single
|
|
127
|
+
* connection attempt via `this.connecting`.
|
|
124
128
|
*/
|
|
125
129
|
async ensureConnected() {
|
|
126
130
|
if (this.socket && !this.socket.destroyed) {
|
|
@@ -130,8 +134,22 @@ export class TcpClient {
|
|
|
130
134
|
this.log.warn('[Cync TCP] ensureConnected() called without loginCode/config; cannot open socket.');
|
|
131
135
|
return false;
|
|
132
136
|
}
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
if (!this.connecting) {
|
|
138
|
+
this.connecting = (async () => {
|
|
139
|
+
await this.establishSocket();
|
|
140
|
+
const ok = !!(this.socket && !this.socket.destroyed);
|
|
141
|
+
if (!ok) {
|
|
142
|
+
this.log.warn('[Cync TCP] establishSocket() completed but socket is not usable.');
|
|
143
|
+
}
|
|
144
|
+
this.connecting = null;
|
|
145
|
+
return ok;
|
|
146
|
+
})().catch((err) => {
|
|
147
|
+
this.log.error('[Cync TCP] ensureConnected() connect attempt failed: %s', String(err));
|
|
148
|
+
this.connecting = null;
|
|
149
|
+
return false;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return this.connecting;
|
|
135
153
|
}
|
|
136
154
|
/**
|
|
137
155
|
* Open a new socket to cm.gelighting.com and send the loginCode,
|
|
@@ -218,6 +236,33 @@ export class TcpClient {
|
|
|
218
236
|
}
|
|
219
237
|
return this.seq;
|
|
220
238
|
}
|
|
239
|
+
async flushQueue() {
|
|
240
|
+
if (this.sending) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
this.sending = true;
|
|
244
|
+
try {
|
|
245
|
+
while (this.sendQueue.length > 0) {
|
|
246
|
+
const item = this.sendQueue.shift();
|
|
247
|
+
if (!item) {
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
const connected = await this.ensureConnected();
|
|
251
|
+
if (!connected || !this.socket || this.socket.destroyed) {
|
|
252
|
+
this.log.warn('[Cync TCP] Socket not available while flushing queue; dropping remaining %d packets.', this.sendQueue.length + 1);
|
|
253
|
+
this.sendQueue.length = 0;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
this.socket.write(item.packet);
|
|
257
|
+
this.log.info('[Cync TCP] Sent power packet: device=%s on=%s seq=%d', item.deviceId, String(item.on), item.seq);
|
|
258
|
+
// Small delay so we don't hammer the bridge/device with a burst
|
|
259
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
this.sending = false;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
221
266
|
buildPowerPacket(controllerId, meshId, on, seq) {
|
|
222
267
|
const header = Buffer.from('730000001f', 'hex');
|
|
223
268
|
const switchBytes = Buffer.alloc(4);
|
|
@@ -253,6 +298,9 @@ export class TcpClient {
|
|
|
253
298
|
this.socket.destroy();
|
|
254
299
|
this.socket = null;
|
|
255
300
|
}
|
|
301
|
+
this.sendQueue.length = 0;
|
|
302
|
+
this.sending = false;
|
|
303
|
+
this.connecting = null;
|
|
256
304
|
}
|
|
257
305
|
onDeviceUpdate(cb) {
|
|
258
306
|
this.log.info('[Cync TCP] device update subscriber registered.');
|
|
@@ -272,18 +320,14 @@ export class TcpClient {
|
|
|
272
320
|
}
|
|
273
321
|
/**
|
|
274
322
|
* High-level API to change switch state.
|
|
275
|
-
*
|
|
323
|
+
* Now enqueues a power packet so multiple HomeKit scene writes are
|
|
324
|
+
* serialized over a single TCP session.
|
|
276
325
|
*/
|
|
277
326
|
async setSwitchState(deviceId, params) {
|
|
278
327
|
if (!this.config) {
|
|
279
328
|
this.log.warn('[Cync TCP] No config available.');
|
|
280
329
|
return;
|
|
281
330
|
}
|
|
282
|
-
const connected = await this.ensureConnected();
|
|
283
|
-
if (!connected || !this.socket || this.socket.destroyed) {
|
|
284
|
-
this.log.warn('[Cync TCP] Cannot send, socket not ready even after reconnect attempt.');
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
331
|
const device = this.findDevice(deviceId);
|
|
288
332
|
if (!device) {
|
|
289
333
|
this.log.warn('[Cync TCP] Unknown deviceId=%s', deviceId);
|
|
@@ -297,8 +341,14 @@ export class TcpClient {
|
|
|
297
341
|
}
|
|
298
342
|
const seq = this.nextSeq();
|
|
299
343
|
const packet = this.buildPowerPacket(controllerId, meshIndex, params.on, seq);
|
|
300
|
-
this.
|
|
301
|
-
|
|
344
|
+
this.sendQueue.push({
|
|
345
|
+
deviceId,
|
|
346
|
+
on: params.on,
|
|
347
|
+
seq,
|
|
348
|
+
packet,
|
|
349
|
+
});
|
|
350
|
+
// Async fire-and-forget; actual sends are serialized in flushQueue()
|
|
351
|
+
void this.flushQueue();
|
|
302
352
|
}
|
|
303
353
|
findDevice(deviceId) {
|
|
304
354
|
for (const mesh of this.config?.meshes ?? []) {
|
|
@@ -325,7 +375,9 @@ export class TcpClient {
|
|
|
325
375
|
});
|
|
326
376
|
socket.on('close', () => {
|
|
327
377
|
this.log.warn('[Cync TCP] Socket closed.');
|
|
328
|
-
this.socket
|
|
378
|
+
if (this.socket === socket) {
|
|
379
|
+
this.socket = null;
|
|
380
|
+
}
|
|
329
381
|
});
|
|
330
382
|
socket.on('error', (err) => {
|
|
331
383
|
this.log.error('[Cync TCP] Socket error:', String(err));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp-client.js","sourceRoot":"","sources":["../../src/cync/tcp-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tcp-client.js","sourceRoot":"","sources":["../../src/cync/tcp-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "homebridge-cync-app",
|
|
3
3
|
"displayName": "Homebridge Cync App",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.2",
|
|
6
6
|
"private": false,
|
|
7
7
|
"description": "Homebridge plugin that integrates your GE Cync account (via the Cync app/API) and exposes all supported devices: plugs, lights, switches, etc",
|
|
8
8
|
"author": "Dustin Newell",
|
|
@@ -19,12 +19,17 @@
|
|
|
19
19
|
"homebridge-plugin",
|
|
20
20
|
"homebridge",
|
|
21
21
|
"cync",
|
|
22
|
+
"ge",
|
|
22
23
|
"ge cync",
|
|
24
|
+
"ge-lighting",
|
|
23
25
|
"smart plug",
|
|
24
26
|
"smart lights",
|
|
25
27
|
"C by GE"
|
|
26
28
|
],
|
|
27
29
|
"main": "dist/index.js",
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
28
33
|
"homebridge": {
|
|
29
34
|
"pluginType": "platform",
|
|
30
35
|
"platform": "CyncAppPlatform"
|
package/src/cync/tcp-client.ts
CHANGED
|
@@ -14,6 +14,13 @@ const defaultLogger: CyncLogger = {
|
|
|
14
14
|
export type DeviceUpdateCallback = (payload: unknown) => void;
|
|
15
15
|
export type RawFrameListener = (frame: Buffer) => void;
|
|
16
16
|
|
|
17
|
+
interface QueuedPowerPacket {
|
|
18
|
+
deviceId: string;
|
|
19
|
+
on: boolean;
|
|
20
|
+
seq: number;
|
|
21
|
+
packet: Buffer;
|
|
22
|
+
}
|
|
23
|
+
|
|
17
24
|
export class TcpClient {
|
|
18
25
|
public registerSwitchMapping(controllerId: number, deviceId: string): void {
|
|
19
26
|
if (!Number.isFinite(controllerId)) {
|
|
@@ -37,6 +44,9 @@ export class TcpClient {
|
|
|
37
44
|
private heartbeatTimer: NodeJS.Timeout | null = null;
|
|
38
45
|
private rawFrameListeners: RawFrameListener[] = [];
|
|
39
46
|
private controllerToDevice = new Map<number, string>();
|
|
47
|
+
private connecting: Promise<boolean> | null = null;
|
|
48
|
+
private readonly sendQueue: QueuedPowerPacket[] = [];
|
|
49
|
+
private sending = false;
|
|
40
50
|
private parseSwitchStateFrame(frame: Buffer): { controllerId: number; on: boolean; level: number } | null {
|
|
41
51
|
if (frame.length < 16) {
|
|
42
52
|
return null;
|
|
@@ -170,7 +180,8 @@ export class TcpClient {
|
|
|
170
180
|
|
|
171
181
|
/**
|
|
172
182
|
* Ensure we have an open, logged-in socket.
|
|
173
|
-
* If
|
|
183
|
+
* If multiple callers invoke this concurrently, they will share a single
|
|
184
|
+
* connection attempt via `this.connecting`.
|
|
174
185
|
*/
|
|
175
186
|
private async ensureConnected(): Promise<boolean> {
|
|
176
187
|
if (this.socket && !this.socket.destroyed) {
|
|
@@ -184,8 +195,28 @@ export class TcpClient {
|
|
|
184
195
|
return false;
|
|
185
196
|
}
|
|
186
197
|
|
|
187
|
-
|
|
188
|
-
|
|
198
|
+
if (!this.connecting) {
|
|
199
|
+
this.connecting = (async () => {
|
|
200
|
+
await this.establishSocket();
|
|
201
|
+
const ok = !!(this.socket && !this.socket.destroyed);
|
|
202
|
+
if (!ok) {
|
|
203
|
+
this.log.warn(
|
|
204
|
+
'[Cync TCP] establishSocket() completed but socket is not usable.',
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
this.connecting = null;
|
|
208
|
+
return ok;
|
|
209
|
+
})().catch((err) => {
|
|
210
|
+
this.log.error(
|
|
211
|
+
'[Cync TCP] ensureConnected() connect attempt failed: %s',
|
|
212
|
+
String(err),
|
|
213
|
+
);
|
|
214
|
+
this.connecting = null;
|
|
215
|
+
return false;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return this.connecting;
|
|
189
220
|
}
|
|
190
221
|
|
|
191
222
|
/**
|
|
@@ -294,6 +325,45 @@ export class TcpClient {
|
|
|
294
325
|
return this.seq;
|
|
295
326
|
}
|
|
296
327
|
|
|
328
|
+
private async flushQueue(): Promise<void> {
|
|
329
|
+
if (this.sending) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
this.sending = true;
|
|
333
|
+
|
|
334
|
+
try {
|
|
335
|
+
while (this.sendQueue.length > 0) {
|
|
336
|
+
const item = this.sendQueue.shift();
|
|
337
|
+
if (!item) {
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const connected = await this.ensureConnected();
|
|
342
|
+
if (!connected || !this.socket || this.socket.destroyed) {
|
|
343
|
+
this.log.warn(
|
|
344
|
+
'[Cync TCP] Socket not available while flushing queue; dropping remaining %d packets.',
|
|
345
|
+
this.sendQueue.length + 1,
|
|
346
|
+
);
|
|
347
|
+
this.sendQueue.length = 0;
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
this.socket.write(item.packet);
|
|
352
|
+
this.log.info(
|
|
353
|
+
'[Cync TCP] Sent power packet: device=%s on=%s seq=%d',
|
|
354
|
+
item.deviceId,
|
|
355
|
+
String(item.on),
|
|
356
|
+
item.seq,
|
|
357
|
+
);
|
|
358
|
+
|
|
359
|
+
// Small delay so we don't hammer the bridge/device with a burst
|
|
360
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
361
|
+
}
|
|
362
|
+
} finally {
|
|
363
|
+
this.sending = false;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
297
367
|
private buildPowerPacket(
|
|
298
368
|
controllerId: number,
|
|
299
369
|
meshId: number,
|
|
@@ -344,6 +414,9 @@ export class TcpClient {
|
|
|
344
414
|
this.socket.destroy();
|
|
345
415
|
this.socket = null;
|
|
346
416
|
}
|
|
417
|
+
this.sendQueue.length = 0;
|
|
418
|
+
this.sending = false;
|
|
419
|
+
this.connecting = null;
|
|
347
420
|
}
|
|
348
421
|
|
|
349
422
|
public onDeviceUpdate(cb: DeviceUpdateCallback): void {
|
|
@@ -369,7 +442,8 @@ export class TcpClient {
|
|
|
369
442
|
|
|
370
443
|
/**
|
|
371
444
|
* High-level API to change switch state.
|
|
372
|
-
*
|
|
445
|
+
* Now enqueues a power packet so multiple HomeKit scene writes are
|
|
446
|
+
* serialized over a single TCP session.
|
|
373
447
|
*/
|
|
374
448
|
public async setSwitchState(
|
|
375
449
|
deviceId: string,
|
|
@@ -380,14 +454,6 @@ export class TcpClient {
|
|
|
380
454
|
return;
|
|
381
455
|
}
|
|
382
456
|
|
|
383
|
-
const connected = await this.ensureConnected();
|
|
384
|
-
if (!connected || !this.socket || this.socket.destroyed) {
|
|
385
|
-
this.log.warn(
|
|
386
|
-
'[Cync TCP] Cannot send, socket not ready even after reconnect attempt.',
|
|
387
|
-
);
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
457
|
const device = this.findDevice(deviceId);
|
|
392
458
|
if (!device) {
|
|
393
459
|
this.log.warn('[Cync TCP] Unknown deviceId=%s', deviceId);
|
|
@@ -410,13 +476,15 @@ export class TcpClient {
|
|
|
410
476
|
const seq = this.nextSeq();
|
|
411
477
|
const packet = this.buildPowerPacket(controllerId, meshIndex, params.on, seq);
|
|
412
478
|
|
|
413
|
-
this.
|
|
414
|
-
this.log.info(
|
|
415
|
-
'[Cync TCP] Sent power packet: device=%s on=%s seq=%d',
|
|
479
|
+
this.sendQueue.push({
|
|
416
480
|
deviceId,
|
|
417
|
-
|
|
481
|
+
on: params.on,
|
|
418
482
|
seq,
|
|
419
|
-
|
|
483
|
+
packet,
|
|
484
|
+
});
|
|
485
|
+
|
|
486
|
+
// Async fire-and-forget; actual sends are serialized in flushQueue()
|
|
487
|
+
void this.flushQueue();
|
|
420
488
|
}
|
|
421
489
|
|
|
422
490
|
private findDevice(deviceId: string) {
|
|
@@ -447,7 +515,9 @@ export class TcpClient {
|
|
|
447
515
|
|
|
448
516
|
socket.on('close', () => {
|
|
449
517
|
this.log.warn('[Cync TCP] Socket closed.');
|
|
450
|
-
this.socket
|
|
518
|
+
if (this.socket === socket) {
|
|
519
|
+
this.socket = null;
|
|
520
|
+
}
|
|
451
521
|
});
|
|
452
522
|
|
|
453
523
|
socket.on('error', (err) => {
|