homebridge-viessmann-vicare 2.0.65 β 2.0.67
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 +12 -3
- package/SETUP-GUIDE.md +20 -12
- package/dist/auth-manager.d.ts.map +1 -1
- package/dist/auth-manager.js +35 -24
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +14 -1
- package/dist/settings.d.ts +1 -1
- package/dist/settings.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1033,6 +1033,15 @@ For issues and questions:
|
|
|
1033
1033
|
|
|
1034
1034
|
## π Changelog
|
|
1035
1035
|
|
|
1036
|
+
### [2.0.67] - 2026-05-29
|
|
1037
|
+
- fix: OAuth authentication URL never shown in Docker/Umbrel/container environments (FIX#5)
|
|
1038
|
+
- fix: `openBrowser()` now prints the full auth banner + URL unconditionally before any environment detection β no scenario exists where logging the URL is harmful
|
|
1039
|
+
- fix: improved headless detection: added `DISPLAY`/`WAYLAND_DISPLAY` check (`isHeadlessLinux`) and `DOCKER`/`CONTAINER` env vars (`isContainer`) β covers Docker, Umbrel, and any headless Linux without a display server
|
|
1040
|
+
- fix: `tryOpenBrowserDirect()` error callback now repeats the URL as belt-and-suspenders fallback for undetected environments
|
|
1041
|
+
|
|
1042
|
+
### [2.0.66] - 2026-03-19
|
|
1043
|
+
- fix: HTTP 400 (gateway offline / boiler off) no longer causes log spam β strengthened detection via both response.status and message string fallback
|
|
1044
|
+
|
|
1036
1045
|
### [2.0.65] - 2026-03-19
|
|
1037
1046
|
- fix: HTTP 400 (gateway offline / boiler off) no longer triggers aggressive retry and error logs
|
|
1038
1047
|
- fix: api-client.ts β 400 responses skip retry loop, logged at debug level only
|
|
@@ -1126,7 +1135,7 @@ For issues and questions:
|
|
|
1126
1135
|
- feat: emoji icons on all report section headers
|
|
1127
1136
|
- fix: CSV migration β hc0/dhw post-deploy rows now correctly detected (35-col format)
|
|
1128
1137
|
- fix: hc0/dhw appendCsvRow now includes event_type='snapshot' for future-proof migration
|
|
1129
|
-
- fix: viessmann-history-
|
|
1138
|
+
- fix: viessmann-history-YOUR_INSTALLATION_ID.csv migration script updated (re-run if needed)
|
|
1130
1139
|
|
|
1131
1140
|
### [2.0.51] - 2026-03-16
|
|
1132
1141
|
- fix: viessmann-report-server.js missing from npm package (added to files field)
|
|
@@ -1265,8 +1274,8 @@ For issues and questions:
|
|
|
1265
1274
|
#### Migration
|
|
1266
1275
|
Rename existing CSV and schedule files to include your installation ID:
|
|
1267
1276
|
```bash
|
|
1268
|
-
mv /var/lib/homebridge/viessmann-history.csv /var/lib/homebridge/viessmann-history-
|
|
1269
|
-
mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-
|
|
1277
|
+
mv /var/lib/homebridge/viessmann-history.csv /var/lib/homebridge/viessmann-history-YOUR_INSTALLATION_ID.csv
|
|
1278
|
+
mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-YOUR_INSTALLATION_ID.json
|
|
1270
1279
|
```
|
|
1271
1280
|
|
|
1272
1281
|
### [2.0.34] - 2026-03-10
|
package/SETUP-GUIDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Complete Setup Guide - v2.0.
|
|
1
|
+
# Complete Setup Guide - v2.0.67
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
This guide will walk you through setting up the Viessmann ViCare plugin v2.0.
|
|
5
|
+
This guide will walk you through setting up the Viessmann ViCare plugin v2.0.67 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
|
|
|
@@ -301,14 +301,14 @@ CSV files location: `/var/lib/homebridge/viessmann-history-<installationId>.csv`
|
|
|
301
301
|
|
|
302
302
|
> β οΈ **Upgrading from v2.0.34 or earlier**: rename your existing files to include the installation ID (v2.0.37+):
|
|
303
303
|
> ```bash
|
|
304
|
-
> mv /var/lib/homebridge/viessmann-history.csv /var/lib/homebridge/viessmann-history-
|
|
305
|
-
> mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-
|
|
304
|
+
> mv /var/lib/homebridge/viessmann-history.csv /var/lib/homebridge/viessmann-history-YOUR_INSTALLATION_ID.csv
|
|
305
|
+
> mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-YOUR_INSTALLATION_ID.json
|
|
306
306
|
> ```
|
|
307
|
-
> Replace `
|
|
307
|
+
> Replace `YOUR_INSTALLATION_ID` with your actual installation ID (visible in Homebridge logs on startup).
|
|
308
308
|
>
|
|
309
309
|
> β οΈ **Upgrading from v2.0.25 or earlier**: also update the CSV header:
|
|
310
310
|
> ```bash
|
|
311
|
-
> sed -i '1s/.*/timestamp,accessory,burner_active,modulation,room_temp,target_temp,outside_temp,outside_humidity,dhw_temp,dhw_target,program,mode,burner_starts,burner_hours,flow_temp,gas_heating_day_m3,gas_dhw_day_m3,pv_production_w,pv_daily_kwh,battery_level,battery_charging_w,battery_discharging_w,grid_feedin_w,grid_draw_w,wallbox_charging,wallbox_power_w/' /var/lib/homebridge/viessmann-history-
|
|
311
|
+
> sed -i '1s/.*/timestamp,accessory,burner_active,modulation,room_temp,target_temp,outside_temp,outside_humidity,dhw_temp,dhw_target,program,mode,burner_starts,burner_hours,flow_temp,gas_heating_day_m3,gas_dhw_day_m3,pv_production_w,pv_daily_kwh,battery_level,battery_charging_w,battery_discharging_w,grid_feedin_w,grid_draw_w,wallbox_charging,wallbox_power_w/' /var/lib/homebridge/viessmann-history-YOUR_INSTALLATION_ID.csv
|
|
312
312
|
> ```
|
|
313
313
|
|
|
314
314
|
#### **Heating schedule file (v2.0.31+)**
|
|
@@ -343,16 +343,16 @@ The file is created automatically after the first Homebridge restart β no manu
|
|
|
343
343
|
|
|
344
344
|
```bash
|
|
345
345
|
# Last 7 days β basic (cycling, flow temp, schedule analysis)
|
|
346
|
-
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation
|
|
346
|
+
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation YOUR_INSTALLATION_ID
|
|
347
347
|
|
|
348
348
|
# Full analysis β recommended (add your boiler's nominal kW from the ViCare app)
|
|
349
|
-
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation
|
|
349
|
+
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation YOUR_INSTALLATION_ID --boilerKW 25 --designTemp -10
|
|
350
350
|
|
|
351
351
|
# Last 30 days
|
|
352
|
-
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation
|
|
352
|
+
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation YOUR_INSTALLATION_ID --days 30 --boilerKW 25 --designTemp -10
|
|
353
353
|
|
|
354
354
|
# Custom output path
|
|
355
|
-
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation
|
|
355
|
+
node /usr/local/lib/node_modules/homebridge-viessmann-vicare/viessmann-report.js --installation YOUR_INSTALLATION_ID --days 7 --out /tmp/report.html
|
|
356
356
|
```
|
|
357
357
|
|
|
358
358
|
| Parameter | Description | Default |
|
|
@@ -395,7 +395,7 @@ Create `/home/pi/Scripts/viessmann-report.sh`:
|
|
|
395
395
|
REPORT="/tmp/report.html"
|
|
396
396
|
DAYS="${1:-30}"
|
|
397
397
|
EMAIL="$2"
|
|
398
|
-
INSTALLATION_ID="${3:-
|
|
398
|
+
INSTALLATION_ID="${3:-YOUR_INSTALLATION_ID}" # your installation ID
|
|
399
399
|
BOILER_KW="${4:-0}" # nominal boiler power in kW (e.g. 25) β 0 = disabled
|
|
400
400
|
DESIGN_TEMP="${5:--7}" # design outdoor temperature for peak load calculation
|
|
401
401
|
LOG="/var/log/viessmann-report.log"
|
|
@@ -500,7 +500,7 @@ Reduce API calls by filtering installations:
|
|
|
500
500
|
#### Option 2: Filter by Specific IDs
|
|
501
501
|
```json
|
|
502
502
|
{
|
|
503
|
-
"installationIds": [
|
|
503
|
+
"installationIds": [YOUR_INSTALLATION_ID, 1234567]
|
|
504
504
|
}
|
|
505
505
|
```
|
|
506
506
|
|
|
@@ -1228,6 +1228,14 @@ sudo systemctl restart homebridge
|
|
|
1228
1228
|
|
|
1229
1229
|
## Changelog
|
|
1230
1230
|
|
|
1231
|
+
### v2.0.67 (2026-05-29)
|
|
1232
|
+
- fix: OAuth authentication URL never shown in Docker/Umbrel/container environments
|
|
1233
|
+
- fix: auth URL now always printed in logs unconditionally β works in all headless environments regardless of USER, DISPLAY, or systemd variables
|
|
1234
|
+
- fix: improved container detection (DOCKER/CONTAINER env vars, headless Linux without DISPLAY/WAYLAND_DISPLAY)
|
|
1235
|
+
|
|
1236
|
+
### v2.0.66 (2026-03-19)
|
|
1237
|
+
- fix: HTTP 400 (boiler off/gateway offline) silenced β no more log spam
|
|
1238
|
+
|
|
1231
1239
|
### v2.0.65 (2026-03-19)
|
|
1232
1240
|
- fix: HTTP 400 (boiler off/gateway offline) silenced β no more log spam when secondary installation is off
|
|
1233
1241
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../src/auth-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAiB,MAAM,OAAO,CAAC;AAOrD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAkBD,qBAAa,WAAW;IAwBpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IA1BzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuD;IAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAG1C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IACjD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAW;IAEpD,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,WAAW,CAAC,CAAiB;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAiB;IAC3C,OAAO,CAAC,oBAAoB,CAAS;gBAGlB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,MAAM,EAC/B,WAAW,CAAC,EAAE,MAAM;IAatB,OAAO,CAAC,yBAAyB;IAiCjC,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,oBAAoB;IAkCf,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD5C,OAAO,CAAC,mBAAmB;YAuBX,eAAe;YAKf,gBAAgB;IAyC9B,OAAO,CAAC,YAAY;YAUR,eAAe;IA8D3B,OAAO,CAAC,YAAY;IAatB,OAAO,CAAC,eAAe;IAoFrB,OAAO,CAAC,cAAc;IAcxB,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../src/auth-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/auth-manager.js
CHANGED
|
@@ -542,31 +542,39 @@ class AuthManager {
|
|
|
542
542
|
}
|
|
543
543
|
}
|
|
544
544
|
openBrowser(url) {
|
|
545
|
-
//
|
|
546
|
-
//
|
|
545
|
+
// FIX#5: Always print the full banner + URL unconditionally.
|
|
546
|
+
// Previous code only logged the URL inside the systemd/homebridge branch,
|
|
547
|
+
// so Docker containers running as root (USER=root, no SYSTEMD_EXEC_PID)
|
|
548
|
+
// fell through to tryOpenBrowserDirect which swallowed the URL on error.
|
|
549
|
+
this.log.info('='.repeat(80));
|
|
550
|
+
this.log.info('π AUTHENTICATION REQUIRED');
|
|
551
|
+
this.log.info('='.repeat(80));
|
|
552
|
+
this.log.info('');
|
|
553
|
+
this.log.info('π± Open this URL from ANY device on your network:');
|
|
554
|
+
this.log.info('');
|
|
555
|
+
this.log.info(` ${url}`);
|
|
556
|
+
this.log.info('');
|
|
557
|
+
this.log.info('β
You can open it from:');
|
|
558
|
+
this.log.info(' β’ Your computer/laptop');
|
|
559
|
+
this.log.info(' β’ Your smartphone/tablet');
|
|
560
|
+
this.log.info(' β’ This Raspberry Pi (if you have a browser)');
|
|
561
|
+
this.log.info('');
|
|
562
|
+
this.log.info(`π Auth server is listening on: ${this.hostIp}:${this.config.redirectPort || 4200}`);
|
|
563
|
+
this.log.info('β³ Waiting for authentication...');
|
|
564
|
+
this.log.info('='.repeat(80));
|
|
565
|
+
// Detect headless/server environments where auto-open makes no sense.
|
|
566
|
+
// Covers: systemd services, Homebridge native user, Docker/Umbrel containers,
|
|
567
|
+
// and any headless Linux without a display server.
|
|
547
568
|
const isSystemdService = !!(process.env.SYSTEMD_EXEC_PID || process.env.INVOCATION_ID);
|
|
548
569
|
const isHomebridge = process.env.USER === 'homebridge';
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
this.log.info('');
|
|
555
|
-
this.log.info('π± Open this URL from ANY device on your network:');
|
|
556
|
-
this.log.info('');
|
|
557
|
-
this.log.info(` ${url}`);
|
|
558
|
-
this.log.info('');
|
|
559
|
-
this.log.info('β
You can open it from:');
|
|
560
|
-
this.log.info(' β’ Your computer/laptop');
|
|
561
|
-
this.log.info(' β’ Your smartphone/tablet');
|
|
562
|
-
this.log.info(' β’ This Raspberry Pi (if you have a browser)');
|
|
563
|
-
this.log.info('');
|
|
564
|
-
this.log.info(`π Auth server is listening on: ${this.hostIp}:${this.config.redirectPort || 4200}`);
|
|
565
|
-
this.log.info('β³ Waiting for authentication...');
|
|
566
|
-
this.log.info('='.repeat(80));
|
|
570
|
+
const isHeadlessLinux = process.platform === 'linux' &&
|
|
571
|
+
!process.env.DISPLAY && !process.env.WAYLAND_DISPLAY;
|
|
572
|
+
const isContainer = !!(process.env.DOCKER || process.env.CONTAINER);
|
|
573
|
+
if (isSystemdService || isHomebridge || isHeadlessLinux || isContainer) {
|
|
574
|
+
// URL already printed above β nothing more to do.
|
|
567
575
|
return;
|
|
568
576
|
}
|
|
569
|
-
//
|
|
577
|
+
// Desktop environments only (macOS dev, Windows, Linux with display server)
|
|
570
578
|
this.tryOpenBrowserDirect(url);
|
|
571
579
|
}
|
|
572
580
|
tryOpenBrowserDirect(url) {
|
|
@@ -579,15 +587,18 @@ class AuthManager {
|
|
|
579
587
|
case 'win32':
|
|
580
588
|
command = `start "" "${url}"`;
|
|
581
589
|
break;
|
|
582
|
-
default: // Linux desktop (
|
|
590
|
+
default: // Linux desktop (con display server)
|
|
583
591
|
command = `xdg-open "${url}" 2>/dev/null || firefox "${url}" 2>/dev/null || chromium-browser "${url}" 2>/dev/null`;
|
|
584
592
|
}
|
|
585
593
|
exec(command, (error) => {
|
|
586
594
|
if (error) {
|
|
587
|
-
|
|
595
|
+
// FIX#5: repeat the URL here too β belt-and-suspenders for undetected
|
|
596
|
+
// headless environments where the exec callback is the only output.
|
|
597
|
+
this.log.info('π± Could not open browser automatically. Open this URL manually:');
|
|
598
|
+
this.log.info(` ${url}`);
|
|
588
599
|
}
|
|
589
600
|
else {
|
|
590
|
-
this.log.info('π Opening browser...');
|
|
601
|
+
this.log.info('π Opening browser for authentication...');
|
|
591
602
|
}
|
|
592
603
|
});
|
|
593
604
|
}
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAGH,qBAAqB,EACrB,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,OAAO,EACP,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrI,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAgB,MAAM,2BAA2B,CAAC;AAOrI,qBAAa,iBAAkB,YAAW,qBAAqB;aA2B3C,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,uBAAuB,GAAG,cAAc;aAChD,GAAG,EAAE,GAAG;IA5B1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxC,SAAgB,cAAc,EAAE,OAAO,cAAc,CAAC;IAEtD,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtD,SAAgB,YAAY,EAAG,YAAY,CAAC;IAC5C,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,oBAAoB,CAA0C;IACtE,OAAO,CAAC,iBAAiB,CAMvB;gBAGgB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,uBAAuB,GAAG,cAAc,EAChD,GAAG,EAAE,GAAG;IA6E1B,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,uBAAuB;YAQjB,wBAAwB;YA8CxB,iCAAiC;YA+CjC,iCAAiC;YAoHjC,8BAA8B;YA2D9B,yCAAyC;IA4BhD,4BAA4B,CACjC,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAkD,GAC1D,IAAI;IAgBP,OAAO,CAAC,yBAAyB;IAW1B,oBAAoB,IAAI;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB;IAWD,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAKzC,eAAe;IAuDrB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+CrB,sBAAsB,CAAC,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.js
CHANGED
|
@@ -531,7 +531,15 @@ class ViessmannPlatform {
|
|
|
531
531
|
await this.setupEnergyAccessory(installation, gateway, device, features);
|
|
532
532
|
}
|
|
533
533
|
catch (error) {
|
|
534
|
-
|
|
534
|
+
const status = error?.response?.status;
|
|
535
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
536
|
+
const isOffline = status === 400 || msg.includes('400');
|
|
537
|
+
if (isOffline) {
|
|
538
|
+
this.log.debug(`βΈοΈ Device ${device.id} β gateway offline or boiler off (HTTP 400), skipping setup`);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
this.log.error(`Failed to setup accessories for device ${device.id}:`, error);
|
|
542
|
+
}
|
|
535
543
|
}
|
|
536
544
|
}
|
|
537
545
|
async setupBoilerAccessory(installation, gateway, device, features) {
|
|
@@ -756,6 +764,11 @@ class ViessmannPlatform {
|
|
|
756
764
|
this.log.error(`π "${accessory.displayName}" β auth error during update (${msg}). Token refresh may be needed.`);
|
|
757
765
|
errorDevices++;
|
|
758
766
|
}
|
|
767
|
+
else if (msg.includes('400') || error?.response?.status === 400) {
|
|
768
|
+
// HTTP 400 = gateway offline / boiler off β expected, not an error
|
|
769
|
+
this.log.debug(`βΈοΈ "${accessory.displayName}" β gateway offline or boiler off (HTTP 400)`);
|
|
770
|
+
errorDevices++;
|
|
771
|
+
}
|
|
759
772
|
else {
|
|
760
773
|
this.log.error(`β "${accessory.displayName}" β update failed: ${msg}`);
|
|
761
774
|
errorDevices++;
|
package/dist/settings.d.ts
CHANGED
|
@@ -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.
|
|
12
|
+
export declare const PLUGIN_VERSION = "2.0.67";
|
|
13
13
|
/**
|
|
14
14
|
* Default configuration values
|
|
15
15
|
*/
|
package/dist/settings.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-viessmann-vicare",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.67",
|
|
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": {
|