homebridge-nanoleaf-multi 4.0.1 → 5.0.0

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
@@ -36,7 +36,7 @@ class Device {
36
36
  const ip = yield (0, core_kit_node_1.lookupHost)(this.configuration.host);
37
37
  this.context.log.debug(`Initializing <${this.name}> at IP ${ip}...`);
38
38
  if (this.configuration.token) {
39
- this.context.log.debug(`Initializing <${this.name}> with configured token...`);
39
+ this.context.log.debug(`Initializing device <${this.name}> with configured token...`);
40
40
  this.nanoleafClient = new nanoleaf_client_multi_1.NanoleafClient(ip, this.configuration.token);
41
41
  }
42
42
  else {
@@ -56,10 +56,10 @@ class Device {
56
56
  this.nanoleafClient = new nanoleaf_client_multi_1.NanoleafClient(ip, token);
57
57
  this.context.log.warn(`Device <${this.name}> authorized a new token. Copy this into your configuration to avoid re-authorizing when the plugin restarts!`);
58
58
  this.context.log.info(`Token for device <${this.name}>: ${token}`);
59
- this.context.log.debug(`Initializing <${this.name}> with manually authorized token...`);
59
+ this.context.log.debug(`Initializing device <${this.name}> with manually authorized token...`);
60
60
  }
61
61
  const deviceInfo = yield this.nanoleafClient.getInfo();
62
- this.context.log.info(`Initialized <${this.name}>`);
62
+ this.context.log.info(`Initialized device <${this.name}>`);
63
63
  this.initialized = true;
64
64
  });
65
65
  }
@@ -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":";;;;;;;;;;;;;;;AAAA,oDAAmC;AACnC,4DAAsD;AACtD,iEAAuD;AAGvD,2CAAkD;AAGlD,MAAa,MAAM;IAKjB,YACmB,aAAkC,EAClC,OAAgB;QADhB,kBAAa,GAAb,aAAa,CAAqB;QAClC,YAAO,GAAP,OAAO,CAAS;QAN3B,gBAAW,GAAG,KAAK,CAAC;QAEpB,SAAI,GAAG,IAAI,gBAAa,EAAE,CAAC;IAKhC,CAAC;IAEJ,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,+BAAmB,CAAC;IACxD,CAAC;IAEY,UAAU;;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;YAEzD,MAAM,EAAE,GAAG,MAAM,IAAA,0BAAU,EAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAErD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC;YAErE,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CACpB,iBAAiB,IAAI,CAAC,IAAI,4BAA4B,CACvD,CAAC;gBAEF,IAAI,CAAC,cAAc,GAAG,IAAI,sCAAc,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACnB,WAAW,IAAI,CAAC,IAAI,uJAAuJ,CAC5K,CAAC;gBAEF,MAAM,cAAc,GAAG,IAAI,sCAAc,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,KAAK,GAAW,IAAI,CAAC;gBAEzB,OAAO,CAAC,KAAK,EAAE,CAAC;oBACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;oBAElE,IAAI,CAAC;wBACH,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,CAAC;oBAC3C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CACpB,iCAAiC,IAAI,CAAC,IAAI,iCAAiC,CAC5E,CAAC;oBACJ,CAAC;oBAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBACzE,CAAC;gBAED,IAAI,CAAC,cAAc,GAAG,IAAI,sCAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAEpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACnB,WAAW,IAAI,CAAC,IAAI,+GAA+G,CACpI,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CACpB,iBAAiB,IAAI,CAAC,IAAI,qCAAqC,CAChE,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAEvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;KAAA;IAEa,aAAa,CAAC,QAA6B;;YACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,OAAO,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAO,OAAO,EAAE,EAAE;gBAC1C,IAAI,CAAC;oBACH,MAAM,QAAQ,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;wBAAS,CAAC;oBACT,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEY,SAAS,CAAC,MAAe;;YACpC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAS,EAAE;gBAClC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEY,eAAe,CAAC,MAAmB;;YAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,GAAS,EAAE;gBAClC,MAAM,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAE3D,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACpD,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEY,eAAe,CAAC,YAA0B;;YACrD,MAAM,IAAI,CAAC,aAAa,CAAC,GAAS,EAAE;gBAClC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACpD,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;CACF;AAzGD,wBAyGC"}
1
+ {"version":3,"file":"Device.js","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"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"}
package/dist/Effect.js CHANGED
@@ -23,9 +23,11 @@ class Effect extends events_1.default {
23
23
  }
24
24
  initialize() {
25
25
  return __awaiter(this, void 0, void 0, function* () {
26
+ this.context.log.debug(`Initializing effect '${this.name}'...`);
26
27
  this.context.palette.onAnyColorChange(({ colorId, colorHsv }) => {
27
28
  this.setColor(colorId, colorHsv);
28
29
  });
30
+ this.context.log.info(`Initialized effect '${this.name}'`);
29
31
  });
30
32
  }
31
33
  get id() {
@@ -1 +1 @@
1
- {"version":3,"file":"Effect.js","sourceRoot":"","sources":["../src/Effect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,oDAAkC;AAElC,2CAA8E;AAG9E,MAAsB,MAEpB,SAAQ,gBAAY;IAGpB,YACqB,aAAsC,EACtC,OAAgB;QAEnC,KAAK,EAAE,CAAC;QAHW,kBAAa,GAAb,aAAa,CAAyB;QACtC,YAAO,GAAP,OAAO,CAAS;IAGrC,CAAC;IAEY,UAAU;;YACrB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAc,gBAAgB;QAC5B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,sCAA0B;SACtE,CAAC;IACJ,CAAC;IAED,IAAW,eAAe;;QACxB,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,eAAe,mCAAI,IAAI,CAAC;IACpD,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,IAAI,CAAC,+BAAmB,CAAC,CAAC;IACjC,CAAC;CAKF;AA3CD,wBA2CC"}
1
+ {"version":3,"file":"Effect.js","sourceRoot":"","sources":["../src/Effect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,oDAAkC;AAElC,2CAA8E;AAG9E,MAAsB,MAEpB,SAAQ,gBAAY;IAGpB,YACqB,aAAsC,EACtC,OAAgB;QAEnC,KAAK,EAAE,CAAC;QAHW,kBAAa,GAAb,aAAa,CAAyB;QACtC,YAAO,GAAP,OAAO,CAAS;IAGrC,CAAC;IAEY,UAAU;;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;YAEhE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;KAAA;IAED,IAAW,EAAE;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;IAC/B,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAc,gBAAgB;QAC5B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,sCAA0B;SACtE,CAAC;IACJ,CAAC;IAED,IAAW,eAAe;;QACxB,OAAO,MAAA,IAAI,CAAC,aAAa,CAAC,eAAe,mCAAI,IAAI,CAAC;IACpD,CAAC;IAES,YAAY;QACpB,IAAI,CAAC,IAAI,CAAC,+BAAmB,CAAC,CAAC;IACjC,CAAC;CAKF;AA/CD,wBA+CC"}
package/dist/Zone.d.ts CHANGED
@@ -25,6 +25,10 @@ export declare class Zone extends EventEmitter {
25
25
  setActiveEffectById(effectId: string): Promise<void>;
26
26
  setActiveEffect(effect: Effect<any>): Promise<void>;
27
27
  getActiveEffectId(): string;
28
+ private brightness;
29
+ getBrightness(): number;
30
+ setBrightness(brightness: number): Promise<void>;
31
+ private updateBrightness;
28
32
  private autoOffTimeout;
29
33
  private setAutoOffTimeout;
30
34
  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) => {
@@ -43,7 +45,7 @@ class Zone extends events_1.default {
43
45
  effect.on(constants_1.EFFECT_CHANGE_EVENT, () => {
44
46
  if (this.activeEffectId !== effect.id)
45
47
  return;
46
- // TODO log
48
+ this.context.log.info(`The active effect '${effect.name}' changed, applying to zone`);
47
49
  this.setActiveEffect(effect);
48
50
  });
49
51
  this.effects.set(effect.id, effect);
@@ -76,6 +78,14 @@ class Zone extends events_1.default {
76
78
  this.context.log.error(`Failed to initialize device <${device.name}>`, error);
77
79
  }
78
80
  })));
81
+ yield Promise.all(Array.from(this.effects.values()).map((effect) => __awaiter(this, void 0, void 0, function* () {
82
+ try {
83
+ yield effect.initialize();
84
+ }
85
+ catch (error) {
86
+ this.context.log.error(`Failed to initialize effect '${effect.name}'`, error);
87
+ }
88
+ })));
79
89
  });
80
90
  }
81
91
  get devicesArray() {
@@ -86,6 +96,12 @@ class Zone extends events_1.default {
86
96
  if (!active) {
87
97
  this.clearAutoOffTimeout();
88
98
  }
99
+ if (active && this.brightness === 0) {
100
+ this.updateBrightness(1);
101
+ }
102
+ else if (!active && this.brightness > 0) {
103
+ this.updateBrightness(0);
104
+ }
89
105
  yield Promise.all(this.devicesArray.map((device) => __awaiter(this, void 0, void 0, function* () {
90
106
  yield device.setActive(active);
91
107
  })));
@@ -131,6 +147,35 @@ class Zone extends events_1.default {
131
147
  getActiveEffectId() {
132
148
  return this.activeEffectId;
133
149
  }
150
+ getBrightness() {
151
+ return this.brightness;
152
+ }
153
+ setBrightness(brightness) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const previousBrightness = this.brightness;
156
+ const previousActive = previousBrightness > 0;
157
+ const active = brightness > 0;
158
+ this.brightness = brightness;
159
+ // if (this.context.persistence) {
160
+ // this.context.log.debug(
161
+ // `Persisting zone ${logAccessoryName(
162
+ // this.name
163
+ // )} brightness = ${logPercent(brightness)}`
164
+ // );
165
+ // await this.context.persistence.setZoneBrightness(this.id, brightness);
166
+ // }
167
+ if (brightness > 0) {
168
+ yield Promise.all(this.devicesArray.map((device) => device.setBrightness(brightness)));
169
+ }
170
+ if (active !== previousActive) {
171
+ this.setActive(active);
172
+ }
173
+ });
174
+ }
175
+ updateBrightness(brightness) {
176
+ this.brightness = brightness;
177
+ this.emit('updateBrightness', brightness);
178
+ }
134
179
  setAutoOffTimeout(duration) {
135
180
  this.autoOffTimeout = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
136
181
  try {
package/dist/Zone.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Zone.js","sourceRoot":"","sources":["../src/Zone.ts"],"names":[],"mappings":"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"}
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,7 +1,7 @@
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
7
  private active;
@@ -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,
@@ -52,5 +54,5 @@ class ZoneAccessory extends helpers_for_homebridge_1.SelectionAccessory {
52
54
  });
53
55
  }
54
56
  }
55
- exports.ZoneAccessory = ZoneAccessory;
56
- //# sourceMappingURL=ZoneAccessory.js.map
57
+ exports.ZoneEffectAccessory = ZoneEffectAccessory;
58
+ //# 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;QAuBrB,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;AA/CD,kDA+CC"}
@@ -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,13 +43,18 @@ 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* () {
46
+ const zoneAccessories = yield Promise.all(Array.from(this.zones.values()).flatMap((zone) => __awaiter(this, void 0, void 0, function* () {
47
47
  yield zone.initialize();
48
- const zoneAccessory = new accessories_1.ZoneAccessory(zone, this.context);
48
+ const zoneEffectAccessory = new accessories_1.ZoneEffectAccessory(zone, this.context);
49
+ const zoneBrightnessAccessory = new accessories_1.ZoneBrightnessAccessory(zone, this.context);
49
50
  zone.on(constants_1.ZONE_AUTO_OFF_EVENT, () => {
50
- zoneAccessory.updateActive(false);
51
+ zoneEffectAccessory.updateActive(false);
52
+ zoneBrightnessAccessory.updateBrightness(0);
51
53
  });
52
- return zoneAccessory;
54
+ zone.on('updateBrightness', (brightness) => {
55
+ zoneBrightnessAccessory.updateBrightness(brightness);
56
+ });
57
+ return [zoneEffectAccessory, zoneBrightnessAccessory];
53
58
  })));
54
59
  const accessories = [...zoneAccessories];
55
60
  callback(accessories);
@@ -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;gBAE3C,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAO,IAAI,EAAE,EAAE;oBACrD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;oBAExB,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;wBACxC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAC9C,CAAC,CAAC,CAAC;oBACH,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE;wBACzC,uBAAuB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC;gBACxD,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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "keywords": [
7
7
  "homebridge-plugin"
8
8
  ],
9
- "version": "4.0.1",
9
+ "version": "5.0.0",
10
10
  "deprecated": false,
11
11
  "author": {
12
12
  "name": "Samuel Goodell"
@@ -31,12 +31,12 @@
31
31
  "main": "dist/index.js",
32
32
  "dependencies": {
33
33
  "@manganese/core-kit-node": "^3.0",
34
- "@manganese/palette-kit-client": "^4.2.0",
34
+ "@manganese/palette-kit-client": "^4.2.1",
35
35
  "@manganese/palette-kit-core": "^4.2.1",
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
@@ -33,7 +33,7 @@ export class Device {
33
33
 
34
34
  if (this.configuration.token) {
35
35
  this.context.log.debug(
36
- `Initializing <${this.name}> with configured token...`
36
+ `Initializing device <${this.name}> with configured token...`
37
37
  );
38
38
 
39
39
  this.nanoleafClient = new NanoleafClient(ip, this.configuration.token);
@@ -66,13 +66,13 @@ export class Device {
66
66
  );
67
67
  this.context.log.info(`Token for device <${this.name}>: ${token}`);
68
68
  this.context.log.debug(
69
- `Initializing <${this.name}> with manually authorized token...`
69
+ `Initializing device <${this.name}> with manually authorized token...`
70
70
  );
71
71
  }
72
72
 
73
73
  const deviceInfo = await this.nanoleafClient.getInfo();
74
74
 
75
- this.context.log.info(`Initialized <${this.name}>`);
75
+ this.context.log.info(`Initialized device <${this.name}>`);
76
76
  this.initialized = true;
77
77
  }
78
78
 
@@ -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/Effect.ts CHANGED
@@ -17,9 +17,13 @@ export abstract class Effect<
17
17
  }
18
18
 
19
19
  public async initialize() {
20
+ this.context.log.debug(`Initializing effect '${this.name}'...`);
21
+
20
22
  this.context.palette.onAnyColorChange(({ colorId, colorHsv }) => {
21
23
  this.setColor(colorId, colorHsv);
22
24
  });
25
+
26
+ this.context.log.info(`Initialized effect '${this.name}'`);
23
27
  }
24
28
 
25
29
  public get id() {
package/src/Zone.ts CHANGED
@@ -44,7 +44,9 @@ export class Zone extends EventEmitter {
44
44
  effect.on(EFFECT_CHANGE_EVENT, () => {
45
45
  if (this.activeEffectId !== effect.id) return;
46
46
 
47
- // TODO log
47
+ this.context.log.info(
48
+ `The active effect '${effect.name}' changed, applying to zone`
49
+ );
48
50
 
49
51
  this.setActiveEffect(effect);
50
52
  });
@@ -95,6 +97,19 @@ export class Zone extends EventEmitter {
95
97
  }
96
98
  })
97
99
  );
100
+
101
+ await Promise.all(
102
+ Array.from(this.effects.values()).map(async (effect) => {
103
+ try {
104
+ await effect.initialize();
105
+ } catch (error) {
106
+ this.context.log.error(
107
+ `Failed to initialize effect '${effect.name}'`,
108
+ error
109
+ );
110
+ }
111
+ })
112
+ );
98
113
  }
99
114
 
100
115
  // Devices
@@ -109,6 +124,12 @@ export class Zone extends EventEmitter {
109
124
  this.clearAutoOffTimeout();
110
125
  }
111
126
 
127
+ if (active && this.brightness === 0) {
128
+ this.updateBrightness(1);
129
+ } else if (!active && this.brightness > 0) {
130
+ this.updateBrightness(0);
131
+ }
132
+
112
133
  await Promise.all(
113
134
  this.devicesArray.map(async (device) => {
114
135
  await device.setActive(active);
@@ -174,6 +195,47 @@ export class Zone extends EventEmitter {
174
195
  return this.activeEffectId;
175
196
  }
176
197
 
198
+ // Brightness
199
+ private brightness: number = 1;
200
+
201
+ public getBrightness() {
202
+ return this.brightness;
203
+ }
204
+
205
+ public async setBrightness(brightness: number): Promise<void> {
206
+ const previousBrightness = this.brightness;
207
+ const previousActive = previousBrightness > 0;
208
+ const active = brightness > 0;
209
+
210
+ this.brightness = brightness;
211
+
212
+ // if (this.context.persistence) {
213
+ // this.context.log.debug(
214
+ // `Persisting zone ${logAccessoryName(
215
+ // this.name
216
+ // )} brightness = ${logPercent(brightness)}`
217
+ // );
218
+
219
+ // await this.context.persistence.setZoneBrightness(this.id, brightness);
220
+ // }
221
+
222
+ if (brightness > 0) {
223
+ await Promise.all(
224
+ this.devicesArray.map((device) => device.setBrightness(brightness))
225
+ );
226
+ }
227
+
228
+ if (active !== previousActive) {
229
+ this.setActive(active);
230
+ }
231
+ }
232
+
233
+ private updateBrightness(brightness: number) {
234
+ this.brightness = brightness;
235
+
236
+ this.emit('updateBrightness', brightness);
237
+ }
238
+
177
239
  // Auto-off
178
240
  private autoOffTimeout: NodeJS.Timeout;
179
241
 
@@ -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,
@@ -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
 
@@ -50,16 +50,27 @@ export default (homebridge: any) => {
50
50
  await this.context.paletteClient.connect();
51
51
 
52
52
  const zoneAccessories = await Promise.all(
53
- Array.from(this.zones.values()).map(async (zone) => {
53
+ Array.from(this.zones.values()).flatMap(async (zone) => {
54
54
  await zone.initialize();
55
55
 
56
- const zoneAccessory = new ZoneAccessory(zone, this.context);
56
+ const zoneEffectAccessory = new ZoneEffectAccessory(
57
+ zone,
58
+ this.context
59
+ );
60
+ const zoneBrightnessAccessory = new ZoneBrightnessAccessory(
61
+ zone,
62
+ this.context
63
+ );
57
64
 
58
65
  zone.on(ZONE_AUTO_OFF_EVENT, () => {
59
- zoneAccessory.updateActive(false);
66
+ zoneEffectAccessory.updateActive(false);
67
+ zoneBrightnessAccessory.updateBrightness(0);
68
+ });
69
+ zone.on('updateBrightness', (brightness) => {
70
+ zoneBrightnessAccessory.updateBrightness(brightness);
60
71
  });
61
72
 
62
- return zoneAccessory;
73
+ return [zoneEffectAccessory, zoneBrightnessAccessory];
63
74
  })
64
75
  );
65
76
 
@@ -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"}