homebridge-cync-app 0.1.6 → 0.1.8
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/.github/ISSUE_TEMPLATE/add-support-for-a-new-cync-device.md +139 -0
- package/CHANGELOG.md +21 -0
- package/README.md +3 -1
- package/dist/cync/config-client.d.ts +23 -0
- package/dist/cync/config-client.js +133 -0
- package/dist/cync/config-client.js.map +1 -1
- package/dist/cync/cync-accessory-helpers.d.ts +46 -0
- package/dist/cync/cync-accessory-helpers.js +138 -0
- package/dist/cync/cync-accessory-helpers.js.map +1 -0
- package/dist/cync/cync-client.d.ts +5 -0
- package/dist/cync/cync-client.js +156 -2
- package/dist/cync/cync-client.js.map +1 -1
- package/dist/cync/cync-light-accessory.d.ts +4 -0
- package/dist/cync/cync-light-accessory.js +197 -0
- package/dist/cync/cync-light-accessory.js.map +1 -0
- package/dist/cync/cync-switch-accessory.d.ts +4 -0
- package/dist/cync/cync-switch-accessory.js +58 -0
- package/dist/cync/cync-switch-accessory.js.map +1 -0
- package/dist/cync/device-catalog.d.ts +19 -0
- package/dist/cync/device-catalog.js +35 -0
- package/dist/cync/device-catalog.js.map +1 -0
- package/dist/cync/token-store.js +2 -2
- package/dist/cync/token-store.js.map +1 -1
- package/dist/platform.d.ts +8 -3
- package/dist/platform.js +49 -320
- package/dist/platform.js.map +1 -1
- package/package.json +1 -1
- package/src/cync/config-client.ts +192 -0
- package/src/cync/cync-accessory-helpers.ts +233 -0
- package/src/cync/cync-client.ts +238 -2
- package/src/cync/cync-light-accessory.ts +359 -0
- package/src/cync/cync-switch-accessory.ts +100 -0
- package/src/cync/device-catalog.ts +55 -0
- package/src/cync/token-store.ts +3 -2
- package/src/platform.ts +87 -549
package/dist/cync/cync-client.js
CHANGED
|
@@ -27,6 +27,61 @@ export class CyncClient {
|
|
|
27
27
|
loginConfig;
|
|
28
28
|
// Optional LAN update hook for the platform
|
|
29
29
|
lanUpdateHandler = null;
|
|
30
|
+
// ### 🧩 Password Login Helper: background username/password login for new tokens
|
|
31
|
+
async loginWithPasswordForToken() {
|
|
32
|
+
const { username, password } = this.loginConfig;
|
|
33
|
+
if (!username || !password) {
|
|
34
|
+
this.log.error('CyncClient: cannot perform password login; username or password is missing from config.');
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
this.log.warn('CyncClient: performing background username/password login (no OTP) to obtain a fresh token…');
|
|
39
|
+
const session = await this.configClient.loginWithPassword(username.trim(), password);
|
|
40
|
+
const raw = session.raw;
|
|
41
|
+
const authorize = typeof raw.authorize === 'string' ? raw.authorize : undefined;
|
|
42
|
+
const s = session;
|
|
43
|
+
const access = s.accessToken ?? s.jwt;
|
|
44
|
+
if (!access) {
|
|
45
|
+
this.log.error('CyncClient: password login session did not return an access token.');
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const refresh = s.refreshToken ?? s.refreshJwt;
|
|
49
|
+
const expiresAt = s.expiresAt;
|
|
50
|
+
let lanLoginCode;
|
|
51
|
+
if (authorize) {
|
|
52
|
+
const userIdNum = Number.parseInt(session.userId, 10);
|
|
53
|
+
if (Number.isFinite(userIdNum) && userIdNum >= 0) {
|
|
54
|
+
const lanBlob = this.buildLanLoginCode(authorize, userIdNum);
|
|
55
|
+
lanLoginCode = Buffer.from(lanBlob).toString('base64');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.log.warn('CyncClient: password login returned non-numeric userId=%s; LAN login code not generated.', session.userId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.log.warn('CyncClient: password login response missing "authorize"; LAN login may be disabled.');
|
|
63
|
+
}
|
|
64
|
+
const next = {
|
|
65
|
+
userId: String(session.userId),
|
|
66
|
+
accessToken: access,
|
|
67
|
+
refreshToken: refresh,
|
|
68
|
+
expiresAt,
|
|
69
|
+
authorize,
|
|
70
|
+
lanLoginCode,
|
|
71
|
+
};
|
|
72
|
+
await this.tokenStore.save(next);
|
|
73
|
+
this.tokenData = next;
|
|
74
|
+
this.applyAccessToken(next);
|
|
75
|
+
this.log.info('CyncClient: obtained new token via password login; userId=%s expiresAt=%s', next.userId, next.expiresAt
|
|
76
|
+
? new Date(next.expiresAt).toISOString()
|
|
77
|
+
: 'unknown');
|
|
78
|
+
return next;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.log.error('CyncClient: password-based background login failed: %o', err);
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
30
85
|
// ### 🧩 LAN Update Bridge: allow platform to handle device updates
|
|
31
86
|
onLanDeviceUpdate(handler) {
|
|
32
87
|
this.lanUpdateHandler = handler;
|
|
@@ -216,6 +271,105 @@ export class CyncClient {
|
|
|
216
271
|
* // user reads email, gets code…
|
|
217
272
|
* await client.submitTwoFactor(username, password, code); // completes login
|
|
218
273
|
*/
|
|
274
|
+
// ### 🧩 Refresh Error Detector: identifies "Access-Token Expired" responses
|
|
275
|
+
isAccessTokenExpiredError(err) {
|
|
276
|
+
if (!err) {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
// Most common case: ConfigClient throws a plain Error('Access-Token Expired')
|
|
280
|
+
if (err instanceof Error) {
|
|
281
|
+
if (err.message === 'Access-Token Expired' ||
|
|
282
|
+
err.message.includes('Access-Token Expired')) {
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const e = err;
|
|
287
|
+
// Shape we see in raw HTTP JSON:
|
|
288
|
+
// { error: { msg: 'Access-Token Expired', code: 4031021 } }
|
|
289
|
+
if (e.error &&
|
|
290
|
+
(e.error.msg === 'Access-Token Expired' || e.error.code === 4031021)) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
// Fallback: generic 403 plus message text
|
|
294
|
+
if (e.status === 403 &&
|
|
295
|
+
e.message &&
|
|
296
|
+
e.message.includes('Access-Token Expired')) {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
// ### 🧩 Token Refresh Helper: exchanges refreshToken for a new accessToken, or falls back to password login
|
|
302
|
+
async refreshAccessToken(stored) {
|
|
303
|
+
// First, try refresh_token if we have one
|
|
304
|
+
if (stored.refreshToken) {
|
|
305
|
+
try {
|
|
306
|
+
const resp = await this.configClient.refreshAccessToken(stored.refreshToken);
|
|
307
|
+
const next = {
|
|
308
|
+
...stored,
|
|
309
|
+
accessToken: resp.accessToken,
|
|
310
|
+
refreshToken: resp.refreshToken ?? stored.refreshToken,
|
|
311
|
+
expiresAt: resp.expiresAt ?? stored.expiresAt,
|
|
312
|
+
};
|
|
313
|
+
await this.tokenStore.save(next);
|
|
314
|
+
this.tokenData = next;
|
|
315
|
+
this.applyAccessToken(next);
|
|
316
|
+
this.log.info('CyncClient: refreshed access token for userId=%s; expiresAt=%s', next.userId, next.expiresAt
|
|
317
|
+
? new Date(next.expiresAt).toISOString()
|
|
318
|
+
: 'unknown');
|
|
319
|
+
return next;
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
this.log.error('CyncClient: token refresh failed: %o', err);
|
|
323
|
+
// fall through to password-based login below
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
this.log.warn('CyncClient: refreshAccessToken() called but no refreshToken is stored; will attempt password-based login.');
|
|
328
|
+
}
|
|
329
|
+
// If we get here, either we had no refreshToken or refresh failed.
|
|
330
|
+
// Attempt a background username/password login to obtain a fresh token.
|
|
331
|
+
const viaPassword = await this.loginWithPasswordForToken();
|
|
332
|
+
if (!viaPassword) {
|
|
333
|
+
this.log.error('CyncClient: password-based background login failed; cannot refresh Cync token automatically.');
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
return viaPassword;
|
|
337
|
+
}
|
|
338
|
+
// ### 🧩 Cloud Config Wrapper: auto-refreshes access token
|
|
339
|
+
async getCloudConfigWithRefresh() {
|
|
340
|
+
try {
|
|
341
|
+
return await this.configClient.getCloudConfig();
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
if (this.isAccessTokenExpiredError(err) && this.tokenData) {
|
|
345
|
+
this.log.warn('CyncClient: access token expired when calling getCloudConfig(); refreshing and retrying once.');
|
|
346
|
+
const refreshed = await this.refreshAccessToken(this.tokenData);
|
|
347
|
+
if (refreshed) {
|
|
348
|
+
return await this.configClient.getCloudConfig();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
throw err;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// ### 🧩 Device Properties Wrapper: auto-refresh on Access-Token Expired for mesh calls
|
|
355
|
+
async getDevicePropertiesWithRefresh(productId, meshId) {
|
|
356
|
+
// Normalise to strings for ConfigClient
|
|
357
|
+
const productIdStr = String(productId);
|
|
358
|
+
const meshIdStr = String(meshId);
|
|
359
|
+
try {
|
|
360
|
+
return await this.configClient.getDeviceProperties(productIdStr, meshIdStr);
|
|
361
|
+
}
|
|
362
|
+
catch (err) {
|
|
363
|
+
if (this.isAccessTokenExpiredError(err) && this.tokenData) {
|
|
364
|
+
this.log.warn('CyncClient: access token expired when calling getDeviceProperties(); refreshing and retrying once.');
|
|
365
|
+
const refreshed = await this.refreshAccessToken(this.tokenData);
|
|
366
|
+
if (refreshed) {
|
|
367
|
+
return await this.configClient.getDeviceProperties(productIdStr, meshIdStr);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
throw err;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
219
373
|
async authenticate(username) {
|
|
220
374
|
const email = username.trim();
|
|
221
375
|
this.log.info('CyncClient: requesting 2FA code for %s', email);
|
|
@@ -249,7 +403,7 @@ export class CyncClient {
|
|
|
249
403
|
async loadConfiguration() {
|
|
250
404
|
this.ensureSession();
|
|
251
405
|
this.log.info('CyncClient: loading Cync cloud configuration…');
|
|
252
|
-
const cfg = await this.
|
|
406
|
+
const cfg = await this.getCloudConfigWithRefresh();
|
|
253
407
|
// Reset LAN topology caches on each reload
|
|
254
408
|
this.homeDevices = {};
|
|
255
409
|
this.homeControllers = {};
|
|
@@ -263,7 +417,7 @@ export class CyncClient {
|
|
|
263
417
|
const homeDevices = [];
|
|
264
418
|
const homeControllers = [];
|
|
265
419
|
try {
|
|
266
|
-
const props = await this.
|
|
420
|
+
const props = await this.getDevicePropertiesWithRefresh(mesh.product_id, mesh.id);
|
|
267
421
|
this.log.debug('CyncClient: mesh %s properties keys=%o', meshName, Object.keys(props));
|
|
268
422
|
const bulbsArray = props.bulbsArray;
|
|
269
423
|
if (Array.isArray(bulbsArray)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cync-client.js","sourceRoot":"","sources":["../../src/cync/cync-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cync-client.js","sourceRoot":"","sources":["../../src/cync/cync-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 configureCyncLightAccessory(env: CyncAccessoryEnv, mesh: CyncDeviceMesh, device: CyncDevice, accessory: PlatformAccessory, deviceName: string, deviceId: string): void;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { applyAccessoryInformationFromCyncDevice, hsvToRgb } from './cync-accessory-helpers.js';
|
|
2
|
+
export function configureCyncLightAccessory(env, mesh, device, accessory, deviceName, deviceId) {
|
|
3
|
+
// If this accessory used to be a switch, remove that service
|
|
4
|
+
const existingSwitch = accessory.getService(env.api.hap.Service.Switch);
|
|
5
|
+
if (existingSwitch) {
|
|
6
|
+
env.log.info('Cync: removing stale Switch service from %s (deviceId=%s) before configuring as Lightbulb', deviceName, deviceId);
|
|
7
|
+
accessory.removeService(existingSwitch);
|
|
8
|
+
}
|
|
9
|
+
const service = accessory.getService(env.api.hap.Service.Lightbulb) ||
|
|
10
|
+
accessory.addService(env.api.hap.Service.Lightbulb, deviceName);
|
|
11
|
+
// Optionally update accessory category so UIs treat it as a light
|
|
12
|
+
if (accessory.category !== 5 /* env.api.hap.Categories.LIGHTBULB */) {
|
|
13
|
+
accessory.category = 5 /* env.api.hap.Categories.LIGHTBULB */;
|
|
14
|
+
}
|
|
15
|
+
// Populate Accessory Information from Cync metadata
|
|
16
|
+
applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
|
|
17
|
+
// Ensure context is initialized
|
|
18
|
+
const ctx = accessory.context;
|
|
19
|
+
ctx.cync = ctx.cync ?? {
|
|
20
|
+
meshId: mesh.id,
|
|
21
|
+
deviceId,
|
|
22
|
+
productId: device.product_id,
|
|
23
|
+
on: false,
|
|
24
|
+
};
|
|
25
|
+
// Remember mapping for LAN updates
|
|
26
|
+
env.registerAccessoryForDevice(deviceId, accessory);
|
|
27
|
+
env.markDeviceSeen(deviceId);
|
|
28
|
+
env.startPollingDevice(deviceId);
|
|
29
|
+
const Characteristic = env.api.hap.Characteristic;
|
|
30
|
+
// ----- On/Off -----
|
|
31
|
+
service
|
|
32
|
+
.getCharacteristic(Characteristic.On)
|
|
33
|
+
.onGet(() => {
|
|
34
|
+
if (env.isDeviceProbablyOffline(deviceId)) {
|
|
35
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
36
|
+
}
|
|
37
|
+
const currentOn = !!ctx.cync?.on;
|
|
38
|
+
env.log.info('Cync: Light On.get -> %s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
|
|
39
|
+
return currentOn;
|
|
40
|
+
})
|
|
41
|
+
.onSet(async (value) => {
|
|
42
|
+
const cyncMeta = ctx.cync;
|
|
43
|
+
if (!cyncMeta?.deviceId) {
|
|
44
|
+
env.log.warn('Cync: Light On.set called for %s but no cync.deviceId in context', deviceName);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const on = value === true || value === 1;
|
|
48
|
+
env.log.info('Cync: Light On.set -> %s for %s (deviceId=%s)', String(on), deviceName, cyncMeta.deviceId);
|
|
49
|
+
// Optimistic local cache; LAN update will confirm
|
|
50
|
+
cyncMeta.on = on;
|
|
51
|
+
try {
|
|
52
|
+
await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on });
|
|
53
|
+
env.markDeviceSeen(cyncMeta.deviceId);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
env.log.warn('Cync: Light On.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
|
|
57
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
// ----- Brightness (dimming via LAN combo_control) -----
|
|
61
|
+
service
|
|
62
|
+
.getCharacteristic(Characteristic.Brightness)
|
|
63
|
+
.onGet(() => {
|
|
64
|
+
if (env.isDeviceProbablyOffline(deviceId)) {
|
|
65
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
66
|
+
}
|
|
67
|
+
const current = ctx.cync?.brightness;
|
|
68
|
+
// If we have a cached LAN level, use it; otherwise infer from On.
|
|
69
|
+
if (typeof current === 'number') {
|
|
70
|
+
return current;
|
|
71
|
+
}
|
|
72
|
+
const on = ctx.cync?.on ?? false;
|
|
73
|
+
return on ? 100 : 0;
|
|
74
|
+
})
|
|
75
|
+
.onSet(async (value) => {
|
|
76
|
+
const cyncMeta = ctx.cync;
|
|
77
|
+
if (!cyncMeta?.deviceId) {
|
|
78
|
+
env.log.warn('Cync: Light Brightness.set called for %s but no cync.deviceId in context', deviceName);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const brightness = Math.max(0, Math.min(100, Number(value)));
|
|
82
|
+
if (!Number.isFinite(brightness)) {
|
|
83
|
+
env.log.warn('Cync: Light Brightness.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Optimistic cache
|
|
87
|
+
cyncMeta.brightness = brightness;
|
|
88
|
+
cyncMeta.on = brightness > 0;
|
|
89
|
+
env.log.info('Cync: Light Brightness.set -> %d for %s (deviceId=%s)', brightness, deviceName, cyncMeta.deviceId);
|
|
90
|
+
try {
|
|
91
|
+
// If we're in "color mode", keep the existing RGB and scale brightness via setColor();
|
|
92
|
+
// otherwise treat this as a white-brightness change.
|
|
93
|
+
if (cyncMeta.colorActive && cyncMeta.rgb) {
|
|
94
|
+
await env.tcpClient.setColor(cyncMeta.deviceId, cyncMeta.rgb, brightness);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
await env.tcpClient.setBrightness(cyncMeta.deviceId, brightness);
|
|
98
|
+
}
|
|
99
|
+
env.markDeviceSeen(cyncMeta.deviceId);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
env.log.warn('Cync: Light Brightness.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
|
|
103
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
// ----- Hue -----
|
|
107
|
+
service
|
|
108
|
+
.getCharacteristic(Characteristic.Hue)
|
|
109
|
+
.onGet(() => {
|
|
110
|
+
if (env.isDeviceProbablyOffline(deviceId)) {
|
|
111
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
112
|
+
}
|
|
113
|
+
const hue = ctx.cync?.hue;
|
|
114
|
+
if (typeof hue === 'number') {
|
|
115
|
+
return hue;
|
|
116
|
+
}
|
|
117
|
+
// Default to 0° (red) if we have no color history
|
|
118
|
+
return 0;
|
|
119
|
+
})
|
|
120
|
+
.onSet(async (value) => {
|
|
121
|
+
const cyncMeta = ctx.cync;
|
|
122
|
+
if (!cyncMeta?.deviceId) {
|
|
123
|
+
env.log.warn('Cync: Light Hue.set called for %s but no cync.deviceId in context', deviceName);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const hue = Math.max(0, Math.min(360, Number(value)));
|
|
127
|
+
if (!Number.isFinite(hue)) {
|
|
128
|
+
env.log.warn('Cync: Light Hue.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// Use cached saturation/brightness if available, otherwise sane defaults
|
|
132
|
+
const saturation = typeof cyncMeta.saturation === 'number' ? cyncMeta.saturation : 100;
|
|
133
|
+
const brightness = typeof cyncMeta.brightness === 'number' ? cyncMeta.brightness : 100;
|
|
134
|
+
const rgb = hsvToRgb(hue, saturation, brightness);
|
|
135
|
+
// Optimistic cache
|
|
136
|
+
cyncMeta.hue = hue;
|
|
137
|
+
cyncMeta.saturation = saturation;
|
|
138
|
+
cyncMeta.rgb = rgb;
|
|
139
|
+
cyncMeta.colorActive = true;
|
|
140
|
+
cyncMeta.on = brightness > 0;
|
|
141
|
+
cyncMeta.brightness = brightness;
|
|
142
|
+
env.log.info('Cync: Light Hue.set -> %d for %s (deviceId=%s) -> rgb=(%d,%d,%d) brightness=%d', hue, deviceName, cyncMeta.deviceId, rgb.r, rgb.g, rgb.b, brightness);
|
|
143
|
+
try {
|
|
144
|
+
await env.tcpClient.setColor(cyncMeta.deviceId, rgb, brightness);
|
|
145
|
+
env.markDeviceSeen(cyncMeta.deviceId);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
env.log.warn('Cync: Light Hue.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
|
|
149
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// ----- Saturation -----
|
|
153
|
+
service
|
|
154
|
+
.getCharacteristic(Characteristic.Saturation)
|
|
155
|
+
.onGet(() => {
|
|
156
|
+
if (env.isDeviceProbablyOffline(deviceId)) {
|
|
157
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
158
|
+
}
|
|
159
|
+
const sat = ctx.cync?.saturation;
|
|
160
|
+
if (typeof sat === 'number') {
|
|
161
|
+
return sat;
|
|
162
|
+
}
|
|
163
|
+
return 100;
|
|
164
|
+
})
|
|
165
|
+
.onSet(async (value) => {
|
|
166
|
+
const cyncMeta = ctx.cync;
|
|
167
|
+
if (!cyncMeta?.deviceId) {
|
|
168
|
+
env.log.warn('Cync: Light Saturation.set called for %s but no cync.deviceId in context', deviceName);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const saturation = Math.max(0, Math.min(100, Number(value)));
|
|
172
|
+
if (!Number.isFinite(saturation)) {
|
|
173
|
+
env.log.warn('Cync: Light Saturation.set received invalid value=%o for %s (deviceId=%s)', value, deviceName, cyncMeta.deviceId);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const hue = typeof cyncMeta.hue === 'number' ? cyncMeta.hue : 0;
|
|
177
|
+
const brightness = typeof cyncMeta.brightness === 'number' ? cyncMeta.brightness : 100;
|
|
178
|
+
const rgb = hsvToRgb(hue, saturation, brightness);
|
|
179
|
+
// Optimistic cache
|
|
180
|
+
cyncMeta.hue = hue;
|
|
181
|
+
cyncMeta.saturation = saturation;
|
|
182
|
+
cyncMeta.rgb = rgb;
|
|
183
|
+
cyncMeta.colorActive = true;
|
|
184
|
+
cyncMeta.on = brightness > 0;
|
|
185
|
+
cyncMeta.brightness = brightness;
|
|
186
|
+
env.log.info('Cync: Light Saturation.set -> %d for %s (deviceId=%s) -> rgb=(%d,%d,%d) brightness=%d', saturation, deviceName, cyncMeta.deviceId, rgb.r, rgb.g, rgb.b, brightness);
|
|
187
|
+
try {
|
|
188
|
+
await env.tcpClient.setColor(cyncMeta.deviceId, rgb, brightness);
|
|
189
|
+
env.markDeviceSeen(cyncMeta.deviceId);
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
env.log.warn('Cync: Light Saturation.set failed for %s (deviceId=%s): %s', deviceName, cyncMeta.deviceId, err.message ?? String(err));
|
|
193
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=cync-light-accessory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cync-light-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-light-accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 configureCyncSwitchAccessory(env: CyncAccessoryEnv, mesh: CyncDeviceMesh, device: CyncDevice, accessory: PlatformAccessory, deviceName: string, deviceId: string): void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { applyAccessoryInformationFromCyncDevice } from './cync-accessory-helpers.js';
|
|
2
|
+
export function configureCyncSwitchAccessory(env, mesh, device, accessory, deviceName, deviceId) {
|
|
3
|
+
const service = accessory.getService(env.api.hap.Service.Switch) ||
|
|
4
|
+
accessory.addService(env.api.hap.Service.Switch, deviceName);
|
|
5
|
+
const existingLight = accessory.getService(env.api.hap.Service.Lightbulb);
|
|
6
|
+
if (existingLight) {
|
|
7
|
+
env.log.info('Cync: removing stale Lightbulb service from %s (deviceId=%s) before configuring as Switch', deviceName, deviceId);
|
|
8
|
+
accessory.removeService(existingLight);
|
|
9
|
+
}
|
|
10
|
+
applyAccessoryInformationFromCyncDevice(env.api, accessory, device, deviceName, deviceId);
|
|
11
|
+
// Ensure context is initialized
|
|
12
|
+
const ctx = accessory.context;
|
|
13
|
+
ctx.cync = ctx.cync ?? {
|
|
14
|
+
meshId: mesh.id,
|
|
15
|
+
deviceId,
|
|
16
|
+
productId: device.product_id,
|
|
17
|
+
on: false,
|
|
18
|
+
};
|
|
19
|
+
// Remember mapping for LAN updates
|
|
20
|
+
env.registerAccessoryForDevice(deviceId, accessory);
|
|
21
|
+
env.markDeviceSeen(deviceId);
|
|
22
|
+
env.startPollingDevice(deviceId);
|
|
23
|
+
service
|
|
24
|
+
.getCharacteristic(env.api.hap.Characteristic.On)
|
|
25
|
+
.onGet(() => {
|
|
26
|
+
if (env.isDeviceProbablyOffline(deviceId)) {
|
|
27
|
+
throw new env.api.hap.HapStatusError(-70402 /* env.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
|
|
28
|
+
}
|
|
29
|
+
const currentOn = !!ctx.cync?.on;
|
|
30
|
+
env.log.info('Cync: On.get -> %s for %s (deviceId=%s)', String(currentOn), deviceName, deviceId);
|
|
31
|
+
return currentOn;
|
|
32
|
+
})
|
|
33
|
+
.onSet(async (value) => {
|
|
34
|
+
const cyncMeta = ctx.cync;
|
|
35
|
+
if (!cyncMeta?.deviceId) {
|
|
36
|
+
env.log.warn('Cync: Light On.set called for %s but no cync.deviceId in context', deviceName);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const on = value === true || value === 1;
|
|
40
|
+
env.log.info('Cync: Light On.set -> %s for %s (deviceId=%s)', String(on), deviceName, cyncMeta.deviceId);
|
|
41
|
+
cyncMeta.on = on;
|
|
42
|
+
if (!on) {
|
|
43
|
+
// Off is always a plain power packet
|
|
44
|
+
await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on: false });
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Turning on:
|
|
48
|
+
// - If we were in color mode with a known RGB + brightness, restore color.
|
|
49
|
+
// - Otherwise, just send a basic power-on packet.
|
|
50
|
+
if (cyncMeta.colorActive && cyncMeta.rgb && typeof cyncMeta.brightness === 'number') {
|
|
51
|
+
await env.tcpClient.setColor(cyncMeta.deviceId, cyncMeta.rgb, cyncMeta.brightness);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
await env.tcpClient.setSwitchState(cyncMeta.deviceId, { on: true });
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=cync-switch-accessory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cync-switch-accessory.js","sourceRoot":"","sources":["../../src/cync/cync-switch-accessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Categories } from 'homebridge';
|
|
2
|
+
export interface CyncDeviceModel {
|
|
3
|
+
/** Raw deviceType from the Cync API */
|
|
4
|
+
deviceType: number;
|
|
5
|
+
/** Model name as shown in the Cync app (what you want HomeKit to show) */
|
|
6
|
+
modelName: string;
|
|
7
|
+
/** Optional marketing / retail name if you want to surface it somewhere else */
|
|
8
|
+
marketingName?: string;
|
|
9
|
+
/** Optional suggested HomeKit category override */
|
|
10
|
+
defaultCategory?: Categories;
|
|
11
|
+
/** Free-form notes for you / debugging */
|
|
12
|
+
notes?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Device catalog keyed by deviceType.
|
|
16
|
+
* Extend this as you discover more types.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEVICE_CATALOG: Record<number, CyncDeviceModel>;
|
|
19
|
+
export declare function lookupDeviceModel(deviceType: number): CyncDeviceModel | undefined;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/cync/device-catalog.ts
|
|
2
|
+
/**
|
|
3
|
+
* Device catalog keyed by deviceType.
|
|
4
|
+
* Extend this as you discover more types.
|
|
5
|
+
*/
|
|
6
|
+
export const DEVICE_CATALOG = {
|
|
7
|
+
46: {
|
|
8
|
+
deviceType: 46,
|
|
9
|
+
modelName: '6" Recessed Can Retrofit Fixture (Matter)',
|
|
10
|
+
marketingName: 'Cync reveal HD+',
|
|
11
|
+
// defaultCategory: Categories.LIGHTBULB,
|
|
12
|
+
},
|
|
13
|
+
64: {
|
|
14
|
+
deviceType: 64,
|
|
15
|
+
modelName: 'Indoor Smart Plug',
|
|
16
|
+
marketingName: 'On/Off Smart Plug',
|
|
17
|
+
// defaultCategory: Categories.OUTLET,
|
|
18
|
+
},
|
|
19
|
+
65: {
|
|
20
|
+
deviceType: 65,
|
|
21
|
+
modelName: 'Indoor Smart Plug',
|
|
22
|
+
marketingName: 'Cync Indoor Plug',
|
|
23
|
+
// defaultCategory: Categories.OUTLET,
|
|
24
|
+
},
|
|
25
|
+
172: {
|
|
26
|
+
deviceType: 172,
|
|
27
|
+
modelName: 'Indoor Smart Plug (3in1)',
|
|
28
|
+
marketingName: 'Cync Indoor Smart Plug',
|
|
29
|
+
// defaultCategory: Categories.OUTLET,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export function lookupDeviceModel(deviceType) {
|
|
33
|
+
return DEVICE_CATALOG[deviceType];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=device-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-catalog.js","sourceRoot":"","sources":["../../src/cync/device-catalog.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAqB7B;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC9D,EAAE,EAAE;QACH,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,2CAA2C;QACtD,aAAa,EAAE,iBAAiB;QAChC,yCAAyC;KACzC;IACD,EAAE,EAAE;QACH,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,mBAAmB;QAC9B,aAAa,EAAE,mBAAmB;QAClC,sCAAsC;KACtC;IACD,EAAE,EAAE;QACH,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,mBAAmB;QAC9B,aAAa,EAAE,kBAAkB;QACjC,sCAAsC;KACtC;IACD,GAAG,EAAE;QACJ,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,0BAA0B;QACrC,aAAa,EAAE,wBAAwB;QACvC,sCAAsC;KACtC;CACD,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IACnD,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/cync/token-store.js
CHANGED
|
@@ -18,8 +18,8 @@ export class CyncTokenStore {
|
|
|
18
18
|
try {
|
|
19
19
|
const raw = await fs.readFile(this.filePath, 'utf8');
|
|
20
20
|
const data = JSON.parse(raw);
|
|
21
|
-
|
|
22
|
-
if (data.expiresAt && data.expiresAt <=
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
if (typeof data.expiresAt === 'number' && data.expiresAt <= now) {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
return data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/cync/token-store.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAWlC;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACT,OAAO,CAAS;IAChB,QAAQ,CAAS;IAElC,YAAmB,WAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;YAE9C,
|
|
1
|
+
{"version":3,"file":"token-store.js","sourceRoot":"","sources":["../../src/cync/token-store.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAWlC;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACT,OAAO,CAAS;IAChB,QAAQ,CAAS;IAElC,YAAmB,WAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;YAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC;YACb,CAAC;YAED,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,iDAAiD;YACjD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,IAAmB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3C,yCAAyC;QACzC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACR,uCAAuC;QACxC,CAAC;IACF,CAAC;CACD"}
|