homebridge-cync-app 0.2.9 → 0.3.0

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.3.0
4
+
5
+ **Release Date:** 2026-05-18
6
+
7
+ ### Fixes
8
+
9
+ - Fixed widespread LAN control failures where accessories appeared responsive in HomeKit but did not physically turn on or off.
10
+ - Added resilient controller failover for Cync LAN commands.
11
+ - Learned and reused working controller routes per device to avoid repeatedly sending through failing controllers.
12
+ - Applied the routing fix across power, brightness, color temperature, and RGB color commands.
13
+
14
+ ### Notes
15
+
16
+ - This resolves issue #9.
17
+ - This release improves compatibility with older Cync accessories that no longer respond reliably through their originally reported controller route.
18
+
3
19
  ## v0.2.9 — Direct Connect Bulb Support
4
20
 
5
21
  **Release Date:** 2026-05-18
@@ -15,6 +15,7 @@ export type LanDeviceUpdateListener = (update: LanDeviceUpdate) => void;
15
15
  export declare class TcpClient {
16
16
  private transportMode;
17
17
  registerSwitchMapping(controllerId: number, deviceId: string): void;
18
+ private preferredControllerByDevice;
18
19
  private commandChain;
19
20
  private homeDevices;
20
21
  private switchIdToHomeId;
@@ -39,6 +40,7 @@ export declare class TcpClient {
39
40
  private deviceBrightnessEncoding;
40
41
  private readonly lanDeviceUpdateListeners;
41
42
  private observedNonTrivialLevel;
43
+ private pendingPowerCommands;
42
44
  onLanDeviceUpdate(listener: LanDeviceUpdateListener): void;
43
45
  private emitLanDeviceUpdate;
44
46
  private enqueueCommand;
@@ -58,6 +60,8 @@ export declare class TcpClient {
58
60
  private openTlsSocket;
59
61
  private openTcpSocket;
60
62
  private startHeartbeat;
63
+ private getControllerCandidates;
64
+ private sendWithControllerRetry;
61
65
  private nextSeq;
62
66
  private buildPowerPacket;
63
67
  private buildComboPacket;
@@ -79,16 +83,16 @@ export declare class TcpClient {
79
83
  ctMinMired?: number;
80
84
  ctMaxMired?: number;
81
85
  invertTone?: boolean;
82
- }, deviceType?: number): Promise<void>;
86
+ }, _deviceType?: number): Promise<void>;
83
87
  /**
84
88
  * Brightness Sender: Sends brightness-only combo_control without touching RGB mode
85
89
  */
86
- setBrightness(deviceId: string, brightnessPct: number, deviceType?: number): Promise<void>;
90
+ setBrightness(deviceId: string, brightnessPct: number, _deviceType?: number): Promise<void>;
87
91
  setColor(deviceId: string, rgb: {
88
92
  r: number;
89
93
  g: number;
90
94
  b: number;
91
- }, brightnessPct?: number, deviceType?: number): Promise<void>;
95
+ }, brightnessPct?: number, _deviceType?: number): Promise<void>;
92
96
  private findDevice;
93
97
  private attachSocketListeners;
94
98
  private processIncoming;
@@ -1,7 +1,6 @@
1
1
  // src/cync/tcp-client.ts
2
2
  import net from 'net';
3
3
  import tls from 'tls';
4
- import { miredToKelvin } from './cync-accessory-helpers.js';
5
4
  const defaultLogger = {
6
5
  debug: (...args) => console.debug('[cync-tcp]', ...args),
7
6
  info: (...args) => console.info('[cync-tcp]', ...args),
@@ -25,6 +24,11 @@ function scaleToByte(value, inMin, inMax, invert) {
25
24
  const u = invert ? (1 - t) : t;
26
25
  return clampNumber(Math.round(u * 255), 0, 255);
27
26
  }
27
+ // TCP Hex Formatter: Makes packet dumps easier to compare byte-by-byte
28
+ // Formats buffers as spaced hex so working and failing packets can be visually diffed.
29
+ function formatHex(buffer) {
30
+ return buffer.toString('hex').match(/.{1,2}/g)?.join(' ') ?? '';
31
+ }
28
32
  export class TcpClient {
29
33
  transportMode = null;
30
34
  registerSwitchMapping(controllerId, deviceId) {
@@ -33,6 +37,7 @@ export class TcpClient {
33
37
  }
34
38
  this.controllerToDevice.set(controllerId, deviceId);
35
39
  }
40
+ preferredControllerByDevice = new Map();
36
41
  commandChain = Promise.resolve();
37
42
  homeDevices = {};
38
43
  switchIdToHomeId = new Map();
@@ -57,6 +62,7 @@ export class TcpClient {
57
62
  deviceBrightnessEncoding = new Map();
58
63
  lanDeviceUpdateListeners = [];
59
64
  observedNonTrivialLevel = new Map();
65
+ pendingPowerCommands = new Map();
60
66
  onLanDeviceUpdate(listener) {
61
67
  this.lanDeviceUpdateListeners.push(listener);
62
68
  }
@@ -350,6 +356,64 @@ export class TcpClient {
350
356
  this.socket.write(Buffer.from('d300000000', 'hex'));
351
357
  }, 180_000);
352
358
  }
359
+ getControllerCandidates(deviceId, primaryControllerId) {
360
+ const preferred = this.preferredControllerByDevice.get(deviceId);
361
+ const homeId = this.switchIdToHomeId.get(primaryControllerId);
362
+ if (!homeId) {
363
+ return [primaryControllerId];
364
+ }
365
+ const controllers = [...this.switchIdToHomeId.entries()]
366
+ .filter(([, candidateHomeId]) => candidateHomeId === homeId)
367
+ .map(([controllerId]) => controllerId);
368
+ const ordered = [
369
+ preferred,
370
+ primaryControllerId,
371
+ ...controllers,
372
+ ].filter((controllerId) => controllerId !== undefined);
373
+ return [...new Set(ordered)];
374
+ }
375
+ // Reliable Controller Sender: Retries LAN packets through alternate controllers until state confirmation
376
+ // Centralizes controller failover so power, brightness, color temperature, and RGB commands use the same resilient routing.
377
+ async sendWithControllerRetry(deviceId, record, expectedOn, packetBuilder, logLabel) {
378
+ const controllerId = Number(record.switch_controller);
379
+ const meshIndex = Number(record.mesh_id);
380
+ if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
381
+ this.log.warn('[Cync TCP] %s: device %s missing LAN fields (switch_controller=%o mesh_id=%o)', logLabel, deviceId, record.switch_controller, record.mesh_id);
382
+ return;
383
+ }
384
+ const socket = this.socket;
385
+ if (!socket || socket.destroyed) {
386
+ this.log.warn('[Cync TCP] %s: socket disappeared before command send.', logLabel);
387
+ return;
388
+ }
389
+ const controllerCandidates = this.getControllerCandidates(deviceId, controllerId);
390
+ this.log.debug('[Cync TCP] %s controller candidates for device=%s primary=0x%s candidates=%s', logLabel, deviceId, controllerId.toString(16).padStart(8, '0'), controllerCandidates.map((candidate) => `0x${candidate.toString(16).padStart(8, '0')}`).join(', '));
391
+ for (const candidateControllerId of controllerCandidates) {
392
+ const seq = this.nextSeq();
393
+ const packet = packetBuilder(candidateControllerId, seq);
394
+ const rejected = await new Promise((resolve) => {
395
+ this.pendingPowerCommands.set(`${candidateControllerId}:${seq}`, {
396
+ deviceId,
397
+ on: expectedOn,
398
+ controllerId: candidateControllerId,
399
+ meshIndex,
400
+ seq,
401
+ sentAt: Date.now(),
402
+ packetHex: packet.toString('hex'),
403
+ resolve: (confirmed) => resolve(!confirmed),
404
+ });
405
+ socket.write(packet);
406
+ this.log.info('[Cync TCP] Sent %s packet: device=%s on=%s seq=%d controller=0x%s', logLabel, deviceId, String(expectedOn), seq, candidateControllerId.toString(16).padStart(8, '0'));
407
+ setTimeout(() => resolve(false), 300);
408
+ });
409
+ if (!rejected) {
410
+ this.preferredControllerByDevice.set(deviceId, candidateControllerId);
411
+ this.log.debug('[Cync TCP] %s command accepted/no immediate rejection: device=%s controller=0x%s', logLabel, deviceId, candidateControllerId.toString(16).padStart(8, '0'));
412
+ return;
413
+ }
414
+ }
415
+ this.log.warn('[Cync TCP] %s command not confirmed for device=%s on=%s after trying %d controller(s).', logLabel, deviceId, String(expectedOn), controllerCandidates.length);
416
+ }
353
417
  nextSeq() {
354
418
  if (this.seq === 65535) {
355
419
  this.seq = 1;
@@ -478,25 +542,20 @@ export class TcpClient {
478
542
  return;
479
543
  }
480
544
  const record = device;
481
- this.log.debug('[Cync TCP] setSwitchState: deviceId=%s device_type=%o switch_controller=%o mesh_id=%o home_id=%o', deviceId, record.device_type, record.switch_controller, record.mesh_id, record.home_id);
482
- const controllerId = Number(record.switch_controller);
483
545
  const meshIndex = Number(record.mesh_id);
484
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
485
- this.log.warn('[Cync TCP] Device %s is missing LAN fields (switch_controller=%o mesh_id=%o)', deviceId, record.switch_controller, record.mesh_id);
546
+ if (!Number.isFinite(meshIndex)) {
547
+ this.log.warn('[Cync TCP] Device %s is missing mesh_id=%o', deviceId, record.mesh_id);
486
548
  return;
487
549
  }
488
- const seq = this.nextSeq();
489
- const packet = this.buildPowerPacket(controllerId, meshIndex, params.on, seq);
490
- // At this point socket has been validated above
491
- this.socket.write(packet);
492
- this.log.info('[Cync TCP] Sent power packet: device=%s on=%s seq=%d', deviceId, String(params.on), seq);
550
+ await this.sendWithControllerRetry(deviceId, record, params.on, (candidateControllerId, seq) => this.buildPowerPacket(candidateControllerId, meshIndex, params.on, seq), 'power');
493
551
  });
494
552
  }
495
553
  /**
496
554
  * Color Temperature Sender: Drives tunable-white via the combo_control tone byte (HomeKit mired → 0–255)
497
555
  */
498
- async setColorTemperature(deviceId, params, deviceType) {
556
+ async setColorTemperature(deviceId, params, _deviceType) {
499
557
  return this.enqueueCommand(async () => {
558
+ void _deviceType;
500
559
  if (!this.config) {
501
560
  this.log.warn('[Cync TCP] setColorTemperature: no config available.');
502
561
  return;
@@ -512,9 +571,8 @@ export class TcpClient {
512
571
  return;
513
572
  }
514
573
  const record = device;
515
- const controllerId = Number(record.switch_controller);
516
574
  const meshIndex = Number(record.mesh_id);
517
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
575
+ if (!Number.isFinite(meshIndex)) {
518
576
  this.log.warn('[Cync TCP] setColorTemperature: device %s missing LAN fields (switch_controller=%o mesh_id=%o)', deviceId, record.switch_controller, record.mesh_id);
519
577
  return;
520
578
  }
@@ -532,19 +590,15 @@ export class TcpClient {
532
590
  // If it moves the wrong direction (warm↔cool), flip invertTone=true.
533
591
  const invertTone = params.invertTone === true;
534
592
  const tone = scaleToByte(mired, ctMinMired, ctMaxMired, invertTone);
535
- const kelvin = miredToKelvin(mired);
536
- const seq = this.nextSeq();
537
- // Keep RGB at pure white so we’re in "white mode" while tone carries CT.
538
- const packet = this.buildComboPacket(controllerId, meshIndex, on, level, tone, { r: 255, g: 255, b: 255 }, seq);
539
- this.socket.write(packet);
540
- this.log.info('[Cync TCP] Sent combo (CT) packet: device=%s type=%s on=%s mired=%d (~%dK) tone=%d invert=%s brightness=%d level=%d seq=%d', deviceId, String(deviceType), String(on), mired, kelvin, tone, String(invertTone), hkBrightness, level, seq);
593
+ await this.sendWithControllerRetry(deviceId, record, on, (candidateControllerId, seq) => this.buildComboPacket(candidateControllerId, meshIndex, on, level, tone, { r: 255, g: 255, b: 255 }, seq), 'combo CT');
541
594
  });
542
595
  }
543
596
  /**
544
597
  * Brightness Sender: Sends brightness-only combo_control without touching RGB mode
545
598
  */
546
- async setBrightness(deviceId, brightnessPct, deviceType) {
599
+ async setBrightness(deviceId, brightnessPct, _deviceType) {
547
600
  return this.enqueueCommand(async () => {
601
+ void _deviceType;
548
602
  if (!this.config) {
549
603
  this.log.warn('[Cync TCP] setBrightness: no config available.');
550
604
  return;
@@ -560,10 +614,8 @@ export class TcpClient {
560
614
  return;
561
615
  }
562
616
  const record = device;
563
- this.log.debug('[Cync TCP] setBrightness: using deviceType=%s', String(deviceType));
564
- const controllerId = Number(record.switch_controller);
565
617
  const meshIndex = Number(record.mesh_id);
566
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
618
+ if (!Number.isFinite(meshIndex)) {
567
619
  this.log.warn('[Cync TCP] setBrightness: device %s missing LAN fields (switch_controller=%o mesh_id=%o)', deviceId, record.switch_controller, record.mesh_id);
568
620
  return;
569
621
  }
@@ -574,15 +626,12 @@ export class TcpClient {
574
626
  }
575
627
  const on = clamped > 0;
576
628
  const level = hkBrightnessToPct100Byte(clamped);
577
- const seq = this.nextSeq();
578
- // Keep prior behavior: tone=254, RGB=white.
579
- const packet = this.buildComboPacket(controllerId, meshIndex, on, level, 254, { r: 255, g: 255, b: 255 }, seq);
580
- this.socket.write(packet);
581
- this.log.info('[Cync TCP] Sent combo (brightness) packet: device=%s type=%s on=%s brightnessPct=%d level=%d tone=%d rgb=(%d,%d,%d) seq=%d', deviceId, String(deviceType), String(on), clamped, level, 254, 255, 255, 255, seq);
629
+ await this.sendWithControllerRetry(deviceId, record, on, (candidateControllerId, seq) => this.buildComboPacket(candidateControllerId, meshIndex, on, level, 254, { r: 255, g: 255, b: 255 }, seq), 'combo brightness');
582
630
  });
583
631
  }
584
- async setColor(deviceId, rgb, brightnessPct, deviceType) {
632
+ async setColor(deviceId, rgb, brightnessPct, _deviceType) {
585
633
  return this.enqueueCommand(async () => {
634
+ void _deviceType;
586
635
  if (!this.config) {
587
636
  this.log.warn('[Cync TCP] setColor: no config available.');
588
637
  return;
@@ -599,9 +648,8 @@ export class TcpClient {
599
648
  }
600
649
  const record = device;
601
650
  this.log.debug('[Cync TCP] device type candidates: device_type=%o deviceType=%o device_type_id=%o deviceTypeId=%o', record.device_type, record.deviceType, record.device_type_id, record.deviceTypeId);
602
- const controllerId = Number(record.switch_controller);
603
651
  const meshIndex = Number(record.mesh_id);
604
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
652
+ if (!Number.isFinite(meshIndex)) {
605
653
  this.log.warn('[Cync TCP] setColor: device %s missing LAN fields (switch_controller=%o mesh_id=%o)', deviceId, record.switch_controller, record.mesh_id);
606
654
  return;
607
655
  }
@@ -611,10 +659,7 @@ export class TcpClient {
611
659
  const r = Math.max(0, Math.min(255, Math.round(rgb.r)));
612
660
  const g = Math.max(0, Math.min(255, Math.round(rgb.g)));
613
661
  const b = Math.max(0, Math.min(255, Math.round(rgb.b)));
614
- const seq = this.nextSeq();
615
- const packet = this.buildComboPacket(controllerId, meshIndex, on, level, 254, { r, g, b }, seq);
616
- this.socket.write(packet);
617
- this.log.info('[Cync TCP] Sent color combo packet: device=%s type=%s on=%s hkBrightness=%d level=%d rgb=(%d,%d,%d) seq=%d', deviceId, String(deviceType), String(on), hkBrightness, level, r, g, b, seq);
662
+ await this.sendWithControllerRetry(deviceId, record, on, (candidateControllerId, seq) => this.buildComboPacket(candidateControllerId, meshIndex, on, level, 254, { r, g, b }, seq), 'combo color');
618
663
  });
619
664
  }
620
665
  findDevice(deviceId) {
@@ -636,6 +681,7 @@ export class TcpClient {
636
681
  }
637
682
  attachSocketListeners(socket) {
638
683
  socket.on('data', (chunk) => {
684
+ this.log.debug('[Cync TCP] RX raw chunk bytes=%d hex=%s', chunk.byteLength, formatHex(chunk));
639
685
  this.log.debug('[Cync TCP] received %d bytes from server', chunk.byteLength);
640
686
  this.readBuffer = Buffer.concat([this.readBuffer, chunk]);
641
687
  this.processIncoming();
@@ -672,8 +718,24 @@ export class TcpClient {
672
718
  // Debug log with full hex dump so we can reverse-engineer the protocol
673
719
  this.log.debug('[Cync TCP] frame type=0x%s len=%d body=%s', type.toString(16).padStart(2, '0'), len, body.toString('hex'));
674
720
  if (type === 0x7b && body.length >= 6) {
721
+ const controllerId = body.readUInt32BE(0);
675
722
  const seq = body.readUInt16BE(4);
676
- this.log.debug('[Cync TCP] ACK for seq=%d', seq);
723
+ const pendingKey = `${controllerId}:${seq}`;
724
+ const pending = this.pendingPowerCommands.get(pendingKey);
725
+ const ageMs = pending ? Date.now() - pending.sentAt : undefined;
726
+ this.log.debug('[Cync TCP] ACK frame: controller=%d controllerHex=0x%s seq=%d device=%s on=%s ageMs=%s body=%s', controllerId, controllerId.toString(16).padStart(8, '0'), seq, pending?.deviceId ?? 'unknown', pending ? String(pending.on) : 'unknown', ageMs !== undefined ? String(ageMs) : 'unknown', formatHex(body));
727
+ }
728
+ else if (type === 0x78 && body.length >= 7) {
729
+ const controllerId = body.readUInt32BE(0);
730
+ const seq = body.readUInt16BE(4);
731
+ const status = body[6];
732
+ const pendingKey = `${controllerId}:${seq}`;
733
+ const pending = this.pendingPowerCommands.get(pendingKey);
734
+ const ageMs = pending ? Date.now() - pending.sentAt : undefined;
735
+ this.log.warn('[Cync TCP] Possible cmd rejection frame: controller=%d controllerHex=0x%s seq=%d status=0x%s device=%s on=%s ageMs=%s body=%s packet=%s', controllerId, controllerId.toString(16).padStart(8, '0'), seq, status.toString(16).padStart(2, '0'), pending?.deviceId ?? 'unknown', pending ? String(pending.on) : 'unknown', ageMs !== undefined ? String(ageMs) : 'unknown', formatHex(body), pending?.packetHex ?? 'unknown');
736
+ pending?.resolve?.(false);
737
+ this.pendingPowerCommands.delete(pendingKey);
738
+ this.handleIncomingFrame(body, type);
677
739
  }
678
740
  else {
679
741
  this.handleIncomingFrame(body, type);
@@ -725,6 +787,14 @@ export class TcpClient {
725
787
  brightnessPct,
726
788
  rgb,
727
789
  });
790
+ for (const [key, pending] of this.pendingPowerCommands.entries()) {
791
+ if (pending.deviceId === devId && pending.on === lanParsed.on) {
792
+ this.preferredControllerByDevice.set(devId, pending.controllerId);
793
+ pending.resolve?.(true);
794
+ this.pendingPowerCommands.delete(key);
795
+ this.log.info('[Cync TCP] Power command confirmed: device=%s on=%s controller=0x%s', devId, String(lanParsed.on), pending.controllerId.toString(16).padStart(8, '0'));
796
+ }
797
+ }
728
798
  }
729
799
  else if (type === 0x83) {
730
800
  // Fallback to legacy controller-level parsing only for 0x83
@@ -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.2.9",
5
+ "version": "0.3.0",
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",
@@ -3,7 +3,6 @@
3
3
  import { CyncCloudConfig, CyncLogger } from './config-client.js';
4
4
  import net from 'net';
5
5
  import tls from 'tls';
6
- import { miredToKelvin } from './cync-accessory-helpers.js';
7
6
 
8
7
  const defaultLogger: CyncLogger = {
9
8
  debug: (...args: unknown[]) => console.debug('[cync-tcp]', ...args),
@@ -38,6 +37,11 @@ function scaleToByte(value: number, inMin: number, inMax: number, invert: boolea
38
37
  const u = invert ? (1 - t) : t;
39
38
  return clampNumber(Math.round(u * 255), 0, 255);
40
39
  }
40
+ // TCP Hex Formatter: Makes packet dumps easier to compare byte-by-byte
41
+ // Formats buffers as spaced hex so working and failing packets can be visually diffed.
42
+ function formatHex(buffer: Buffer): string {
43
+ return buffer.toString('hex').match(/.{1,2}/g)?.join(' ') ?? '';
44
+ }
41
45
 
42
46
  export type LanDeviceUpdate = {
43
47
  deviceId: string;
@@ -57,6 +61,7 @@ export class TcpClient {
57
61
  }
58
62
  this.controllerToDevice.set(controllerId, deviceId);
59
63
  }
64
+ private preferredControllerByDevice = new Map<string, number>();
60
65
  private commandChain: Promise<void> = Promise.resolve();
61
66
  private homeDevices: Record<string, string[]> = {};
62
67
  private switchIdToHomeId = new Map<number, string>();
@@ -81,7 +86,16 @@ export class TcpClient {
81
86
  private deviceBrightnessEncoding = new Map<string, 'pct100' | 'lvl254'>();
82
87
  private readonly lanDeviceUpdateListeners: LanDeviceUpdateListener[] = [];
83
88
  private observedNonTrivialLevel = new Map<string, boolean>();
84
-
89
+ private pendingPowerCommands = new Map<string, {
90
+ deviceId: string;
91
+ on: boolean;
92
+ controllerId: number;
93
+ meshIndex: number;
94
+ seq: number;
95
+ sentAt: number;
96
+ packetHex: string;
97
+ resolve?: (confirmed: boolean) => void;
98
+ }>();
85
99
  public onLanDeviceUpdate(listener: LanDeviceUpdateListener): void {
86
100
  this.lanDeviceUpdateListeners.push(listener);
87
101
  }
@@ -476,6 +490,115 @@ export class TcpClient {
476
490
  }, 180_000);
477
491
  }
478
492
 
493
+ private getControllerCandidates(deviceId: string, primaryControllerId: number): number[] {
494
+ const preferred = this.preferredControllerByDevice.get(deviceId);
495
+ const homeId = this.switchIdToHomeId.get(primaryControllerId);
496
+ if (!homeId) {
497
+ return [primaryControllerId];
498
+ }
499
+
500
+ const controllers = [...this.switchIdToHomeId.entries()]
501
+ .filter(([, candidateHomeId]) => candidateHomeId === homeId)
502
+ .map(([controllerId]) => controllerId);
503
+
504
+ const ordered = [
505
+ preferred,
506
+ primaryControllerId,
507
+ ...controllers,
508
+ ].filter((controllerId): controllerId is number => controllerId !== undefined);
509
+
510
+ return [...new Set(ordered)];
511
+ }
512
+ // Reliable Controller Sender: Retries LAN packets through alternate controllers until state confirmation
513
+ // Centralizes controller failover so power, brightness, color temperature, and RGB commands use the same resilient routing.
514
+ private async sendWithControllerRetry(
515
+ deviceId: string,
516
+ record: Record<string, unknown>,
517
+ expectedOn: boolean,
518
+ packetBuilder: (controllerId: number, seq: number) => Buffer,
519
+ logLabel: string,
520
+ ): Promise<void> {
521
+ const controllerId = Number(record.switch_controller);
522
+ const meshIndex = Number(record.mesh_id);
523
+
524
+ if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
525
+ this.log.warn(
526
+ '[Cync TCP] %s: device %s missing LAN fields (switch_controller=%o mesh_id=%o)',
527
+ logLabel,
528
+ deviceId,
529
+ record.switch_controller,
530
+ record.mesh_id,
531
+ );
532
+ return;
533
+ }
534
+
535
+ const socket = this.socket;
536
+ if (!socket || socket.destroyed) {
537
+ this.log.warn('[Cync TCP] %s: socket disappeared before command send.', logLabel);
538
+ return;
539
+ }
540
+
541
+ const controllerCandidates = this.getControllerCandidates(deviceId, controllerId);
542
+
543
+ this.log.debug(
544
+ '[Cync TCP] %s controller candidates for device=%s primary=0x%s candidates=%s',
545
+ logLabel,
546
+ deviceId,
547
+ controllerId.toString(16).padStart(8, '0'),
548
+ controllerCandidates.map((candidate) => `0x${candidate.toString(16).padStart(8, '0')}`).join(', '),
549
+ );
550
+
551
+ for (const candidateControllerId of controllerCandidates) {
552
+ const seq = this.nextSeq();
553
+ const packet = packetBuilder(candidateControllerId, seq);
554
+
555
+ const rejected = await new Promise<boolean>((resolve) => {
556
+ this.pendingPowerCommands.set(`${candidateControllerId}:${seq}`, {
557
+ deviceId,
558
+ on: expectedOn,
559
+ controllerId: candidateControllerId,
560
+ meshIndex,
561
+ seq,
562
+ sentAt: Date.now(),
563
+ packetHex: packet.toString('hex'),
564
+ resolve: (confirmed) => resolve(!confirmed),
565
+ });
566
+
567
+ socket.write(packet);
568
+
569
+ this.log.info(
570
+ '[Cync TCP] Sent %s packet: device=%s on=%s seq=%d controller=0x%s',
571
+ logLabel,
572
+ deviceId,
573
+ String(expectedOn),
574
+ seq,
575
+ candidateControllerId.toString(16).padStart(8, '0'),
576
+ );
577
+
578
+ setTimeout(() => resolve(false), 300);
579
+ });
580
+
581
+ if (!rejected) {
582
+ this.preferredControllerByDevice.set(deviceId, candidateControllerId);
583
+
584
+ this.log.debug(
585
+ '[Cync TCP] %s command accepted/no immediate rejection: device=%s controller=0x%s',
586
+ logLabel,
587
+ deviceId,
588
+ candidateControllerId.toString(16).padStart(8, '0'),
589
+ );
590
+
591
+ return;
592
+ }
593
+ }
594
+ this.log.warn(
595
+ '[Cync TCP] %s command not confirmed for device=%s on=%s after trying %d controller(s).',
596
+ logLabel,
597
+ deviceId,
598
+ String(expectedOn),
599
+ controllerCandidates.length,
600
+ );
601
+ }
479
602
  private nextSeq(): number {
480
603
  if (this.seq === 65535) {
481
604
  this.seq = 1;
@@ -656,37 +779,28 @@ export class TcpClient {
656
779
  }
657
780
 
658
781
  const record = device as Record<string, unknown>;
659
- this.log.debug(
660
- '[Cync TCP] setSwitchState: deviceId=%s device_type=%o switch_controller=%o mesh_id=%o home_id=%o',
661
- deviceId,
662
- record.device_type,
663
- record.switch_controller,
664
- record.mesh_id,
665
- record.home_id,
666
- );
667
- const controllerId = Number(record.switch_controller);
668
782
  const meshIndex = Number(record.mesh_id);
669
783
 
670
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
784
+ if (!Number.isFinite(meshIndex)) {
671
785
  this.log.warn(
672
- '[Cync TCP] Device %s is missing LAN fields (switch_controller=%o mesh_id=%o)',
786
+ '[Cync TCP] Device %s is missing mesh_id=%o',
673
787
  deviceId,
674
- record.switch_controller,
675
788
  record.mesh_id,
676
789
  );
677
790
  return;
678
791
  }
679
792
 
680
- const seq = this.nextSeq();
681
- const packet = this.buildPowerPacket(controllerId, meshIndex, params.on, seq);
682
-
683
- // At this point socket has been validated above
684
- this.socket.write(packet);
685
- this.log.info(
686
- '[Cync TCP] Sent power packet: device=%s on=%s seq=%d',
793
+ await this.sendWithControllerRetry(
687
794
  deviceId,
688
- String(params.on),
689
- seq,
795
+ record,
796
+ params.on,
797
+ (candidateControllerId, seq) => this.buildPowerPacket(
798
+ candidateControllerId,
799
+ meshIndex,
800
+ params.on,
801
+ seq,
802
+ ),
803
+ 'power',
690
804
  );
691
805
  });
692
806
  }
@@ -697,9 +811,10 @@ export class TcpClient {
697
811
  public async setColorTemperature(
698
812
  deviceId: string,
699
813
  params: { mired: number; brightnessPct?: number; ctMinMired?: number; ctMaxMired?: number; invertTone?: boolean },
700
- deviceType?: number,
814
+ _deviceType?: number,
701
815
  ): Promise<void> {
702
816
  return this.enqueueCommand(async () => {
817
+ void _deviceType;
703
818
  if (!this.config) {
704
819
  this.log.warn('[Cync TCP] setColorTemperature: no config available.');
705
820
  return;
@@ -720,10 +835,9 @@ export class TcpClient {
720
835
  }
721
836
 
722
837
  const record = device as Record<string, unknown>;
723
- const controllerId = Number(record.switch_controller);
724
838
  const meshIndex = Number(record.mesh_id);
725
839
 
726
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
840
+ if (!Number.isFinite(meshIndex)) {
727
841
  this.log.warn(
728
842
  '[Cync TCP] setColorTemperature: device %s missing LAN fields (switch_controller=%o mesh_id=%o)',
729
843
  deviceId,
@@ -751,35 +865,20 @@ export class TcpClient {
751
865
  const invertTone = params.invertTone === true;
752
866
  const tone = scaleToByte(mired, ctMinMired, ctMaxMired, invertTone);
753
867
 
754
- const kelvin = miredToKelvin(mired);
755
-
756
- const seq = this.nextSeq();
757
-
758
- // Keep RGB at pure white so we’re in "white mode" while tone carries CT.
759
- const packet = this.buildComboPacket(
760
- controllerId,
761
- meshIndex,
762
- on,
763
- level,
764
- tone,
765
- { r: 255, g: 255, b: 255 },
766
- seq,
767
- );
768
-
769
- this.socket.write(packet);
770
-
771
- this.log.info(
772
- '[Cync TCP] Sent combo (CT) packet: device=%s type=%s on=%s mired=%d (~%dK) tone=%d invert=%s brightness=%d level=%d seq=%d',
868
+ await this.sendWithControllerRetry(
773
869
  deviceId,
774
- String(deviceType),
775
- String(on),
776
- mired,
777
- kelvin,
778
- tone,
779
- String(invertTone),
780
- hkBrightness,
781
- level,
782
- seq,
870
+ record,
871
+ on,
872
+ (candidateControllerId, seq) => this.buildComboPacket(
873
+ candidateControllerId,
874
+ meshIndex,
875
+ on,
876
+ level,
877
+ tone,
878
+ { r: 255, g: 255, b: 255 },
879
+ seq,
880
+ ),
881
+ 'combo CT',
783
882
  );
784
883
  });
785
884
  }
@@ -790,9 +889,10 @@ export class TcpClient {
790
889
  public async setBrightness(
791
890
  deviceId: string,
792
891
  brightnessPct: number,
793
- deviceType?: number,
892
+ _deviceType?: number,
794
893
  ): Promise<void> {
795
894
  return this.enqueueCommand(async () => {
895
+ void _deviceType;
796
896
  if (!this.config) {
797
897
  this.log.warn('[Cync TCP] setBrightness: no config available.');
798
898
  return;
@@ -813,11 +913,9 @@ export class TcpClient {
813
913
  }
814
914
 
815
915
  const record = device as Record<string, unknown>;
816
- this.log.debug('[Cync TCP] setBrightness: using deviceType=%s', String(deviceType));
817
- const controllerId = Number(record.switch_controller);
818
916
  const meshIndex = Number(record.mesh_id);
819
917
 
820
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
918
+ if (!Number.isFinite(meshIndex)) {
821
919
  this.log.warn(
822
920
  '[Cync TCP] setBrightness: device %s missing LAN fields (switch_controller=%o mesh_id=%o)',
823
921
  deviceId,
@@ -835,32 +933,20 @@ export class TcpClient {
835
933
 
836
934
  const on = clamped > 0;
837
935
  const level = hkBrightnessToPct100Byte(clamped);
838
- const seq = this.nextSeq();
839
-
840
- // Keep prior behavior: tone=254, RGB=white.
841
- const packet = this.buildComboPacket(
842
- controllerId,
843
- meshIndex,
844
- on,
845
- level,
846
- 254,
847
- { r: 255, g: 255, b: 255 },
848
- seq,
849
- );
850
-
851
- this.socket.write(packet);
852
- this.log.info(
853
- '[Cync TCP] Sent combo (brightness) packet: device=%s type=%s on=%s brightnessPct=%d level=%d tone=%d rgb=(%d,%d,%d) seq=%d',
936
+ await this.sendWithControllerRetry(
854
937
  deviceId,
855
- String(deviceType),
856
- String(on),
857
- clamped,
858
- level,
859
- 254,
860
- 255,
861
- 255,
862
- 255,
863
- seq,
938
+ record,
939
+ on,
940
+ (candidateControllerId, seq) => this.buildComboPacket(
941
+ candidateControllerId,
942
+ meshIndex,
943
+ on,
944
+ level,
945
+ 254,
946
+ { r: 255, g: 255, b: 255 },
947
+ seq,
948
+ ),
949
+ 'combo brightness',
864
950
  );
865
951
  });
866
952
  }
@@ -869,9 +955,10 @@ export class TcpClient {
869
955
  deviceId: string,
870
956
  rgb: { r: number; g: number; b: number },
871
957
  brightnessPct?: number,
872
- deviceType?: number,
958
+ _deviceType?: number,
873
959
  ): Promise<void> {
874
960
  return this.enqueueCommand(async () => {
961
+ void _deviceType;
875
962
  if (!this.config) {
876
963
  this.log.warn('[Cync TCP] setColor: no config available.');
877
964
  return;
@@ -899,10 +986,9 @@ export class TcpClient {
899
986
  record.device_type_id,
900
987
  record.deviceTypeId,
901
988
  );
902
- const controllerId = Number(record.switch_controller);
903
989
  const meshIndex = Number(record.mesh_id);
904
990
 
905
- if (!Number.isFinite(controllerId) || !Number.isFinite(meshIndex)) {
991
+ if (!Number.isFinite(meshIndex)) {
906
992
  this.log.warn(
907
993
  '[Cync TCP] setColor: device %s missing LAN fields (switch_controller=%o mesh_id=%o)',
908
994
  deviceId,
@@ -921,30 +1007,20 @@ export class TcpClient {
921
1007
  const g = Math.max(0, Math.min(255, Math.round(rgb.g)));
922
1008
  const b = Math.max(0, Math.min(255, Math.round(rgb.b)));
923
1009
 
924
- const seq = this.nextSeq();
925
-
926
- const packet = this.buildComboPacket(
927
- controllerId,
928
- meshIndex,
929
- on,
930
- level,
931
- 254,
932
- { r, g, b },
933
- seq,
934
- );
935
-
936
- this.socket.write(packet);
937
- this.log.info(
938
- '[Cync TCP] Sent color combo packet: device=%s type=%s on=%s hkBrightness=%d level=%d rgb=(%d,%d,%d) seq=%d',
1010
+ await this.sendWithControllerRetry(
939
1011
  deviceId,
940
- String(deviceType),
941
- String(on),
942
- hkBrightness,
943
- level,
944
- r,
945
- g,
946
- b,
947
- seq,
1012
+ record,
1013
+ on,
1014
+ (candidateControllerId, seq) => this.buildComboPacket(
1015
+ candidateControllerId,
1016
+ meshIndex,
1017
+ on,
1018
+ level,
1019
+ 254,
1020
+ { r, g, b },
1021
+ seq,
1022
+ ),
1023
+ 'combo color',
948
1024
  );
949
1025
  });
950
1026
  }
@@ -970,7 +1046,14 @@ export class TcpClient {
970
1046
 
971
1047
  private attachSocketListeners(socket: net.Socket): void {
972
1048
  socket.on('data', (chunk) => {
1049
+ this.log.debug(
1050
+ '[Cync TCP] RX raw chunk bytes=%d hex=%s',
1051
+ chunk.byteLength,
1052
+ formatHex(chunk),
1053
+ );
1054
+
973
1055
  this.log.debug('[Cync TCP] received %d bytes from server', chunk.byteLength);
1056
+
974
1057
  this.readBuffer = Buffer.concat([this.readBuffer, chunk]);
975
1058
  this.processIncoming();
976
1059
  });
@@ -1023,8 +1106,48 @@ export class TcpClient {
1023
1106
  );
1024
1107
 
1025
1108
  if (type === 0x7b && body.length >= 6) {
1109
+ const controllerId = body.readUInt32BE(0);
1026
1110
  const seq = body.readUInt16BE(4);
1027
- this.log.debug('[Cync TCP] ACK for seq=%d', seq);
1111
+ const pendingKey = `${controllerId}:${seq}`;
1112
+ const pending = this.pendingPowerCommands.get(pendingKey);
1113
+ const ageMs = pending ? Date.now() - pending.sentAt : undefined;
1114
+
1115
+ this.log.debug(
1116
+ '[Cync TCP] ACK frame: controller=%d controllerHex=0x%s seq=%d device=%s on=%s ageMs=%s body=%s',
1117
+ controllerId,
1118
+ controllerId.toString(16).padStart(8, '0'),
1119
+ seq,
1120
+ pending?.deviceId ?? 'unknown',
1121
+ pending ? String(pending.on) : 'unknown',
1122
+ ageMs !== undefined ? String(ageMs) : 'unknown',
1123
+ formatHex(body),
1124
+ );
1125
+
1126
+ } else if (type === 0x78 && body.length >= 7) {
1127
+ const controllerId = body.readUInt32BE(0);
1128
+ const seq = body.readUInt16BE(4);
1129
+ const status = body[6];
1130
+
1131
+ const pendingKey = `${controllerId}:${seq}`;
1132
+ const pending = this.pendingPowerCommands.get(pendingKey);
1133
+ const ageMs = pending ? Date.now() - pending.sentAt : undefined;
1134
+
1135
+ this.log.warn(
1136
+ '[Cync TCP] Possible cmd rejection frame: controller=%d controllerHex=0x%s seq=%d status=0x%s device=%s on=%s ageMs=%s body=%s packet=%s',
1137
+ controllerId,
1138
+ controllerId.toString(16).padStart(8, '0'),
1139
+ seq,
1140
+ status.toString(16).padStart(2, '0'),
1141
+ pending?.deviceId ?? 'unknown',
1142
+ pending ? String(pending.on) : 'unknown',
1143
+ ageMs !== undefined ? String(ageMs) : 'unknown',
1144
+ formatHex(body),
1145
+ pending?.packetHex ?? 'unknown',
1146
+ );
1147
+
1148
+ pending?.resolve?.(false);
1149
+ this.pendingPowerCommands.delete(pendingKey);
1150
+ this.handleIncomingFrame(body, type);
1028
1151
  } else {
1029
1152
  this.handleIncomingFrame(body, type);
1030
1153
  }
@@ -1103,6 +1226,20 @@ export class TcpClient {
1103
1226
  brightnessPct,
1104
1227
  rgb,
1105
1228
  });
1229
+ for (const [key, pending] of this.pendingPowerCommands.entries()) {
1230
+ if (pending.deviceId === devId && pending.on === lanParsed.on) {
1231
+ this.preferredControllerByDevice.set(devId, pending.controllerId);
1232
+ pending.resolve?.(true);
1233
+ this.pendingPowerCommands.delete(key);
1234
+
1235
+ this.log.info(
1236
+ '[Cync TCP] Power command confirmed: device=%s on=%s controller=0x%s',
1237
+ devId,
1238
+ String(lanParsed.on),
1239
+ pending.controllerId.toString(16).padStart(8, '0'),
1240
+ );
1241
+ }
1242
+ }
1106
1243
 
1107
1244
  } else if (type === 0x83) {
1108
1245
  // Fallback to legacy controller-level parsing only for 0x83