homebridge-cync-app 0.6.0 → 0.6.1

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,16 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.6.1
4
+
5
+ **Release Date:** 2026-06-23
6
+
7
+ ### Added
8
+ - Added dynamic discovery of show-compatible devices in the Homebridge configuration UI.
9
+ - Added per-device selection of built-in Light Shows, Music Shows, saved Custom Shows, and saved Segment scenes.
10
+
11
+ ### Changed
12
+ - Replaced global show controls with stable device-ID-based configuration while retaining runtime compatibility with existing global settings.
13
+
3
14
  ## v0.6.0
4
15
 
5
16
  **Release Date:** 2026-06-21
package/README.md CHANGED
@@ -91,6 +91,11 @@ Devices should appear automatically after startup.
91
91
 
92
92
  Tokens are cached locally to reduce repeated login prompts.
93
93
 
94
+ ### Shows by Device
95
+
96
+ After signing in, the plugin configuration dynamically lists every show-compatible Cync device. Expand a device to choose the built-in Light Shows, Music Shows, saved Custom Shows, and saved Segment scenes that should appear as HomeKit switches for that device.
97
+
98
+ Show selections are stored by Cync device ID, so renaming a device does not reset its configuration. Existing global show settings are migrated to per-device selections the next time the plugin configuration UI is opened and saved.
94
99
 
95
100
  ---
96
101
 
@@ -30,66 +30,44 @@
30
30
  "pattern": "^[0-9]{6}$",
31
31
  "description": "Temporary 6-digit code emailed by Cync when you sign in. Leave blank normally; only needed when performing a fresh login."
32
32
  },
33
- "exposeCustomShows": {
34
- "title": "Expose Custom Shows",
35
- "type": "boolean",
36
- "default": false,
37
- "description": "Expose saved Cync RGBIC Custom Show switches for compatible devices."
38
- },
39
- "exposeLightShows": {
40
- "title": "Expose Light Shows",
41
- "type": "boolean",
42
- "default": false,
43
- "description": "Expose built-in Cync RGBIC Light Show switches for compatible devices."
44
- },
45
- "enabledLightShowIndexes": {
46
- "title": "Enabled Light Shows",
47
- "type": "array",
48
- "items": {
49
- "type": "number",
50
- "enum": [1, 2, 3, 4, 5, 6, 7, 8, 9, 65, 67],
51
- "enumNames": [
52
- "Candle",
53
- "Rainbow",
54
- "Fireworks",
55
- "Volcanic",
56
- "Aurora",
57
- "Happy Holidays",
58
- "Red White Blue",
59
- "Vegas",
60
- "Party Time",
61
- "Power Up",
62
- "Cyber"
63
- ]
64
- },
65
- "uniqueItems": true,
66
- "default": []
67
- },
68
- "exposeMusicShows": {
69
- "title": "Expose Music Shows",
70
- "type": "boolean",
71
- "default": false,
72
- "description": "Expose built-in Cync RGBIC Music Show switches for compatible devices."
73
- },
74
- "enabledMusicShowIndexes": {
75
- "title": "Enabled Music Shows",
33
+ "deviceShowConfigs": {
34
+ "title": "Shows by Device",
76
35
  "type": "array",
77
36
  "items": {
78
- "type": "number",
79
- "enum": [1, 2, 3, 4, 5, 6, 7, 8],
80
- "enumNames": [
81
- "Midnight",
82
- "Earth Tones",
83
- "Heat Wave",
84
- "Solar Flare",
85
- "Breeze",
86
- "Tropical",
87
- "Spectrum",
88
- "Supernova"
89
- ]
37
+ "type": "object",
38
+ "properties": {
39
+ "deviceId": { "type": "string" },
40
+ "lightShowIndexes": {
41
+ "type": "array",
42
+ "items": { "type": "number" },
43
+ "uniqueItems": true
44
+ },
45
+ "musicShowIndexes": {
46
+ "type": "array",
47
+ "items": { "type": "number" },
48
+ "uniqueItems": true
49
+ },
50
+ "customLightShowIndexes": {
51
+ "type": "array",
52
+ "items": { "type": "number" },
53
+ "uniqueItems": true
54
+ },
55
+ "customMusicShowIndexes": {
56
+ "type": "array",
57
+ "items": { "type": "number" },
58
+ "uniqueItems": true
59
+ },
60
+ "multiColorSchemeIndexes": {
61
+ "type": "array",
62
+ "items": { "type": "number" },
63
+ "uniqueItems": true
64
+ }
65
+ },
66
+ "required": ["deviceId"]
90
67
  },
91
68
  "uniqueItems": true,
92
- "default": []
69
+ "default": [],
70
+ "description": "Per-device show selections managed by the custom plugin UI."
93
71
  }
94
72
  },
95
73
  "required": [
@@ -17,6 +17,7 @@ export declare class CyncAppPlatform implements DynamicPlatformPlugin {
17
17
  private readonly pollIntervalMs;
18
18
  private setMainAccessoryOnForDevice;
19
19
  private clearActiveShowsForDevice;
20
+ private getDeviceShowConfig;
20
21
  private shouldExposeCustomShows;
21
22
  private readonly musicShowServicesByDeviceId;
22
23
  private registerMusicShowAccessoryForDevice;
@@ -26,6 +27,7 @@ export declare class CyncAppPlatform implements DynamicPlatformPlugin {
26
27
  private getEnabledLightShowIndexes;
27
28
  private shouldExposeMusicShows;
28
29
  private getEnabledMusicShowIndexes;
30
+ private getEnabledCustomShowIndexes;
29
31
  private markDeviceSeen;
30
32
  private registerLightShowAccessoryForDevice;
31
33
  private markActiveLightShowForDevice;
package/dist/platform.js CHANGED
@@ -79,7 +79,44 @@ export class CyncAppPlatform {
79
79
  this.markActiveLightShowForDevice(deviceId, null);
80
80
  this.markActiveMusicShowForDevice(deviceId, null);
81
81
  }
82
- shouldExposeCustomShows() {
82
+ getDeviceShowConfig(deviceId) {
83
+ const raw = this.config;
84
+ if (!Array.isArray(raw.deviceShowConfigs)) {
85
+ return null;
86
+ }
87
+ const hasLegacyShowConfig = 'exposeCustomShows' in raw ||
88
+ 'exposeLightShows' in raw ||
89
+ 'enabledLightShowIndexes' in raw ||
90
+ 'exposeMusicShows' in raw ||
91
+ 'enabledMusicShowIndexes' in raw;
92
+ if (raw.deviceShowConfigs.length === 0 && hasLegacyShowConfig) {
93
+ return null;
94
+ }
95
+ const entry = raw.deviceShowConfigs.find((value) => {
96
+ if (!value || typeof value !== 'object') {
97
+ return false;
98
+ }
99
+ return String(value.deviceId ?? '') === deviceId;
100
+ });
101
+ const indexes = (key) => Array.isArray(entry?.[key])
102
+ ? entry[key].map(Number).filter(Number.isFinite)
103
+ : [];
104
+ return {
105
+ deviceId,
106
+ lightShowIndexes: indexes('lightShowIndexes'),
107
+ musicShowIndexes: indexes('musicShowIndexes'),
108
+ customLightShowIndexes: indexes('customLightShowIndexes'),
109
+ customMusicShowIndexes: indexes('customMusicShowIndexes'),
110
+ multiColorSchemeIndexes: indexes('multiColorSchemeIndexes'),
111
+ };
112
+ }
113
+ shouldExposeCustomShows(deviceId) {
114
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
115
+ if (deviceConfig) {
116
+ return deviceConfig.customLightShowIndexes.length > 0 ||
117
+ deviceConfig.customMusicShowIndexes.length > 0 ||
118
+ deviceConfig.multiColorSchemeIndexes.length > 0;
119
+ }
83
120
  const raw = this.config;
84
121
  return raw.exposeCustomShows === true;
85
122
  }
@@ -110,11 +147,19 @@ export class CyncAppPlatform {
110
147
  }
111
148
  }
112
149
  lightShowServicesByDeviceId = new Map();
113
- shouldExposeLightShows() {
150
+ shouldExposeLightShows(deviceId) {
151
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
152
+ if (deviceConfig) {
153
+ return deviceConfig.lightShowIndexes.length > 0;
154
+ }
114
155
  const raw = this.config;
115
156
  return raw.exposeLightShows === true;
116
157
  }
117
- getEnabledLightShowIndexes() {
158
+ getEnabledLightShowIndexes(deviceId) {
159
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
160
+ if (deviceConfig) {
161
+ return new Set(deviceConfig.lightShowIndexes);
162
+ }
118
163
  const raw = this.config;
119
164
  const value = raw.enabledLightShowIndexes;
120
165
  if (!Array.isArray(value)) {
@@ -124,11 +169,19 @@ export class CyncAppPlatform {
124
169
  .map(Number)
125
170
  .filter((index) => Number.isFinite(index)));
126
171
  }
127
- shouldExposeMusicShows() {
172
+ shouldExposeMusicShows(deviceId) {
173
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
174
+ if (deviceConfig) {
175
+ return deviceConfig.musicShowIndexes.length > 0;
176
+ }
128
177
  const raw = this.config;
129
178
  return raw.exposeMusicShows === true;
130
179
  }
131
- getEnabledMusicShowIndexes() {
180
+ getEnabledMusicShowIndexes(deviceId) {
181
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
182
+ if (deviceConfig) {
183
+ return new Set(deviceConfig.musicShowIndexes);
184
+ }
132
185
  const raw = this.config;
133
186
  const value = raw.enabledMusicShowIndexes;
134
187
  if (!Array.isArray(value)) {
@@ -138,6 +191,10 @@ export class CyncAppPlatform {
138
191
  .map(Number)
139
192
  .filter((index) => Number.isFinite(index)));
140
193
  }
194
+ getEnabledCustomShowIndexes(deviceId, kind) {
195
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
196
+ return deviceConfig ? new Set(deviceConfig[kind]) : null;
197
+ }
141
198
  markDeviceSeen(deviceId) {
142
199
  this.deviceLastSeen.set(deviceId, Date.now());
143
200
  }
@@ -635,11 +692,11 @@ export class CyncAppPlatform {
635
692
  crc: savedShowCrcMap[String(show.index)],
636
693
  }))
637
694
  : [];
638
- this.log.debug('Cync custom show discovery for %s: expose=%s light=%d multiColor=%d music=%d showCrcKeys=%s multiColorCrcKeys=%s', deviceName, String(this.shouldExposeCustomShows()), customLightShows.length, customMultiColorSchemes.length, customMusicShows.length, JSON.stringify(Object.keys(savedShowCrcMap)), JSON.stringify(Object.keys(savedMultiColorSchemesCrcMap)));
639
- const enabledLightShowIndexes = this.getEnabledLightShowIndexes();
695
+ this.log.debug('Cync custom show discovery for %s: expose=%s light=%d multiColor=%d music=%d showCrcKeys=%s multiColorCrcKeys=%s', deviceName, String(this.shouldExposeCustomShows(deviceId)), customLightShows.length, customMultiColorSchemes.length, customMusicShows.length, JSON.stringify(Object.keys(savedShowCrcMap)), JSON.stringify(Object.keys(savedMultiColorSchemesCrcMap)));
696
+ const enabledLightShowIndexes = this.getEnabledLightShowIndexes(deviceId);
640
697
  const lightShows = BUILT_IN_CYNC_LIGHT_SHOWS.filter(lightShow => enabledLightShowIndexes === null ||
641
698
  enabledLightShowIndexes.has(lightShow.index));
642
- if (this.shouldExposeLightShows() &&
699
+ if (this.shouldExposeLightShows(deviceId) &&
643
700
  supportsLightShows) {
644
701
  for (const lightShow of lightShows) {
645
702
  const showIndex = lightShow.index;
@@ -665,10 +722,10 @@ export class CyncAppPlatform {
665
722
  configureCyncLightShowAccessory(this.accessoryEnv, mesh, device, lightShowAccessory, lightShowName, deviceId, lightShow, 'built-in-light', (showDeviceId, showIndex) => this.client.activateLightShow(showDeviceId, showIndex));
666
723
  }
667
724
  }
668
- const enabledMusicShowIndexes = this.getEnabledMusicShowIndexes();
725
+ const enabledMusicShowIndexes = this.getEnabledMusicShowIndexes(deviceId);
669
726
  const musicShows = BUILT_IN_CYNC_MUSIC_SHOWS.filter(musicShow => enabledMusicShowIndexes === null ||
670
727
  enabledMusicShowIndexes.has(musicShow.index));
671
- if (this.shouldExposeMusicShows() &&
728
+ if (this.shouldExposeMusicShows(deviceId) &&
672
729
  supportsMusicShows) {
673
730
  for (const musicShow of musicShows) {
674
731
  const showIndex = musicShow.index;
@@ -694,9 +751,15 @@ export class CyncAppPlatform {
694
751
  configureCyncMusicShowAccessory(this.accessoryEnv, mesh, device, musicShowAccessory, musicShowName, deviceId, musicShow, (showDeviceId, showIndex) => this.client.activateMusicShow(showDeviceId, showIndex));
695
752
  }
696
753
  }
697
- if (this.shouldExposeCustomShows() &&
754
+ const enabledCustomLightShowIndexes = this.getEnabledCustomShowIndexes(deviceId, 'customLightShowIndexes');
755
+ const enabledMultiColorSchemeIndexes = this.getEnabledCustomShowIndexes(deviceId, 'multiColorSchemeIndexes');
756
+ const enabledCustomMusicShowIndexes = this.getEnabledCustomShowIndexes(deviceId, 'customMusicShowIndexes');
757
+ const selectedCustomLightShows = customLightShows.filter(show => enabledCustomLightShowIndexes === null || enabledCustomLightShowIndexes.has(show.index));
758
+ const selectedMultiColorSchemes = customMultiColorSchemes.filter(scheme => enabledMultiColorSchemeIndexes === null || enabledMultiColorSchemeIndexes.has(scheme.index));
759
+ const selectedCustomMusicShows = customMusicShows.filter(show => enabledCustomMusicShowIndexes === null || enabledCustomMusicShowIndexes.has(show.index));
760
+ if (this.shouldExposeCustomShows(deviceId) &&
698
761
  supportsLightShows) {
699
- for (const customLightShow of customLightShows) {
762
+ for (const customLightShow of selectedCustomLightShows) {
700
763
  const showIndex = customLightShow.index;
701
764
  const showName = customLightShow.name;
702
765
  const customLightShowName = `${showName} - ${deviceName} - Custom Light`;
@@ -715,8 +778,8 @@ export class CyncAppPlatform {
715
778
  customLightShowAccessory.context.showKind = 'custom-light';
716
779
  configureCyncLightShowAccessory(this.accessoryEnv, mesh, device, customLightShowAccessory, customLightShowName, deviceId, customLightShow, 'custom-light', (showDeviceId, showIndex) => this.client.activateLightShow(showDeviceId, showIndex));
717
780
  }
718
- for (const customMultiColorScheme of (supportsSegmentedControl || customMultiColorSchemes.length > 0)
719
- ? customMultiColorSchemes
781
+ for (const customMultiColorScheme of (supportsSegmentedControl || selectedMultiColorSchemes.length > 0)
782
+ ? selectedMultiColorSchemes
720
783
  : []) {
721
784
  const schemeIndex = customMultiColorScheme.index;
722
785
  const schemeName = customMultiColorScheme.name;
@@ -736,7 +799,7 @@ export class CyncAppPlatform {
736
799
  customMultiColorSchemeAccessory.context.showKind = 'custom-multicolor';
737
800
  configureCyncLightShowAccessory(this.accessoryEnv, mesh, device, customMultiColorSchemeAccessory, customMultiColorSchemeName, deviceId, customMultiColorScheme, 'custom-multicolor', (showDeviceId, showIndex) => this.client.activateMultiColorScheme(showDeviceId, showIndex));
738
801
  }
739
- for (const customMusicShow of supportsMusicShows ? customMusicShows : []) {
802
+ for (const customMusicShow of supportsMusicShows ? selectedCustomMusicShows : []) {
740
803
  const showIndex = customMusicShow.index;
741
804
  const showName = customMusicShow.name;
742
805
  const customMusicShowName = `${showName} - ${deviceName} - Custom Music`;
@@ -756,29 +819,29 @@ export class CyncAppPlatform {
756
819
  configureCyncMusicShowAccessory(this.accessoryEnv, mesh, device, customMusicShowAccessory, customMusicShowName, deviceId, customMusicShow, (showDeviceId, showIndex) => this.client.activateMusicShow(showDeviceId, showIndex));
757
820
  }
758
821
  }
759
- const enabledLightShowIndexesForCleanup = this.shouldExposeLightShows() &&
822
+ const enabledLightShowIndexesForCleanup = this.shouldExposeLightShows(deviceId) &&
760
823
  supportsLightShows
761
824
  ? new Set(lightShows.map((lightShow) => lightShow.index))
762
825
  : new Set();
763
826
  this.cleanupDisabledShowAccessoriesForDevice(String(mesh.id), deviceId, enabledLightShowIndexesForCleanup, 'built-in-light', 'cync-lightshow', 'light show');
764
- const enabledMusicShowIndexesForCleanup = this.shouldExposeMusicShows() &&
827
+ const enabledMusicShowIndexesForCleanup = this.shouldExposeMusicShows(deviceId) &&
765
828
  supportsMusicShows
766
829
  ? new Set(musicShows.map((musicShow) => musicShow.index))
767
830
  : new Set();
768
831
  this.cleanupDisabledShowAccessoriesForDevice(String(mesh.id), deviceId, enabledMusicShowIndexesForCleanup, 'built-in-music', 'cync-musicshow', 'music show');
769
- const enabledCustomLightShowIndexesForCleanup = this.shouldExposeCustomShows() &&
832
+ const enabledCustomLightShowIndexesForCleanup = this.shouldExposeCustomShows(deviceId) &&
770
833
  supportsLightShows
771
- ? new Set(customLightShows.map((customLightShow) => customLightShow.index))
834
+ ? new Set(selectedCustomLightShows.map((customLightShow) => customLightShow.index))
772
835
  : new Set();
773
836
  this.cleanupDisabledShowAccessoriesForDevice(String(mesh.id), deviceId, enabledCustomLightShowIndexesForCleanup, 'custom-light', 'cync-custom-lightshow', 'custom light show');
774
- const enabledCustomMultiColorIndexesForCleanup = this.shouldExposeCustomShows() &&
775
- (supportsSegmentedControl || customMultiColorSchemes.length > 0)
776
- ? new Set(customMultiColorSchemes.map((scheme) => scheme.index))
837
+ const enabledCustomMultiColorIndexesForCleanup = this.shouldExposeCustomShows(deviceId) &&
838
+ (supportsSegmentedControl || selectedMultiColorSchemes.length > 0)
839
+ ? new Set(selectedMultiColorSchemes.map((scheme) => scheme.index))
777
840
  : new Set();
778
841
  this.cleanupDisabledShowAccessoriesForDevice(String(mesh.id), deviceId, enabledCustomMultiColorIndexesForCleanup, 'custom-multicolor', 'cync-custom-multicolor', 'custom MultiColor scheme');
779
- const enabledCustomMusicShowIndexesForCleanup = this.shouldExposeCustomShows() &&
842
+ const enabledCustomMusicShowIndexesForCleanup = this.shouldExposeCustomShows(deviceId) &&
780
843
  supportsMusicShows
781
- ? new Set(customMusicShows.map((customMusicShow) => customMusicShow.index))
844
+ ? new Set(selectedCustomMusicShows.map((customMusicShow) => customMusicShow.index))
782
845
  : new Set();
783
846
  this.cleanupDisabledShowAccessoriesForDevice(String(mesh.id), deviceId, enabledCustomMusicShowIndexesForCleanup, 'custom-music', 'cync-custom-musicshow', 'custom music show');
784
847
  }
@@ -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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"}
@@ -51,50 +51,15 @@
51
51
 
52
52
  <div class="card mb-3">
53
53
  <div class="card-body">
54
- <h5 class="card-title">Cync Shows</h5>
55
-
56
- <div class="form-check mt-3">
57
- <input type="checkbox" id="cyncExposeCustomShows" class="form-check-input">
58
- <label for="cyncExposeCustomShows" class="form-check-label">
59
- Expose saved Custom Shows as HomeKit switches
60
- </label>
61
- </div>
62
-
63
- <p class="text-muted mt-2">
64
- Saved Custom Shows created in the Cync app can be exposed as separate HomeKit switches.
65
- </p>
66
- <div class="form-check">
67
- <input type="checkbox" id="cyncExposeLightShows" class="form-check-input">
68
- <label for="cyncExposeLightShows" class="form-check-label">
69
- Expose built-in Light Shows as HomeKit switches
70
- </label>
54
+ <div class="d-flex justify-content-between align-items-center gap-2">
55
+ <h5 class="card-title mb-0">Shows by Device</h5>
56
+ <button id="cyncRefreshDevicesBtn" class="btn btn-sm btn-outline-secondary">Refresh Devices</button>
71
57
  </div>
72
-
73
- <p class="text-muted mt-2">
74
- Supported RGBIC devices can expose selected built-in Cync Light Shows as separate HomeKit switches.
58
+ <p class="text-muted mt-2 mb-3">
59
+ Choose exactly which show switches each compatible Cync device exposes to HomeKit.
75
60
  </p>
76
-
77
- <details class="mt-3">
78
- <summary>Choose Light Shows to expose</summary>
79
-
80
- <div id="cyncLightShowChoices" class="mt-3"></div>
81
- </details>
82
- <div class="form-check mt-3">
83
- <input type="checkbox" id="cyncExposeMusicShows" class="form-check-input">
84
- <label for="cyncExposeMusicShows" class="form-check-label">
85
- Expose built-in Music Shows as HomeKit switches
86
- </label>
87
- </div>
88
-
89
- <p class="text-muted mt-2">
90
- Supported RGBIC devices can expose selected built-in Cync Music Shows as separate HomeKit switches.
91
- </p>
92
-
93
- <details class="mt-3">
94
- <summary>Choose Music Shows to expose</summary>
95
-
96
- <div id="cyncMusicShowChoices" class="mt-3"></div>
97
- </details>
61
+ <div id="cyncDeviceShowsStatus" class="text-muted">Loading compatible devices…</div>
62
+ <div id="cyncDeviceShows"></div>
98
63
  </div>
99
64
  </div>
100
65
 
@@ -107,8 +72,9 @@ homebridge.addEventListener('ready', async () => {
107
72
  const signOutBtn = document.getElementById('cyncSignOutBtn');
108
73
  const statusEl = document.getElementById('cyncStatus');
109
74
 
110
- const exposeLightShowsInput = document.getElementById('cyncExposeLightShows');
111
- const lightShowChoicesEl = document.getElementById('cyncLightShowChoices');
75
+ const deviceShowsEl = document.getElementById('cyncDeviceShows');
76
+ const deviceShowsStatusEl = document.getElementById('cyncDeviceShowsStatus');
77
+ const refreshDevicesBtn = document.getElementById('cyncRefreshDevicesBtn');
112
78
  const BUILT_IN_CYNC_LIGHT_SHOWS = [
113
79
  { index: 1, name: 'Candle' },
114
80
  { index: 2, name: 'Rainbow' },
@@ -123,8 +89,6 @@ homebridge.addEventListener('ready', async () => {
123
89
  { index: 67, name: 'Cyber' },
124
90
  ];
125
91
 
126
- const exposeMusicShowsInput = document.getElementById('cyncExposeMusicShows');
127
- const musicShowChoicesEl = document.getElementById('cyncMusicShowChoices');
128
92
  const BUILT_IN_CYNC_MUSIC_SHOWS = [
129
93
  { index: 1, name: 'Midnight' },
130
94
  { index: 2, name: 'Earth Tones' },
@@ -139,87 +103,81 @@ homebridge.addEventListener('ready', async () => {
139
103
  let pluginConfig = await homebridge.getPluginConfig();
140
104
  let cfg = pluginConfig[0] || {};
141
105
 
142
- const exposeCustomShowsInput = document.getElementById('cyncExposeCustomShows');
143
- exposeCustomShowsInput.checked = cfg.exposeCustomShows === true;
144
-
145
- exposeCustomShowsInput.addEventListener('change', async () => {
146
- await updateConfig({
147
- exposeCustomShows: exposeCustomShowsInput.checked,
148
- });
149
- statusEl.textContent = 'Setting updated. Click Save.';
150
- });
151
-
152
- exposeLightShowsInput.checked = cfg.exposeLightShows === true;
153
-
154
- const enabledLightShowIndexes = Array.isArray(cfg.enabledLightShowIndexes)
155
- ? cfg.enabledLightShowIndexes.map(Number)
156
- : [2];
157
-
158
- function renderLightShowChoices() {
159
- lightShowChoicesEl.innerHTML = '';
160
-
161
- for (const show of BUILT_IN_CYNC_LIGHT_SHOWS) {
162
- const wrapper = document.createElement('div');
163
- wrapper.className = 'form-check';
164
-
165
- const input = document.createElement('input');
166
- input.type = 'checkbox';
167
- input.className = 'form-check-input';
168
- input.id = `cyncLightShow${show.index}`;
169
- input.value = String(show.index);
170
- input.checked = enabledLightShowIndexes.includes(show.index);
171
-
172
- const label = document.createElement('label');
173
- label.className = 'form-check-label';
174
- label.htmlFor = input.id;
175
- label.textContent = show.name;
176
-
177
- input.addEventListener('change', async () => {
178
- const selected = Array.from(
179
- lightShowChoicesEl.querySelectorAll('input[type="checkbox"]:checked'),
180
- ).map((checkedInput) => Number(checkedInput.value));
181
-
182
- await updateConfig({
183
- enabledLightShowIndexes: selected,
184
- });
185
-
186
- statusEl.textContent = 'Light Show selection updated. Click Save.';
187
- });
188
-
189
- wrapper.appendChild(input);
190
- wrapper.appendChild(label);
191
- lightShowChoicesEl.appendChild(wrapper);
192
- }
106
+ function legacyDeviceConfig(device) {
107
+ return {
108
+ deviceId: device.deviceId,
109
+ lightShowIndexes: cfg.exposeLightShows === true
110
+ ? (Array.isArray(cfg.enabledLightShowIndexes)
111
+ ? cfg.enabledLightShowIndexes.map(Number) : BUILT_IN_CYNC_LIGHT_SHOWS.map(show => show.index))
112
+ : [],
113
+ musicShowIndexes: cfg.exposeMusicShows === true
114
+ ? (Array.isArray(cfg.enabledMusicShowIndexes)
115
+ ? cfg.enabledMusicShowIndexes.map(Number) : BUILT_IN_CYNC_MUSIC_SHOWS.map(show => show.index))
116
+ : [],
117
+ customLightShowIndexes: cfg.exposeCustomShows === true
118
+ ? device.customLightShows.map(show => show.index) : [],
119
+ customMusicShowIndexes: cfg.exposeCustomShows === true
120
+ ? device.customMusicShows.map(show => show.index) : [],
121
+ multiColorSchemeIndexes: cfg.exposeCustomShows === true
122
+ ? device.multiColorSchemes.map(show => show.index) : [],
123
+ };
193
124
  }
194
125
 
195
- renderLightShowChoices();
126
+ function getDeviceConfig(device) {
127
+ const existing = Array.isArray(cfg.deviceShowConfigs)
128
+ ? cfg.deviceShowConfigs.find(entry => String(entry.deviceId) === device.deviceId)
129
+ : null;
130
+ return existing || legacyDeviceConfig(device);
131
+ }
196
132
 
197
- exposeLightShowsInput.addEventListener('change', async () => {
198
- await updateConfig({
199
- exposeLightShows: exposeLightShowsInput.checked,
200
- });
201
- statusEl.textContent = 'Setting updated. Click Save.';
202
- });
133
+ async function saveDeviceSelection(deviceId, key, indexes) {
134
+ const configs = Array.isArray(cfg.deviceShowConfigs) ? [...cfg.deviceShowConfigs] : [];
135
+ const index = configs.findIndex(entry => String(entry.deviceId) === deviceId);
136
+ const current = index >= 0 ? configs[index] : {
137
+ deviceId,
138
+ lightShowIndexes: [],
139
+ musicShowIndexes: [],
140
+ customLightShowIndexes: [],
141
+ customMusicShowIndexes: [],
142
+ multiColorSchemeIndexes: [],
143
+ };
144
+ const next = { ...current, deviceId, [key]: indexes };
145
+ if (index >= 0) {
146
+ configs[index] = next;
147
+ } else {
148
+ configs.push(next);
149
+ }
203
150
 
204
- exposeMusicShowsInput.checked = cfg.exposeMusicShows === true;
151
+ cfg = { ...cfg, deviceShowConfigs: configs };
152
+ delete cfg.exposeCustomShows;
153
+ delete cfg.exposeLightShows;
154
+ delete cfg.enabledLightShowIndexes;
155
+ delete cfg.exposeMusicShows;
156
+ delete cfg.enabledMusicShowIndexes;
157
+ pluginConfig = [cfg];
158
+ await homebridge.updatePluginConfig(pluginConfig);
159
+ statusEl.textContent = 'Device show selection updated. Click Save.';
160
+ }
205
161
 
206
- const enabledMusicShowIndexes = Array.isArray(cfg.enabledMusicShowIndexes)
207
- ? cfg.enabledMusicShowIndexes.map(Number)
208
- : [1];
162
+ function addShowGroup(container, device, title, key, shows, selectedIndexes) {
163
+ if (!shows.length) {
164
+ return;
165
+ }
209
166
 
210
- function renderMusicShowChoices() {
211
- musicShowChoicesEl.innerHTML = '';
167
+ const heading = document.createElement('div');
168
+ heading.className = 'fw-semibold mt-3 mb-1';
169
+ heading.textContent = title;
170
+ container.appendChild(heading);
212
171
 
213
- for (const show of BUILT_IN_CYNC_MUSIC_SHOWS) {
172
+ for (const show of shows) {
214
173
  const wrapper = document.createElement('div');
215
174
  wrapper.className = 'form-check';
216
-
217
175
  const input = document.createElement('input');
218
176
  input.type = 'checkbox';
219
177
  input.className = 'form-check-input';
220
- input.id = `cyncMusicShow${show.index}`;
178
+ input.id = `cync-${device.deviceId}-${key}-${show.index}`;
221
179
  input.value = String(show.index);
222
- input.checked = enabledMusicShowIndexes.includes(show.index);
180
+ input.checked = selectedIndexes.includes(show.index);
223
181
 
224
182
  const label = document.createElement('label');
225
183
  label.className = 'form-check-label';
@@ -227,31 +185,89 @@ homebridge.addEventListener('ready', async () => {
227
185
  label.textContent = show.name;
228
186
 
229
187
  input.addEventListener('change', async () => {
230
- const selected = Array.from(
231
- musicShowChoicesEl.querySelectorAll('input[type="checkbox"]:checked'),
232
- ).map((checkedInput) => Number(checkedInput.value));
233
-
234
- await updateConfig({
235
- enabledMusicShowIndexes: selected,
236
- });
237
-
238
- statusEl.textContent = 'Music Show selection updated. Click Save.';
188
+ const selected = Array.from(container.querySelectorAll(`input[data-config-key="${key}"]:checked`))
189
+ .map(checked => Number(checked.value));
190
+ await saveDeviceSelection(device.deviceId, key, selected);
239
191
  });
192
+ input.dataset.configKey = key;
193
+ wrapper.append(input, label);
194
+ container.appendChild(wrapper);
195
+ }
196
+ }
240
197
 
241
- wrapper.appendChild(input);
242
- wrapper.appendChild(label);
243
- musicShowChoicesEl.appendChild(wrapper);
198
+ function renderDevices(devices) {
199
+ deviceShowsEl.innerHTML = '';
200
+ deviceShowsStatusEl.textContent = devices.length
201
+ ? `${devices.length} compatible device${devices.length === 1 ? '' : 's'} found.`
202
+ : 'No show-compatible Cync devices were found.';
203
+
204
+ for (const device of devices) {
205
+ const config = getDeviceConfig(device);
206
+ const details = document.createElement('details');
207
+ details.className = 'border rounded p-3 mt-3';
208
+ const summary = document.createElement('summary');
209
+ summary.className = 'fw-semibold';
210
+ summary.textContent = device.name;
211
+ details.appendChild(summary);
212
+
213
+ addShowGroup(details, device, 'Light Shows', 'lightShowIndexes',
214
+ BUILT_IN_CYNC_LIGHT_SHOWS, config.lightShowIndexes || []);
215
+ if (device.supportsMusicShows) {
216
+ addShowGroup(details, device, 'Music Shows', 'musicShowIndexes',
217
+ BUILT_IN_CYNC_MUSIC_SHOWS, config.musicShowIndexes || []);
218
+ }
219
+ addShowGroup(details, device, 'Saved Light Shows', 'customLightShowIndexes',
220
+ device.customLightShows, config.customLightShowIndexes || []);
221
+ addShowGroup(details, device, 'Saved Music Shows', 'customMusicShowIndexes',
222
+ device.customMusicShows, config.customMusicShowIndexes || []);
223
+ addShowGroup(details, device, 'Saved Segment Scenes', 'multiColorSchemeIndexes',
224
+ device.multiColorSchemes, config.multiColorSchemeIndexes || []);
225
+ deviceShowsEl.appendChild(details);
244
226
  }
245
227
  }
246
228
 
247
- renderMusicShowChoices();
229
+ async function loadDevices() {
230
+ refreshDevicesBtn.disabled = true;
231
+ deviceShowsStatusEl.textContent = 'Loading compatible devices…';
232
+ try {
233
+ const response = await homebridge.request('/devices');
234
+ if (!response?.ok) {
235
+ throw new Error(response?.error || 'Unable to load Cync devices.');
236
+ }
237
+ const hasLegacyShowConfig = [
238
+ 'exposeCustomShows',
239
+ 'exposeLightShows',
240
+ 'enabledLightShowIndexes',
241
+ 'exposeMusicShows',
242
+ 'enabledMusicShowIndexes',
243
+ ].some(key => Object.prototype.hasOwnProperty.call(cfg, key));
244
+ if (
245
+ !Array.isArray(cfg.deviceShowConfigs) ||
246
+ (cfg.deviceShowConfigs.length === 0 && hasLegacyShowConfig)
247
+ ) {
248
+ cfg = {
249
+ ...cfg,
250
+ deviceShowConfigs: (response.devices || []).map(legacyDeviceConfig),
251
+ };
252
+ delete cfg.exposeCustomShows;
253
+ delete cfg.exposeLightShows;
254
+ delete cfg.enabledLightShowIndexes;
255
+ delete cfg.exposeMusicShows;
256
+ delete cfg.enabledMusicShowIndexes;
257
+ pluginConfig = [cfg];
258
+ await homebridge.updatePluginConfig(pluginConfig);
259
+ statusEl.textContent = 'Show settings migrated by device. Click Save.';
260
+ }
261
+ renderDevices(response.devices || []);
262
+ } catch (error) {
263
+ deviceShowsStatusEl.textContent = error?.message || 'Unable to load Cync devices.';
264
+ deviceShowsEl.innerHTML = '';
265
+ } finally {
266
+ refreshDevicesBtn.disabled = false;
267
+ }
268
+ }
248
269
 
249
- exposeMusicShowsInput.addEventListener('change', async () => {
250
- await updateConfig({
251
- exposeMusicShows: exposeMusicShowsInput.checked,
252
- });
253
- statusEl.textContent = 'Setting updated. Click Save.';
254
- });
270
+ refreshDevicesBtn.addEventListener('click', loadDevices);
255
271
 
256
272
  // Helper to update in-memory pluginConfig (persisted when user clicks Save in HB)
257
273
  async function updateConfig(partial) {
@@ -284,6 +300,8 @@ homebridge.addEventListener('ready', async () => {
284
300
  console.error('[cync-ui] /status request failed:', e);
285
301
  }
286
302
 
303
+ await loadDevices();
304
+
287
305
  // Request OTP email via server.js
288
306
  requestOtpBtn.addEventListener('click', async () => {
289
307
  const email = emailInput.value.trim();
@@ -355,6 +373,7 @@ homebridge.addEventListener('ready', async () => {
355
373
  username: '',
356
374
  password: '',
357
375
  twoFactor: '',
376
+ deviceShowConfigs: [],
358
377
  });
359
378
 
360
379
  setLockedState(false);
@@ -2,6 +2,22 @@
2
2
  import { HomebridgePluginUiServer } from '@homebridge/plugin-ui-utils';
3
3
  import { ConfigClient } from '../dist/cync/config-client.js';
4
4
  import { CyncTokenStore } from '../dist/cync/token-store.js';
5
+ import { getCyncApkDeviceProfile } from '../dist/cync/device-capabilities.js';
6
+
7
+ function asShowList(value, crcMap) {
8
+ if (!Array.isArray(value)) {
9
+ return [];
10
+ }
11
+
12
+ return value
13
+ .filter(show =>
14
+ show &&
15
+ typeof show.index === 'number' &&
16
+ typeof show.name === 'string' &&
17
+ typeof crcMap[String(show.index)] === 'number',
18
+ )
19
+ .map(show => ({ index: show.index, name: show.name }));
20
+ }
5
21
 
6
22
  class CyncUiServer extends HomebridgePluginUiServer {
7
23
  constructor() {
@@ -19,6 +35,7 @@ class CyncUiServer extends HomebridgePluginUiServer {
19
35
  this.onRequest('/request-otp', this.handleRequestOtp.bind(this));
20
36
  this.onRequest('/sign-out', this.handleSignOut.bind(this));
21
37
  this.onRequest('/status', this.handleStatus.bind(this));
38
+ this.onRequest('/devices', this.handleDevices.bind(this));
22
39
 
23
40
  this.ready();
24
41
  }
@@ -57,6 +74,92 @@ class CyncUiServer extends HomebridgePluginUiServer {
57
74
  return { ok: true, hasToken: false };
58
75
  }
59
76
  }
77
+
78
+ async restoreCloudSession() {
79
+ let token = await this.tokenStore.load();
80
+ if (!token) {
81
+ throw new Error('Sign in to Cync before loading devices.');
82
+ }
83
+
84
+ if (
85
+ token.expiresAt &&
86
+ Date.now() >= token.expiresAt - 60_000 &&
87
+ token.refreshToken
88
+ ) {
89
+ const refreshed = await this.configClient.refreshAccessToken(token.refreshToken);
90
+ token = {
91
+ ...token,
92
+ accessToken: refreshed.accessToken,
93
+ refreshToken: refreshed.refreshToken ?? token.refreshToken,
94
+ expiresAt: refreshed.expiresAt ?? token.expiresAt,
95
+ };
96
+ await this.tokenStore.save(token);
97
+ }
98
+
99
+ this.configClient.restoreSession(token.accessToken, token.userId);
100
+ }
101
+
102
+ async handleDevices() {
103
+ try {
104
+ await this.restoreCloudSession();
105
+ const cloudConfig = await this.configClient.getCloudConfig();
106
+ const devices = [];
107
+
108
+ for (const mesh of cloudConfig.meshes) {
109
+ let properties;
110
+ try {
111
+ properties = await this.configClient.getDeviceProperties(
112
+ String(mesh.product_id),
113
+ String(mesh.id),
114
+ );
115
+ } catch (error) {
116
+ console.warn('[cync-ui-config] Unable to inspect mesh %s: %s', mesh.id, error?.message ?? error);
117
+ continue;
118
+ }
119
+
120
+ const lightShows = properties.lightShows;
121
+ const musicShows = properties.musicShows;
122
+ const multiColorSchemes = properties.multiColorSchemes;
123
+ const bulbs = Array.isArray(properties.bulbsArray) ? properties.bulbsArray : [];
124
+
125
+ for (const bulb of bulbs) {
126
+ const deviceId = bulb?.deviceID ?? bulb?.deviceId;
127
+ const deviceType = Number(bulb?.deviceType);
128
+ const profile = getCyncApkDeviceProfile(
129
+ Number.isFinite(deviceType) ? deviceType : undefined,
130
+ );
131
+
132
+ if (deviceId === undefined || profile?.supportsLightShows !== true) {
133
+ continue;
134
+ }
135
+
136
+ const showCrcMap = bulb.savedLightShowsCrcMap ??
137
+ bulb.savedShowCrcMap ?? bulb.savedShowsCrcMap ?? {};
138
+ const multiColorCrcMap = bulb.savedMultiColorSchemesCrcMap ??
139
+ bulb.savedMultiColorSchemes ?? bulb.savedMulticolorSchemes ??
140
+ bulb.multiColorSchemeCrcMap ?? bulb.schemeCrcMap ?? {};
141
+
142
+ devices.push({
143
+ deviceId: String(deviceId),
144
+ name: typeof bulb.displayName === 'string' ? bulb.displayName : `Cync ${deviceId}`,
145
+ deviceType: Number.isFinite(deviceType) ? deviceType : null,
146
+ supportsLightShows: profile.supportsLightShows,
147
+ supportsMusicShows: profile.supportsMusicShows,
148
+ supportsSegmentedControl: profile.supportsSegmentedControl,
149
+ customLightShows: asShowList(lightShows, showCrcMap),
150
+ customMusicShows: asShowList(musicShows, showCrcMap),
151
+ multiColorSchemes: asShowList(multiColorSchemes, multiColorCrcMap),
152
+ });
153
+ }
154
+ }
155
+
156
+ devices.sort((a, b) => a.name.localeCompare(b.name));
157
+ return { ok: true, devices };
158
+ } catch (error) {
159
+ console.error('[cync-ui-config] Device discovery failed:', error);
160
+ return { ok: false, error: error?.message ?? String(error), devices: [] };
161
+ }
162
+ }
60
163
  }
61
164
 
62
165
  (() => new CyncUiServer())();
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.6.0",
5
+ "version": "0.6.1",
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",
package/src/platform.ts CHANGED
@@ -66,6 +66,15 @@ interface ResolvedPlatformDevice {
66
66
  classification: CyncDeviceClassification;
67
67
  }
68
68
 
69
+ interface CyncDeviceShowConfig {
70
+ deviceId: string;
71
+ lightShowIndexes: number[];
72
+ musicShowIndexes: number[];
73
+ customLightShowIndexes: number[];
74
+ customMusicShowIndexes: number[];
75
+ multiColorSchemeIndexes: number[];
76
+ }
77
+
69
78
  function getDefaultCapabilitiesForDeviceType(deviceType?: number): CyncCapabilityProfile {
70
79
  const apkProfile = getCyncApkDeviceProfile(deviceType);
71
80
  const isLight = apkProfile?.accessoryType === 'light';
@@ -146,7 +155,50 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
146
155
  this.markActiveMusicShowForDevice(deviceId, null);
147
156
  }
148
157
 
149
- private shouldExposeCustomShows(): boolean {
158
+ private getDeviceShowConfig(deviceId: string): CyncDeviceShowConfig | null {
159
+ const raw = this.config as Record<string, unknown>;
160
+ if (!Array.isArray(raw.deviceShowConfigs)) {
161
+ return null;
162
+ }
163
+ const hasLegacyShowConfig =
164
+ 'exposeCustomShows' in raw ||
165
+ 'exposeLightShows' in raw ||
166
+ 'enabledLightShowIndexes' in raw ||
167
+ 'exposeMusicShows' in raw ||
168
+ 'enabledMusicShowIndexes' in raw;
169
+ if (raw.deviceShowConfigs.length === 0 && hasLegacyShowConfig) {
170
+ return null;
171
+ }
172
+
173
+ const entry = raw.deviceShowConfigs.find((value) => {
174
+ if (!value || typeof value !== 'object') {
175
+ return false;
176
+ }
177
+ return String((value as Record<string, unknown>).deviceId ?? '') === deviceId;
178
+ }) as Record<string, unknown> | undefined;
179
+
180
+ const indexes = (key: string): number[] => Array.isArray(entry?.[key])
181
+ ? (entry[key] as unknown[]).map(Number).filter(Number.isFinite)
182
+ : [];
183
+
184
+ return {
185
+ deviceId,
186
+ lightShowIndexes: indexes('lightShowIndexes'),
187
+ musicShowIndexes: indexes('musicShowIndexes'),
188
+ customLightShowIndexes: indexes('customLightShowIndexes'),
189
+ customMusicShowIndexes: indexes('customMusicShowIndexes'),
190
+ multiColorSchemeIndexes: indexes('multiColorSchemeIndexes'),
191
+ };
192
+ }
193
+
194
+ private shouldExposeCustomShows(deviceId: string): boolean {
195
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
196
+ if (deviceConfig) {
197
+ return deviceConfig.customLightShowIndexes.length > 0 ||
198
+ deviceConfig.customMusicShowIndexes.length > 0 ||
199
+ deviceConfig.multiColorSchemeIndexes.length > 0;
200
+ }
201
+
150
202
  const raw = this.config as Record<string, unknown>;
151
203
  return raw.exposeCustomShows === true;
152
204
  }
@@ -206,12 +258,22 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
206
258
  showKind: CyncLightShowKind;
207
259
  }>>();
208
260
 
209
- private shouldExposeLightShows(): boolean {
261
+ private shouldExposeLightShows(deviceId: string): boolean {
262
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
263
+ if (deviceConfig) {
264
+ return deviceConfig.lightShowIndexes.length > 0;
265
+ }
266
+
210
267
  const raw = this.config as Record<string, unknown>;
211
268
  return raw.exposeLightShows === true;
212
269
  }
213
270
 
214
- private getEnabledLightShowIndexes(): Set<number> | null {
271
+ private getEnabledLightShowIndexes(deviceId: string): Set<number> | null {
272
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
273
+ if (deviceConfig) {
274
+ return new Set(deviceConfig.lightShowIndexes);
275
+ }
276
+
215
277
  const raw = this.config as Record<string, unknown>;
216
278
  const value = raw.enabledLightShowIndexes;
217
279
 
@@ -226,12 +288,22 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
226
288
  );
227
289
  }
228
290
 
229
- private shouldExposeMusicShows(): boolean {
291
+ private shouldExposeMusicShows(deviceId: string): boolean {
292
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
293
+ if (deviceConfig) {
294
+ return deviceConfig.musicShowIndexes.length > 0;
295
+ }
296
+
230
297
  const raw = this.config as Record<string, unknown>;
231
298
  return raw.exposeMusicShows === true;
232
299
  }
233
300
 
234
- private getEnabledMusicShowIndexes(): Set<number> | null {
301
+ private getEnabledMusicShowIndexes(deviceId: string): Set<number> | null {
302
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
303
+ if (deviceConfig) {
304
+ return new Set(deviceConfig.musicShowIndexes);
305
+ }
306
+
235
307
  const raw = this.config as Record<string, unknown>;
236
308
  const value = raw.enabledMusicShowIndexes;
237
309
 
@@ -246,6 +318,14 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
246
318
  );
247
319
  }
248
320
 
321
+ private getEnabledCustomShowIndexes(
322
+ deviceId: string,
323
+ kind: 'customLightShowIndexes' | 'customMusicShowIndexes' | 'multiColorSchemeIndexes',
324
+ ): Set<number> | null {
325
+ const deviceConfig = this.getDeviceShowConfig(deviceId);
326
+ return deviceConfig ? new Set(deviceConfig[kind]) : null;
327
+ }
328
+
249
329
  private markDeviceSeen(deviceId: string): void {
250
330
  this.deviceLastSeen.set(deviceId, Date.now());
251
331
  }
@@ -1064,7 +1144,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1064
1144
  this.log.debug(
1065
1145
  'Cync custom show discovery for %s: expose=%s light=%d multiColor=%d music=%d showCrcKeys=%s multiColorCrcKeys=%s',
1066
1146
  deviceName,
1067
- String(this.shouldExposeCustomShows()),
1147
+ String(this.shouldExposeCustomShows(deviceId)),
1068
1148
  customLightShows.length,
1069
1149
  customMultiColorSchemes.length,
1070
1150
  customMusicShows.length,
@@ -1072,7 +1152,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1072
1152
  JSON.stringify(Object.keys(savedMultiColorSchemesCrcMap)),
1073
1153
  );
1074
1154
 
1075
- const enabledLightShowIndexes = this.getEnabledLightShowIndexes();
1155
+ const enabledLightShowIndexes = this.getEnabledLightShowIndexes(deviceId);
1076
1156
 
1077
1157
  const lightShows = BUILT_IN_CYNC_LIGHT_SHOWS.filter(
1078
1158
  lightShow =>
@@ -1081,7 +1161,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1081
1161
  );
1082
1162
 
1083
1163
  if (
1084
- this.shouldExposeLightShows() &&
1164
+ this.shouldExposeLightShows(deviceId) &&
1085
1165
  supportsLightShows
1086
1166
  ) {
1087
1167
  for (const lightShow of lightShows) {
@@ -1142,7 +1222,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1142
1222
  }
1143
1223
  }
1144
1224
 
1145
- const enabledMusicShowIndexes = this.getEnabledMusicShowIndexes();
1225
+ const enabledMusicShowIndexes = this.getEnabledMusicShowIndexes(deviceId);
1146
1226
 
1147
1227
  const musicShows = BUILT_IN_CYNC_MUSIC_SHOWS.filter(
1148
1228
  musicShow =>
@@ -1151,7 +1231,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1151
1231
  );
1152
1232
 
1153
1233
  if (
1154
- this.shouldExposeMusicShows() &&
1234
+ this.shouldExposeMusicShows(deviceId) &&
1155
1235
  supportsMusicShows
1156
1236
  ) {
1157
1237
  for (const musicShow of musicShows) {
@@ -1211,11 +1291,34 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1211
1291
  }
1212
1292
  }
1213
1293
 
1294
+ const enabledCustomLightShowIndexes = this.getEnabledCustomShowIndexes(
1295
+ deviceId,
1296
+ 'customLightShowIndexes',
1297
+ );
1298
+ const enabledMultiColorSchemeIndexes = this.getEnabledCustomShowIndexes(
1299
+ deviceId,
1300
+ 'multiColorSchemeIndexes',
1301
+ );
1302
+ const enabledCustomMusicShowIndexes = this.getEnabledCustomShowIndexes(
1303
+ deviceId,
1304
+ 'customMusicShowIndexes',
1305
+ );
1306
+
1307
+ const selectedCustomLightShows = customLightShows.filter(show =>
1308
+ enabledCustomLightShowIndexes === null || enabledCustomLightShowIndexes.has(show.index),
1309
+ );
1310
+ const selectedMultiColorSchemes = customMultiColorSchemes.filter(scheme =>
1311
+ enabledMultiColorSchemeIndexes === null || enabledMultiColorSchemeIndexes.has(scheme.index),
1312
+ );
1313
+ const selectedCustomMusicShows = customMusicShows.filter(show =>
1314
+ enabledCustomMusicShowIndexes === null || enabledCustomMusicShowIndexes.has(show.index),
1315
+ );
1316
+
1214
1317
  if (
1215
- this.shouldExposeCustomShows() &&
1318
+ this.shouldExposeCustomShows(deviceId) &&
1216
1319
  supportsLightShows
1217
1320
  ) {
1218
- for (const customLightShow of customLightShows) {
1321
+ for (const customLightShow of selectedCustomLightShows) {
1219
1322
  const showIndex = customLightShow.index;
1220
1323
  const showName = customLightShow.name;
1221
1324
 
@@ -1263,8 +1366,8 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1263
1366
 
1264
1367
  for (
1265
1368
  const customMultiColorScheme of
1266
- (supportsSegmentedControl || customMultiColorSchemes.length > 0)
1267
- ? customMultiColorSchemes
1369
+ (supportsSegmentedControl || selectedMultiColorSchemes.length > 0)
1370
+ ? selectedMultiColorSchemes
1268
1371
  : []
1269
1372
  ) {
1270
1373
  const schemeIndex = customMultiColorScheme.index;
@@ -1311,7 +1414,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1311
1414
  );
1312
1415
  }
1313
1416
 
1314
- for (const customMusicShow of supportsMusicShows ? customMusicShows : []) {
1417
+ for (const customMusicShow of supportsMusicShows ? selectedCustomMusicShows : []) {
1315
1418
  const showIndex = customMusicShow.index;
1316
1419
  const showName = customMusicShow.name;
1317
1420
 
@@ -1357,7 +1460,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1357
1460
  }
1358
1461
 
1359
1462
  const enabledLightShowIndexesForCleanup =
1360
- this.shouldExposeLightShows() &&
1463
+ this.shouldExposeLightShows(deviceId) &&
1361
1464
  supportsLightShows
1362
1465
  ? new Set(lightShows.map((lightShow) => lightShow.index))
1363
1466
  : new Set<number>();
@@ -1372,7 +1475,7 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1372
1475
  );
1373
1476
 
1374
1477
  const enabledMusicShowIndexesForCleanup =
1375
- this.shouldExposeMusicShows() &&
1478
+ this.shouldExposeMusicShows(deviceId) &&
1376
1479
  supportsMusicShows
1377
1480
  ? new Set(musicShows.map((musicShow) => musicShow.index))
1378
1481
  : new Set<number>();
@@ -1387,9 +1490,9 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1387
1490
  );
1388
1491
 
1389
1492
  const enabledCustomLightShowIndexesForCleanup =
1390
- this.shouldExposeCustomShows() &&
1493
+ this.shouldExposeCustomShows(deviceId) &&
1391
1494
  supportsLightShows
1392
- ? new Set(customLightShows.map((customLightShow) => customLightShow.index))
1495
+ ? new Set(selectedCustomLightShows.map((customLightShow) => customLightShow.index))
1393
1496
  : new Set<number>();
1394
1497
 
1395
1498
  this.cleanupDisabledShowAccessoriesForDevice(
@@ -1402,9 +1505,9 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1402
1505
  );
1403
1506
 
1404
1507
  const enabledCustomMultiColorIndexesForCleanup =
1405
- this.shouldExposeCustomShows() &&
1406
- (supportsSegmentedControl || customMultiColorSchemes.length > 0)
1407
- ? new Set(customMultiColorSchemes.map((scheme) => scheme.index))
1508
+ this.shouldExposeCustomShows(deviceId) &&
1509
+ (supportsSegmentedControl || selectedMultiColorSchemes.length > 0)
1510
+ ? new Set(selectedMultiColorSchemes.map((scheme) => scheme.index))
1408
1511
  : new Set<number>();
1409
1512
 
1410
1513
  this.cleanupDisabledShowAccessoriesForDevice(
@@ -1417,9 +1520,9 @@ export class CyncAppPlatform implements DynamicPlatformPlugin {
1417
1520
  );
1418
1521
 
1419
1522
  const enabledCustomMusicShowIndexesForCleanup =
1420
- this.shouldExposeCustomShows() &&
1523
+ this.shouldExposeCustomShows(deviceId) &&
1421
1524
  supportsMusicShows
1422
- ? new Set(customMusicShows.map((customMusicShow) => customMusicShow.index))
1525
+ ? new Set(selectedCustomMusicShows.map((customMusicShow) => customMusicShow.index))
1423
1526
  : new Set<number>();
1424
1527
 
1425
1528
  this.cleanupDisabledShowAccessoriesForDevice(