homebridge-salus-cloud 0.1.35 → 0.1.38

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
@@ -25,8 +25,9 @@ The plugin follows the app's modern cloud stack:
25
25
  - Service API fallback: `/api/v2`
26
26
  - Discovery endpoints (in order): `GET /api/v1/occupants/slider_list` + `GET /api/v1/occupants/slider_details?id=...&type=gateway`, then fallback `GET /devices/`
27
27
  - Property shadow endpoint: `POST /devices/device_shadows` with `{ "device_codes": [...] }` (with compatibility fallback shapes)
28
- - Control write endpoint (primary): AWS IoT thing-shadow `POST /things/{dsn}/shadow` with SigV4 signing, using temporary credentials from Cognito Identity
29
- - Control write endpoint (fallback): `POST /devices/bulk` and `PATCH /devices/device_shadows` payload variants for compatibility fallback
28
+ - Control write endpoint (primary): AWS IoT shadow MQTT publish to `$aws/things/{dsn}/shadow/update` over SigV4-signed WebSocket, using temporary credentials from Cognito Identity
29
+ - Control write endpoint (secondary fallback): AWS IoT thing-shadow `POST /things/{dsn}/shadow` with SigV4 signing
30
+ - Control write endpoint (compatibility fallback): `POST /devices/bulk` and `PATCH /devices/device_shadows` payload variants
30
31
 
31
32
  ## Install
32
33
 
@@ -107,12 +108,13 @@ Examples:
107
108
  - Bounded `occupants/slider_details` traversal per poll (target-count + time budget) to avoid long stalls during upstream `5xx` bursts.
108
109
  - Automatic compatibility fallback to legacy Salus cloud auth/API (multi-path legacy sign-in probe + `/apiv1`) when modern API returns persistent authorization errors (for example `response_code=900008`).
109
110
  - Flexible shadow parser for multiple payload shapes.
110
- - Primary write path matches Salus app behavior via AWS IoT thing-shadow updates (`state.desired.<baseKey>.properties`).
111
+ - Primary write path matches Salus app behavior via AWS IoT MQTT shadow updates (`$aws/things/{dsn}/shadow/update` with `state.desired.<baseKey>.properties`).
112
+ - Automatic MQTT write retries for transient connection issues and AWS credential refresh on authorization failures.
111
113
  - Automatic AWS IoT credential refresh and signing-service fallback (`iotdevicegateway` -> `iotdata`) for tenant variations.
112
114
  - Service API write payload fallbacks remain enabled as a compatibility safety net.
113
115
  - Per-poll property refresh (with cached fallback on transient errors) to keep HomeKit target/current values up-to-date.
114
116
  - 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.
115
- - Thermostat setpoint writes mirror both effective and command fields (`HeatingSetpoint*` + `SetHeatingSetpoint*`) to keep Salus app and Home app in sync when the cloud updates them asynchronously.
117
+ - Thermostat setpoint writes use command datapoints (`SetHeatingSetpoint*`) together with manual/working mode hints (`SetHoldType=2`, `SetSystemMode=4`) to match Salus app behavior.
116
118
  - 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.
117
119
  - Immediate short re-poll after write to keep HomeKit state aligned.
118
120
  - Detailed logs for auth, discovery, shadow sync, writes, retries, and failures.
@@ -122,7 +124,7 @@ Examples:
122
124
  For Salus thermostat UX parity (standby/working):
123
125
 
124
126
  - HomeKit `Off` -> Salus standby (`HoldType=7`, no active heating)
125
- - HomeKit `Heat` -> Salus working mode
127
+ - HomeKit `Heat` -> Salus working/manual mode (`HoldType=2`, `SystemMode=4`)
126
128
  - HomeKit `Cool` / `Auto` requests are forced to `Heat`
127
129
 
128
130
  Target mode characteristic is constrained to `Off` + `Heat` to avoid unsupported mode selection in Home app.
@@ -19,6 +19,7 @@ export declare class SalusHomebridgePlatform implements DynamicPlatformPlugin {
19
19
  constructor(log: Logging, config: PlatformConfig, api: API);
20
20
  configureAccessory(accessory: PlatformAccessory): void;
21
21
  writeDeviceProperty(device: SalusDevice, propertyName: string, value: unknown): Promise<void>;
22
+ writeDeviceProperties(device: SalusDevice, properties: Record<string, unknown>): Promise<void>;
22
23
  readDeviceProperties(device: SalusDevice): Promise<SalusPropertyMap>;
23
24
  getUnmappedConstraintList(): string[];
24
25
  private schedulePoll;
package/dist/platform.js CHANGED
@@ -185,16 +185,31 @@ export class SalusHomebridgePlatform {
185
185
  this.log.debug(`Restored cached accessory: ${accessory.displayName}`);
186
186
  }
187
187
  async writeDeviceProperty(device, propertyName, value) {
188
+ await this.writeDeviceProperties(device, { [propertyName]: value });
189
+ }
190
+ async writeDeviceProperties(device, properties) {
188
191
  if (!this.cloudClient) {
189
192
  throw new Error('Salus cloud client is not initialized due to missing credentials.');
190
193
  }
194
+ const entries = Object.entries(properties).filter(([name]) => name.trim() !== '');
195
+ if (entries.length === 0) {
196
+ throw new Error(`No writable properties were provided for ${device.name} (${device.dsn}).`);
197
+ }
191
198
  try {
192
- await this.cloudClient.setDatapoint(device.dsn, propertyName, value);
193
- this.log.debug(`Set datapoint ${propertyName}=${JSON.stringify(value)} for ${device.name} (${device.dsn})`);
199
+ await this.cloudClient.setDatapoints(device.dsn, Object.fromEntries(entries));
200
+ if (entries.length === 1) {
201
+ const [propertyName, value] = entries[0];
202
+ this.log.debug(`Set datapoint ${propertyName}=${JSON.stringify(value)} for ${device.name} (${device.dsn})`);
203
+ }
204
+ else {
205
+ const summary = entries.map(([name, value]) => `${name}=${JSON.stringify(value)}`).join(', ');
206
+ this.log.debug(`Set ${entries.length} datapoints for ${device.name} (${device.dsn}): ${summary}`);
207
+ }
194
208
  this.schedulePoll(2_000);
195
209
  }
196
210
  catch (error) {
197
- this.log.error(`Failed to set datapoint ${propertyName} on ${device.name}: ${asErrorMessage(error)}`);
211
+ const summary = entries.map(([name, value]) => `${name}=${JSON.stringify(value)}`).join(', ');
212
+ this.log.error(`Failed to set datapoint(s) on ${device.name}: ${summary}. ${asErrorMessage(error)}`);
198
213
  throw error;
199
214
  }
200
215
  }
@@ -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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"}
@@ -51,6 +51,8 @@ export declare class SalusPlatformAccessory {
51
51
  private resolveLockState;
52
52
  private resolveGenericBoolean;
53
53
  private getPropertyValue;
54
+ private firstDefined;
55
+ private encodeThermostatTemperatureForProperty;
54
56
  private setTargetTemperature;
55
57
  private ensureThermostatTargetApplied;
56
58
  private setTargetHeatingCoolingState;
@@ -52,111 +52,67 @@ const THERMOSTAT_COOL_SETPOINT_COMMAND = [
52
52
  'SetTargetTemperature_x100',
53
53
  'SetTargetTemperature',
54
54
  ];
55
- const THERMOSTAT_HEAT_SETPOINT = [
56
- 'HeatingSetpoint_x100',
57
- 'SetHeatingSetpoint_x100',
58
- 'AutoHeatingSetpoint_x100',
59
- 'SetAutoHeatingSetpoint_x100',
60
- 'TargetTemperature_x100',
61
- 'SetTargetTemperature_x100',
62
- 'Setpoint_x100',
63
- 'HeatSetpoint_x100',
64
- 'OccupiedHeatingSetpoint_x100',
65
- 'CloudySetpoint_x100',
66
- 'HeatingSetpoint',
67
- 'SetHeatingSetpoint',
68
- 'AutoHeatingSetpoint',
69
- 'SetAutoHeatingSetpoint',
70
- 'TargetTemperature',
71
- 'SetTargetTemperature',
72
- 'Setpoint',
73
- 'HeatSetpoint',
74
- 'OccupiedHeatingSetpoint',
75
- 'CloudySetpoint',
76
- ];
77
- const THERMOSTAT_COOL_SETPOINT = [
78
- 'CoolingSetpoint_x100',
79
- 'SetCoolingSetpoint_x100',
80
- 'AutoCoolingSetpoint_x100',
81
- 'SetAutoCoolingSetpoint_x100',
82
- 'TargetTemperature_x100',
83
- 'SetTargetTemperature_x100',
84
- 'Setpoint_x100',
85
- 'CoolSetpoint_x100',
86
- 'OccupiedCoolingSetpoint_x100',
87
- 'SunnySetpoint_x100',
88
- 'CoolingSetpoint',
89
- 'SetCoolingSetpoint',
90
- 'AutoCoolingSetpoint',
91
- 'SetAutoCoolingSetpoint',
92
- 'TargetTemperature',
93
- 'SetTargetTemperature',
94
- 'Setpoint',
95
- 'CoolSetpoint',
96
- 'OccupiedCoolingSetpoint',
97
- 'SunnySetpoint',
98
- ];
99
55
  const THERMOSTAT_SYSTEM_MODE = ['SystemMode', 'SetSystemMode'];
100
56
  const THERMOSTAT_RUNNING_STATE = ['RunningState', 'RunningMode'];
101
57
  const THERMOSTAT_HOLD_TYPE = ['HoldType', 'SetHoldType'];
102
58
  const THERMOSTAT_HUMIDITY = ['RelativeHumidity_x100', 'RelativeHumidity', 'Humidity_x100', 'Humidity'];
103
59
  const WRITE_SYSTEM_MODE = ['SetSystemMode', 'SystemMode'];
104
60
  const WRITE_HEAT_SETPOINT = [
105
- 'HeatingSetpoint_x100',
106
61
  'SetHeatingSetpoint_x100',
107
62
  'SetTargetTemperature_x100',
63
+ 'HeatingSetpoint_x100',
108
64
  'TargetTemperature_x100',
109
65
  'Setpoint_x100',
110
66
  'CloudySetpoint_x100',
67
+ 'SetTargetTemperature',
111
68
  'SetHeatingSetpoint',
112
69
  'HeatingSetpoint',
113
- 'SetTargetTemperature',
114
70
  'TargetTemperature',
115
71
  'Setpoint',
116
72
  'CloudySetpoint',
117
73
  ];
118
74
  const WRITE_COOL_SETPOINT = [
119
- 'CoolingSetpoint_x100',
120
75
  'SetCoolingSetpoint_x100',
121
76
  'SetTargetTemperature_x100',
77
+ 'CoolingSetpoint_x100',
122
78
  'TargetTemperature_x100',
123
79
  'Setpoint_x100',
124
80
  'SunnySetpoint_x100',
81
+ 'SetTargetTemperature',
125
82
  'SetCoolingSetpoint',
126
83
  'CoolingSetpoint',
127
- 'SetTargetTemperature',
128
84
  'TargetTemperature',
129
85
  'Setpoint',
130
86
  'SunnySetpoint',
131
87
  ];
132
88
  const WRITE_AUTO_HEAT_SETPOINT = [
133
- 'HeatingSetpoint_x100',
134
89
  'SetAutoHeatingSetpoint_x100',
135
90
  'SetHeatingSetpoint_x100',
136
91
  'SetTargetTemperature_x100',
92
+ 'HeatingSetpoint_x100',
137
93
  'TargetTemperature_x100',
138
94
  'Setpoint_x100',
139
95
  'CloudySetpoint_x100',
140
96
  'SetAutoHeatingSetpoint',
141
97
  'SetHeatingSetpoint',
142
- 'HeatingSetpoint',
143
98
  'SetTargetTemperature',
99
+ 'HeatingSetpoint',
144
100
  'TargetTemperature',
145
101
  'Setpoint',
146
102
  'CloudySetpoint',
147
103
  ];
148
104
  const WRITE_AUTO_COOL_SETPOINT = [
149
- 'CoolingSetpoint_x100',
150
105
  'SetAutoCoolingSetpoint_x100',
151
106
  'SetCoolingSetpoint_x100',
152
107
  'SetTargetTemperature_x100',
108
+ 'CoolingSetpoint_x100',
153
109
  'TargetTemperature_x100',
154
110
  'Setpoint_x100',
155
111
  'SunnySetpoint_x100',
156
112
  'SetAutoCoolingSetpoint',
157
113
  'SetCoolingSetpoint',
158
- 'CoolingSetpoint',
159
114
  'SetTargetTemperature',
115
+ 'CoolingSetpoint',
160
116
  'TargetTemperature',
161
117
  'Setpoint',
162
118
  'SunnySetpoint',
@@ -430,8 +386,8 @@ export class SalusPlatformAccessory {
430
386
  }
431
387
  updateThermostatCharacteristics() {
432
388
  const currentTempRaw = getNumberProperty(this.latestProperties, THERMOSTAT_CURRENT_TEMP);
433
- const heatingSetpointRaw = this.resolveEffectiveThermostatSetpoint(THERMOSTAT_HEAT_SETPOINT, THERMOSTAT_HEAT_SETPOINT_COMMAND);
434
- const coolingSetpointRaw = this.resolveEffectiveThermostatSetpoint(THERMOSTAT_COOL_SETPOINT, THERMOSTAT_COOL_SETPOINT_COMMAND);
389
+ const heatingSetpointRaw = this.resolveEffectiveThermostatSetpoint(THERMOSTAT_HEAT_SETPOINT_EFFECTIVE, THERMOSTAT_HEAT_SETPOINT_COMMAND);
390
+ const coolingSetpointRaw = this.resolveEffectiveThermostatSetpoint(THERMOSTAT_COOL_SETPOINT_EFFECTIVE, THERMOSTAT_COOL_SETPOINT_COMMAND);
435
391
  const systemModeRaw = getNumberProperty(this.latestProperties, THERMOSTAT_SYSTEM_MODE);
436
392
  const runningStateRaw = getNumberProperty(this.latestProperties, THERMOSTAT_RUNNING_STATE);
437
393
  const holdTypeRaw = getNumberProperty(this.latestProperties, THERMOSTAT_HOLD_TYPE);
@@ -476,23 +432,13 @@ export class SalusPlatformAccessory {
476
432
  this.service.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, clamp(humidity, 0, 100));
477
433
  }
478
434
  }
479
- resolveEffectiveThermostatSetpoint(primaryCandidates, commandCandidates) {
480
- const primaryRaw = getNumberProperty(this.latestProperties, primaryCandidates);
435
+ resolveEffectiveThermostatSetpoint(effectiveCandidates, commandCandidates) {
436
+ const primaryRaw = getNumberProperty(this.latestProperties, effectiveCandidates);
481
437
  const commandRaw = getNumberProperty(this.latestProperties, commandCandidates);
482
- if (primaryRaw === undefined) {
483
- return commandRaw;
484
- }
485
- if (commandRaw === undefined) {
438
+ if (primaryRaw !== undefined) {
486
439
  return primaryRaw;
487
440
  }
488
- const primaryC = normalizeTemperatureFromX100(primaryRaw);
489
- const commandC = normalizeTemperatureFromX100(commandRaw);
490
- // Some Salus tenants update command and effective setpoint fields asynchronously.
491
- // Prefer command value when mismatch is meaningful to avoid stale HomeKit display.
492
- if (Math.abs(primaryC - commandC) >= 0.4) {
493
- return commandRaw;
494
- }
495
- return primaryRaw;
441
+ return commandRaw;
496
442
  }
497
443
  updateSwitchCharacteristics() {
498
444
  const on = this.resolveOnOffState();
@@ -680,79 +626,53 @@ export class SalusPlatformAccessory {
680
626
  }
681
627
  return this.latestProperties.get(name)?.value;
682
628
  }
629
+ firstDefined(...candidates) {
630
+ for (const candidate of candidates) {
631
+ if (candidate && candidate.trim() !== '') {
632
+ return candidate;
633
+ }
634
+ }
635
+ return undefined;
636
+ }
637
+ encodeThermostatTemperatureForProperty(propertyName, temperatureC) {
638
+ const sample = this.getPropertyValue(propertyName);
639
+ const numericSample = parseNumberLike(sample);
640
+ const normalizedName = propertyName.trim().toLowerCase();
641
+ const looksLikeX100 = normalizedName.includes('_x100')
642
+ || normalizedName.endsWith('x100')
643
+ || (numericSample !== undefined && Math.abs(numericSample) >= 100);
644
+ if (looksLikeX100) {
645
+ return Math.round(temperatureC * 100);
646
+ }
647
+ return Math.round(temperatureC * 10) / 10;
648
+ }
683
649
  async setTargetTemperature(value) {
684
650
  const numericValue = parseCharacteristicNumber(value);
685
651
  if (numericValue === undefined) {
686
652
  throw this.communicationFailure('Received invalid thermostat target temperature value from HomeKit');
687
653
  }
688
654
  const targetTemperature = clamp(numericValue, 4.5, 35);
689
- const scaledX100 = Math.round(targetTemperature * 100);
690
- const scaledPlain = Math.round(targetTemperature * 10) / 10;
691
- const targetState = this.cachedTargetState;
692
- const writes = [];
693
- const queuedProperties = new Set();
694
- const pickFirstProperty = (candidates) => {
695
- for (const candidate of candidates) {
696
- if (candidate) {
697
- return candidate;
698
- }
699
- }
700
- return undefined;
701
- };
702
- const enqueueWrite = (property) => {
703
- if (!property || queuedProperties.has(property)) {
704
- return;
705
- }
706
- const sample = this.getPropertyValue(property);
707
- const numericSample = parseNumberLike(sample);
708
- const lowerProperty = property.toLowerCase();
709
- const propertyNameLooksX100 = lowerProperty.includes('_x100') || lowerProperty.endsWith('x100');
710
- const sampleLooksX100 = propertyNameLooksX100 || (numericSample !== undefined && Math.abs(numericSample) >= 100);
711
- queuedProperties.add(property);
712
- writes.push({ property, value: sampleLooksX100 ? scaledX100 : scaledPlain });
713
- };
714
- const enqueueFirstDiscovered = (baseNames) => {
715
- enqueueWrite(findPropertyByBaseName(this.latestProperties, baseNames));
716
- };
717
- if (targetState === this.platform.Characteristic.TargetHeatingCoolingState.COOL) {
718
- const primary = pickFirstProperty([
719
- this.writeTargets.coolSetpoint,
720
- this.writeTargets.autoCoolSetpoint,
721
- this.writeTargets.heatSetpoint,
722
- ]);
723
- enqueueWrite(primary);
724
- enqueueFirstDiscovered(THERMOSTAT_COOL_SETPOINT_COMMAND);
725
- enqueueFirstDiscovered(THERMOSTAT_COOL_SETPOINT_EFFECTIVE);
726
- }
727
- else if (targetState === this.platform.Characteristic.TargetHeatingCoolingState.AUTO) {
728
- enqueueWrite(pickFirstProperty([this.writeTargets.autoHeatSetpoint, this.writeTargets.heatSetpoint]));
729
- enqueueWrite(pickFirstProperty([this.writeTargets.autoCoolSetpoint, this.writeTargets.coolSetpoint]));
730
- enqueueFirstDiscovered(THERMOSTAT_HEAT_SETPOINT_COMMAND);
731
- enqueueFirstDiscovered(THERMOSTAT_HEAT_SETPOINT_EFFECTIVE);
732
- enqueueFirstDiscovered(THERMOSTAT_COOL_SETPOINT_COMMAND);
733
- enqueueFirstDiscovered(THERMOSTAT_COOL_SETPOINT_EFFECTIVE);
734
- }
735
- else {
736
- const primary = pickFirstProperty([
737
- this.writeTargets.heatSetpoint,
738
- this.writeTargets.autoHeatSetpoint,
739
- this.writeTargets.coolSetpoint,
740
- this.writeTargets.autoCoolSetpoint,
741
- ]);
742
- enqueueWrite(primary);
743
- enqueueFirstDiscovered(THERMOSTAT_HEAT_SETPOINT_COMMAND);
744
- enqueueFirstDiscovered(THERMOSTAT_HEAT_SETPOINT_EFFECTIVE);
745
- }
746
- if (writes.length === 0) {
655
+ 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));
656
+ if (!setpointProperty) {
747
657
  throw this.communicationFailure('No writable thermostat setpoint property was discovered');
748
658
  }
749
- for (const write of writes) {
750
- await this.platform.writeDeviceProperty(this.device, write.property, write.value);
659
+ const writes = {
660
+ [setpointProperty]: this.encodeThermostatTemperatureForProperty(setpointProperty, targetTemperature),
661
+ };
662
+ // Match Salus app behavior: changing target temperature forces working/manual mode.
663
+ if (this.writeTargets.systemMode) {
664
+ writes[this.writeTargets.systemMode] = SALUS_MODE.heat;
665
+ }
666
+ if (this.writeTargets.holdType) {
667
+ writes[this.writeTargets.holdType] = 2;
751
668
  }
752
- await this.ensureThermostatTargetApplied(targetTemperature, targetState);
669
+ await this.platform.writeDeviceProperties(this.device, writes);
670
+ await this.ensureThermostatTargetApplied(targetTemperature);
671
+ this.cachedTargetState = this.platform.Characteristic.TargetHeatingCoolingState.HEAT;
672
+ this.cachedSystemMode = SALUS_MODE.heat;
753
673
  this.platform.log.info(`Set thermostat target for ${this.device.name} to ${targetTemperature.toFixed(1)}°C`);
754
674
  }
755
- async ensureThermostatTargetApplied(expectedTemperatureC, targetState) {
675
+ async ensureThermostatTargetApplied(expectedTemperatureC) {
756
676
  const maxAttempts = 10;
757
677
  const toleranceC = 0.4;
758
678
  let lastObserved;
@@ -762,12 +682,8 @@ export class SalusPlatformAccessory {
762
682
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
763
683
  try {
764
684
  const properties = await this.platform.readDeviceProperties(this.device);
765
- const primaryObserved = targetState === this.platform.Characteristic.TargetHeatingCoolingState.COOL
766
- ? getNumberProperty(properties, THERMOSTAT_COOL_SETPOINT_EFFECTIVE)
767
- : getNumberProperty(properties, THERMOSTAT_HEAT_SETPOINT_EFFECTIVE);
768
- const commandObserved = targetState === this.platform.Characteristic.TargetHeatingCoolingState.COOL
769
- ? getNumberProperty(properties, THERMOSTAT_COOL_SETPOINT_COMMAND)
770
- : getNumberProperty(properties, THERMOSTAT_HEAT_SETPOINT_COMMAND);
685
+ const primaryObserved = getNumberProperty(properties, THERMOSTAT_HEAT_SETPOINT_EFFECTIVE);
686
+ const commandObserved = getNumberProperty(properties, THERMOSTAT_HEAT_SETPOINT_COMMAND);
771
687
  const primaryC = primaryObserved === undefined ? undefined : clamp(normalizeTemperatureFromX100(primaryObserved), 4.5, 35);
772
688
  const commandC = commandObserved === undefined ? undefined : clamp(normalizeTemperatureFromX100(commandObserved), 4.5, 35);
773
689
  if (primaryC !== undefined) {
@@ -780,12 +696,8 @@ export class SalusPlatformAccessory {
780
696
  lastObserved = commandC;
781
697
  }
782
698
  }
783
- if (primaryC !== undefined) {
784
- if (Math.abs(primaryC - expectedTemperatureC) <= toleranceC) {
785
- return;
786
- }
787
- }
788
- else if (commandC !== undefined && Math.abs(commandC - expectedTemperatureC) <= toleranceC) {
699
+ const primaryMatches = primaryC !== undefined && Math.abs(primaryC - expectedTemperatureC) <= toleranceC;
700
+ if (primaryMatches) {
789
701
  return;
790
702
  }
791
703
  }
@@ -821,26 +733,16 @@ export class SalusPlatformAccessory {
821
733
  if (!this.writeTargets.systemMode && !this.writeTargets.holdType) {
822
734
  throw this.communicationFailure('No writable thermostat mode/standby property was discovered');
823
735
  }
824
- const holdTypeCurrent = getNumberProperty(this.latestProperties, THERMOSTAT_HOLD_TYPE);
825
- if (mode !== SALUS_MODE.off && this.writeTargets.holdType && holdTypeCurrent !== undefined && Math.round(holdTypeCurrent) === 7) {
826
- try {
827
- await this.platform.writeDeviceProperty(this.device, this.writeTargets.holdType, 0);
828
- }
829
- catch (error) {
830
- this.platform.log.warn(`Unable to clear thermostat hold type for ${this.device.name}: ${asErrorMessage(error)}`);
831
- }
832
- }
736
+ const writes = {};
833
737
  if (this.writeTargets.systemMode) {
834
- await this.platform.writeDeviceProperty(this.device, this.writeTargets.systemMode, mode);
738
+ writes[this.writeTargets.systemMode] = mode;
835
739
  }
836
- if (mode === SALUS_MODE.off && this.writeTargets.holdType) {
837
- try {
838
- await this.platform.writeDeviceProperty(this.device, this.writeTargets.holdType, 7);
839
- }
840
- catch (error) {
841
- this.platform.log.warn(`Unable to apply thermostat off hold for ${this.device.name}: ${asErrorMessage(error)}`);
842
- }
740
+ if (this.writeTargets.holdType) {
741
+ // HomeKit mode mapping requested by user:
742
+ // OFF -> standby (7), HEAT -> working/manual (2).
743
+ writes[this.writeTargets.holdType] = requestedOff ? 7 : 2;
843
744
  }
745
+ await this.platform.writeDeviceProperties(this.device, writes);
844
746
  this.cachedTargetState = hkState;
845
747
  this.cachedSystemMode = mode;
846
748
  const modeLabel = hkState === this.platform.Characteristic.TargetHeatingCoolingState.OFF