homebridge-dyson-solarcycle-morph 1.4.4 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,48 @@ 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.5.1] — 2026-09-22
9
+
10
+ ### Fixed
11
+
12
+ - **`dayStart` and `dayEnd` now reach the setting they name.** 1.5.0 wrote them
13
+ to two attributes that hold 08:00 and 18:00 and look like a day but are not
14
+ the one daylight tracking works to, so the fields did nothing. They now go to
15
+ the pair the lamp actually uses — the same one the MyDyson app offers as
16
+ *Sunrise* and *Sunset* — which was confirmed by watching the lamp rather than
17
+ by reading it back: setting the end to a time already past dropped it to
18
+ 3000 K at 11% within a second, and restoring the real end brought it back to
19
+ 5801 K at 61%.
20
+
21
+ The mapping in 1.5.0 was inferred from a settings label and two plausible
22
+ values without checking which attributes the app's own screen reads. Anyone
23
+ who set these fields on 1.5.0 changed two settings whose purpose is still
24
+ unknown; they read 480 and 1080 from the factory, and this version does not
25
+ touch them.
26
+
27
+ - **A write the lamp drops is tried again.** The two day boundaries go out
28
+ together and one of them can go missing while the other lands, which is this
29
+ lamp losing a write rather than refusing a setting — so those are attempted up
30
+ to three times, each checked by reading back. The location is not: there the
31
+ refusal is a set-up gate, five attempts in a row were refused as uniformly as
32
+ one, and retrying would only spend writes on a link that would rather be left
33
+ alone.
34
+
35
+ ## [1.5.0] — 2026-09-22
36
+
37
+ ### Added
38
+
39
+ - **The lamp's day can be set by hand.** Daylight tracking follows the real
40
+ sunrise and sunset for wherever the lamp is; `dayStart` and `dayEnd` replace
41
+ that with a day of your choosing, and the lamp fits its warm-to-cool-to-warm
42
+ shape between those instead. It is the setting the MyDyson app offers beside
43
+ the location, and the lamp takes it readily — these two were accepted on a
44
+ lamp that was refusing its own coordinates at the time.
45
+
46
+ Both or neither, as `HH:MM`, and the end has to come after the start: the lamp
47
+ holds two plain minute counts and cannot express a day that runs past
48
+ midnight. Left out, the sun decides as before.
49
+
8
50
  ## [1.4.4] — 2026-09-22
9
51
 
10
52
  ### Changed
package/README.md CHANGED
@@ -162,6 +162,8 @@ Everything except the lights is optional.
162
162
  | **Lights → Latitude**, **Longitude** | Where the lamp stands, in decimal degrees. Optional; set both or neither |
163
163
  | **Lights → Year of birth** | Turns on the lamp's age adjustment. Optional |
164
164
  | **Lights → Apply the age adjustment** | The lamp's own switch for it. On by default |
165
+ | **Lights → Day starts at** | Optional. Replaces the real sunrise, as `HH:MM` |
166
+ | **Lights → Day ends at** | Optional. Replaces the real sunset |
165
167
  | **Lights → Expose daylight tracking** | The Daylight switch. On by default |
166
168
  | **Lights → Expose auto brightness** | The Auto Brightness switch. On by default |
167
169
  | **Lights → Expose movement mode** | The Movement switch. On by default |
@@ -217,6 +219,8 @@ the lamp. The example above shows every key at once, which no real config needs.
217
219
  | `lights[].longitude` | number | unset | Decimal degrees, -180 to 180 |
218
220
  | `lights[].yearOfBirth` | integer | unset | 1900 to this year |
219
221
  | `lights[].ageAdjust` | boolean | `true` | Only read when `yearOfBirth` is set |
222
+ | `lights[].dayStart` | string | | `HH:MM`. Both or neither, end after start |
223
+ | `lights[].dayEnd` | string | | |
220
224
  | `lights[].daylightSwitch` | boolean | `true` | |
221
225
  | `lights[].autoBrightnessSwitch` | boolean | `true` | |
222
226
  | `lights[].movementSwitch` | boolean | `true` | |
@@ -286,30 +290,70 @@ connection goes out through a VPN. Nothing is sent to either service: they read
286
290
  the public address the request arrives from, which is what every site this
287
291
  machine contacts already sees. Check what it filled in before saving.
288
292
 
289
- ### And what time it is there
293
+ ### A day of your own
294
+
295
+ Daylight tracking follows the real sunrise and sunset by default. Two optional
296
+ fields replace that with a day you choose:
297
+
298
+ ```json
299
+ "dayStart": "07:30",
300
+ "dayEnd": "22:00"
301
+ ```
290
302
 
291
- Coordinates alone are not enough: the lamp turns them into a sunrise using a
292
- clock, and it keeps neither reliably. **Take the lamp off the mains and it comes
293
- back holding Dyson's own coordinates in Wiltshire**, and its offset from UTC has
294
- been seen an hour out with nobody having written it. A lamp in that state blinks
295
- a few times when daylight tracking is switched on and then drops out of it —
296
- from the Home app and from the button on its base alike, because nothing is
297
- wrong with the command.
303
+ The lamp keeps its warm-to-cool-to-warm shape and fits it between those two
304
+ times instead of the sun's, and falls back to a softer, warmer baseline once the
305
+ day is over. It is the same pair the MyDyson app offers as *Sunrise* and
306
+ *Sunset*. Supply both or neither, and the end has to come after the start — the
307
+ lamp stores two plain minute counts and has no way to express a day that runs
308
+ past midnight. Leave them out and the sun decides.
298
309
 
299
- So the plugin puts the time zone in beside the coordinates, on every connection,
300
- and only when the lamp disagrees:
310
+ The effect is immediate and visible: setting the end to a time already past
311
+ drops the lamp to its baseline within a second, and putting the real one back
312
+ brings it straight up again.
313
+
314
+ **There is no way back to automatic from here.** Clearing the fields stops the
315
+ plugin correcting the lamp, but whatever day was last written stays in it. The
316
+ lamp may recompute the times from its location on its own — that is untested —
317
+ and the MyDyson app certainly can. Until that is settled, treat setting a day as
318
+ something the app has to undo.
319
+
320
+ ### And what time it is there
321
+
322
+ Coordinates alone are not enough: turning a place into an hour needs a clock, so
323
+ the lamp holds an offset from UTC and the rules for when the local clock jumps.
324
+ The MyDyson app writes both on every connection, and so does this plugin, only
325
+ when the lamp disagrees:
301
326
 
302
327
  ```
303
328
  UTC offset of F0:B1:A7:75:B1:D1 set to 2 (was 1)
304
329
  ```
305
330
 
306
- **There is nothing to configure.** Both the offset and the daylight-saving rules
307
- come from the time zone of the machine Homebridge runs on, which already knows
308
- them exactly and knows them without asking the network — worth having, since
309
- these go in while reconnecting, which after a power cut is the moment the
310
- network is least likely to be up. A time zone whose clock changes on a pattern
311
- the lamp has no way of being told is left alone rather than guessed at; the
312
- common European and British rules are exact.
331
+ **There is nothing to configure.** Both come from the time zone of the machine
332
+ Homebridge runs on, which knows them exactly and knows them without asking the
333
+ network — worth having, since they go in while reconnecting. A time zone whose
334
+ clock changes on a pattern the lamp has no way of being told is left alone
335
+ rather than guessed at; the common European and British rules are exact.
336
+
337
+ A lamp that will not take the offset says so in the log and keeps its own, the
338
+ same way it does with the location.
339
+
340
+ ### Is it actually tracking?
341
+
342
+ The Daylight switch does not answer that. The lamp accepts the mode, never
343
+ reports it back off, and then does nothing at all if it has no location to work
344
+ from. What answers it is the day the lamp has worked out, which appears on every
345
+ connection:
346
+
347
+ ```
348
+ F0:B1:A7:75:B1:D1 puts today's daylight between 07:04 and 19:30
349
+ ```
350
+
351
+ A lamp with no location has no day, and says so:
352
+
353
+ ```
354
+ F0:B1:A7:75:B1:D1 has worked out no sunrise or sunset, which means it holds no
355
+ location. Daylight tracking cannot run until one is set
356
+ ```
313
357
 
314
358
  ### Age adjustment
315
359
 
@@ -5,13 +5,15 @@
5
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
- "required": ["name"],
8
+ "required": [
9
+ "name"
10
+ ],
9
11
  "properties": {
10
12
  "name": {
11
13
  "title": "Name",
12
14
  "type": "string",
13
15
  "default": "Dyson Solarcycle Morph",
14
- "description": "Shown in the Homebridge log in front of this plugin\u2019s messages."
16
+ "description": "Shown in the Homebridge log in front of this plugin’s messages."
15
17
  },
16
18
  "adapter": {
17
19
  "title": "Bluetooth adapter",
@@ -24,7 +26,11 @@
24
26
  "type": "array",
25
27
  "items": {
26
28
  "type": "object",
27
- "required": ["name", "mac", "serial"],
29
+ "required": [
30
+ "name",
31
+ "mac",
32
+ "serial"
33
+ ],
28
34
  "properties": {
29
35
  "name": {
30
36
  "title": "Name",
@@ -74,21 +80,37 @@
74
80
  "minimum": -180,
75
81
  "maximum": 180,
76
82
  "placeholder": "9.2807",
77
- "description": "Decimal degrees. Set both or neither \u2014 a lamp is not told half a location."
83
+ "description": "Decimal degrees. Set both or neither — a lamp is not told half a location."
84
+ },
85
+ "dayStart": {
86
+ "title": "Day starts at",
87
+ "type": "string",
88
+ "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]$",
89
+ "placeholder": "08:00",
90
+ "description": "Optional. Replaces the real sunrise for this lamp — daylight tracking then begins here instead. Supply both this and the end, or neither; leave both empty and the lamp follows the actual sun."
91
+ },
92
+ "dayEnd": {
93
+ "title": "Day ends at",
94
+ "type": "string",
95
+ "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]$",
96
+ "placeholder": "18:00",
97
+ "description": "Optional. Replaces the real sunset. The lamp returns to its baseline settings once the day is over."
78
98
  },
79
99
  "yearOfBirth": {
80
100
  "title": "Year of birth",
81
101
  "type": "integer",
82
102
  "minimum": 1900,
83
103
  "placeholder": "1974",
84
- "description": "Age adjustment: the lamp trims the brightness of its Study and Relax modes to suit the main user\u2019s eyes. The lamp stores the year only, encrypted, and keeps it to the Dyson account that set it. Leave empty to leave the setting alone."
104
+ "description": "Age adjustment: the lamp trims the brightness of its Study and Relax modes to suit the main user’s eyes. The lamp stores the year only, encrypted, and keeps it to the Dyson account that set it. Leave empty to leave the setting alone."
85
105
  },
86
106
  "ageAdjust": {
87
107
  "title": "Apply the age adjustment",
88
108
  "type": "boolean",
89
109
  "default": true,
90
- "condition": { "functionBody": "return model.lights && model.lights[arrayIndices[0]] && model.lights[arrayIndices[0]].yearOfBirth;" },
91
- "description": "The lamp\u2019s own switch for it. Turning this off leaves the year in place but stops the lamp acting on it."
110
+ "condition": {
111
+ "functionBody": "return model.lights && model.lights[arrayIndices[0]] && model.lights[arrayIndices[0]].yearOfBirth;"
112
+ },
113
+ "description": "The lamp’s own switch for it. Turning this off leaves the year in place but stops the lamp acting on it."
92
114
  },
93
115
  "daylightSwitch": {
94
116
  "title": "Expose daylight tracking",
@@ -122,7 +144,7 @@
122
144
  },
123
145
  "customUi": true,
124
146
  "customUiPath": "./homebridge-ui",
125
- "footerDisplay": "Lamp keys are stored in the plugin's storage directory, never in config.json. Your MyDyson password is only needed while authorising \u2014 clear it afterwards.",
147
+ "footerDisplay": "Lamp keys are stored in the plugin's storage directory, never in config.json. Your MyDyson password is only needed while authorising — clear it afterwards.",
126
148
  "layout": [
127
149
  "name",
128
150
  {
@@ -39,14 +39,6 @@ export declare class MorphAccessory {
39
39
  private addSwitches;
40
40
  start(): Promise<void>;
41
41
  stop(): Promise<void>;
42
- /**
43
- * Answer only while the lamp is actually reachable.
44
- *
45
- * Without this HomeKit keeps showing whatever was last known — a lamp that
46
- * has been unreachable for minutes still reads as on at 100%, which is worse
47
- * than saying nothing. Throwing a communication failure is how an accessory
48
- * reports itself as unavailable, and the Home app shows "No Response".
49
- */
50
42
  /**
51
43
  * Let a momentary switch spring back.
52
44
  *
@@ -77,6 +69,14 @@ export declare class MorphAccessory {
77
69
  * this plugin generated, and left alone from the moment someone changes it.
78
70
  */
79
71
  private name;
72
+ /**
73
+ * Answer only while the lamp is actually reachable.
74
+ *
75
+ * Without this HomeKit keeps showing whatever was last known — a lamp that
76
+ * has been unreachable for minutes still reads as on at 100%, which is worse
77
+ * than saying nothing. Throwing a communication failure is how an accessory
78
+ * reports itself as unavailable, and the Home app shows "No Response".
79
+ */
80
80
  private live;
81
81
  /** Push "No Response" to every characteristic at once. */
82
82
  private markUnreachable;
package/dist/accessory.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { describeError } from './errors.js';
2
+ import { parseTimeOfDay } from './config.js';
2
3
  import { DysonMorphLamp } from './dyson/lamp.js';
3
4
  import { kelvinToMired, miredToKelvin, MAX_KELVIN, MIN_KELVIN, PRESETS } from './dyson/protocol.js';
4
5
  /**
@@ -51,6 +52,11 @@ export class MorphAccessory {
51
52
  location: config.latitude !== undefined && config.longitude !== undefined
52
53
  ? { latitude: config.latitude, longitude: config.longitude }
53
54
  : undefined,
55
+ // Both or neither again, and validation has already refused half a day,
56
+ // so one of them being a time means the other is too.
57
+ day: config.dayStart !== undefined && config.dayEnd !== undefined
58
+ ? { start: parseTimeOfDay(config.dayStart), end: parseTimeOfDay(config.dayEnd) }
59
+ : undefined,
54
60
  // The switch only means anything next to a year, so the pair travels
55
61
  // together and defaults to on: setting a year and leaving the adjustment
56
62
  // off would be asking for nothing to happen.
@@ -242,14 +248,6 @@ export class MorphAccessory {
242
248
  async stop() {
243
249
  await this.lamp.stop();
244
250
  }
245
- /**
246
- * Answer only while the lamp is actually reachable.
247
- *
248
- * Without this HomeKit keeps showing whatever was last known — a lamp that
249
- * has been unreachable for minutes still reads as on at 100%, which is worse
250
- * than saying nothing. Throwing a communication failure is how an accessory
251
- * reports itself as unavailable, and the Home app shows "No Response".
252
- */
253
251
  /**
254
252
  * Let a momentary switch spring back.
255
253
  *
@@ -319,6 +317,14 @@ export class MorphAccessory {
319
317
  // for one still carrying a name this plugin gave it.
320
318
  delete generated[key];
321
319
  }
320
+ /**
321
+ * Answer only while the lamp is actually reachable.
322
+ *
323
+ * Without this HomeKit keeps showing whatever was last known — a lamp that
324
+ * has been unreachable for minutes still reads as on at 100%, which is worse
325
+ * than saying nothing. Throwing a communication failure is how an accessory
326
+ * reports itself as unavailable, and the Home app shows "No Response".
327
+ */
322
328
  live(read) {
323
329
  if (!this.lamp.isConnected()) {
324
330
  throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
@@ -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
@@ -42,6 +42,17 @@ export interface LightConfig {
42
42
  */
43
43
  latitude?: number;
44
44
  longitude?: number;
45
+ /**
46
+ * When the lamp's own day starts and ends, as `HH:MM`. Both or neither.
47
+ *
48
+ * Daylight tracking normally follows the real sunrise and sunset for the
49
+ * lamp's location. These override that with a day of your own choosing — the
50
+ * lamp holds them as minutes past midnight and falls back to its baseline
51
+ * settings once the day is over, natural or custom. Left out, whatever the
52
+ * lamp already holds is untouched.
53
+ */
54
+ dayStart?: string;
55
+ dayEnd?: string;
45
56
  /**
46
57
  * Birth year of the main intended user, for the lamp's age adjustment.
47
58
  *
@@ -58,6 +69,12 @@ export interface LightConfig {
58
69
  */
59
70
  ageAdjust?: boolean;
60
71
  }
72
+ /**
73
+ * Read an `HH:MM` time of day into minutes past midnight.
74
+ *
75
+ * @returns the minutes, or `undefined` when the string is not a time.
76
+ */
77
+ export declare function parseTimeOfDay(value: string): number | undefined;
61
78
  /** The oldest year the MyDyson app will offer, and so the oldest accepted here. */
62
79
  export declare const EARLIEST_YEAR_OF_BIRTH = 1900;
63
80
  /**
package/dist/config.js CHANGED
@@ -1,3 +1,20 @@
1
+ /**
2
+ * Read an `HH:MM` time of day into minutes past midnight.
3
+ *
4
+ * @returns the minutes, or `undefined` when the string is not a time.
5
+ */
6
+ export function parseTimeOfDay(value) {
7
+ const match = /^([0-9]{1,2}):([0-9]{2})$/.exec(value.trim());
8
+ if (!match) {
9
+ return undefined;
10
+ }
11
+ const hours = Number(match[1]);
12
+ const minutes = Number(match[2]);
13
+ if (hours > 23 || minutes > 59) {
14
+ return undefined;
15
+ }
16
+ return hours * 60 + minutes;
17
+ }
1
18
  /** The oldest year the MyDyson app will offer, and so the oldest accepted here. */
2
19
  export const EARLIEST_YEAR_OF_BIRTH = 1900;
3
20
  /**
@@ -48,6 +65,28 @@ export function validateLightConfig(light, index) {
48
65
  if ((light.latitude === undefined) !== (light.longitude === undefined)) {
49
66
  problems.push(`${where} sets only one of latitude/longitude — supply both, or neither`);
50
67
  }
68
+ // The lamp holds a start and an end, and a day with only one of them stated
69
+ // is not a day. Rejected rather than half-applied, as with the location.
70
+ if ((light.dayStart === undefined) !== (light.dayEnd === undefined)) {
71
+ problems.push(`${where} sets only one of dayStart/dayEnd — supply both, or neither`);
72
+ }
73
+ const day = {};
74
+ for (const field of ['dayStart', 'dayEnd']) {
75
+ const value = light[field];
76
+ if (value === undefined) {
77
+ continue;
78
+ }
79
+ const minutes = typeof value === 'string' ? parseTimeOfDay(value) : undefined;
80
+ if (minutes === undefined) {
81
+ problems.push(`${where}.${field} must be a time of day like 08:00 (got ${JSON.stringify(value)})`);
82
+ continue;
83
+ }
84
+ day[field] = minutes;
85
+ }
86
+ if (day.dayStart !== undefined && day.dayEnd !== undefined && day.dayEnd <= day.dayStart) {
87
+ problems.push(`${where}.dayEnd must come after dayStart, and the lamp has no way to state a day that runs past midnight ` +
88
+ `(got ${JSON.stringify(light.dayStart)} to ${JSON.stringify(light.dayEnd)})`);
89
+ }
51
90
  if (light.yearOfBirth !== undefined) {
52
91
  const thisYear = new Date().getFullYear();
53
92
  const year = light.yearOfBirth;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,17 @@ export interface LampState {
31
31
  */
32
32
  preset: Preset | 'none';
33
33
  }
34
+ /**
35
+ * A day of the user's own choosing, in minutes past midnight.
36
+ *
37
+ * The lamp normally takes its day from the real sunrise and sunset at its
38
+ * location; these replace that. It falls back to its baseline settings once the
39
+ * day is over, natural or custom.
40
+ */
41
+ export interface LampDay {
42
+ start: number;
43
+ end: number;
44
+ }
34
45
  /** Where the lamp is, in decimal degrees. */
35
46
  export interface LampLocation {
36
47
  latitude: number;
@@ -62,6 +73,11 @@ export interface LampOptions {
62
73
  * through the MyDyson app already knows.
63
74
  */
64
75
  location?: LampLocation;
76
+ /**
77
+ * When the lamp's day starts and ends. Left alone entirely when absent, so a
78
+ * lamp following the real sunrise keeps doing so.
79
+ */
80
+ day?: LampDay;
65
81
  /**
66
82
  * Age adjustment for this lamp. Left alone entirely when absent, since only
67
83
  * the owner of the lamp can set it and it is nobody else's business.
@@ -86,6 +102,7 @@ export declare class DysonMorphLamp extends EventEmitter {
86
102
  private readonly accountId;
87
103
  private readonly adapterName;
88
104
  private readonly location;
105
+ private readonly day;
89
106
  private readonly ageAdjust;
90
107
  /** Key for the lamp's one encrypted setting; not the handshake's. */
91
108
  private readonly sensitiveKey;
@@ -340,6 +357,26 @@ export declare class DysonMorphLamp extends EventEmitter {
340
357
  * the offset outright and say otherwise; see {@link writeAndVerify}.
341
358
  */
342
359
  private syncClock;
360
+ /**
361
+ * Put a day of the user's own choosing in the lamp.
362
+ *
363
+ * `0x2014` and `0x2015` are the day the lamp actually works to. It fills them
364
+ * from the real sunrise and sunset at its location, and writing them replaces
365
+ * that — measured on a CF06 on 2026-09-22 by setting the end to 14:00 at
366
+ * 14:35, whereupon the lamp dropped to 3000 K at 11%, its after-sunset
367
+ * baseline, and climbed back to 5801 K at 61% the moment the real end was put
368
+ * back. That is the one thing today that was confirmed by watching the lamp
369
+ * behave rather than by reading an attribute.
370
+ *
371
+ * Retried, unlike the location: one of the two went missing while the other
372
+ * landed in the same breath, which is this lamp dropping a write rather than
373
+ * refusing a setting.
374
+ *
375
+ * Written on every connection where the lamp disagrees, which also covers the
376
+ * open question of whether it recomputes these overnight — if it does, the
377
+ * next connection puts the chosen day back.
378
+ */
379
+ private syncDay;
343
380
  /**
344
381
  * Say what the lamp makes of its location, for the log.
345
382
  *
@@ -347,7 +384,8 @@ export declare class DysonMorphLamp extends EventEmitter {
347
384
  * running?". The mode attribute is no answer at all — the lamp takes the
348
385
  * write, acknowledges it, never reports it back off, and then does nothing if
349
386
  * it has no location to work from, saying so only through a small LED on its
350
- * base. Sunrise and sunset are what it has actually computed.
387
+ * base. The day it is working to is what it has actually settled on, whether
388
+ * that came from the sun or from {@link syncDay}.
351
389
  */
352
390
  private reportDaylightHours;
353
391
  /**
@@ -402,11 +440,16 @@ export declare class DysonMorphLamp extends EventEmitter {
402
440
  * the reply reported success for months while the lamp sat on the factory
403
441
  * location and daylight tracking could not run.
404
442
  *
405
- * Tried once, not repeated. Repetition is the answer to most of this lamp's
406
- * refusals, but not this one: five attempts in a row were refused just as
407
- * uniformly as one, and each costs a write and a read on a link that would
408
- * rather be left alone.
443
+ * Whether to try again depends on which refusal this is, and the two look
444
+ * alike from here. The lamp drops writes sporadically, and repetition is the
445
+ * established answer to that; but it also refuses its location outright until
446
+ * the MyDyson app has set one up, and there five attempts in a row were
447
+ * refused as uniformly as one, so retrying only spends writes and reads on a
448
+ * link that would rather be left alone. Callers say which they are facing.
409
449
  *
450
+ * @param attempts how many times to write before giving up. One for a
451
+ * refusal known to be settled, more where the lamp is merely being fickle.
452
+ * @param remedy what to tell the user when it will not take, if anything.
410
453
  * @returns whether the lamp ended up holding the wanted value.
411
454
  */
412
455
  private writeAndVerify;