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 +41 -0
- package/dist/cync/cync-outlet-accessory.d.ts +4 -0
- package/dist/cync/cync-outlet-accessory.js +66 -0
- package/dist/cync/cync-outlet-accessory.js.map +1 -0
- package/dist/cync/cync-switch-accessory.js.map +1 -1
- package/dist/cync/device-catalog.js +12 -0
- package/dist/cync/device-catalog.js.map +1 -1
- package/dist/platform.js +16 -7
- package/dist/platform.js.map +1 -1
- package/package.json +1 -1
- package/src/cync/cync-outlet-accessory.ts +127 -0
- package/src/cync/cync-switch-accessory.ts +2 -2
- package/src/cync/device-catalog.ts +12 -0
- package/src/platform.ts +29 -8
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":"AAIA,OAAO,EAAE,uCAAuC,EAAE,MAAM,6BAA6B,CAAC;AAEtF,MAAM,UAAU,4BAA4B,CAC3C,GAAqB,EACrB,IAAoB,EACpB,MAAkB,EAClB,SAA4B,EAC5B,UAAkB,EAClB,QAAgB;IAEhB,MAAM,OAAO,
|
|
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);
|
package/dist/platform.js.map
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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)',
|