homebridge-salus-cloud 0.1.39 → 0.1.41

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/README.md CHANGED
@@ -103,6 +103,7 @@ Examples:
103
103
 
104
104
  - Automatic token refresh before expiry and on `401` responses.
105
105
  - Exponential backoff retries for transient network/API failures.
106
+ - Poll scheduler applies adaptive backoff + jitter after consecutive sync failures to avoid request storms and improve long-run durability.
106
107
  - API base fallback between `/api/v1` and `/api/v2`.
107
108
  - Modern discovery fallback from `occupants` API to legacy `/devices` API shape.
108
109
  - Bounded `occupants/slider_details` traversal per poll (target-count + time budget) to avoid long stalls during upstream `5xx` bursts.
@@ -114,10 +115,13 @@ Examples:
114
115
  - A single service-api bulk-write compatibility fallback is kept as a safety net (brute-force write shape probing removed).
115
116
  - Per-poll property refresh (with cached fallback on transient errors) to keep HomeKit target/current values up-to-date.
116
117
  - Polling now uses a fast path: lightweight shadow refresh on most cycles and full discovery periodically, which improves Home app <-> Salus app sync latency.
118
+ - After thermostat writes, polling is temporarily boosted (short interval window) to make state convergence feel snappier without permanently increasing cloud request load.
119
+ - Thermostat target updates use a short-lived optimistic cache in HomeKit (up to 60s) so Home app does not bounce back while Salus cloud is still applying the command.
117
120
  - Thermostat write confirmation loop verifies that setpoint actually changed in cloud state; failed convergence is surfaced as HomeKit communication failure instead of silent no-op.
118
121
  - Thermostat setpoint writes use command datapoints (`SetHeatingSetpoint*`) together with manual/working mode hints (`SetHoldType=2`, `SetSystemMode=4`) to match Salus app behavior.
119
122
  - Device online state is inferred from Salus connectivity datapoints (`connected`, `OnlineState`, `OnlineStatus_i`, etc.) and mapped to HomeKit reachability so disconnected devices can show as not responding.
120
123
  - Immediate short re-poll after write to keep HomeKit state aligned.
124
+ - Poll health telemetry is logged periodically (success rate, consecutive failures, last successful sync age) to simplify long-term monitoring.
121
125
  - Detailed logs for auth, discovery, shadow sync, writes, retries, and failures.
122
126
 
123
127
  ## Thermostat mode mapping
@@ -11,6 +11,7 @@ export declare class SalusHomebridgePlatform implements DynamicPlatformPlugin {
11
11
  private readonly cloudClient;
12
12
  private readonly pollIntervalMs;
13
13
  private readonly fullDiscoveryIntervalMs;
14
+ private readonly writeBoostPollIntervalMs;
14
15
  private readonly maxParallelPropertyRequests;
15
16
  private readonly missingAccessoryPollCounts;
16
17
  private pollTimer;
@@ -18,6 +19,11 @@ export declare class SalusHomebridgePlatform implements DynamicPlatformPlugin {
18
19
  private pollRequestedWhileBusy;
19
20
  private lastBusyPollLogEpochMs;
20
21
  private lastFullDiscoveryEpochMs;
22
+ private boostPollingUntilEpochMs;
23
+ private consecutivePollFailures;
24
+ private totalPollCycles;
25
+ private successfulPollCycles;
26
+ private lastSuccessfulPollEpochMs;
21
27
  private launchCompleted;
22
28
  private hasLoggedDuplicateRegisterWorkaround;
23
29
  constructor(log: Logging, config: PlatformConfig, api: API);
@@ -27,6 +33,11 @@ export declare class SalusHomebridgePlatform implements DynamicPlatformPlugin {
27
33
  readDeviceProperties(device: SalusDevice): Promise<SalusPropertyMap>;
28
34
  getUnmappedConstraintList(): string[];
29
35
  private schedulePoll;
36
+ private markWriteBoostWindow;
37
+ private getActivePollIntervalMs;
38
+ private withDelayJitter;
39
+ private computeNextPollDelayMs;
40
+ private maybeLogPollHealth;
30
41
  private pollDevices;
31
42
  private addAccessory;
32
43
  private restoreOrUpdateAccessory;
package/dist/platform.js CHANGED
@@ -7,10 +7,16 @@ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
7
7
  const DEFAULT_POLL_INTERVAL_SECONDS = 20;
8
8
  const DEFAULT_MAX_PARALLEL_PROPERTY_REQUESTS = 4;
9
9
  const DEFAULT_FULL_DISCOVERY_INTERVAL_SECONDS = 300;
10
+ const WRITE_BOOST_POLL_INTERVAL_SECONDS = 8;
11
+ const WRITE_BOOST_WINDOW_MS = 60_000;
10
12
  const MIN_POLL_INTERVAL_SECONDS = 10;
11
13
  const MAX_POLL_INTERVAL_SECONDS = 300;
12
14
  const STALE_ACCESSORY_REMOVAL_GRACE_POLLS = 3;
13
15
  const POLL_BUSY_LOG_THROTTLE_MS = 30_000;
16
+ const POLL_FAILURE_BACKOFF_BASE_MS = 5_000;
17
+ const POLL_FAILURE_BACKOFF_MAX_MS = 300_000;
18
+ const POLL_DELAY_JITTER_FACTOR = 0.15;
19
+ const POLL_HEALTH_LOG_EVERY_CYCLES = 30;
14
20
  const THERMOSTAT_PROPERTY_BASES = [
15
21
  'HeatingSetpoint_x100',
16
22
  'AutoHeatingSetpoint_x100',
@@ -149,6 +155,7 @@ export class SalusHomebridgePlatform {
149
155
  cloudClient;
150
156
  pollIntervalMs;
151
157
  fullDiscoveryIntervalMs;
158
+ writeBoostPollIntervalMs;
152
159
  maxParallelPropertyRequests;
153
160
  missingAccessoryPollCounts = new Map();
154
161
  pollTimer = null;
@@ -156,6 +163,11 @@ export class SalusHomebridgePlatform {
156
163
  pollRequestedWhileBusy = false;
157
164
  lastBusyPollLogEpochMs = 0;
158
165
  lastFullDiscoveryEpochMs = 0;
166
+ boostPollingUntilEpochMs = 0;
167
+ consecutivePollFailures = 0;
168
+ totalPollCycles = 0;
169
+ successfulPollCycles = 0;
170
+ lastSuccessfulPollEpochMs = 0;
159
171
  launchCompleted = false;
160
172
  hasLoggedDuplicateRegisterWorkaround = false;
161
173
  constructor(log, config, api) {
@@ -167,6 +179,7 @@ export class SalusHomebridgePlatform {
167
179
  this.pollIntervalMs = Math.round(clamp(this.configTyped.pollIntervalSeconds ?? DEFAULT_POLL_INTERVAL_SECONDS, MIN_POLL_INTERVAL_SECONDS, MAX_POLL_INTERVAL_SECONDS) * 1_000);
168
180
  this.maxParallelPropertyRequests = Math.max(1, Math.floor(this.configTyped.maxParallelPropertyRequests ?? DEFAULT_MAX_PARALLEL_PROPERTY_REQUESTS));
169
181
  this.fullDiscoveryIntervalMs = Math.max(this.pollIntervalMs, Math.round((DEFAULT_FULL_DISCOVERY_INTERVAL_SECONDS) * 1_000));
182
+ this.writeBoostPollIntervalMs = Math.max(5_000, Math.min(this.pollIntervalMs, Math.round(WRITE_BOOST_POLL_INTERVAL_SECONDS * 1_000)));
170
183
  if (!this.configTyped.email || !this.configTyped.password) {
171
184
  this.cloudClient = null;
172
185
  this.log.error('Salus credentials are missing. Configure both "email" and "password" in Homebridge settings.');
@@ -212,7 +225,8 @@ export class SalusHomebridgePlatform {
212
225
  const summary = entries.map(([name, value]) => `${name}=${JSON.stringify(value)}`).join(', ');
213
226
  this.log.debug(`Set ${entries.length} datapoints for ${device.name} (${device.dsn}): ${summary}`);
214
227
  }
215
- this.schedulePoll(2_000);
228
+ this.markWriteBoostWindow();
229
+ this.schedulePoll(1_000);
216
230
  }
217
231
  catch (error) {
218
232
  const summary = entries.map(([name, value]) => `${name}=${JSON.stringify(value)}`).join(', ');
@@ -244,6 +258,44 @@ export class SalusHomebridgePlatform {
244
258
  void this.pollDevices();
245
259
  }, Math.max(0, delayMs));
246
260
  }
261
+ markWriteBoostWindow() {
262
+ const boostedUntil = Date.now() + WRITE_BOOST_WINDOW_MS;
263
+ if (boostedUntil > this.boostPollingUntilEpochMs) {
264
+ this.boostPollingUntilEpochMs = boostedUntil;
265
+ }
266
+ }
267
+ getActivePollIntervalMs() {
268
+ if (Date.now() < this.boostPollingUntilEpochMs) {
269
+ return this.writeBoostPollIntervalMs;
270
+ }
271
+ return this.pollIntervalMs;
272
+ }
273
+ withDelayJitter(baseDelayMs) {
274
+ const bounded = Math.max(1_000, Math.round(baseDelayMs));
275
+ const spread = bounded * POLL_DELAY_JITTER_FACTOR;
276
+ const jittered = bounded + ((Math.random() * 2 * spread) - spread);
277
+ return Math.max(1_000, Math.round(jittered));
278
+ }
279
+ computeNextPollDelayMs() {
280
+ if (this.consecutivePollFailures <= 0) {
281
+ return this.withDelayJitter(this.getActivePollIntervalMs());
282
+ }
283
+ const exponent = Math.min(6, this.consecutivePollFailures - 1);
284
+ const baseBackoff = Math.min(POLL_FAILURE_BACKOFF_MAX_MS, POLL_FAILURE_BACKOFF_BASE_MS * (2 ** exponent));
285
+ return this.withDelayJitter(baseBackoff);
286
+ }
287
+ maybeLogPollHealth() {
288
+ if (this.totalPollCycles <= 0 || (this.totalPollCycles % POLL_HEALTH_LOG_EVERY_CYCLES) !== 0) {
289
+ return;
290
+ }
291
+ const successRate = Math.round((this.successfulPollCycles / this.totalPollCycles) * 100);
292
+ const sinceLastSuccessSec = this.lastSuccessfulPollEpochMs > 0
293
+ ? Math.round((Date.now() - this.lastSuccessfulPollEpochMs) / 1000)
294
+ : -1;
295
+ const sinceLastSuccessText = sinceLastSuccessSec >= 0 ? `${sinceLastSuccessSec}s` : 'n/a';
296
+ this.log.info(`Salus poll health: success=${this.successfulPollCycles}/${this.totalPollCycles} (${successRate}%),`
297
+ + ` consecutiveFailures=${this.consecutivePollFailures}, lastSuccessAgo=${sinceLastSuccessText}.`);
298
+ }
247
299
  async pollDevices() {
248
300
  if (!this.cloudClient) {
249
301
  return;
@@ -258,7 +310,9 @@ export class SalusHomebridgePlatform {
258
310
  return;
259
311
  }
260
312
  this.pollInProgress = true;
313
+ this.totalPollCycles += 1;
261
314
  const discoveredUuids = new Set();
315
+ let nextPollDelayMs;
262
316
  try {
263
317
  const now = Date.now();
264
318
  const knownDevices = this.cloudClient.getKnownDevicesSnapshot();
@@ -270,8 +324,15 @@ export class SalusHomebridgePlatform {
270
324
  this.lastFullDiscoveryEpochMs = Date.now();
271
325
  }
272
326
  else {
273
- await this.cloudClient.refreshKnownDeviceShadows();
274
- devices = this.cloudClient.getKnownDevicesSnapshot();
327
+ try {
328
+ await this.cloudClient.refreshKnownDeviceShadows();
329
+ devices = this.cloudClient.getKnownDevicesSnapshot();
330
+ }
331
+ catch (error) {
332
+ this.log.info(`Fast Salus shadow refresh failed (${asErrorMessage(error)}). Falling back to full discovery.`);
333
+ devices = await this.cloudClient.listDevices();
334
+ this.lastFullDiscoveryEpochMs = Date.now();
335
+ }
275
336
  if (devices.length === 0) {
276
337
  devices = await this.cloudClient.listDevices();
277
338
  this.lastFullDiscoveryEpochMs = Date.now();
@@ -321,9 +382,22 @@ export class SalusHomebridgePlatform {
321
382
  }
322
383
  this.removeStaleAccessories(discoveredUuids);
323
384
  this.log.info(`Salus sync completed: ${uniqueDevices.length} device(s) discovered, ${updatedDeviceCount} device(s) refreshed.`);
385
+ this.consecutivePollFailures = 0;
386
+ this.successfulPollCycles += 1;
387
+ this.lastSuccessfulPollEpochMs = Date.now();
388
+ this.maybeLogPollHealth();
324
389
  }
325
390
  catch (error) {
391
+ this.consecutivePollFailures += 1;
392
+ this.lastFullDiscoveryEpochMs = 0;
326
393
  this.log.error(`Salus sync failed: ${asErrorMessage(error)}`);
394
+ nextPollDelayMs = this.computeNextPollDelayMs();
395
+ if (this.consecutivePollFailures === 1 || this.consecutivePollFailures % 3 === 0) {
396
+ const nextDelaySeconds = Math.round(nextPollDelayMs / 1000);
397
+ this.log.warn(`Salus sync has failed ${this.consecutivePollFailures} consecutive time(s).`
398
+ + ` Next retry in ~${nextDelaySeconds}s with backoff.`);
399
+ }
400
+ this.maybeLogPollHealth();
327
401
  }
328
402
  finally {
329
403
  this.pollInProgress = false;
@@ -332,7 +406,7 @@ export class SalusHomebridgePlatform {
332
406
  this.schedulePoll(0);
333
407
  }
334
408
  else {
335
- this.schedulePoll(this.pollIntervalMs);
409
+ this.schedulePoll(nextPollDelayMs ?? this.computeNextPollDelayMs());
336
410
  }
337
411
  }
338
412
  }
@@ -396,15 +470,20 @@ export class SalusHomebridgePlatform {
396
470
  accessory.displayName = device.name;
397
471
  }
398
472
  const context = accessory.context;
399
- context.device = {
473
+ const nextContextDevice = {
400
474
  id: device.id,
401
475
  dsn: device.dsn,
402
476
  key: device.key,
403
477
  model: device.model,
404
478
  name: device.name,
405
479
  };
406
- context.profile = profile;
407
- this.api.updatePlatformAccessories([accessory]);
480
+ const contextChanged = !areContextDevicesEqual(context.device, nextContextDevice)
481
+ || !areProfilesEquivalent(context.profile, profile);
482
+ if (contextChanged) {
483
+ context.device = nextContextDevice;
484
+ context.profile = profile;
485
+ this.api.updatePlatformAccessories([accessory]);
486
+ }
408
487
  let handler = this.accessoryHandlers.get(accessory.UUID);
409
488
  if (!handler) {
410
489
  handler = new SalusPlatformAccessory(this, accessory, device, profile);
@@ -687,6 +766,23 @@ function asErrorMessage(error) {
687
766
  }
688
767
  return String(error);
689
768
  }
769
+ function areContextDevicesEqual(left, right) {
770
+ if (!left || !right) {
771
+ return false;
772
+ }
773
+ return left.id === right.id
774
+ && left.dsn === right.dsn
775
+ && left.key === right.key
776
+ && left.model === right.model
777
+ && left.name === right.name;
778
+ }
779
+ function areProfilesEquivalent(left, right) {
780
+ if (!left || !right) {
781
+ return false;
782
+ }
783
+ return left.kind === right.kind
784
+ && left.catalog?.model === right.catalog?.model;
785
+ }
690
786
  function clamp(value, minValue, maxValue) {
691
787
  return Math.max(minValue, Math.min(maxValue, value));
692
788
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class SalusPlatformAccessory {
15
15
  private cachedTargetState;
16
16
  private cachedSystemMode;
17
17
  private thermostatSetpointWriteSequence;
18
+ private optimisticThermostatTarget;
18
19
  constructor(platform: SalusHomebridgePlatform, accessory: PlatformAccessory, device: SalusDevice, profile: DeviceProfile);
19
20
  updateFromCloud(device: SalusDevice, profile: DeviceProfile, properties: SalusPropertyMap): void;
20
21
  private applyDeviceReachabilityState;
@@ -56,6 +57,7 @@ export declare class SalusPlatformAccessory {
56
57
  private encodeThermostatTemperatureForProperty;
57
58
  private setTargetTemperature;
58
59
  private ensureThermostatTargetApplied;
60
+ private confirmThermostatTargetInBackground;
59
61
  private setTargetHeatingCoolingState;
60
62
  private setOnOff;
61
63
  private setBrightness;
@@ -63,6 +65,8 @@ export declare class SalusPlatformAccessory {
63
65
  private setValveActive;
64
66
  private setLockTargetState;
65
67
  private communicationFailure;
68
+ private setOptimisticThermostatTarget;
69
+ private getActiveOptimisticThermostatTarget;
66
70
  private getServiceDisplayName;
67
71
  private getServiceConstructor;
68
72
  }
@@ -146,6 +146,8 @@ const SALUS_MODE = {
146
146
  cool: 3,
147
147
  heat: 4,
148
148
  };
149
+ const THERMOSTAT_APPLY_TOLERANCE_C = 0.4;
150
+ const THERMOSTAT_OPTIMISTIC_TARGET_TTL_MS = 60_000;
149
151
  export class SalusPlatformAccessory {
150
152
  platform;
151
153
  accessory;
@@ -159,6 +161,7 @@ export class SalusPlatformAccessory {
159
161
  cachedTargetState = 0;
160
162
  cachedSystemMode = SALUS_MODE.auto;
161
163
  thermostatSetpointWriteSequence = 0;
164
+ optimisticThermostatTarget = null;
162
165
  constructor(platform, accessory, device, profile) {
163
166
  this.platform = platform;
164
167
  this.accessory = accessory;
@@ -196,7 +199,7 @@ export class SalusPlatformAccessory {
196
199
  }
197
200
  const expectedReachable = this.device.online;
198
201
  const hapAccessory = this.accessory._associatedHAPAccessory;
199
- if (hapAccessory && typeof hapAccessory.reachable === 'boolean' && hapAccessory.reachable !== expectedReachable) {
202
+ if (hapAccessory && hapAccessory.reachable !== expectedReachable) {
200
203
  hapAccessory.reachable = expectedReachable;
201
204
  this.platform.log.info(`${this.device.name} (${this.device.dsn}) marked as ${expectedReachable ? 'reachable' : 'unreachable'} based on Salus cloud online state.`);
202
205
  }
@@ -420,6 +423,13 @@ export class SalusPlatformAccessory {
420
423
  targetTemp = clamp(previousTarget, 4.5, 35);
421
424
  }
422
425
  }
426
+ const optimisticTarget = this.getActiveOptimisticThermostatTarget();
427
+ if (optimisticTarget) {
428
+ targetTemp = clamp(optimisticTarget.valueC, 4.5, 35);
429
+ if (heatingSetpoint !== undefined && Math.abs(heatingSetpoint - optimisticTarget.valueC) <= THERMOSTAT_APPLY_TOLERANCE_C) {
430
+ this.optimisticThermostatTarget = null;
431
+ }
432
+ }
423
433
  if (currentTemp !== undefined) {
424
434
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, currentTemp);
425
435
  }
@@ -654,6 +664,7 @@ export class SalusPlatformAccessory {
654
664
  }
655
665
  const targetTemperature = clamp(numericValue, 4.5, 35);
656
666
  const writeSequence = ++this.thermostatSetpointWriteSequence;
667
+ this.setOptimisticThermostatTarget(targetTemperature, writeSequence);
657
668
  const setpointProperty = this.firstDefined(this.writeTargets.heatSetpoint, this.writeTargets.autoHeatSetpoint, findPropertyByBaseName(this.latestProperties, THERMOSTAT_HEAT_SETPOINT_COMMAND), findPropertyByBaseName(this.latestProperties, THERMOSTAT_HEAT_SETPOINT_EFFECTIVE), this.writeTargets.coolSetpoint, this.writeTargets.autoCoolSetpoint, findPropertyByBaseName(this.latestProperties, THERMOSTAT_COOL_SETPOINT_COMMAND));
658
669
  if (!setpointProperty) {
659
670
  throw this.communicationFailure('No writable thermostat setpoint property was discovered');
@@ -668,23 +679,28 @@ export class SalusPlatformAccessory {
668
679
  if (this.writeTargets.holdType) {
669
680
  writes[this.writeTargets.holdType] = 2;
670
681
  }
671
- await this.platform.writeDeviceProperties(this.device, writes);
672
- const confirmation = await this.ensureThermostatTargetApplied(targetTemperature, writeSequence);
673
- if (confirmation === 'superseded') {
674
- this.platform.log.debug(`Skipped outdated thermostat confirmation for ${this.device.name}; a newer target write is in progress.`);
675
- return;
682
+ try {
683
+ await this.platform.writeDeviceProperties(this.device, writes);
684
+ }
685
+ catch (error) {
686
+ if (this.optimisticThermostatTarget?.writeSequence === writeSequence) {
687
+ this.optimisticThermostatTarget = null;
688
+ }
689
+ this.platform.log.error(`Thermostat target write failed for ${this.device.name}: ${asErrorMessage(error)}`);
690
+ throw this.communicationFailure('Thermostat target temperature write failed');
676
691
  }
677
692
  this.cachedTargetState = this.platform.Characteristic.TargetHeatingCoolingState.HEAT;
678
693
  this.cachedSystemMode = SALUS_MODE.heat;
679
694
  this.platform.log.info(`Set thermostat target for ${this.device.name} to ${targetTemperature.toFixed(1)}°C`);
695
+ void this.confirmThermostatTargetInBackground(targetTemperature, writeSequence);
680
696
  }
681
697
  async ensureThermostatTargetApplied(expectedTemperatureC, writeSequence) {
682
698
  const maxAttempts = 10;
683
- const toleranceC = 0.4;
684
699
  let lastObserved;
685
700
  let lastPrimaryObserved;
686
701
  let lastCommandObserved;
687
702
  let lastError;
703
+ let sawCommandMatch = false;
688
704
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
689
705
  if (writeSequence !== this.thermostatSetpointWriteSequence) {
690
706
  return 'superseded';
@@ -705,7 +721,11 @@ export class SalusPlatformAccessory {
705
721
  lastObserved = commandC;
706
722
  }
707
723
  }
708
- const primaryMatches = primaryC !== undefined && Math.abs(primaryC - expectedTemperatureC) <= toleranceC;
724
+ const primaryMatches = primaryC !== undefined && Math.abs(primaryC - expectedTemperatureC) <= THERMOSTAT_APPLY_TOLERANCE_C;
725
+ const commandMatches = commandC !== undefined && Math.abs(commandC - expectedTemperatureC) <= THERMOSTAT_APPLY_TOLERANCE_C;
726
+ if (commandMatches) {
727
+ sawCommandMatch = true;
728
+ }
709
729
  if (primaryMatches) {
710
730
  return 'applied';
711
731
  }
@@ -718,15 +738,37 @@ export class SalusPlatformAccessory {
718
738
  }
719
739
  }
720
740
  if (lastError) {
721
- this.platform.log.warn(`Unable to confirm thermostat setpoint for ${this.device.name} after write: ${asErrorMessage(lastError)}`);
741
+ this.platform.log.info(`Thermostat setpoint confirmation is delayed for ${this.device.name}: ${asErrorMessage(lastError)}.`
742
+ + ' Continuing with optimistic HomeKit value.');
743
+ return 'pending';
744
+ }
745
+ this.platform.log.info(`Thermostat setpoint for ${this.device.name} did not converge to ${expectedTemperatureC.toFixed(1)}°C yet`
746
+ + `${lastObserved !== undefined ? ` (latest observed ${lastObserved.toFixed(1)}°C)` : ''}`
747
+ + `${lastPrimaryObserved !== undefined ? `, effective=${lastPrimaryObserved.toFixed(1)}°C` : ''}`
748
+ + `${lastCommandObserved !== undefined ? `, command=${lastCommandObserved.toFixed(1)}°C` : ''}`
749
+ + `${sawCommandMatch ? '. Command is queued in cloud.' : '.'}`);
750
+ return 'pending';
751
+ }
752
+ async confirmThermostatTargetInBackground(expectedTemperatureC, writeSequence) {
753
+ try {
754
+ const confirmation = await this.ensureThermostatTargetApplied(expectedTemperatureC, writeSequence);
755
+ if (confirmation === 'superseded') {
756
+ this.platform.log.debug(`Skipped outdated thermostat confirmation for ${this.device.name}; a newer target write is in progress.`);
757
+ return;
758
+ }
759
+ if (confirmation === 'applied') {
760
+ if (this.optimisticThermostatTarget?.writeSequence === writeSequence) {
761
+ this.optimisticThermostatTarget = null;
762
+ }
763
+ return;
764
+ }
765
+ this.platform.log.info(`Thermostat target for ${this.device.name} is pending Salus cloud apply; keeping optimistic HomeKit value for`
766
+ + ` ${Math.round(THERMOSTAT_OPTIMISTIC_TARGET_TTL_MS / 1000)}s.`);
722
767
  }
723
- else {
724
- this.platform.log.warn(`Thermostat setpoint for ${this.device.name} did not converge to ${expectedTemperatureC.toFixed(1)}°C`
725
- + `${lastObserved !== undefined ? ` (latest observed ${lastObserved.toFixed(1)}°C)` : ''}`
726
- + `${lastPrimaryObserved !== undefined ? `, effective=${lastPrimaryObserved.toFixed(1)}°C` : ''}`
727
- + `${lastCommandObserved !== undefined ? `, command=${lastCommandObserved.toFixed(1)}°C` : ''}`);
768
+ catch (error) {
769
+ this.platform.log.info(`Thermostat target confirmation failed for ${this.device.name}: ${asErrorMessage(error)}.`
770
+ + ' Keeping optimistic HomeKit value until it expires.');
728
771
  }
729
- throw this.communicationFailure('Thermostat setpoint write was not applied by Salus cloud');
730
772
  }
731
773
  async setTargetHeatingCoolingState(value) {
732
774
  const hkStateRaw = parseCharacteristicNumber(value);
@@ -752,6 +794,9 @@ export class SalusPlatformAccessory {
752
794
  writes[this.writeTargets.holdType] = requestedOff ? 7 : 2;
753
795
  }
754
796
  await this.platform.writeDeviceProperties(this.device, writes);
797
+ if (requestedOff) {
798
+ this.optimisticThermostatTarget = null;
799
+ }
755
800
  this.cachedTargetState = hkState;
756
801
  this.cachedSystemMode = mode;
757
802
  const modeLabel = hkState === this.platform.Characteristic.TargetHeatingCoolingState.OFF
@@ -841,6 +886,25 @@ export class SalusPlatformAccessory {
841
886
  this.platform.log.error(`${message} [${this.device.name} / ${this.device.dsn}]`);
842
887
  return new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
843
888
  }
889
+ setOptimisticThermostatTarget(valueC, writeSequence) {
890
+ this.optimisticThermostatTarget = {
891
+ valueC: clamp(valueC, 4.5, 35),
892
+ expiresAtEpochMs: Date.now() + THERMOSTAT_OPTIMISTIC_TARGET_TTL_MS,
893
+ writeSequence,
894
+ };
895
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetTemperature, this.optimisticThermostatTarget.valueC);
896
+ }
897
+ getActiveOptimisticThermostatTarget() {
898
+ const optimistic = this.optimisticThermostatTarget;
899
+ if (!optimistic) {
900
+ return undefined;
901
+ }
902
+ if (optimistic.expiresAtEpochMs <= Date.now()) {
903
+ this.optimisticThermostatTarget = null;
904
+ return undefined;
905
+ }
906
+ return optimistic;
907
+ }
844
908
  getServiceDisplayName(kind) {
845
909
  if (kind === 'thermostat') {
846
910
  return 'Thermostat';