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 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-2045571.csv migration script updated (re-run if needed)
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-2045571.csv
1269
- mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-2045571.json
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.65
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.52 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.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-2045571.csv
305
- > mv /var/lib/homebridge/viessmann-schedule.json /var/lib/homebridge/viessmann-schedule-2045571.json
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 `2045571` with your actual installation ID (visible in Homebridge logs on startup).
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-2045571.csv
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 2045571
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 2045571 --boilerKW 25 --designTemp -10
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 2045571 --days 30 --boilerKW 25 --designTemp -10
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 2045571 --days 7 --out /tmp/report.html
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:-2045571}" # your installation ID
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": [2045780, 1234567]
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":"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"}
1
+ {"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../src/auth-manager.ts"],"names":[],"mappings":"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"}
@@ -542,31 +542,39 @@ class AuthManager {
542
542
  }
543
543
  }
544
544
  openBrowser(url) {
545
- // πŸ†• Per servizi systemd: NON tentare di aprire automaticamente
546
- // L'utente puΓ² aprire da qualsiasi dispositivo sulla rete
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
- // Se siamo in un servizio systemd o utente homebridge, non aprire automaticamente
550
- if (isSystemdService || isHomebridge) {
551
- this.log.info('='.repeat(80));
552
- this.log.info('πŸ” AUTHENTICATION REQUIRED');
553
- this.log.info('='.repeat(80));
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
- // Solo per installazioni non-systemd (es. macOS, sviluppo locale)
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 (non-systemd)
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
- this.log.info('πŸ“± Please open the authentication URL manually in your browser');
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
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
- this.log.error(`Failed to setup accessories for device ${device.id}:`, error);
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++;
@@ -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.65";
12
+ export declare const PLUGIN_VERSION = "2.0.67";
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.65';
15
+ exports.PLUGIN_VERSION = '2.0.67';
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.65",
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": {