homebridge-viessmann-vicare 2.0.44 → 2.0.45

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
@@ -1033,7 +1033,7 @@ For issues and questions:
1033
1033
 
1034
1034
  ## 📈 Changelog
1035
1035
 
1036
- ### [2.0.44] - 2026-03-15
1036
+ ### [2.0.45] - 2026-03-15
1037
1037
  #### Fixed
1038
1038
  - **Extended Heating state: HomeKit OFF while ViCare ON** — confirmed via live API: `forcedLastFromSchedule.active=True` is a schedule management artifact (always present), not an Extended Heating indicator. State now reads `comfort.active OR (programs.active === comfortFeatureSuffix)`. Deactivation uses `comfort.setTemperature` as fallback when `deactivate` is not executable (Vitodens).
1039
1039
  - **Extended Heating / comfort program: API-driven feature discovery** — removed hardcoded candidate list `['comfort', 'comfortHeating']`. Plugin now discovers the comfort program by scanning actual device features for any enabled `programs.*` that has an `activate` command, excluding known non-comfort programs. Works for Vitodens (`programs.comfort`), Vitocal gen3 (`programs.comfortHeating`), and any future device model without code changes.
@@ -1042,6 +1042,9 @@ For issues and questions:
1042
1042
  - **Device messages written at startup** — `setupDeviceAccessories` now calls `writeDeviceMessages` so the file exists immediately on startup, not only after the first update cycle.
1043
1043
  - **Compressor setpoint path: dynamic** — `heating.compressors.0.speed.setpoint` was hardcoded. Now derived from resolved `hpPaths.compressorMod` by replacing `.current` with `.setpoint` — correct for any device/compressor index.
1044
1044
 
1045
+ ### [2.0.44] - 2026-03-15
1046
+ *(published separately)*
1047
+
1045
1048
  ### [2.0.43] - 2026-03-15
1046
1049
  *(published separately)*
1047
1050
 
package/SETUP-GUIDE.md CHANGED
@@ -1,8 +1,8 @@
1
- # Complete Setup Guide - v2.0.44
1
+ # Complete Setup Guide - v2.0.45
2
2
 
3
3
  ## Overview
4
4
 
5
- This guide will walk you through setting up the Viessmann ViCare plugin v2.0.44 for Homebridge, including all the advanced features like intelligent caching, rate limiting protection, comprehensive configuration options, **complete localization support with custom names**, **CSV history logging**, **HTML diagnostic reports**, **energy system monitoring** (PV, battery, wallbox), and **heating schedule awareness** with visual bands in the HTML report, and **heat pump (Wärmepumpe) support** with automatic device detection.
5
+ This guide will walk you through setting up the Viessmann ViCare plugin v2.0.45 for Homebridge, including all the advanced features like intelligent caching, rate limiting protection, comprehensive configuration options, **complete localization support with custom names**, **CSV history logging**, **HTML diagnostic reports**, **energy system monitoring** (PV, battery, wallbox), and **heating schedule awareness** with visual bands in the HTML report, and **heat pump (Wärmepumpe) support** with automatic device detection.
6
6
 
7
7
  ## Prerequisites
8
8
 
@@ -1157,7 +1157,7 @@ When reporting issues, include:
1157
1157
 
1158
1158
  ```json
1159
1159
  {
1160
- "plugin_version": "2.0.44",
1160
+ "plugin_version": "2.0.45",
1161
1161
  "homebridge_version": "1.8.x",
1162
1162
  "node_version": "18.x.x",
1163
1163
  "heating_system": "Viessmann Model",
@@ -1228,7 +1228,7 @@ sudo systemctl restart homebridge
1228
1228
 
1229
1229
  ## Changelog
1230
1230
 
1231
- ### v2.0.44 (2026-03-15)
1231
+ ### v2.0.45 (2026-03-15)
1232
1232
  **Multi-device robustness + API-driven feature discovery:**
1233
1233
  - **Comfort program discovery: API-driven** — scans actual device features instead of hardcoded name list. Supports Vitodens, Vitocal gen3, and future devices automatically.
1234
1234
  - **HC program normalisation: pattern-based** — `comfort*`/`normal*`/`reduced*` prefix matching instead of fixed map.
@@ -1236,6 +1236,9 @@ sudo systemctl restart homebridge
1236
1236
  - **Device messages written at startup** — available immediately, not only after first update cycle.
1237
1237
  - **Compressor setpoint path: dynamic** — derived from resolved `hpPaths.compressorMod`, no hardcoded device index.
1238
1238
 
1239
+ ### v2.0.44 (2026-03-15)
1240
+ *(published separately)*
1241
+
1239
1242
  ### v2.0.43 (2026-03-15)
1240
1243
  *(published separately)*
1241
1244
 
@@ -1 +1 @@
1
- {"version":3,"file":"heating-circuit-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/heating-circuit-accessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAA2B,MAAM,aAAa,CAAC;AAInI,qBAAa,gCAAgC;IAuEzC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IA3EhC,OAAO,CAAC,mBAAmB,CAAU;IACrC,OAAO,CAAC,kBAAkB,CAAU;IAGpC,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,oBAAoB,CAAC,CAAU;IACvC,OAAO,CAAC,sBAAsB,CAAC,CAAU;IAGzC,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,cAAc,CAAC,CAAU;IAEjC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,wBAAwB,CAAgB;IAChD,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,oBAAoB,CAAa;IAIzC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,sBAAsB,CAAiC;IAC/D,OAAO,CAAC,sBAAsB,CAAiC;IAC/D,OAAO,CAAC,mBAAmB,CAAiC;IAC5D,OAAO,CAAC,mBAAmB,CAAiC;IAG5D,OAAO,CAAC,wBAAwB,CAAS;IAEzC,OAAO,CAAC,MAAM,CAeZ;IAGF,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,aAAa,CAAC,CAAyB;IAG/C,OAAO,CAAC,eAAe,CAAyE;IAChG,OAAO,CAAC,oBAAoB,CAA8C;gBAGvD,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,qBAAqB,EACnC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,MAAM;YA0B1B,sBAAsB;IAyBpC,OAAO,CAAC,mBAAmB;IA2L3B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,wBAAwB;IA4DlC,OAAO,CAAC,+BAA+B;IA8FrC,OAAO,CAAC,2BAA2B;IAkGnC,OAAO,CAAC,mCAAmC;IA0B3C,OAAO,CAAC,+BAA+B;YA2BzB,iBAAiB;YAgBjB,gBAAgB;YAgBhB,iBAAiB;YAgBjB,wBAAwB;IAyDtC,OAAO,CAAC,gCAAgC;IAyBlC,SAAS,CAAC,KAAK,EAAE,mBAAmB;IAgBpC,0BAA0B,CAAC,KAAK,EAAE,mBAAmB;YAa7C,cAAc;YAgEd,oBAAoB;YA6DpB,sBAAsB;YA0HtB,6BAA6B;YAsH7B,qBAAqB;IAsBnC,OAAO,CAAC,4BAA4B;IAyCpC,OAAO,CAAC,2BAA2B;IAMnC;;OAEG;YACW,oCAAoC;IAiDlD;;OAEG;YACW,6BAA6B;IAyB3C;;OAEG;YACW,+BAA+B;IAsB7C;;OAEG;IACH,OAAO,CAAC,+BAA+B;YAsBzB,OAAO;IA8CrB,OAAO,CAAC,wBAAwB;IAa1B,qBAAqB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIrD,8BAA8B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI9D,8BAA8B,CAAC,KAAK,EAAE,mBAAmB;IAyD/D,OAAO,CAAC,kBAAkB;IA4BpB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAKhE,OAAO,CAAC,2BAA2B;IA6FnC,OAAO,CAAC,2BAA2B;YA8DrB,YAAY;YAYZ,kBAAkB;CAiQjC"}
1
+ {"version":3,"file":"heating-circuit-accessory.d.ts","sourceRoot":"","sources":["../../src/accessories/heating-circuit-accessory.ts"],"names":[],"mappings":"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"}
@@ -247,14 +247,15 @@ class ViessmannHeatingCircuitAccessory {
247
247
  (hasForcedActivate && hasForcedDeactivate);
248
248
  if (hasAnyMethod) {
249
249
  this.availableQuickSelections.push('extendedHeating');
250
- // Initial state: comfort.active OR programs.active === comfortFeatureSuffix.
251
- // NOTE: forcedLastFromSchedule.active is NOT used — it is True during normal
252
- // schedule transitions and does not indicate Extended Heating is active.
250
+ // Initial state: OR of all three signals (same logic as update cycle).
253
251
  const comfortActive = comfortProgram.properties?.active?.value || false;
252
+ const forcedActive = forcedProgram?.properties?.active?.value || false;
254
253
  const activeProg = features.find(f => f.feature === `${circuitPrefix}.operating.programs.active`);
255
254
  const activeIsComfort = activeProg?.properties?.value?.value === this.comfortFeatureSuffix;
256
- this.states.ExtendedHeatingActive = comfortActive || activeIsComfort;
257
- this.platform.log.debug(`HC${this.circuitNumber} ExtendedHeating initial: comfort.active=${comfortActive} programs.active=${activeProg?.properties?.value?.value} → ${this.states.ExtendedHeatingActive}`);
255
+ this.states.ExtendedHeatingActive = comfortActive || forcedActive || activeIsComfort;
256
+ this.platform.log.debug(`HC${this.circuitNumber} ExtendedHeating initial:` +
257
+ ` comfort=${comfortActive} forced=${forcedActive} active=${activeProg?.properties?.value?.value}` +
258
+ ` → ${this.states.ExtendedHeatingActive}`);
258
259
  const activateExecutable = hasActivate?.isExecutable || false;
259
260
  const deactivateExecutable = hasDeactivate?.isExecutable || false;
260
261
  const setTempExecutable = hasSetTemperature?.isExecutable || false;
@@ -823,40 +824,45 @@ class ViessmannHeatingCircuitAccessory {
823
824
  }
824
825
  else {
825
826
  // DEACTIVATING Extended Heating
826
- // Try comfort.deactivate first (clean method)
827
- const deactivateCmd = comfortProgram.commands?.['deactivate'];
828
- if (deactivateCmd?.isExecutable) {
827
+ // Strategy: try all deactivation methods in order of likelihood to work.
828
+ // On Vitodens: forcedLastFromSchedule is the real mechanism → try it first.
829
+ // On other devices: comfort.deactivate may work directly.
830
+ const circuitPfx = `heating.circuits.${this.circuitNumber}`;
831
+ const forcedProgramNow = features.find(f => f.feature === `${circuitPfx}.operating.programs.forcedLastFromSchedule`);
832
+ let deactivated = false;
833
+ // Method 1: forcedLastFromSchedule.deactivate (Vitodens and others using this mechanism)
834
+ if (!deactivated && forcedProgramNow?.commands?.deactivate?.isExecutable) {
835
+ const success = await this.platform.viessmannAPI.executeCommand(this.installation.id, this.gateway.serial, this.device.id, `${circuitPfx}.operating.programs.forcedLastFromSchedule`, 'deactivate', {});
836
+ if (success) {
837
+ deactivated = true;
838
+ this.platform.log.info(`HC${this.circuitNumber} extended heating deactivated via forcedLastFromSchedule`);
839
+ }
840
+ }
841
+ // Method 2: comfort.deactivate (devices where comfort is the primary mechanism)
842
+ if (!deactivated && comfortProgram.commands?.deactivate?.isExecutable) {
829
843
  const success = await this.executeComfortCommand('deactivate', comfortProgram, false);
830
844
  if (success) {
831
- this.states.ExtendedHeatingActive = false;
832
- this.platform.log.info(`Heating circuit ${this.circuitNumber} extended heating deactivated`);
833
- return;
845
+ deactivated = true;
846
+ this.platform.log.info(`HC${this.circuitNumber} extended heating deactivated via comfort.deactivate`);
834
847
  }
835
848
  }
836
- // Fallback: setTemperature back to normal program temperature
837
- // This works even when deactivate is not executable — reduces comfort temp
838
- // back to normal level which effectively cancels the boost.
839
- const setTempCmd = comfortProgram.commands?.['setTemperature'];
840
- if (setTempCmd?.isExecutable) {
841
- const normalProgram = features.find(f => f.feature === `heating.circuits.${this.circuitNumber}.operating.programs.normal`);
849
+ // Method 3: comfort.setTemperature back to normal level
850
+ if (!deactivated && comfortProgram.commands?.setTemperature?.isExecutable) {
851
+ const normalProgram = features.find(f => f.feature === `${circuitPfx}.operating.programs.normal`);
842
852
  const normalTemp = normalProgram?.properties?.temperature?.value
843
853
  ?? this.programTemperatures.normal
844
854
  ?? 20;
845
- const success = await this.platform.viessmannAPI.executeCommand(this.installation.id, this.gateway.serial, this.device.id, `heating.circuits.${this.circuitNumber}.operating.programs.${this.comfortFeatureSuffix}`, 'setTemperature', { targetTemperature: normalTemp });
855
+ const success = await this.platform.viessmannAPI.executeCommand(this.installation.id, this.gateway.serial, this.device.id, `${circuitPfx}.operating.programs.${this.comfortFeatureSuffix}`, 'setTemperature', { targetTemperature: normalTemp });
846
856
  if (success) {
847
- this.states.ExtendedHeatingActive = false;
848
- this.platform.log.info(`Heating circuit ${this.circuitNumber} extended heating cancelled via setTemperature → ${normalTemp}°C`);
849
- return;
857
+ deactivated = true;
858
+ this.platform.log.info(`HC${this.circuitNumber} extended heating cancelled via setTemperature → ${normalTemp}°C`);
850
859
  }
851
860
  }
852
- // Final fallback via tryAlternativeExtendedHeating
853
- const success = await this.tryAlternativeExtendedHeating(false, comfortProgram, features);
854
- if (success) {
861
+ if (deactivated) {
855
862
  this.states.ExtendedHeatingActive = false;
856
- this.platform.log.info(`Heating circuit ${this.circuitNumber} extended heating deactivated using alternative method`);
857
863
  }
858
864
  else {
859
- throw new Error('Failed to deactivate extended heating mode');
865
+ throw new Error('Failed to deactivate extended heating — no executable command found');
860
866
  }
861
867
  }
862
868
  }
@@ -1491,21 +1497,30 @@ class ViessmannHeatingCircuitAccessory {
1491
1497
  }
1492
1498
  }
1493
1499
  }
1494
- // Extended heating state: read from programs.active === comfortFeatureSuffix OR comfort.active.
1495
- // NOTE: forcedLastFromSchedule.active is NOT a reliable indicator — it is also True during
1496
- // normal schedule transitions (e.g. maintaining 'normal' outside active slots).
1497
- // The authoritative source is programs.active value or comfort.active property.
1500
+ // Extended heating state three signals in OR, all verified via live API:
1501
+ //
1502
+ // Vitodens (Ciriè, confirmed):
1503
+ // programs.active stays 'normal', comfort.active stays False
1504
+ // forcedLastFromSchedule.active = True when ON, False when OFF ← real indicator here
1505
+ //
1506
+ // Vitocal gen3 / other devices:
1507
+ // programs.active may change to comfortFeatureSuffix
1508
+ // comfort.active may become True
1509
+ //
1510
+ // Using OR of all three signals covers all known device behaviours without assumptions.
1498
1511
  const comfortProgram = features.find(f => f.feature === `${circuitPrefix}.operating.programs.${this.comfortFeatureSuffix}`);
1512
+ const forcedProgram = features.find(f => f.feature === `${circuitPrefix}.operating.programs.forcedLastFromSchedule`);
1499
1513
  const activeProg = features.find(f => f.feature === `${circuitPrefix}.operating.programs.active`);
1500
1514
  const comfortActive = comfortProgram?.properties?.active?.value ?? false;
1515
+ const forcedActive = forcedProgram?.properties?.active?.value ?? false;
1501
1516
  const activeIsComfort = activeProg?.properties?.value?.value === this.comfortFeatureSuffix;
1502
- const extendedActive = comfortActive || activeIsComfort;
1517
+ const extendedActive = comfortActive || forcedActive || activeIsComfort;
1503
1518
  if (extendedActive !== this.states.ExtendedHeatingActive) {
1504
1519
  this.states.ExtendedHeatingActive = extendedActive;
1505
1520
  anyProgramStateChanged = true;
1506
- if (!extendedActive) {
1507
- }
1508
- this.platform.log.debug(`HC${this.circuitNumber} ExtendedHeating: comfort.active=${comfortActive} activeProgram=${activeProg?.properties?.value?.value} → ${extendedActive}`);
1521
+ this.platform.log.debug(`HC${this.circuitNumber} ExtendedHeating:` +
1522
+ ` comfort=${comfortActive} forced=${forcedActive} active=${activeProg?.properties?.value?.value}` +
1523
+ ` → ${extendedActive}`);
1509
1524
  if (extendedActive) {
1510
1525
  this.states.HolidayActive = false;
1511
1526
  this.states.HolidayAtHomeActive = false;
@@ -9,7 +9,7 @@ export declare const PLUGIN_NAME = "homebridge-viessmann-vicare";
9
9
  /**
10
10
  * Plugin version for User-Agent and logging
11
11
  */
12
- export declare const PLUGIN_VERSION = "2.0.44";
12
+ export declare const PLUGIN_VERSION = "2.0.45";
13
13
  /**
14
14
  * Default configuration values
15
15
  */
package/dist/settings.js CHANGED
@@ -12,7 +12,7 @@ exports.PLUGIN_NAME = 'homebridge-viessmann-vicare';
12
12
  /**
13
13
  * Plugin version for User-Agent and logging
14
14
  */
15
- exports.PLUGIN_VERSION = '2.0.44';
15
+ exports.PLUGIN_VERSION = '2.0.45';
16
16
  /**
17
17
  * Default configuration values
18
18
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homebridge-viessmann-vicare",
3
- "version": "2.0.44",
3
+ "version": "2.0.45",
4
4
  "description": "Complete Homebridge plugin for Viessmann ViCare heating systems with full control capabilities, advanced rate limiting protection, and intelligent cache management",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {