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 +4 -0
- package/dist/platform.d.ts +11 -0
- package/dist/platform.js +103 -7
- package/dist/platform.js.map +1 -1
- package/dist/platformAccessory.d.ts +4 -0
- package/dist/platformAccessory.js +79 -15
- package/dist/platformAccessory.js.map +1 -1
- package/dist/salusCloudClient.d.ts +0 -1
- package/dist/salusCloudClient.js +108 -73
- package/dist/salusCloudClient.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/platform.d.ts
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
274
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
407
|
-
|
|
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
|
}
|
package/dist/platform.js.map
CHANGED
|
@@ -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 &&
|
|
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
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
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) <=
|
|
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.
|
|
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
|
-
|
|
724
|
-
this.platform.log.
|
|
725
|
-
+
|
|
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';
|