homebridge-dyson-solarcycle-morph 1.0.2 → 1.1.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/CHANGELOG.md +25 -0
- package/README.md +17 -9
- package/config.schema.json +1 -1
- package/dist/accessory.d.ts +24 -5
- package/dist/accessory.js +95 -32
- package/dist/accessory.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/platform.d.ts +11 -1
- package/dist/platform.js +37 -17
- package/dist/platform.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ All notable changes to this project are documented here.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0] — 2026-09-19
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **A lamp is now two accessories: the light, and its switches beside it.** The
|
|
13
|
+
light carries nothing but on/off, brightness and colour temperature, so the
|
|
14
|
+
Home app draws it as a light you tap to turn on rather than as a folder of six
|
|
15
|
+
controls. Everything that is a switch — Daylight, Auto Brightness, Movement
|
|
16
|
+
and the three presets — moves to a second accessory called `<name> Switches`.
|
|
17
|
+
|
|
18
|
+
The lamp keeps the identity it had, so its room, its name and every automation
|
|
19
|
+
and scene pointing at the light itself survive. **Automations and scenes that
|
|
20
|
+
used one of the switches have to be pointed at the new accessory**, which the
|
|
21
|
+
Home app cannot do for you: to it, the old switch is simply gone.
|
|
22
|
+
|
|
23
|
+
With all four switch settings turned off there is nothing for the second
|
|
24
|
+
accessory to hold, so it is not created at all, and one left over from an
|
|
25
|
+
earlier run is removed.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- A switch turned off in the settings is now taken off the accessory rather than
|
|
30
|
+
merely no longer added, so it stops showing in the Home app. This was the same
|
|
31
|
+
mistake 1.0.1 fixed for the motion sensor.
|
|
32
|
+
|
|
8
33
|
## [1.0.2] — 2026-09-18
|
|
9
34
|
|
|
10
35
|
### Changed
|
package/README.md
CHANGED
|
@@ -20,16 +20,18 @@
|
|
|
20
20
|
## What you get
|
|
21
21
|
|
|
22
22
|
Your lamp appears in the Home app as a **light**, with the controls Apple
|
|
23
|
-
provides for one
|
|
23
|
+
provides for one and nothing else on it — so the tile turns the lamp on when you
|
|
24
|
+
tap it, the way a light should:
|
|
24
25
|
|
|
25
26
|
- **On and off**
|
|
26
27
|
- **Brightness**
|
|
27
28
|
- **Colour temperature**, across the lamp's full 2700–6500 K range
|
|
28
29
|
- **Siri**: *"Hey Siri, turn on the desk light"*, *"Hey Siri, set the desk light to 50%"*
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
**Beside it sits a second accessory, `<name> Switches`,** holding everything
|
|
32
|
+
that is a switch. The three modes that otherwise live only on the lamp's base or
|
|
33
|
+
in the MyDyson app — each one automatable, and each showing what the lamp is
|
|
34
|
+
really doing rather than what was last asked of it:
|
|
33
35
|
|
|
34
36
|
| switch | what it does |
|
|
35
37
|
| --- | --- |
|
|
@@ -37,10 +39,10 @@ lamp is really doing rather than what was last asked of it:
|
|
|
37
39
|
| **Auto Brightness** | trims the level to suit the room as the light around it changes |
|
|
38
40
|
| **Movement** | lights when it sees movement, goes out once the room has been still |
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
switches that apply a set of values and spring back, the way a
|
|
42
|
-
are what the buttons in the MyDyson app do, and the lamp allows
|
|
43
|
-
time.
|
|
42
|
+
On the same accessory, the lamp's three preset modes — **Study**, **Relax** and
|
|
43
|
+
**Precision** — as switches that apply a set of values and spring back, the way a
|
|
44
|
+
scene does. They are what the buttons in the MyDyson app do, and the lamp allows
|
|
45
|
+
only one at a time.
|
|
44
46
|
|
|
45
47
|
| preset | where it puts the lamp |
|
|
46
48
|
| --- | --- |
|
|
@@ -107,7 +109,9 @@ Restart Homebridge when the page says so.
|
|
|
107
109
|
## Step 4 — Add the lamp to the Home app
|
|
108
110
|
|
|
109
111
|
The child bridge has its own QR code, under **Bridge Settings**. Scan it in the
|
|
110
|
-
Home app the same way you paired Homebridge itself.
|
|
112
|
+
Home app the same way you paired Homebridge itself. Two accessories turn up: the
|
|
113
|
+
lamp, and `<name> Switches` beside it. Put them in whichever rooms suit you —
|
|
114
|
+
they are independent as far as the Home app is concerned.
|
|
111
115
|
|
|
112
116
|
## Using it
|
|
113
117
|
|
|
@@ -152,6 +156,10 @@ Everything except the lights is optional.
|
|
|
152
156
|
| **Lights → Expose the preset modes** | The Study, Relax and Precision switches. On by default |
|
|
153
157
|
| **Bluetooth adapter** | Only needed if the host has more than one, e.g. `hci1` |
|
|
154
158
|
|
|
159
|
+
Turning all four switches off leaves the lamp on its own: there is then nothing
|
|
160
|
+
for the second accessory to hold, so it is not created, and an existing one is
|
|
161
|
+
removed.
|
|
162
|
+
|
|
155
163
|
## If something goes wrong
|
|
156
164
|
|
|
157
165
|
**The lamp shows as *No Response*.** There is no Bluetooth link at that moment.
|
package/config.schema.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"pluginAlias": "DysonSolarcycleMorph",
|
|
3
3
|
"pluginType": "platform",
|
|
4
4
|
"singular": true,
|
|
5
|
-
"headerDisplay": "Controls the Bluetooth-only Dyson Solarcycle / Lightcycle Morph.\n\n**The lamp must be registered in the MyDyson app.** Its key is issued by Dyson against the account the lamp belongs to and cannot be read from the device itself.",
|
|
5
|
+
"headerDisplay": "Controls the Bluetooth-only Dyson Solarcycle / Lightcycle Morph.\n\n**The lamp must be registered in the MyDyson app.** Its key is issued by Dyson against the account the lamp belongs to and cannot be read from the device itself.\n\nEach lamp becomes two accessories in the Home app: the light itself, and a second one holding the switches below.",
|
|
6
6
|
"schema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|
package/dist/accessory.d.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import type { PlatformAccessory } from 'homebridge';
|
|
2
2
|
import type { ResolvedLightConfig } from './config.js';
|
|
3
3
|
import type { MorphPlatform } from './platform.js';
|
|
4
|
+
/** The two accessories one lamp is made of. */
|
|
5
|
+
export interface MorphAccessories {
|
|
6
|
+
/** The lamp itself, and nothing but the lamp. */
|
|
7
|
+
light: PlatformAccessory;
|
|
8
|
+
/** Every switch, on an accessory of its own. Absent when all are turned off. */
|
|
9
|
+
switches?: PlatformAccessory;
|
|
10
|
+
}
|
|
4
11
|
/**
|
|
5
12
|
* Bridges one lamp's BLE session to its HomeKit services.
|
|
6
13
|
*
|
|
14
|
+
* The lamp is two accessories: a light, and a box of switches beside it. One
|
|
15
|
+
* BLE session drives both, which is the reason they are one class — the lamp
|
|
16
|
+
* allows a single connection, so the switches cannot own one of their own.
|
|
17
|
+
*
|
|
7
18
|
* Writes are optimistic — HomeKit's 10-second characteristic timeout is shorter
|
|
8
19
|
* than a BLE reconnect, so a command issued while the lamp is away would
|
|
9
20
|
* otherwise surface as an error in the Home app. Instead we let the lamp's own
|
|
@@ -11,15 +22,21 @@ import type { MorphPlatform } from './platform.js';
|
|
|
11
22
|
*/
|
|
12
23
|
export declare class MorphAccessory {
|
|
13
24
|
private readonly platform;
|
|
14
|
-
private readonly accessory;
|
|
15
25
|
private readonly config;
|
|
16
26
|
private readonly lightbulb;
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private
|
|
27
|
+
private daylight?;
|
|
28
|
+
private autoBrightness?;
|
|
29
|
+
private movement?;
|
|
20
30
|
private readonly presets;
|
|
21
31
|
private readonly lamp;
|
|
22
|
-
constructor(platform: MorphPlatform,
|
|
32
|
+
constructor(platform: MorphPlatform, accessories: MorphAccessories, config: ResolvedLightConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Put every enabled switch on the accessory that holds them.
|
|
35
|
+
*
|
|
36
|
+
* They were on the lamp's own accessory until 1.1.0, which left the Home app
|
|
37
|
+
* showing the lamp as a stack of controls rather than as a light.
|
|
38
|
+
*/
|
|
39
|
+
private addSwitches;
|
|
23
40
|
start(): Promise<void>;
|
|
24
41
|
stop(): Promise<void>;
|
|
25
42
|
/**
|
|
@@ -38,6 +55,8 @@ export declare class MorphAccessory {
|
|
|
38
55
|
* after so it does not sit there claiming to be a state.
|
|
39
56
|
*/
|
|
40
57
|
private release;
|
|
58
|
+
/** Give an accessory its Dyson identity in the Home app's details. */
|
|
59
|
+
private describe;
|
|
41
60
|
/**
|
|
42
61
|
* Name a service so the Home app shows it.
|
|
43
62
|
*
|
package/dist/accessory.js
CHANGED
|
@@ -8,9 +8,21 @@ import { kelvinToMired, miredToKelvin, MAX_KELVIN, MIN_KELVIN, PRESETS } from '.
|
|
|
8
8
|
* nobody reads it as a state the lamp is in.
|
|
9
9
|
*/
|
|
10
10
|
const RELEASE_MS = 1_000;
|
|
11
|
+
/**
|
|
12
|
+
* Every subtype this plugin has put a Switch service under.
|
|
13
|
+
*
|
|
14
|
+
* Needed to take them off the light accessory, where versions up to 1.0.2 put
|
|
15
|
+
* them. A service on a cached accessory stays there until it is removed, so
|
|
16
|
+
* without this they would show in both places at once.
|
|
17
|
+
*/
|
|
18
|
+
const SWITCH_SUBTYPES = ['daylight', 'auto', 'movement', ...Object.keys(PRESETS)];
|
|
11
19
|
/**
|
|
12
20
|
* Bridges one lamp's BLE session to its HomeKit services.
|
|
13
21
|
*
|
|
22
|
+
* The lamp is two accessories: a light, and a box of switches beside it. One
|
|
23
|
+
* BLE session drives both, which is the reason they are one class — the lamp
|
|
24
|
+
* allows a single connection, so the switches cannot own one of their own.
|
|
25
|
+
*
|
|
14
26
|
* Writes are optimistic — HomeKit's 10-second characteristic timeout is shorter
|
|
15
27
|
* than a BLE reconnect, so a command issued while the lamp is away would
|
|
16
28
|
* otherwise surface as an error in the Home app. Instead we let the lamp's own
|
|
@@ -18,7 +30,6 @@ const RELEASE_MS = 1_000;
|
|
|
18
30
|
*/
|
|
19
31
|
export class MorphAccessory {
|
|
20
32
|
platform;
|
|
21
|
-
accessory;
|
|
22
33
|
config;
|
|
23
34
|
lightbulb;
|
|
24
35
|
daylight;
|
|
@@ -26,9 +37,8 @@ export class MorphAccessory {
|
|
|
26
37
|
movement;
|
|
27
38
|
presets = new Map();
|
|
28
39
|
lamp;
|
|
29
|
-
constructor(platform,
|
|
40
|
+
constructor(platform, accessories, config) {
|
|
30
41
|
this.platform = platform;
|
|
31
|
-
this.accessory = accessory;
|
|
32
42
|
this.config = config;
|
|
33
43
|
const { Service, Characteristic } = this.platform.api.hap;
|
|
34
44
|
this.lamp = new DysonMorphLamp({
|
|
@@ -38,21 +48,36 @@ export class MorphAccessory {
|
|
|
38
48
|
adapter: platform.config.adapter,
|
|
39
49
|
log: platform.log,
|
|
40
50
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
this.describe(accessories.light, config.serial);
|
|
52
|
+
if (accessories.switches) {
|
|
53
|
+
// A serial of its own, so the two are not both claiming to be the same
|
|
54
|
+
// piece of hardware.
|
|
55
|
+
this.describe(accessories.switches, `${config.serial}-SWITCHES`);
|
|
56
|
+
}
|
|
45
57
|
// Removed in 1.0.0, but a service already on a cached accessory stays there
|
|
46
58
|
// until it is taken off: not adding it any more is not the same as removing
|
|
47
59
|
// it, and anyone who had it enabled would keep a sensor reading motion
|
|
48
60
|
// forever.
|
|
49
|
-
const staleMotion =
|
|
61
|
+
const staleMotion = accessories.light.getService(Service.MotionSensor);
|
|
50
62
|
if (staleMotion) {
|
|
51
|
-
|
|
63
|
+
accessories.light.removeService(staleMotion);
|
|
52
64
|
this.platform.log.info(`Removed the motion sensor from ${config.name}; it never reported anything real`);
|
|
53
65
|
}
|
|
66
|
+
// The same applies to the switches, which sat here until 1.1.0.
|
|
67
|
+
const moved = SWITCH_SUBTYPES.filter((subtype) => {
|
|
68
|
+
const stale = accessories.light.getServiceById(Service.Switch, subtype);
|
|
69
|
+
if (!stale) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
accessories.light.removeService(stale);
|
|
73
|
+
return true;
|
|
74
|
+
}).length;
|
|
75
|
+
if (moved > 0) {
|
|
76
|
+
this.platform.log.info(`Took ${moved} switch${moved === 1 ? '' : 'es'} off ${config.name}; ` +
|
|
77
|
+
`${moved === 1 ? 'it lives' : 'they live'} on their own accessory now`);
|
|
78
|
+
}
|
|
54
79
|
this.lightbulb =
|
|
55
|
-
|
|
80
|
+
accessories.light.getService(Service.Lightbulb) ?? accessories.light.addService(Service.Lightbulb, config.name);
|
|
56
81
|
this.lightbulb.setCharacteristic(Characteristic.Name, config.name);
|
|
57
82
|
this.lightbulb
|
|
58
83
|
.getCharacteristic(Characteristic.On)
|
|
@@ -80,15 +105,39 @@ export class MorphAccessory {
|
|
|
80
105
|
this.autoBrightness?.updateCharacteristic(Characteristic.On, state.autoBrightness);
|
|
81
106
|
this.movement?.updateCharacteristic(Characteristic.On, state.movement);
|
|
82
107
|
});
|
|
83
|
-
if (
|
|
108
|
+
if (accessories.switches) {
|
|
109
|
+
this.addSwitches(accessories.switches);
|
|
110
|
+
}
|
|
111
|
+
this.lamp.on('state', (state) => {
|
|
112
|
+
this.lightbulb.updateCharacteristic(Characteristic.On, state.on);
|
|
113
|
+
this.lightbulb.updateCharacteristic(Characteristic.Brightness, state.brightness);
|
|
114
|
+
this.lightbulb.updateCharacteristic(Characteristic.ColorTemperature, kelvinToMired(state.kelvin));
|
|
115
|
+
// Follows the lamp leaving daylight mode on its own, which it does as soon
|
|
116
|
+
// as colour temperature is set by hand.
|
|
117
|
+
this.daylight?.updateCharacteristic(Characteristic.On, state.daylight);
|
|
118
|
+
this.autoBrightness?.updateCharacteristic(Characteristic.On, state.autoBrightness);
|
|
119
|
+
this.movement?.updateCharacteristic(Characteristic.On, state.movement);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Put every enabled switch on the accessory that holds them.
|
|
124
|
+
*
|
|
125
|
+
* They were on the lamp's own accessory until 1.1.0, which left the Home app
|
|
126
|
+
* showing the lamp as a stack of controls rather than as a light.
|
|
127
|
+
*/
|
|
128
|
+
addSwitches(accessory) {
|
|
129
|
+
const { Service, Characteristic } = this.platform.api.hap;
|
|
130
|
+
const wanted = new Set();
|
|
131
|
+
if (this.config.daylightSwitch !== false) {
|
|
84
132
|
// A switch rather than a characteristic on the lightbulb: HomeKit renders
|
|
85
133
|
// only the characteristics it knows, so a custom one would be invisible in
|
|
86
134
|
// the Home app and reachable only from third-party clients.
|
|
87
135
|
// By subtype, not by type: this accessory carries more than one Switch,
|
|
88
136
|
// and a lookup by type alone would find whichever came first.
|
|
89
137
|
this.daylight =
|
|
90
|
-
|
|
91
|
-
|
|
138
|
+
accessory.getServiceById(Service.Switch, 'daylight') ??
|
|
139
|
+
accessory.addService(Service.Switch, `${this.config.name} Daylight`, 'daylight');
|
|
140
|
+
wanted.add('daylight');
|
|
92
141
|
this.name(this.daylight, 'Daylight');
|
|
93
142
|
this.daylight
|
|
94
143
|
.getCharacteristic(Characteristic.On)
|
|
@@ -98,29 +147,31 @@ export class MorphAccessory {
|
|
|
98
147
|
// than leave it showing a state the lamp is not in.
|
|
99
148
|
.onSet((value) => this.handleSet('daylight mode', () => this.lamp.setDaylight(value)));
|
|
100
149
|
}
|
|
101
|
-
if (config.autoBrightnessSwitch !== false) {
|
|
150
|
+
if (this.config.autoBrightnessSwitch !== false) {
|
|
102
151
|
this.autoBrightness =
|
|
103
|
-
|
|
104
|
-
|
|
152
|
+
accessory.getServiceById(Service.Switch, 'auto') ??
|
|
153
|
+
accessory.addService(Service.Switch, `${this.config.name} Auto Brightness`, 'auto');
|
|
154
|
+
wanted.add('auto');
|
|
105
155
|
this.name(this.autoBrightness, 'Auto Brightness');
|
|
106
156
|
this.autoBrightness
|
|
107
157
|
.getCharacteristic(Characteristic.On)
|
|
108
158
|
.onGet(() => this.live(() => this.lamp.getState().autoBrightness))
|
|
109
159
|
.onSet((value) => this.handleSet('auto brightness', () => this.lamp.setAutoBrightness(value)));
|
|
110
160
|
}
|
|
111
|
-
if (config.movementSwitch !== false) {
|
|
161
|
+
if (this.config.movementSwitch !== false) {
|
|
112
162
|
// Whether the lamp acts on what its sensor sees. Reading the sensor
|
|
113
163
|
// itself is not possible; see docs/PROTOCOL.md.
|
|
114
164
|
this.movement =
|
|
115
|
-
|
|
116
|
-
|
|
165
|
+
accessory.getServiceById(Service.Switch, 'movement') ??
|
|
166
|
+
accessory.addService(Service.Switch, `${this.config.name} Movement`, 'movement');
|
|
167
|
+
wanted.add('movement');
|
|
117
168
|
this.name(this.movement, 'Movement');
|
|
118
169
|
this.movement
|
|
119
170
|
.getCharacteristic(Characteristic.On)
|
|
120
171
|
.onGet(() => this.live(() => this.lamp.getState().movement))
|
|
121
172
|
.onSet((value) => this.handleSet('movement mode', () => this.lamp.setMovement(value)));
|
|
122
173
|
}
|
|
123
|
-
if (config.presetSwitches !== false) {
|
|
174
|
+
if (this.config.presetSwitches !== false) {
|
|
124
175
|
// Momentary rather than stateful. The lamp does hold a preset and reports
|
|
125
176
|
// which, but what these are for is applying a set of values — so pressing
|
|
126
177
|
// one applies it and the switch springs back, the way a scene does.
|
|
@@ -128,8 +179,8 @@ export class MorphAccessory {
|
|
|
128
179
|
// "Preset" in the name, so a momentary one is not mistaken in a list
|
|
129
180
|
// for the mode switches above it, which do hold a state.
|
|
130
181
|
const label = `${preset[0].toUpperCase() + preset.slice(1)} Preset`;
|
|
131
|
-
const service =
|
|
132
|
-
|
|
182
|
+
const service = accessory.getServiceById(Service.Switch, preset) ??
|
|
183
|
+
accessory.addService(Service.Switch, `${this.config.name} ${label}`, preset);
|
|
133
184
|
this.name(service, label);
|
|
134
185
|
service
|
|
135
186
|
.getCharacteristic(Characteristic.On)
|
|
@@ -142,18 +193,22 @@ export class MorphAccessory {
|
|
|
142
193
|
this.release(service);
|
|
143
194
|
});
|
|
144
195
|
this.presets.set(preset, service);
|
|
196
|
+
wanted.add(preset);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// A switch turned off in the config has to come off the accessory, not
|
|
200
|
+
// merely stop being added — the lesson of 1.0.1, where a service nobody
|
|
201
|
+
// added any more stayed in the Home app for everyone who already had it.
|
|
202
|
+
for (const subtype of SWITCH_SUBTYPES) {
|
|
203
|
+
if (wanted.has(subtype)) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const unwanted = accessory.getServiceById(Service.Switch, subtype);
|
|
207
|
+
if (unwanted) {
|
|
208
|
+
accessory.removeService(unwanted);
|
|
209
|
+
this.platform.log.info(`Removed the ${subtype} switch from ${this.config.name}; it is turned off in the config`);
|
|
145
210
|
}
|
|
146
211
|
}
|
|
147
|
-
this.lamp.on('state', (state) => {
|
|
148
|
-
this.lightbulb.updateCharacteristic(Characteristic.On, state.on);
|
|
149
|
-
this.lightbulb.updateCharacteristic(Characteristic.Brightness, state.brightness);
|
|
150
|
-
this.lightbulb.updateCharacteristic(Characteristic.ColorTemperature, kelvinToMired(state.kelvin));
|
|
151
|
-
// Follows the lamp leaving daylight mode on its own, which it does as soon
|
|
152
|
-
// as colour temperature is set by hand.
|
|
153
|
-
this.daylight?.updateCharacteristic(Characteristic.On, state.daylight);
|
|
154
|
-
this.autoBrightness?.updateCharacteristic(Characteristic.On, state.autoBrightness);
|
|
155
|
-
this.movement?.updateCharacteristic(Characteristic.On, state.movement);
|
|
156
|
-
});
|
|
157
212
|
}
|
|
158
213
|
async start() {
|
|
159
214
|
try {
|
|
@@ -186,6 +241,14 @@ export class MorphAccessory {
|
|
|
186
241
|
service.updateCharacteristic(this.platform.api.hap.Characteristic.On, false);
|
|
187
242
|
}, RELEASE_MS).unref();
|
|
188
243
|
}
|
|
244
|
+
/** Give an accessory its Dyson identity in the Home app's details. */
|
|
245
|
+
describe(accessory, serial) {
|
|
246
|
+
const { Service, Characteristic } = this.platform.api.hap;
|
|
247
|
+
(accessory.getService(Service.AccessoryInformation) ?? accessory.addService(Service.AccessoryInformation))
|
|
248
|
+
.setCharacteristic(Characteristic.Manufacturer, 'Dyson')
|
|
249
|
+
.setCharacteristic(Characteristic.Model, 'Solarcycle Morph')
|
|
250
|
+
.setCharacteristic(Characteristic.SerialNumber, serial);
|
|
251
|
+
}
|
|
189
252
|
/**
|
|
190
253
|
* Name a service so the Home app shows it.
|
|
191
254
|
*
|
package/dist/accessory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessory.js","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accessory.js","sourceRoot":"","sources":["../src/accessory.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -33,6 +33,14 @@ export interface LightConfig {
|
|
|
33
33
|
*/
|
|
34
34
|
presetSwitches?: boolean;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether any switch at all is wanted for this lamp.
|
|
38
|
+
*
|
|
39
|
+
* The switches live on an accessory of their own, so with every one of them
|
|
40
|
+
* turned off there is nothing for that accessory to hold and it is not
|
|
41
|
+
* registered at all.
|
|
42
|
+
*/
|
|
43
|
+
export declare function hasSwitches(light: LightConfig): boolean;
|
|
36
44
|
/** A lamp whose credentials are known, from the config or the credential store. */
|
|
37
45
|
export type ResolvedLightConfig = LightConfig & {
|
|
38
46
|
ltk: string;
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether any switch at all is wanted for this lamp.
|
|
3
|
+
*
|
|
4
|
+
* The switches live on an accessory of their own, so with every one of them
|
|
5
|
+
* turned off there is nothing for that accessory to hold and it is not
|
|
6
|
+
* registered at all.
|
|
7
|
+
*/
|
|
8
|
+
export function hasSwitches(light) {
|
|
9
|
+
return (light.daylightSwitch !== false ||
|
|
10
|
+
light.autoBrightnessSwitch !== false ||
|
|
11
|
+
light.movementSwitch !== false ||
|
|
12
|
+
light.presetSwitches !== false);
|
|
13
|
+
}
|
|
1
14
|
/**
|
|
2
15
|
* Validate one configured lamp.
|
|
3
16
|
*
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,OAAO,CACL,KAAK,CAAC,cAAc,KAAK,KAAK;QAC9B,KAAK,CAAC,oBAAoB,KAAK,KAAK;QACpC,KAAK,CAAC,cAAc,KAAK,KAAK;QAC9B,KAAK,CAAC,cAAc,KAAK,KAAK,CAC/B,CAAC;AACJ,CAAC;AA2BD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA2B,EAAE,KAAa;IAC5E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,KAAK,GAAG,CAAC;IAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,8CAA8C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAC/C,CAAC;IACD,yEAAyE;IACzE,8EAA8E;IAC9E,4CAA4C;IAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjG,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,wCAAwC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,yCAAyC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,8FAA8F,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { API, DynamicPlatformPlugin, Logger, PlatformAccessory } from 'homebridge';
|
|
2
2
|
import { type MorphPlatformConfig } from './config.js';
|
|
3
3
|
/**
|
|
4
|
-
* Registers
|
|
4
|
+
* Registers each configured lamp's HomeKit accessories and owns their lifecycle.
|
|
5
|
+
*
|
|
6
|
+
* A lamp is two accessories: the light itself, and a second one carrying every
|
|
7
|
+
* switch. Keeping them apart is what lets the Home app draw the lamp as a light
|
|
8
|
+
* you tap to turn on, rather than a folder of six controls.
|
|
5
9
|
*/
|
|
6
10
|
export declare class MorphPlatform implements DynamicPlatformPlugin {
|
|
7
11
|
readonly log: Logger;
|
|
@@ -15,6 +19,12 @@ export declare class MorphPlatform implements DynamicPlatformPlugin {
|
|
|
15
19
|
/** Homebridge replays cached accessories here before `didFinishLaunching`. */
|
|
16
20
|
configureAccessory(accessory: PlatformAccessory): void;
|
|
17
21
|
private discoverDevices;
|
|
22
|
+
/**
|
|
23
|
+
* Restore an accessory from Homebridge's cache, or register a new one.
|
|
24
|
+
*
|
|
25
|
+
* @param key Stable identity for this accessory; the UUID is derived from it.
|
|
26
|
+
*/
|
|
27
|
+
private adopt;
|
|
18
28
|
/**
|
|
19
29
|
* Fill in a lamp's credentials from the store when the config omits them.
|
|
20
30
|
*
|
package/dist/platform.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { describeError } from './errors.js';
|
|
2
2
|
import { MorphAccessory } from './accessory.js';
|
|
3
|
-
import { validateLightConfig } from './config.js';
|
|
3
|
+
import { hasSwitches, validateLightConfig } from './config.js';
|
|
4
4
|
import { CredentialStore } from './dyson/credentials.js';
|
|
5
5
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
6
6
|
/**
|
|
7
|
-
* Registers
|
|
7
|
+
* Registers each configured lamp's HomeKit accessories and owns their lifecycle.
|
|
8
|
+
*
|
|
9
|
+
* A lamp is two accessories: the light itself, and a second one carrying every
|
|
10
|
+
* switch. Keeping them apart is what lets the Home app draw the lamp as a light
|
|
11
|
+
* you tap to turn on, rather than a folder of six controls.
|
|
8
12
|
*/
|
|
9
13
|
export class MorphPlatform {
|
|
10
14
|
log;
|
|
@@ -48,27 +52,43 @@ export class MorphPlatform {
|
|
|
48
52
|
continue;
|
|
49
53
|
}
|
|
50
54
|
// Keyed on the serial so renaming a lamp does not orphan its accessory.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
// The light keeps the key it has always had, so an existing accessory —
|
|
56
|
+
// and every automation and room already pointing at it — survives.
|
|
57
|
+
const lightAccessory = this.adopt(`${PLUGIN_NAME}:${light.serial}`, light.name, light);
|
|
58
|
+
configured.add(lightAccessory.UUID);
|
|
59
|
+
const switchAccessory = hasSwitches(light)
|
|
60
|
+
? this.adopt(`${PLUGIN_NAME}:${light.serial}:switches`, `${light.name} Switches`, light)
|
|
61
|
+
: undefined;
|
|
62
|
+
if (switchAccessory) {
|
|
63
|
+
configured.add(switchAccessory.UUID);
|
|
59
64
|
}
|
|
60
|
-
|
|
61
|
-
accessory = new this.api.platformAccessory(light.name, uuid);
|
|
62
|
-
accessory.context.light = light;
|
|
63
|
-
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
64
|
-
this.log.info(`Adding ${light.name} (${light.mac})`);
|
|
65
|
-
}
|
|
66
|
-
const lamp = new MorphAccessory(this, accessory, resolved);
|
|
65
|
+
const lamp = new MorphAccessory(this, { light: lightAccessory, switches: switchAccessory }, resolved);
|
|
67
66
|
this.lamps.push(lamp);
|
|
68
67
|
void lamp.start();
|
|
69
68
|
}
|
|
70
69
|
this.pruneStaleAccessories(configured);
|
|
71
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Restore an accessory from Homebridge's cache, or register a new one.
|
|
73
|
+
*
|
|
74
|
+
* @param key Stable identity for this accessory; the UUID is derived from it.
|
|
75
|
+
*/
|
|
76
|
+
adopt(key, name, light) {
|
|
77
|
+
const uuid = this.api.hap.uuid.generate(key);
|
|
78
|
+
const cached = this.cached.get(uuid);
|
|
79
|
+
if (cached) {
|
|
80
|
+
cached.displayName = name;
|
|
81
|
+
cached.context.light = light;
|
|
82
|
+
this.api.updatePlatformAccessories([cached]);
|
|
83
|
+
this.log.info(`Restoring ${name} (${light.mac})`);
|
|
84
|
+
return cached;
|
|
85
|
+
}
|
|
86
|
+
const accessory = new this.api.platformAccessory(name, uuid);
|
|
87
|
+
accessory.context.light = light;
|
|
88
|
+
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
89
|
+
this.log.info(`Adding ${name} (${light.mac})`);
|
|
90
|
+
return accessory;
|
|
91
|
+
}
|
|
72
92
|
/**
|
|
73
93
|
* Fill in a lamp's credentials from the store when the config omits them.
|
|
74
94
|
*
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAwE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-dyson-solarcycle-morph",
|
|
3
3
|
"displayName": "Dyson Solarcycle Morph",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"description": "Homebridge plugin for the Bluetooth LE controlled Dyson Solarcycle/Lightcycle Morph desk light",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Oliver Rummeyer",
|