homebridge-nanoleaf-multi 4.0.2 → 5.0.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/dist/Device.d.ts CHANGED
@@ -13,5 +13,6 @@ export declare class Device {
13
13
  private withWriteLock;
14
14
  setActive(active: boolean): Promise<void>;
15
15
  setActiveEffect(effect: Effect<any>): Promise<void>;
16
+ setBrightness(brightness: number): Promise<void>;
16
17
  addNativeEffect(nativeEffect: NativeEffect): Promise<void>;
17
18
  }
package/dist/Device.js CHANGED
@@ -96,6 +96,13 @@ class Device {
96
96
  }));
97
97
  });
98
98
  }
99
+ setBrightness(brightness) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ yield this.withWriteLock(() => __awaiter(this, void 0, void 0, function* () {
102
+ yield this.nanoleafClient.setBrightness(brightness * 100);
103
+ }));
104
+ });
105
+ }
99
106
  addNativeEffect(nativeEffect) {
100
107
  return __awaiter(this, void 0, void 0, function* () {
101
108
  yield this.withWriteLock(() => __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"Device.js","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Device.js","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"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"}
package/dist/Zone.d.ts CHANGED
@@ -15,16 +15,22 @@ export declare class Zone extends EventEmitter {
15
15
  initialize(): Promise<void>;
16
16
  private devices;
17
17
  private get devicesArray();
18
+ private active;
19
+ getActive(): boolean;
18
20
  setActive(active: boolean): Promise<void>;
19
21
  private effects;
20
- private activeEffectId;
21
22
  getEffects(): Map<string, Effect<any>>;
22
23
  getEffect<T extends Effect<any> = Effect<EffectConfigurationBase>>(effectId: string): T | null;
24
+ getDefaultEffectId(): string;
25
+ private effectId;
26
+ getEffectIdOrDefault(): string;
27
+ get effect(): Effect<EffectConfigurationBase>;
28
+ get activeEffectId(): string;
23
29
  get activeEffect(): Effect<EffectConfigurationBase>;
24
- getDefaultActiveEffectId(): string;
25
30
  setActiveEffectById(effectId: string): Promise<void>;
26
- setActiveEffect(effect: Effect<any>): Promise<void>;
27
- getActiveEffectId(): string;
31
+ private brightness;
32
+ getBrightness(): number;
33
+ setBrightness(brightness: number): Promise<void>;
28
34
  private autoOffTimeout;
29
35
  private setAutoOffTimeout;
30
36
  private clearAutoOffTimeout;
package/dist/Zone.js CHANGED
@@ -28,6 +28,8 @@ class Zone extends events_1.default {
28
28
  this.devices = new Set();
29
29
  // Effects
30
30
  this.effects = new Map();
31
+ // Brightness
32
+ this.brightness = 1;
31
33
  this.configuration = configuration;
32
34
  this.context = context;
33
35
  configuration.devices.forEach((deviceConfiguration) => {
@@ -44,7 +46,7 @@ class Zone extends events_1.default {
44
46
  if (this.activeEffectId !== effect.id)
45
47
  return;
46
48
  this.context.log.info(`The active effect '${effect.name}' changed, applying to zone`);
47
- this.setActiveEffect(effect);
49
+ this.setActiveEffectById(effect.id);
48
50
  });
49
51
  this.effects.set(effect.id, effect);
50
52
  });
@@ -89,18 +91,18 @@ class Zone extends events_1.default {
89
91
  get devicesArray() {
90
92
  return Array.from(this.devices);
91
93
  }
94
+ getActive() {
95
+ return !!this.active;
96
+ }
92
97
  setActive(active) {
93
98
  return __awaiter(this, void 0, void 0, function* () {
94
99
  if (!active) {
95
100
  this.clearAutoOffTimeout();
96
101
  }
102
+ this.active = active;
97
103
  yield Promise.all(this.devicesArray.map((device) => __awaiter(this, void 0, void 0, function* () {
98
104
  yield device.setActive(active);
99
105
  })));
100
- const { activeEffect } = this;
101
- if (active && !!activeEffect) {
102
- yield this.setActiveEffect(activeEffect);
103
- }
104
106
  });
105
107
  }
106
108
  getEffects() {
@@ -110,24 +112,37 @@ class Zone extends events_1.default {
110
112
  const effect = this.effects.get(effectId);
111
113
  return effect || null;
112
114
  }
113
- get activeEffect() {
114
- return this.getEffect(this.activeEffectId);
115
- }
116
- getDefaultActiveEffectId() {
115
+ getDefaultEffectId() {
117
116
  if (this.effects.size === 0) {
118
117
  return null;
119
118
  }
120
119
  return Array.from(this.effects.values())[0].id;
121
120
  }
122
- setActiveEffectById(effectId) {
123
- return __awaiter(this, void 0, void 0, function* () {
124
- this.activeEffectId = effectId;
125
- yield this.setActiveEffect(this.activeEffect);
126
- });
121
+ getEffectIdOrDefault() {
122
+ var _a;
123
+ return (_a = this.effectId) !== null && _a !== void 0 ? _a : this.getDefaultEffectId();
124
+ }
125
+ get effect() {
126
+ return this.getEffect(this.getEffectIdOrDefault());
127
+ }
128
+ get activeEffectId() {
129
+ if (!this.active)
130
+ return null;
131
+ return this.effectId;
127
132
  }
128
- setActiveEffect(effect) {
133
+ get activeEffect() {
134
+ if (!this.activeEffectId)
135
+ return null;
136
+ return this.getEffect(this.activeEffectId);
137
+ }
138
+ setActiveEffectById(effectId) {
129
139
  return __awaiter(this, void 0, void 0, function* () {
140
+ this.effectId = effectId;
130
141
  this.clearAutoOffTimeout();
142
+ if (!this.active) {
143
+ this.setActive(true);
144
+ }
145
+ const effect = this.activeEffect;
131
146
  yield Promise.all(Array.from(this.devices).map((device) => {
132
147
  return device.setActiveEffect(effect);
133
148
  }));
@@ -136,8 +151,32 @@ class Zone extends events_1.default {
136
151
  }
137
152
  });
138
153
  }
139
- getActiveEffectId() {
140
- return this.activeEffectId;
154
+ getBrightness() {
155
+ if (!this.active)
156
+ return 0;
157
+ return this.brightness;
158
+ }
159
+ setBrightness(brightness) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const previousBrightness = this.brightness;
162
+ const previousActive = previousBrightness > 0;
163
+ const active = brightness > 0;
164
+ // if (this.context.persistence) {
165
+ // this.context.log.debug(
166
+ // `Persisting zone ${logAccessoryName(
167
+ // this.name
168
+ // )} brightness = ${logPercent(brightness)}`
169
+ // );
170
+ // await this.context.persistence.setZoneBrightness(this.id, brightness);
171
+ // }
172
+ if (brightness > 0) {
173
+ this.brightness = brightness;
174
+ yield Promise.all(this.devicesArray.map((device) => device.setBrightness(brightness)));
175
+ }
176
+ if (active !== previousActive) {
177
+ this.setActive(active);
178
+ }
179
+ });
141
180
  }
142
181
  setAutoOffTimeout(duration) {
143
182
  this.autoOffTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
package/dist/Zone.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Zone.js","sourceRoot":"","sources":["../src/Zone.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,mCASiB;AACjB,2CAAuE;AAEvE,qCAAkC;AAElC,+CAA4C;AAC5C,6CAA0C;AAC1C,iDAA8C;AAE9C,MAAa,IAAK,SAAQ,gBAAY;IAIpC,YAAY,aAAgC,EAAE,OAAgB;;QAC5D,KAAK,EAAE,CAAC;QA0FV,UAAU;QACF,YAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAwBpC,UAAU;QACF,YAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;QAlH/C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;YACpD,IAAI,mBAAmB,CAAC,QAAQ,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAEpE,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAExD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAA,IAAI,CAAC,aAAa,CAAC,OAAO,0CAAE,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;YACtD,MAAM,CAAC,EAAE,CAAC,+BAAmB,EAAE,GAAG,EAAE;gBAClC,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,EAAE;oBAAE,OAAO;gBAE9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACnB,sBAAsB,MAAM,CAAC,IAAI,6BAA6B,CAC/D,CAAC;gBAEF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC/B,CAAC;IAEM,YAAY,CAAC,aAAkC;QACpD,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,kBAAU,CAAC,KAAK;gBACnB,OAAO,IAAI,yBAAW,CACpB,aAAyC,EACzC,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,KAAK,kBAAU,CAAC,IAAI;gBAClB,OAAO,IAAI,uBAAU,CACnB,aAAwC,EACxC,IAAI,CAAC,OAAO,CACb,CAAC;YACJ,KAAK,kBAAU,CAAC,MAAM;gBACpB,OAAO,IAAI,2BAAY,CACrB,aAA0C,EAC1C,IAAI,CAAC,OAAO,CACb,CAAC;QACN,CAAC;IACH,CAAC;IAED,iBAAiB;IACJ,UAAU;;YACrB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAO,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CACpB,gCAAgC,MAAM,CAAC,IAAI,GAAG,EAC9C,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC,CAAA,CAAC,CACH,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAO,MAAM,EAAE,EAAE;gBACrD,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CACpB,gCAAgC,MAAM,CAAC,IAAI,GAAG,EAC9C,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC,CAAA,CAAC,CACH,CAAC;QACJ,CAAC;KAAA;IAKD,IAAY,YAAY;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEY,SAAS,CAAC,MAAe;;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAO,MAAM,EAAE,EAAE;gBACrC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC,CAAA,CAAC,CACH,CAAC;YAEF,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;YAE9B,IAAI,MAAM,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;KAAA;IAMM,UAAU;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,SAAS,CACd,QAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE1C,OAAQ,MAAY,IAAI,IAAI,CAAC;IAC/B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAEM,wBAAwB;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAEY,mBAAmB,CAAC,QAAgB;;YAC/C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YAE/B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;KAAA;IAEY,eAAe,CAAC,MAAmB;;YAC9C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACtC,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC,CAAC,CACH,CAAC;YAEF,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;KAAA;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAKO,iBAAiB,CAAC,QAAgB;QACxC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAS,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAE5B,IAAI,CAAC,IAAI,CAAC,+BAAmB,CAAC,CAAC;gBAE/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAA,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF;AAlMD,oBAkMC"}
1
+ {"version":3,"file":"Zone.js","sourceRoot":"","sources":["../src/Zone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BrightnessAccessory } from 'helpers-for-homebridge';
2
+ import { Context } from '../types';
3
+ import { Zone } from '../Zone';
4
+ export declare class ZoneBrightnessAccessory extends BrightnessAccessory {
5
+ private readonly zone;
6
+ constructor(zone: Zone, context: Context);
7
+ getBrightness(): Promise<number>;
8
+ setBrightness(brightness: number): Promise<void>;
9
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ZoneBrightnessAccessory = void 0;
13
+ const helpers_for_homebridge_1 = require("helpers-for-homebridge");
14
+ class ZoneBrightnessAccessory extends helpers_for_homebridge_1.BrightnessAccessory {
15
+ constructor(zone, context) {
16
+ super({
17
+ name: zone.name + ' Brightness',
18
+ serial: zone.id + '_brightness',
19
+ model: 'Nanoleaf Multi Zone Brightness',
20
+ }, context);
21
+ this.zone = zone;
22
+ }
23
+ getBrightness() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ return this.zone.getBrightness();
26
+ });
27
+ }
28
+ setBrightness(brightness) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ return this.zone.setBrightness(brightness);
31
+ });
32
+ }
33
+ }
34
+ exports.ZoneBrightnessAccessory = ZoneBrightnessAccessory;
35
+ //# sourceMappingURL=ZoneBrightnessAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZoneBrightnessAccessory.js","sourceRoot":"","sources":["../../src/accessories/ZoneBrightnessAccessory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAA6D;AAI7D,MAAa,uBAAwB,SAAQ,4CAAmB;IAC9D,YACmB,IAAU,EAC3B,OAAgB;QAEhB,KAAK,CACH;YACE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,aAAa;YAC/B,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,aAAa;YAC/B,KAAK,EAAE,gCAAgC;SACxC,EACD,OAAO,CACR,CAAC;QAVe,SAAI,GAAJ,IAAI,CAAM;IAW7B,CAAC;IAEqB,aAAa;;YACjC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,CAAC;KAAA;IAEqB,aAAa,CAAC,UAAkB;;YACpD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;KAAA;CACF;AAtBD,0DAsBC"}
@@ -1,11 +1,9 @@
1
1
  import { SelectionAccessory } from 'helpers-for-homebridge';
2
2
  import { Context } from '../types';
3
3
  import { Zone } from '../Zone';
4
- export declare class ZoneAccessory extends SelectionAccessory {
4
+ export declare class ZoneEffectAccessory extends SelectionAccessory {
5
5
  private readonly zone;
6
6
  constructor(zone: Zone, context: Context);
7
- private active;
8
- private activeOptionId;
9
7
  protected getActiveOptionId(): Promise<string>;
10
8
  protected setActiveOptionId(effectId: string): Promise<void>;
11
9
  protected getActive(): Promise<boolean>;
@@ -9,14 +9,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ZoneAccessory = void 0;
12
+ exports.ZoneEffectAccessory = void 0;
13
13
  const helpers_for_homebridge_1 = require("helpers-for-homebridge");
14
- class ZoneAccessory extends helpers_for_homebridge_1.SelectionAccessory {
14
+ const constants_1 = require("../constants");
15
+ class ZoneEffectAccessory extends helpers_for_homebridge_1.SelectionAccessory {
15
16
  constructor(zone, context) {
16
17
  super({
17
- name: zone.name,
18
- serial: zone.id,
19
- model: 'Nanoleaf Multi Zone',
18
+ name: zone.name + ' Effect',
19
+ serial: zone.id + '_effect',
20
+ model: 'Nanoleaf Multi Zone Effect',
21
+ mode: constants_1.ZONE_EFFECT_SELECTION_ACCESSORY_MODE,
20
22
  options: zone.configuration.effects.map((effectConfiguration) => {
21
23
  return {
22
24
  name: effectConfiguration.name,
@@ -26,31 +28,27 @@ class ZoneAccessory extends helpers_for_homebridge_1.SelectionAccessory {
26
28
  }),
27
29
  }, context);
28
30
  this.zone = zone;
29
- this.active = false;
30
- this.activeOptionId = this.configuration.options[0].id;
31
31
  }
32
32
  getActiveOptionId() {
33
33
  return __awaiter(this, void 0, void 0, function* () {
34
- return this.activeOptionId;
34
+ return this.zone.getEffectIdOrDefault();
35
35
  });
36
36
  }
37
37
  setActiveOptionId(effectId) {
38
38
  return __awaiter(this, void 0, void 0, function* () {
39
- this.activeOptionId = effectId;
40
39
  yield this.zone.setActiveEffectById(effectId);
41
40
  });
42
41
  }
43
42
  getActive() {
44
43
  return __awaiter(this, void 0, void 0, function* () {
45
- return this.active;
44
+ return this.zone.getActive();
46
45
  });
47
46
  }
48
47
  setActive(active) {
49
48
  return __awaiter(this, void 0, void 0, function* () {
50
- this.active = active;
51
49
  yield this.zone.setActive(active);
52
50
  });
53
51
  }
54
52
  }
55
- exports.ZoneAccessory = ZoneAccessory;
56
- //# sourceMappingURL=ZoneAccessory.js.map
53
+ exports.ZoneEffectAccessory = ZoneEffectAccessory;
54
+ //# sourceMappingURL=ZoneEffectAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZoneEffectAccessory.js","sourceRoot":"","sources":["../../src/accessories/ZoneEffectAccessory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAA4D;AAG5D,4CAAoE;AAEpE,MAAa,mBAAoB,SAAQ,2CAAkB;IACzD,YACmB,IAAU,EAC3B,OAAgB;QAEhB,KAAK,CACH;YACE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS;YAC3B,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,SAAS;YAC3B,KAAK,EAAE,4BAA4B;YACnC,IAAI,EAAE,gDAAoC;YAC1C,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,EAAE;gBAC9D,OAAO;oBACL,IAAI,EAAE,mBAAmB,CAAC,IAAI;oBAC9B,EAAE,EAAE,mBAAmB,CAAC,EAAE;oBAC1B,aAAa,EAAE,mBAAmB,CAAC,aAAa;iBACjD,CAAC;YACJ,CAAC,CAAC;SACH,EACD,OAAO,CACR,CAAC;QAlBe,SAAI,GAAJ,IAAI,CAAM;IAmB7B,CAAC;IAEwB,iBAAiB;;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,CAAC;KAAA;IAEwB,iBAAiB,CAAC,QAAgB;;YACzD,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;KAAA;IAEwB,SAAS;;YAChC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,CAAC;KAAA;IAEwB,SAAS,CAAC,MAAe;;YAChD,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;KAAA;CACF;AAtCD,kDAsCC"}
@@ -1 +1,2 @@
1
- export * from './ZoneAccessory';
1
+ export * from './ZoneBrightnessAccessory';
2
+ export * from './ZoneEffectAccessory';
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ZoneAccessory"), exports);
17
+ __exportStar(require("./ZoneBrightnessAccessory"), exports);
18
+ __exportStar(require("./ZoneEffectAccessory"), exports);
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/accessories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,wDAAsC"}
@@ -1,5 +1,6 @@
1
1
  import { ColorHSV } from '@manganese/palette-kit-core';
2
2
  import { NativeEffect, NativeEffectType } from './types';
3
+ import { SelectionAccessoryMode } from 'helpers-for-homebridge';
3
4
  export declare const OFF_COLOR: ColorHSV;
4
5
  export declare const DEFAULT_DEVICE_SIZE = 50;
5
6
  export declare const EFFECT_CHANGE_EVENT = "change";
@@ -8,3 +9,4 @@ export declare const DEFAULT_NATIVE_EFFECT_NAME = "Dynamic Effect";
8
9
  export declare const NATIVE_EFFECT_TYPE_UUIDS: Map<NativeEffectType, string>;
9
10
  export declare const NATIVE_EFFECT_BASE: NativeEffect;
10
11
  export declare const ZONE_AUTO_OFF_EVENT = "zone_auto_off";
12
+ export declare const ZONE_EFFECT_SELECTION_ACCESSORY_MODE: SelectionAccessoryMode;
package/dist/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZONE_AUTO_OFF_EVENT = exports.NATIVE_EFFECT_BASE = exports.NATIVE_EFFECT_TYPE_UUIDS = exports.DEFAULT_NATIVE_EFFECT_NAME = exports.EFFECT_SPEED_COEFFICIENT = exports.EFFECT_CHANGE_EVENT = exports.DEFAULT_DEVICE_SIZE = exports.OFF_COLOR = void 0;
3
+ exports.ZONE_EFFECT_SELECTION_ACCESSORY_MODE = exports.ZONE_AUTO_OFF_EVENT = exports.NATIVE_EFFECT_BASE = exports.NATIVE_EFFECT_TYPE_UUIDS = exports.DEFAULT_NATIVE_EFFECT_NAME = exports.EFFECT_SPEED_COEFFICIENT = exports.EFFECT_CHANGE_EVENT = exports.DEFAULT_DEVICE_SIZE = exports.OFF_COLOR = void 0;
4
4
  const palette_kit_core_1 = require("@manganese/palette-kit-core");
5
5
  const types_1 = require("./types");
6
6
  exports.OFF_COLOR = {
@@ -33,4 +33,5 @@ exports.NATIVE_EFFECT_BASE = {
33
33
  hasOverlay: false,
34
34
  };
35
35
  exports.ZONE_AUTO_OFF_EVENT = 'zone_auto_off';
36
+ exports.ZONE_EFFECT_SELECTION_ACCESSORY_MODE = 'outlet';
36
37
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,kEAAmE;AACnE,mCAAyD;AAE5C,QAAA,SAAS,GAAa;IACjC,KAAK,EAAE,6BAAU,CAAC,GAAG;IACrB,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,CAAC;CACT,CAAC;AACW,QAAA,mBAAmB,GAAG,EAAE,CAAC;AACzB,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAC/B,QAAA,wBAAwB,GAAG,GAAG,CAAC;AAC/B,QAAA,0BAA0B,GAAG,gBAAgB,CAAC;AAC9C,QAAA,wBAAwB,GAAG,IAAI,GAAG,CAA2B;IACxE,CAAC,wBAAgB,CAAC,KAAK,EAAE,sCAAsC,CAAC;IAChE,CAAC,wBAAgB,CAAC,IAAI,EAAE,sCAAsC,CAAC;IAC/D,CAAC,wBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC;IAClE,CAAC,wBAAgB,CAAC,IAAI,EAAE,sCAAsC,CAAC;IAC/D,CAAC,wBAAgB,CAAC,MAAM,EAAE,sCAAsC,CAAC;IACjE,CAAC,wBAAgB,CAAC,SAAS,EAAE,sCAAsC,CAAC;CACrE,CAAC,CAAC;AACU,QAAA,kBAAkB,GAAiB;IAC9C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,kCAA0B;IACpC,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,gCAAwB,CAAC,GAAG,CAAC,wBAAgB,CAAC,IAAI,CAAC;IAC/D,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC;AACW,QAAA,mBAAmB,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,kEAAmE;AACnE,mCAAyD;AAG5C,QAAA,SAAS,GAAa;IACjC,KAAK,EAAE,6BAAU,CAAC,GAAG;IACrB,GAAG,EAAE,CAAC;IACN,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,CAAC;CACT,CAAC;AACW,QAAA,mBAAmB,GAAG,EAAE,CAAC;AACzB,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAC/B,QAAA,wBAAwB,GAAG,GAAG,CAAC;AAC/B,QAAA,0BAA0B,GAAG,gBAAgB,CAAC;AAC9C,QAAA,wBAAwB,GAAG,IAAI,GAAG,CAA2B;IACxE,CAAC,wBAAgB,CAAC,KAAK,EAAE,sCAAsC,CAAC;IAChE,CAAC,wBAAgB,CAAC,IAAI,EAAE,sCAAsC,CAAC;IAC/D,CAAC,wBAAgB,CAAC,OAAO,EAAE,sCAAsC,CAAC;IAClE,CAAC,wBAAgB,CAAC,IAAI,EAAE,sCAAsC,CAAC;IAC/D,CAAC,wBAAgB,CAAC,MAAM,EAAE,sCAAsC,CAAC;IACjE,CAAC,wBAAgB,CAAC,SAAS,EAAE,sCAAsC,CAAC;CACrE,CAAC,CAAC;AACU,QAAA,kBAAkB,GAAiB;IAC9C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,kCAA0B;IACpC,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,gCAAwB,CAAC,GAAG,CAAC,wBAAgB,CAAC,IAAI,CAAC;IAC/D,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,KAAK;CAClB,CAAC;AACW,QAAA,mBAAmB,GAAG,eAAe,CAAC;AACtC,QAAA,oCAAoC,GAC/C,QAAQ,CAAC"}
@@ -43,14 +43,17 @@ exports.default = (homebridge) => {
43
43
  accessories(callback) {
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
45
  yield this.context.paletteClient.connect();
46
- const zoneAccessories = yield Promise.all(Array.from(this.zones.values()).map((zone) => __awaiter(this, void 0, void 0, function* () {
47
- yield zone.initialize();
48
- const zoneAccessory = new accessories_1.ZoneAccessory(zone, this.context);
46
+ yield Promise.all(Array.from(this.zones.values()).map((zone) => __awaiter(this, void 0, void 0, function* () {
47
+ return yield zone.initialize();
48
+ })));
49
+ const zoneAccessories = yield Promise.all(Array.from(this.zones.values()).flatMap((zone) => {
50
+ const zoneEffectAccessory = new accessories_1.ZoneEffectAccessory(zone, this.context);
51
+ const zoneBrightnessAccessory = new accessories_1.ZoneBrightnessAccessory(zone, this.context);
49
52
  zone.on(constants_1.ZONE_AUTO_OFF_EVENT, () => {
50
- zoneAccessory.updateActive(false);
53
+ zoneEffectAccessory.updateActive(false);
51
54
  });
52
- return zoneAccessory;
53
- })));
55
+ return [zoneEffectAccessory, zoneBrightnessAccessory];
56
+ }));
54
57
  const accessories = [...zoneAccessories];
55
58
  callback(accessories);
56
59
  });
@@ -1 +1 @@
1
- {"version":3,"file":"platformFactory.js","sourceRoot":"","sources":["../src/platformFactory.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2DAA4C;AAE5C,mEAA+D;AAC/D,kEAAsD;AACtD,sEAA8D;AAG9D,+CAA8C;AAC9C,2CAAkD;AAClD,iCAA8B;AAE9B,kBAAe,CAAC,UAAe,EAAE,EAAE;IACjC,MAAM,QAAQ;QAIZ,YACE,aAAsB,EACb,aAAoC;YAApC,kBAAa,GAAb,aAAa,CAAuB;YAJ/C,UAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;YAM5C,MAAM,GAAG,GAAG,IAAI,2BAAM,CAAC;gBACrB,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,CAAC,IAAI,8CAAqB,CAAC,aAAa,CAAC,CAAC;aACtD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,0BAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,kCAAa,CACrC,aAAa,CAAC,aAAa,EAC3B;gBACE,GAAG;aACJ,EACD,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG;gBACb,UAAU;gBACV,GAAG;gBACH,OAAO;gBACP,aAAa;aACd,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE;gBACrD,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAEY,WAAW,CAAC,QAAQ;;gBAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAE3C,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;oBACjD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;oBAExB,MAAM,aAAa,GAAG,IAAI,2BAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAE5D,IAAI,CAAC,EAAE,CAAC,+BAAmB,EAAE,GAAG,EAAE;wBAChC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;oBAEH,OAAO,aAAa,CAAC;gBACvB,CAAC,CAAA,CAAC,CACH,CAAC;gBAEF,MAAM,WAAW,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;gBAEzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SAAA;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"platformFactory.js","sourceRoot":"","sources":["../src/platformFactory.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2DAA4C;AAE5C,mEAA+D;AAC/D,kEAAsD;AACtD,sEAA8D;AAG9D,+CAA6E;AAC7E,2CAAkD;AAClD,iCAA8B;AAE9B,kBAAe,CAAC,UAAe,EAAE,EAAE;IACjC,MAAM,QAAQ;QAIZ,YACE,aAAsB,EACb,aAAoC;YAApC,kBAAa,GAAb,aAAa,CAAuB;YAJ/C,UAAK,GAAG,IAAI,GAAG,EAA8B,CAAC;YAM5C,MAAM,GAAG,GAAG,IAAI,2BAAM,CAAC;gBACrB,KAAK,EAAE,OAAO;gBACd,SAAS,EAAE,CAAC,IAAI,8CAAqB,CAAC,aAAa,CAAC,CAAC;aACtD,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,0BAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,kCAAa,CACrC,aAAa,CAAC,aAAa,EAC3B;gBACE,GAAG;aACJ,EACD,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG;gBACb,UAAU;gBACV,GAAG;gBACH,OAAO;gBACP,aAAa;aACd,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE;gBACrD,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QAEY,WAAW,CAAC,QAAQ;;gBAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC3C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE;oBACjD,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjC,CAAC,CAAA,CAAC,CACH,CAAC;gBAEF,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/C,MAAM,mBAAmB,GAAG,IAAI,iCAAmB,CACjD,IAAI,EACJ,IAAI,CAAC,OAAO,CACb,CAAC;oBACF,MAAM,uBAAuB,GAAG,IAAI,qCAAuB,CACzD,IAAI,EACJ,IAAI,CAAC,OAAO,CACb,CAAC;oBAEF,IAAI,CAAC,EAAE,CAAC,+BAAmB,EAAE,GAAG,EAAE;wBAChC,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC;gBACxD,CAAC,CAAC,CACH,CAAC;gBAEF,MAAM,WAAW,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;gBAEzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SAAA;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "keywords": [
7
7
  "homebridge-plugin"
8
8
  ],
9
- "version": "4.0.2",
9
+ "version": "5.0.1",
10
10
  "deprecated": false,
11
11
  "author": {
12
12
  "name": "Samuel Goodell"
@@ -36,7 +36,7 @@
36
36
  "async-lock": "^1.2.4",
37
37
  "axios": "^0.19.2",
38
38
  "colors": "^1.4.0",
39
- "helpers-for-homebridge": "^4.2.3",
39
+ "helpers-for-homebridge": "^4.4.0",
40
40
  "nanoleaf-client-multi": "^2.0.1",
41
41
  "rwlock": "^5.0.0",
42
42
  "simple-node-logger": "^21.8.12"
package/src/Device.ts CHANGED
@@ -106,6 +106,12 @@ export class Device {
106
106
  });
107
107
  }
108
108
 
109
+ public async setBrightness(brightness: number): Promise<void> {
110
+ await this.withWriteLock(async () => {
111
+ await this.nanoleafClient.setBrightness(brightness * 100);
112
+ });
113
+ }
114
+
109
115
  public async addNativeEffect(nativeEffect: NativeEffect) {
110
116
  await this.withWriteLock(async () => {
111
117
  await this.nanoleafClient.addEffect(nativeEffect);
package/src/Zone.ts CHANGED
@@ -48,7 +48,7 @@ export class Zone extends EventEmitter {
48
48
  `The active effect '${effect.name}' changed, applying to zone`
49
49
  );
50
50
 
51
- this.setActiveEffect(effect);
51
+ this.setActiveEffectById(effect.id);
52
52
  });
53
53
 
54
54
  this.effects.set(effect.id, effect);
@@ -119,27 +119,29 @@ export class Zone extends EventEmitter {
119
119
  return Array.from(this.devices);
120
120
  }
121
121
 
122
+ // Active
123
+ private active: boolean;
124
+
125
+ public getActive() {
126
+ return !!this.active;
127
+ }
128
+
122
129
  public async setActive(active: boolean) {
123
130
  if (!active) {
124
131
  this.clearAutoOffTimeout();
125
132
  }
126
133
 
134
+ this.active = active;
135
+
127
136
  await Promise.all(
128
137
  this.devicesArray.map(async (device) => {
129
138
  await device.setActive(active);
130
139
  })
131
140
  );
132
-
133
- const { activeEffect } = this;
134
-
135
- if (active && !!activeEffect) {
136
- await this.setActiveEffect(activeEffect);
137
- }
138
141
  }
139
142
 
140
143
  // Effects
141
144
  private effects = new Map<string, Effect<any>>();
142
- private activeEffectId: string;
143
145
 
144
146
  public getEffects() {
145
147
  return this.effects;
@@ -153,11 +155,7 @@ export class Zone extends EventEmitter {
153
155
  return (effect as T) || null;
154
156
  }
155
157
 
156
- public get activeEffect() {
157
- return this.getEffect(this.activeEffectId);
158
- }
159
-
160
- public getDefaultActiveEffectId() {
158
+ public getDefaultEffectId() {
161
159
  if (this.effects.size === 0) {
162
160
  return null;
163
161
  }
@@ -165,15 +163,37 @@ export class Zone extends EventEmitter {
165
163
  return Array.from(this.effects.values())[0].id;
166
164
  }
167
165
 
168
- public async setActiveEffectById(effectId: string) {
169
- this.activeEffectId = effectId;
166
+ private effectId: string;
167
+
168
+ public getEffectIdOrDefault() {
169
+ return this.effectId ?? this.getDefaultEffectId();
170
+ }
171
+ public get effect() {
172
+ return this.getEffect(this.getEffectIdOrDefault());
173
+ }
174
+
175
+ public get activeEffectId() {
176
+ if (!this.active) return null;
177
+
178
+ return this.effectId;
179
+ }
170
180
 
171
- await this.setActiveEffect(this.activeEffect);
181
+ public get activeEffect() {
182
+ if (!this.activeEffectId) return null;
183
+
184
+ return this.getEffect(this.activeEffectId);
172
185
  }
173
186
 
174
- public async setActiveEffect(effect: Effect<any>) {
187
+ public async setActiveEffectById(effectId: string) {
188
+ this.effectId = effectId;
175
189
  this.clearAutoOffTimeout();
176
190
 
191
+ if (!this.active) {
192
+ this.setActive(true);
193
+ }
194
+
195
+ const effect = this.activeEffect;
196
+
177
197
  await Promise.all(
178
198
  Array.from(this.devices).map((device) => {
179
199
  return device.setActiveEffect(effect);
@@ -185,8 +205,41 @@ export class Zone extends EventEmitter {
185
205
  }
186
206
  }
187
207
 
188
- public getActiveEffectId() {
189
- return this.activeEffectId;
208
+ // Brightness
209
+ private brightness: number = 1;
210
+
211
+ public getBrightness() {
212
+ if (!this.active) return 0;
213
+
214
+ return this.brightness;
215
+ }
216
+
217
+ public async setBrightness(brightness: number): Promise<void> {
218
+ const previousBrightness = this.brightness;
219
+ const previousActive = previousBrightness > 0;
220
+ const active = brightness > 0;
221
+
222
+ // if (this.context.persistence) {
223
+ // this.context.log.debug(
224
+ // `Persisting zone ${logAccessoryName(
225
+ // this.name
226
+ // )} brightness = ${logPercent(brightness)}`
227
+ // );
228
+
229
+ // await this.context.persistence.setZoneBrightness(this.id, brightness);
230
+ // }
231
+
232
+ if (brightness > 0) {
233
+ this.brightness = brightness;
234
+
235
+ await Promise.all(
236
+ this.devicesArray.map((device) => device.setBrightness(brightness))
237
+ );
238
+ }
239
+
240
+ if (active !== previousActive) {
241
+ this.setActive(active);
242
+ }
190
243
  }
191
244
 
192
245
  // Auto-off
@@ -0,0 +1,27 @@
1
+ import { BrightnessAccessory } from 'helpers-for-homebridge';
2
+ import { Context } from '../types';
3
+ import { Zone } from '../Zone';
4
+
5
+ export class ZoneBrightnessAccessory extends BrightnessAccessory {
6
+ constructor(
7
+ private readonly zone: Zone,
8
+ context: Context
9
+ ) {
10
+ super(
11
+ {
12
+ name: zone.name + ' Brightness',
13
+ serial: zone.id + '_brightness',
14
+ model: 'Nanoleaf Multi Zone Brightness',
15
+ },
16
+ context
17
+ );
18
+ }
19
+
20
+ public override async getBrightness(): Promise<number> {
21
+ return this.zone.getBrightness();
22
+ }
23
+
24
+ public override async setBrightness(brightness: number): Promise<void> {
25
+ return this.zone.setBrightness(brightness);
26
+ }
27
+ }
@@ -1,17 +1,19 @@
1
1
  import { SelectionAccessory } from 'helpers-for-homebridge';
2
2
  import { Context } from '../types';
3
3
  import { Zone } from '../Zone';
4
+ import { ZONE_EFFECT_SELECTION_ACCESSORY_MODE } from '../constants';
4
5
 
5
- export class ZoneAccessory extends SelectionAccessory {
6
+ export class ZoneEffectAccessory extends SelectionAccessory {
6
7
  constructor(
7
8
  private readonly zone: Zone,
8
9
  context: Context
9
10
  ) {
10
11
  super(
11
12
  {
12
- name: zone.name,
13
- serial: zone.id,
14
- model: 'Nanoleaf Multi Zone',
13
+ name: zone.name + ' Effect',
14
+ serial: zone.id + '_effect',
15
+ model: 'Nanoleaf Multi Zone Effect',
16
+ mode: ZONE_EFFECT_SELECTION_ACCESSORY_MODE,
15
17
  options: zone.configuration.effects.map((effectConfiguration) => {
16
18
  return {
17
19
  name: effectConfiguration.name,
@@ -22,30 +24,21 @@ export class ZoneAccessory extends SelectionAccessory {
22
24
  },
23
25
  context
24
26
  );
25
-
26
- this.activeOptionId = this.configuration.options[0].id;
27
27
  }
28
28
 
29
- private active: boolean = false;
30
- private activeOptionId: string;
31
-
32
29
  protected override async getActiveOptionId() {
33
- return this.activeOptionId;
30
+ return this.zone.getEffectIdOrDefault();
34
31
  }
35
32
 
36
33
  protected override async setActiveOptionId(effectId: string) {
37
- this.activeOptionId = effectId;
38
-
39
34
  await this.zone.setActiveEffectById(effectId);
40
35
  }
41
36
 
42
37
  protected override async getActive() {
43
- return this.active;
38
+ return this.zone.getActive();
44
39
  }
45
40
 
46
41
  protected override async setActive(active: boolean) {
47
- this.active = active;
48
-
49
42
  await this.zone.setActive(active);
50
43
  }
51
44
  }
@@ -1 +1,2 @@
1
- export * from './ZoneAccessory';
1
+ export * from './ZoneBrightnessAccessory';
2
+ export * from './ZoneEffectAccessory';
package/src/constants.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { ColorHSV, ColorSpace } from '@manganese/palette-kit-core';
2
2
  import { NativeEffect, NativeEffectType } from './types';
3
+ import { SelectionAccessoryMode } from 'helpers-for-homebridge';
3
4
 
4
5
  export const OFF_COLOR: ColorHSV = {
5
6
  space: ColorSpace.HSV,
@@ -31,3 +32,5 @@ export const NATIVE_EFFECT_BASE: NativeEffect = {
31
32
  hasOverlay: false,
32
33
  };
33
34
  export const ZONE_AUTO_OFF_EVENT = 'zone_auto_off';
35
+ export const ZONE_EFFECT_SELECTION_ACCESSORY_MODE: SelectionAccessoryMode =
36
+ 'outlet';
@@ -5,7 +5,7 @@ import { Palette } from '@manganese/palette-kit-core';
5
5
  import { PaletteClient } from '@manganese/palette-kit-client';
6
6
 
7
7
  import { PlatformConfiguration, Context } from './types';
8
- import { ZoneAccessory } from './accessories';
8
+ import { ZoneBrightnessAccessory, ZoneEffectAccessory } from './accessories';
9
9
  import { ZONE_AUTO_OFF_EVENT } from './constants';
10
10
  import { Zone } from './Zone';
11
11
 
@@ -48,18 +48,28 @@ export default (homebridge: any) => {
48
48
 
49
49
  public async accessories(callback) {
50
50
  await this.context.paletteClient.connect();
51
-
52
- const zoneAccessories = await Promise.all(
51
+ await Promise.all(
53
52
  Array.from(this.zones.values()).map(async (zone) => {
54
- await zone.initialize();
53
+ return await zone.initialize();
54
+ })
55
+ );
55
56
 
56
- const zoneAccessory = new ZoneAccessory(zone, this.context);
57
+ const zoneAccessories = await Promise.all(
58
+ Array.from(this.zones.values()).flatMap((zone) => {
59
+ const zoneEffectAccessory = new ZoneEffectAccessory(
60
+ zone,
61
+ this.context
62
+ );
63
+ const zoneBrightnessAccessory = new ZoneBrightnessAccessory(
64
+ zone,
65
+ this.context
66
+ );
57
67
 
58
68
  zone.on(ZONE_AUTO_OFF_EVENT, () => {
59
- zoneAccessory.updateActive(false);
69
+ zoneEffectAccessory.updateActive(false);
60
70
  });
61
71
 
62
- return zoneAccessory;
72
+ return [zoneEffectAccessory, zoneBrightnessAccessory];
63
73
  })
64
74
  );
65
75
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"ZoneAccessory.js","sourceRoot":"","sources":["../../src/accessories/ZoneAccessory.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAA4D;AAI5D,MAAa,aAAc,SAAQ,2CAAkB;IACnD,YACmB,IAAU,EAC3B,OAAgB;QAEhB,KAAK,CACH;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,EAAE;gBAC9D,OAAO;oBACL,IAAI,EAAE,mBAAmB,CAAC,IAAI;oBAC9B,EAAE,EAAE,mBAAmB,CAAC,EAAE;oBAC1B,aAAa,EAAE,mBAAmB,CAAC,aAAa;iBACjD,CAAC;YACJ,CAAC,CAAC;SACH,EACD,OAAO,CACR,CAAC;QAjBe,SAAI,GAAJ,IAAI,CAAM;QAsBrB,WAAM,GAAY,KAAK,CAAC;QAH9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAKwB,iBAAiB;;YACxC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;KAAA;IAEwB,iBAAiB,CAAC,QAAgB;;YACzD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YAE/B,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;KAAA;IAEwB,SAAS;;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;KAAA;IAEwB,SAAS,CAAC,MAAe;;YAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;KAAA;CACF;AA9CD,sCA8CC"}