homebridge-cync-app 0.2.3 → 0.2.5

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,46 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.2.5
4
+
5
+ **Release Date:** 2026-03-06
6
+
7
+ ### Improvements
8
+ - Added support for Cync dimmer switches reported as device type `48`
9
+ - Routed device type `48` through the light accessory path so dimmer switches are exposed to HomeKit as lights instead of simple on/off switches
10
+ - Added catalog metadata for device type `48` so supported dimmer switches identify more cleanly in HomeKit
11
+
12
+ ### Notes
13
+ - This release adds support for dimming on Cync dimmer switches that report as device type `48`
14
+ - Existing accessories that were previously cached as switches may need to be removed and re-added in Home/Homebridge so they can be recreated with brightness support
15
+ - Related issue: #11
16
+
17
+ ## v0.2.4
18
+
19
+ **Release Date:** 2026-03-02
20
+
21
+ ### Fixes
22
+ - Corrected classification of Cync plug device types (64, 65, 172) to use HomeKit `Outlet` service instead of `Switch`
23
+ - Resolved issue where plugs displayed “Display As Light/Fan/Switch” in Home.app
24
+ - Fixed HomeKit control regression caused by service-type mismatch
25
+
26
+ ### Improvements
27
+ - Added dedicated `cync-outlet-accessory.ts` module
28
+ - Improved LAN update handling to support `Service.Outlet`
29
+ - Ensured proper context initialization and device mapping for Outlet accessories
30
+ - Mirrored `OutletInUse` characteristic for improved Home.app consistency
31
+
32
+ ## v0.2.3
33
+
34
+ **Release Date:** 2026-03-01
35
+
36
+ ### Improvements
37
+ - Added support for Cync deviceType `72` (Indoor 32ft Premium Light Strip)
38
+ - Updated device classification so deviceType `72` is configured as a Lightbulb accessory (instead of a Switch)
39
+
40
+ ### Notes
41
+ - After updating, restart Homebridge (or the Cync child bridge) so the accessory can be reconfigured.
42
+ - If the device was previously bridged as a Switch, it should automatically migrate to a Lightbulb on restart. If it does not, remove the accessory from Home and restart Homebridge.
43
+
3
44
  ## v0.2.1
4
45
 
5
46
  **Release Date:** 2026-01-09
@@ -0,0 +1,4 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import type { CyncDevice, CyncDeviceMesh } from './config-client.js';
3
+ import type { CyncAccessoryEnv } from './cync-accessory-helpers.js';
4
+ export declare function configureCyncOutletAccessory(env: CyncAccessoryEnv, mesh: CyncDeviceMesh, device: CyncDevice, accessory: PlatformAccessory, deviceName: string, deviceId: string): void;
@@ -0,0 +1,66 @@
1
+ // src/cync/cync-outlet-accessory.ts
2
+ import { applyAccessoryInformationFromCyncDevice, resolveDeviceType } from './cync-accessory-helpers.js';
3
+ export function configureCyncOutletAccessory(env, mesh, device, accessory, deviceName, deviceId) {
4
+ // Remove stale services if present (service-type changes must be cleaned up)
5
+ const existingSwitch = accessory.getService(env.api.hap.Service.Switch);
6
+ if (existingSwitch) {
7
+ env.log.info('Cync: removing stale Switch service from %s (deviceId=%s) before configuring as Outlet', deviceName, deviceId);
8
+ accessory.removeService(existingSwitch);
9
+ }
10
+ const existingLight = accessory.getService(env.api.hap.Service.Lightbulb);
11
+ if (existingLight) {
12
+ env.log.info('Cync: removing stale Lightbulb service from %s (deviceId=%s) before configuring as Outlet', deviceName, deviceId);
13
+ accessory.removeService(existingLight);
14
+ }
15
+ const service = accessory.getService(env.api.hap.Service.Outlet) ||
16
+ accessory.addService(env.api.hap.Service.Outlet, deviceName);
17
+ applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
18
+ // Ensure context is initialized
19
+ const ctx = accessory.context;
20
+ ctx.cync = ctx.cync ?? {
21
+ meshId: mesh.id,
22
+ deviceId,
23
+ productId: device.product_id,
24
+ on: false,
25
+ };
26
+ // Populate deviceType so platform-side default capabilities work as intended
27
+ ctx.cync.deviceType = resolveDeviceType(device);
28
+ // Remember mapping for LAN updates
29
+ env.registerAccessoryForDevice(deviceId, accessory);
30
+ env.markDeviceSeen(deviceId);
31
+ env.startPollingDevice(deviceId);
32
+ service
33
+ .getCharacteristic(env.api.hap.Characteristic.On)
34
+ .onGet(() => {
35
+ const currentOn = !!ctx.cync?.on;
36
+ if (env.isDeviceProbablyOffline(deviceId)) {
37
+ env.log.debug('Cync: Outlet On.get offline-heuristic hit; returning cached=%s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
38
+ return currentOn;
39
+ }
40
+ env.log.info('Cync: Outlet On.get -> %s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
41
+ return currentOn;
42
+ })
43
+ .onSet(async (value) => {
44
+ const cyncMeta = ctx.cync;
45
+ if (!cyncMeta?.deviceId) {
46
+ env.log.warn('Cync: Outlet On.set called for %s but no cync.deviceId in context', deviceName);
47
+ return;
48
+ }
49
+ const on = value === true || value === 1;
50
+ env.log.info('Cync: Outlet On.set -> %s for %s (deviceId=%s)', String(on), deviceName, cyncMeta.deviceId);
51
+ // Optimistic cache
52
+ cyncMeta.on = on;
53
+ try {
54
+ await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on });
55
+ env.markDeviceSeen(cyncMeta.deviceId);
56
+ if (service.testCharacteristic(env.api.hap.Characteristic.OutletInUse)) {
57
+ service.updateCharacteristic(env.api.hap.Characteristic.OutletInUse, on);
58
+ }
59
+ }
60
+ catch (err) {
61
+ env.log.warn('Cync: Outlet On.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
62
+ throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=cync-outlet-accessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cync-outlet-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-outlet-accessory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cync-switch-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-switch-accessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cync-switch-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-switch-accessory.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,18 @@ export const DEVICE_CATALOG = {
16
16
  supportsCt: true,
17
17
  },
18
18
  },
19
+ 48: {
20
+ deviceType: 48,
21
+ modelName: 'Cync Smart Dimmer Switch',
22
+ marketingName: 'Cync Smart Dimmer',
23
+ defaultCategory: 5 /* Categories.LIGHTBULB */,
24
+ defaultCapabilities: {
25
+ isLight: true,
26
+ supportsBrightness: true,
27
+ supportsColor: false,
28
+ supportsCt: false,
29
+ },
30
+ },
19
31
  64: {
20
32
  deviceType: 64,
21
33
  modelName: 'Indoor Smart Plug (CPLGSTDBLW1)',
@@ -1 +1 @@
1
- {"version":3,"file":"device-catalog.js","sourceRoot":"","sources":["../../src/cync/device-catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-catalog.js","sourceRoot":"","sources":["../../src/cync/device-catalog.ts"],"names":[],"mappings":"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"}
package/dist/platform.js CHANGED
@@ -5,6 +5,7 @@ import { TcpClient } from './cync/tcp-client.js';
5
5
  import { resolveDeviceType, rgbToHsv, } from './cync/cync-accessory-helpers.js';
6
6
  import { configureCyncLightAccessory } from './cync/cync-light-accessory.js';
7
7
  import { configureCyncSwitchAccessory } from './cync/cync-switch-accessory.js';
8
+ import { configureCyncOutletAccessory } from './cync/cync-outlet-accessory.js';
8
9
  const toCyncLogger = (log) => ({
9
10
  debug: log.debug.bind(log),
10
11
  info: log.info.bind(log),
@@ -12,7 +13,10 @@ const toCyncLogger = (log) => ({
12
13
  error: log.error.bind(log),
13
14
  });
14
15
  function isCyncLightDeviceType(deviceType) {
15
- return deviceType === 46 || deviceType === 72 || deviceType === 110 || deviceType === 123 || deviceType === 137 || deviceType === 171;
16
+ return deviceType === 46 || deviceType === 48 || deviceType === 72 || deviceType === 110 || deviceType === 123 || deviceType === 137 || deviceType === 171;
17
+ }
18
+ function isCyncOutletDeviceType(deviceType) {
19
+ return deviceType === 64 || deviceType === 65 || deviceType === 172;
16
20
  }
17
21
  function getDefaultCapabilitiesForDeviceType(deviceType) {
18
22
  const isLight = isCyncLightDeviceType(deviceType);
@@ -96,18 +100,16 @@ export class CyncAppPlatform {
96
100
  const Service = this.api.hap.Service;
97
101
  const Characteristic = this.api.hap.Characteristic;
98
102
  const lightService = accessory.getService(Service.Lightbulb);
103
+ const outletService = accessory.getService(Service.Outlet);
99
104
  const switchService = accessory.getService(Service.Switch);
100
- const primaryService = lightService || switchService;
105
+ const primaryService = lightService || outletService || switchService;
101
106
  if (!primaryService) {
102
- this.log.debug('Cync: accessory %s has no Lightbulb or Switch service for deviceId=%s', accessory.displayName, update.deviceId);
107
+ this.log.debug('Cync: accessory %s has no Lightbulb, Outlet, or Switch service for deviceId=%s', accessory.displayName, update.deviceId);
103
108
  return;
104
109
  }
105
110
  // Update cached context state
106
111
  const ctx = accessory.context;
107
- ctx.cync = ctx.cync ?? {
108
- meshId: '',
109
- deviceId: update.deviceId,
110
- };
112
+ ctx.cync = ctx.cync ?? { meshId: '', deviceId: update.deviceId };
111
113
  if (!ctx.cync.capabilities) {
112
114
  ctx.cync.capabilities = getDefaultCapabilitiesForDeviceType(ctx.cync.deviceType);
113
115
  }
@@ -120,6 +122,9 @@ export class CyncAppPlatform {
120
122
  ctx.cync.on = update.on;
121
123
  this.log.info('Cync: LAN update -> %s is now %s (deviceId=%s)', accessory.displayName, update.on ? 'ON' : 'OFF', update.deviceId);
122
124
  primaryService.updateCharacteristic(Characteristic.On, update.on);
125
+ if (outletService && outletService.testCharacteristic(Characteristic.OutletInUse)) {
126
+ outletService.updateCharacteristic(Characteristic.OutletInUse, update.on);
127
+ }
123
128
  }
124
129
  // ----- Brightness -----
125
130
  if (lightService) {
@@ -296,6 +301,10 @@ export class CyncAppPlatform {
296
301
  this.log.info('Cync: configuring %s as Lightbulb (deviceType=%s, deviceId=%s)', deviceName, deviceTypeStr, deviceId);
297
302
  configureCyncLightAccessory(this.accessoryEnv, mesh, device, accessory, deviceName, deviceId);
298
303
  }
304
+ else if (isCyncOutletDeviceType(deviceType)) {
305
+ this.log.info('Cync: configuring %s as Outlet (deviceType=%s, deviceId=%s)', deviceName, deviceTypeStr, deviceId);
306
+ configureCyncOutletAccessory(this.accessoryEnv, mesh, device, accessory, deviceName, deviceId);
307
+ }
299
308
  else {
300
309
  this.log.info('Cync: configuring %s as Switch (deviceType=%s, deviceId=%s)', deviceName, deviceTypeStr, deviceId);
301
310
  configureCyncSwitchAccessory(this.accessoryEnv, mesh, device, accessory, deviceName, deviceId);
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.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.3",
5
+ "version": "0.2.5",
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",
@@ -0,0 +1,127 @@
1
+ // src/cync/cync-outlet-accessory.ts
2
+
3
+ import type { PlatformAccessory } from 'homebridge';
4
+ import type { CyncDevice, CyncDeviceMesh } from './config-client.js';
5
+ import type { CyncAccessoryContext, CyncAccessoryEnv } from './cync-accessory-helpers.js';
6
+ import { applyAccessoryInformationFromCyncDevice, resolveDeviceType } from './cync-accessory-helpers.js';
7
+
8
+ export function configureCyncOutletAccessory(
9
+ env: CyncAccessoryEnv,
10
+ mesh: CyncDeviceMesh,
11
+ device: CyncDevice,
12
+ accessory: PlatformAccessory,
13
+ deviceName: string,
14
+ deviceId: string,
15
+ ): void {
16
+ // Remove stale services if present (service-type changes must be cleaned up)
17
+ const existingSwitch = accessory.getService(env.api.hap.Service.Switch);
18
+ if (existingSwitch) {
19
+ env.log.info(
20
+ 'Cync: removing stale Switch service from %s (deviceId=%s) before configuring as Outlet',
21
+ deviceName,
22
+ deviceId,
23
+ );
24
+ accessory.removeService(existingSwitch);
25
+ }
26
+
27
+ const existingLight = accessory.getService(env.api.hap.Service.Lightbulb);
28
+ if (existingLight) {
29
+ env.log.info(
30
+ 'Cync: removing stale Lightbulb service from %s (deviceId=%s) before configuring as Outlet',
31
+ deviceName,
32
+ deviceId,
33
+ );
34
+ accessory.removeService(existingLight);
35
+ }
36
+
37
+ const service =
38
+ accessory.getService(env.api.hap.Service.Outlet) ||
39
+ accessory.addService(env.api.hap.Service.Outlet, deviceName);
40
+
41
+ applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
42
+
43
+ // Ensure context is initialized
44
+ const ctx = accessory.context as CyncAccessoryContext;
45
+ ctx.cync = ctx.cync ?? {
46
+ meshId: mesh.id,
47
+ deviceId,
48
+ productId: device.product_id,
49
+ on: false,
50
+ };
51
+
52
+ // Populate deviceType so platform-side default capabilities work as intended
53
+ ctx.cync.deviceType = resolveDeviceType(device);
54
+
55
+ // Remember mapping for LAN updates
56
+ env.registerAccessoryForDevice(deviceId, accessory);
57
+ env.markDeviceSeen(deviceId);
58
+ env.startPollingDevice(deviceId);
59
+
60
+ service
61
+ .getCharacteristic(env.api.hap.Characteristic.On)
62
+ .onGet(() => {
63
+ const currentOn = !!ctx.cync?.on;
64
+
65
+ if (env.isDeviceProbablyOffline(deviceId)) {
66
+ env.log.debug(
67
+ 'Cync: Outlet On.get offline-heuristic hit; returning cached=%s for %s (deviceId=%s)',
68
+ String(currentOn),
69
+ deviceName,
70
+ deviceId,
71
+ );
72
+ return currentOn;
73
+ }
74
+
75
+ env.log.info(
76
+ 'Cync: Outlet On.get -> %s for %s (deviceId=%s)',
77
+ String(currentOn),
78
+ deviceName,
79
+ deviceId,
80
+ );
81
+
82
+ return currentOn;
83
+ })
84
+ .onSet(async (value) => {
85
+ const cyncMeta = ctx.cync;
86
+
87
+ if (!cyncMeta?.deviceId) {
88
+ env.log.warn(
89
+ 'Cync: Outlet On.set called for %s but no cync.deviceId in context',
90
+ deviceName,
91
+ );
92
+ return;
93
+ }
94
+
95
+ const on = value === true || value === 1;
96
+
97
+ env.log.info(
98
+ 'Cync: Outlet On.set -> %s for %s (deviceId=%s)',
99
+ String(on),
100
+ deviceName,
101
+ cyncMeta.deviceId,
102
+ );
103
+
104
+ // Optimistic cache
105
+ cyncMeta.on = on;
106
+
107
+ try {
108
+ await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on });
109
+ env.markDeviceSeen(cyncMeta.deviceId);
110
+
111
+ if (service.testCharacteristic(env.api.hap.Characteristic.OutletInUse)) {
112
+ service.updateCharacteristic(env.api.hap.Characteristic.OutletInUse, on);
113
+ }
114
+ } catch (err) {
115
+ env.log.warn(
116
+ 'Cync: Outlet On.set failed for %s (deviceId=%s): %s',
117
+ deviceName,
118
+ cyncMeta.deviceId,
119
+ (err as Error).message ?? String(err),
120
+ );
121
+
122
+ throw new env.api.hap.HapStatusError(
123
+ env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE,
124
+ );
125
+ }
126
+ });
127
+ }
@@ -13,8 +13,8 @@ export function configureCyncSwitchAccessory(
13
13
  deviceId: string,
14
14
  ): void {
15
15
  const service =
16
- accessory.getService(env.api.hap.Service.Switch) ||
17
- accessory.addService(env.api.hap.Service.Switch, deviceName);
16
+ accessory.getService(env.api.hap.Service.Switch) ||
17
+ accessory.addService(env.api.hap.Service.Switch, deviceName);
18
18
 
19
19
  const existingLight = accessory.getService(env.api.hap.Service.Lightbulb);
20
20
  if (existingLight) {
@@ -34,6 +34,18 @@ export const DEVICE_CATALOG: Record<number, CyncDeviceModel> = {
34
34
  supportsCt: true,
35
35
  },
36
36
  },
37
+ 48: {
38
+ deviceType: 48,
39
+ modelName: 'Cync Smart Dimmer Switch',
40
+ marketingName: 'Cync Smart Dimmer',
41
+ defaultCategory: Categories.LIGHTBULB,
42
+ defaultCapabilities: {
43
+ isLight: true,
44
+ supportsBrightness: true,
45
+ supportsColor: false,
46
+ supportsCt: false,
47
+ },
48
+ },
37
49
  64: {
38
50
  deviceType: 64,
39
51
  modelName: 'Indoor Smart Plug (CPLGSTDBLW1)',
package/src/platform.ts CHANGED
@@ -22,6 +22,7 @@ import {
22
22
  } from './cync/cync-accessory-helpers.js';
23
23
  import { configureCyncLightAccessory } from './cync/cync-light-accessory.js';
24
24
  import { configureCyncSwitchAccessory } from './cync/cync-switch-accessory.js';
25
+ import { configureCyncOutletAccessory } from './cync/cync-outlet-accessory.js';
25
26
 
26
27
  const toCyncLogger = (log: Logger): CyncLogger => ({
27
28
  debug: log.debug.bind(log),
@@ -31,7 +32,11 @@ const toCyncLogger = (log: Logger): CyncLogger => ({
31
32
  });
32
33
 
33
34
  function isCyncLightDeviceType(deviceType: number | undefined): boolean {
34
- return deviceType === 46 || deviceType === 72|| deviceType === 110|| deviceType === 123 || deviceType === 137 || deviceType === 171;
35
+ return deviceType === 46 || deviceType === 48 || deviceType === 72|| deviceType === 110|| deviceType === 123 || deviceType === 137 || deviceType === 171;
36
+ }
37
+
38
+ function isCyncOutletDeviceType(deviceType: number | undefined): boolean {
39
+ return deviceType === 64 || deviceType === 65 || deviceType === 172;
35
40
  }
36
41
 
37
42
  function getDefaultCapabilitiesForDeviceType(deviceType: number | undefined): CyncCapabilityProfile {
@@ -140,12 +145,13 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
140
145
  const Characteristic = this.api.hap.Characteristic;
141
146
 
142
147
  const lightService = accessory.getService(Service.Lightbulb);
148
+ const outletService = accessory.getService(Service.Outlet);
143
149
  const switchService = accessory.getService(Service.Switch);
144
- const primaryService = lightService || switchService;
150
+ const primaryService = lightService || outletService || switchService;
145
151
 
146
152
  if (!primaryService) {
147
153
  this.log.debug(
148
- 'Cync: accessory %s has no Lightbulb or Switch service for deviceId=%s',
154
+ 'Cync: accessory %s has no Lightbulb, Outlet, or Switch service for deviceId=%s',
149
155
  accessory.displayName,
150
156
  update.deviceId,
151
157
  );
@@ -154,10 +160,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
154
160
 
155
161
  // Update cached context state
156
162
  const ctx = accessory.context as CyncAccessoryContext;
157
- ctx.cync = ctx.cync ?? {
158
- meshId: '',
159
- deviceId: update.deviceId,
160
- };
163
+ ctx.cync = ctx.cync ?? { meshId: '', deviceId: update.deviceId };
161
164
  if (!ctx.cync.capabilities) {
162
165
  ctx.cync.capabilities = getDefaultCapabilitiesForDeviceType(ctx.cync.deviceType);
163
166
  }
@@ -183,6 +186,9 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
183
186
  );
184
187
 
185
188
  primaryService.updateCharacteristic(Characteristic.On, update.on);
189
+ if (outletService && outletService.testCharacteristic(Characteristic.OutletInUse)) {
190
+ outletService.updateCharacteristic(Characteristic.OutletInUse, update.on);
191
+ }
186
192
  }
187
193
 
188
194
  // ----- Brightness -----
@@ -299,7 +305,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
299
305
  markDeviceSeen: this.markDeviceSeen.bind(this),
300
306
  startPollingDevice: this.startPollingDevice.bind(this),
301
307
  registerAccessoryForDevice: (deviceId, accessory) => {
302
- this.deviceIdToAccessory.set(deviceId, accessory);
308
+ this.deviceIdToAccessory.set(deviceId, accessory);
303
309
  },
304
310
  };
305
311
  }
@@ -459,6 +465,21 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
459
465
  deviceName,
460
466
  deviceId,
461
467
  );
468
+ } else if (isCyncOutletDeviceType(deviceType)) {
469
+ this.log.info(
470
+ 'Cync: configuring %s as Outlet (deviceType=%s, deviceId=%s)',
471
+ deviceName,
472
+ deviceTypeStr,
473
+ deviceId,
474
+ );
475
+ configureCyncOutletAccessory(
476
+ this.accessoryEnv,
477
+ mesh,
478
+ device,
479
+ accessory,
480
+ deviceName,
481
+ deviceId,
482
+ );
462
483
  } else {
463
484
  this.log.info(
464
485
  'Cync: configuring %s as Switch (deviceType=%s, deviceId=%s)',