homebridge-viessmann-vicare 2.0.63 → 2.0.64
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 +8 -0
- package/SETUP-GUIDE.md +7 -1
- package/dist/settings.d.ts +1 -1
- package/dist/settings.js +1 -1
- package/package.json +1 -1
- package/viessmann-report.js +37 -37
package/README.md
CHANGED
|
@@ -1033,11 +1033,19 @@ For issues and questions:
|
|
|
1033
1033
|
|
|
1034
1034
|
## 📈 Changelog
|
|
1035
1035
|
|
|
1036
|
+
### [2.0.64] - 2026-03-18
|
|
1037
|
+
- fix: CSV cleanup — 4 rows with invalid program='heating' (from first run on 10/03) corrected to empty string
|
|
1038
|
+
- fix: version bump (v2.0.63 was already published)
|
|
1039
|
+
|
|
1036
1040
|
### [2.0.63] - 2026-03-18
|
|
1037
1041
|
- fix: ReferenceError T() in browser — chart labels now evaluated at build time via \${} wrapper
|
|
1038
1042
|
- fix: tooltip callbacks use pre-injected _tooltip object with _tt() helper
|
|
1039
1043
|
- fix: thermal efficiency note still hardcoded in Energy Summary section
|
|
1040
1044
|
|
|
1045
|
+
### [2.0.63] - 2026-03-18
|
|
1046
|
+
- fix: SyntaxError "Unexpected identifier" in browser — chart labels T() values were emitted without quotes (label:Temp. ambiente (°C) instead of label:"Temp. ambiente (°C)")
|
|
1047
|
+
- fix: all 40 chart label and axis T() expressions now correctly wrapped in quotes in generated HTML
|
|
1048
|
+
|
|
1041
1049
|
### [2.0.62] - 2026-03-18
|
|
1042
1050
|
- fix: report server UI — Language selector now always visible as dedicated card (was hidden inside Advanced panel)
|
|
1043
1051
|
- fix: Advanced panel — curve slope and shift now have separate labeled fields
|
package/SETUP-GUIDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Complete Setup Guide - v2.0.
|
|
1
|
+
# Complete Setup Guide - v2.0.64
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
@@ -1228,10 +1228,16 @@ sudo systemctl restart homebridge
|
|
|
1228
1228
|
|
|
1229
1229
|
## Changelog
|
|
1230
1230
|
|
|
1231
|
+
### v2.0.64 (2026-03-18)
|
|
1232
|
+
- fix: version bump
|
|
1233
|
+
|
|
1231
1234
|
### v2.0.63 (2026-03-18)
|
|
1232
1235
|
- fix: ReferenceError T() in browser JS — grafici non visibili con --lang it
|
|
1233
1236
|
- fix: thermal efficiency note tradotta
|
|
1234
1237
|
|
|
1238
|
+
### v2.0.63 (2026-03-18)
|
|
1239
|
+
- fix: SyntaxError in browser — chart labels missing quotes around translated strings
|
|
1240
|
+
|
|
1235
1241
|
### v2.0.62 (2026-03-18)
|
|
1236
1242
|
- fix: report server — Language card always visible, Advanced panel fields cleaned up
|
|
1237
1243
|
|
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.64";
|
|
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.64",
|
|
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": {
|
package/viessmann-report.js
CHANGED
|
@@ -2329,14 +2329,14 @@ function _tt(tpl,x,y){return tpl.replace('__X__',x).replace('__Y__',y);}
|
|
|
2329
2329
|
new Chart(c,{type:'line',data:{
|
|
2330
2330
|
labels:${JSON.stringify(ovLabels)},
|
|
2331
2331
|
datasets:[
|
|
2332
|
-
{label
|
|
2333
|
-
{label
|
|
2334
|
-
...(${JSON.stringify(ovFlow)}.some(v=>v!==null) ? [{label
|
|
2335
|
-
{label
|
|
2336
|
-
{label
|
|
2337
|
-
{label
|
|
2338
|
-
{label
|
|
2339
|
-
...(${JSON.stringify(ovOutsideHum)}.some(v=>v!==null) ? [{label
|
|
2332
|
+
{label:"${T('chartRoomTemp')}", yAxisID:'yTemp', data:${JSON.stringify(ovRoom)}, borderColor:'#4e9af1',backgroundColor:'rgba(78,154,241,.06)',fill:true, tension:0.3,pointRadius:1,borderWidth:2},
|
|
2333
|
+
{label:"${T('chartHC0Setpoint')}", yAxisID:'yTemp', data:${JSON.stringify(ovSetpoint)},borderColor:'#f1c94e',backgroundColor:'transparent', fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[5,4]},
|
|
2334
|
+
...(${JSON.stringify(ovFlow)}.some(v=>v!==null) ? [{label:"${T('chartFlowTemp')}", yAxisID:'yTemp', data:${JSON.stringify(ovFlow)}, borderColor:'#ef5350',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[2,2]}] : []),
|
|
2335
|
+
{label:"${T('chartDHWTemp')}", yAxisID:'yTemp', data:${JSON.stringify(ovDhw)}, borderColor:'#00897b',backgroundColor:'rgba(0,137,123,.04)',fill:false,tension:0.3,pointRadius:1,borderWidth:1.5},
|
|
2336
|
+
{label:"${T('chartOutdoorTemp')}", yAxisID:'yTemp', data:${JSON.stringify(ovOutside)}, borderColor:'#90a4ae',backgroundColor:'transparent', fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[3,3]},
|
|
2337
|
+
{label:"${T('chartModulation')}", yAxisID:'yRight',data:${JSON.stringify(ovMod)}, borderColor:'#e65100',backgroundColor:'rgba(230,81,0,.04)',fill:false,tension:0.3,pointRadius:0,borderWidth:1.5},
|
|
2338
|
+
{label:"${T('chartBurnerBar')}", yAxisID:'yRight',data:${JSON.stringify(ovBurner)}, borderColor:'#37474f',backgroundColor:'rgba(55,71,79,.07)', fill:true, tension:0, pointRadius:0,borderWidth:1,stepped:true},
|
|
2339
|
+
...(${JSON.stringify(ovOutsideHum)}.some(v=>v!==null) ? [{label:"${T('chartOutdoorHum')}", yAxisID:'yRight',data:${JSON.stringify(ovOutsideHum)},borderColor:'#7986cb',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[4,2]}] : [])
|
|
2340
2340
|
]
|
|
2341
2341
|
},options:{
|
|
2342
2342
|
responsive:true,maintainAspectRatio:false,
|
|
@@ -2351,18 +2351,18 @@ function _tt(tpl,x,y){return tpl.replace('__X__',x).replace('__Y__',y);}
|
|
|
2351
2351
|
|
|
2352
2352
|
})();
|
|
2353
2353
|
${boilerRows.length>=2?`
|
|
2354
|
-
mk('cMod',${JSON.stringify(modChart.labels)},[{label
|
|
2355
|
-
mk('cBurner',${JSON.stringify(burnerChart.labels)},[{label
|
|
2354
|
+
mk('cMod',${JSON.stringify(modChart.labels)},[{label:"${T('chartModulation')}",data:${JSON.stringify(modChart.values)},borderColor:'#e65100',backgroundColor:'rgba(230,81,0,.07)',fill:true,tension:0.3,pointRadius:2,borderWidth:2}],'%');
|
|
2355
|
+
mk('cBurner',${JSON.stringify(burnerChart.labels)},[{label:"${T('chartBurnerOnOff')}",data:${JSON.stringify(burnerChart.values)},borderColor:'#1a1a2e',backgroundColor:'rgba(26,26,46,.06)',fill:true,tension:0,pointRadius:0,borderWidth:1.5,stepped:true}],'');`:''}
|
|
2356
2356
|
${hcRows.length>=2?`
|
|
2357
2357
|
mk('cRoom',${JSON.stringify(roomChart.labels)},[
|
|
2358
|
-
{label
|
|
2359
|
-
{label
|
|
2358
|
+
{label:"${T('chartRoomTemp')}",data:${JSON.stringify(roomChart.values)},borderColor:'#4e9af1',backgroundColor:'rgba(78,154,241,.07)',fill:true,tension:0.3,pointRadius:2,borderWidth:2},
|
|
2359
|
+
{label:"${T('chartSetpoint')}",data:${JSON.stringify(targetChart.values)},borderColor:'#f1c94e',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:2,borderDash:[5,4]}
|
|
2360
2360
|
],'°C');`:''}
|
|
2361
2361
|
${flowVals.length>=2?`
|
|
2362
|
-
mk('cFlow',${JSON.stringify(flowChart.labels)},[{label
|
|
2362
|
+
mk('cFlow',${JSON.stringify(flowChart.labels)},[{label:"${T('chartFlowTemp')}",data:${JSON.stringify(flowChart.values)},borderColor:'#ef5350',backgroundColor:'rgba(239,83,80,.07)',fill:true,tension:0.3,pointRadius:2,borderWidth:2}],'°C');
|
|
2363
2363
|
`:''}
|
|
2364
2364
|
${cycleCount>=3?`
|
|
2365
|
-
(function(){const c=document.getElementById('cCycleHist');if(!c)return;new Chart(c,{type:'bar',data:{labels:${JSON.stringify(histBuckets.map(b=>b.label))},datasets:[{label
|
|
2365
|
+
(function(){const c=document.getElementById('cCycleHist');if(!c)return;new Chart(c,{type:'bar',data:{labels:${JSON.stringify(histBuckets.map(b=>b.label))},datasets:[{label:"${T('chartCycles')}",data:${JSON.stringify(histData)},backgroundColor:${JSON.stringify(histData.map((_,i)=>i===0?'rgba(239,83,80,.7)':'rgba(78,154,241,.6)'))},borderColor:${JSON.stringify(histData.map((_,i)=>i===0?'#ef5350':'#4e9af1'))},borderWidth:1.5,borderRadius:4}]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{display:false}},scales:{x:{grid:{color:'#f5f5f5'}},y:{title:{display:true,text:"${T('axisCycles')}"},ticks:{stepSize:1}}}}});})();
|
|
2366
2366
|
`:''}
|
|
2367
2367
|
${hasGasChart?`
|
|
2368
2368
|
(function(){
|
|
@@ -2372,9 +2372,9 @@ ${hasGasChart?`
|
|
|
2372
2372
|
data:{
|
|
2373
2373
|
labels:${JSON.stringify(gasBarLabels)},
|
|
2374
2374
|
datasets:[
|
|
2375
|
-
{type:'bar', label
|
|
2376
|
-
{type:'bar', label
|
|
2377
|
-
{type:'line',label
|
|
2375
|
+
{type:'bar', label:"${T('chartHeatingM3')}", data:${JSON.stringify(gasBarHeating)}, backgroundColor:'rgba(26,86,180,.75)', borderColor:'#1a56b4', borderWidth:1, borderRadius:3, stack:'gas'},
|
|
2376
|
+
{type:'bar', label:"${T('chartDHWM3')}", data:${JSON.stringify(gasBarDhw)}, backgroundColor:'rgba(0,137,123,.65)', borderColor:'#00897b', borderWidth:1, borderRadius:3, stack:'gas'},
|
|
2377
|
+
{type:'line',label:"${T('chartTotalM3')}", data:${JSON.stringify(gasLineTotal)}, borderColor:'#e53935', backgroundColor:'transparent', borderWidth:2, pointRadius:4, pointBackgroundColor:'#e53935', tension:0.3, yAxisID:'y'}
|
|
2378
2378
|
]
|
|
2379
2379
|
},
|
|
2380
2380
|
options:{
|
|
@@ -2391,19 +2391,19 @@ ${hasGasChart?`
|
|
|
2391
2391
|
`:''}
|
|
2392
2392
|
${dhwRows.length>=2?`
|
|
2393
2393
|
mk('cDhw',${JSON.stringify(dhwChart.labels)},[
|
|
2394
|
-
{label
|
|
2395
|
-
{label
|
|
2394
|
+
{label:"${T('chartDHWTemp')}",data:${JSON.stringify(dhwChart.values)},borderColor:'#00897b',backgroundColor:'rgba(0,137,123,.07)',fill:true,tension:0.3,pointRadius:2,borderWidth:2},
|
|
2395
|
+
{label:"${T('chartDHWSetpoint')}",data:${JSON.stringify(dhwTgtChart.values)},borderColor:'#80cbc4',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:2,borderDash:[5,4]}
|
|
2396
2396
|
],'°C');`:''}
|
|
2397
2397
|
${hasPV&&energyRows.length>=2?`
|
|
2398
|
-
mk('cPV',${JSON.stringify(pvChart.labels)},[{label
|
|
2399
|
-
mk('cBatt',${JSON.stringify(battChart.labels)},[{label
|
|
2400
|
-
mk('cWallbox',${JSON.stringify(wallboxChart.labels)},[{label
|
|
2398
|
+
mk('cPV',${JSON.stringify(pvChart.labels)},[{label:"${T('chartPVProd')}",data:${JSON.stringify(pvChart.values)},borderColor:'#f9a825',backgroundColor:'rgba(249,168,37,.1)',fill:true,tension:0.3,pointRadius:2,borderWidth:2}],'W');`:''}\n${hasBattery&&energyRows.length>=2?`
|
|
2399
|
+
mk('cBatt',${JSON.stringify(battChart.labels)},[{label:"${T('chartBattLevel')}",data:${JSON.stringify(battChart.values)},borderColor:'#43a047',backgroundColor:'rgba(67,160,71,.08)',fill:true,tension:0.3,pointRadius:2,borderWidth:2},{label:"${T('chartBattChargeW')}",data:${JSON.stringify(battChrChart.values)},borderColor:'#1e88e5',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[4,3]},{label:"${T('chartBattDischarge')}",data:${JSON.stringify(battDisChart.values)},borderColor:'#e53935',backgroundColor:'transparent',fill:false,tension:0.3,pointRadius:0,borderWidth:1.5,borderDash:[4,3]}],'');`:''}\n${hasWallbox&&energyRows.length>=2?`
|
|
2400
|
+
mk('cWallbox',${JSON.stringify(wallboxChart.labels)},[{label:"${T('chartWallboxW')}",data:${JSON.stringify(wallboxChart.values)},borderColor:'#7b1fa2',backgroundColor:'rgba(123,31,162,.08)',fill:true,tension:0.3,pointRadius:2,borderWidth:2}],'W');`:''}\n${scatterData.length>=10?`
|
|
2401
2401
|
(function(){
|
|
2402
2402
|
const c=document.getElementById('cScatter'); if(!c)return;
|
|
2403
2403
|
const pts=${JSON.stringify(scatterData.length > 300 ? scatterData.filter((_,i)=>i%Math.ceil(scatterData.length/300)===0) : scatterData)};
|
|
2404
2404
|
const reg=${JSON.stringify(scatterRegression)};
|
|
2405
2405
|
const datasets=[{
|
|
2406
|
-
label
|
|
2406
|
+
label:"${T('chartHeatDemand')}",
|
|
2407
2407
|
data:pts,
|
|
2408
2408
|
backgroundColor:'rgba(78,154,241,0.35)',
|
|
2409
2409
|
pointRadius:3,
|
|
@@ -2412,7 +2412,7 @@ mk('cWallbox',${JSON.stringify(wallboxChart.labels)},[{label:${T('chartWallboxW'
|
|
|
2412
2412
|
}];
|
|
2413
2413
|
if(reg){
|
|
2414
2414
|
datasets.push({
|
|
2415
|
-
label
|
|
2415
|
+
label:"${T('chartTrend')}",
|
|
2416
2416
|
data:reg.line,
|
|
2417
2417
|
type:'line',
|
|
2418
2418
|
borderColor:'#ef5350',
|
|
@@ -2447,8 +2447,8 @@ mk('cWallbox',${JSON.stringify(wallboxChart.labels)},[{label:${T('chartWallboxW'
|
|
|
2447
2447
|
tooltip:{callbacks:{label:p=>_tt(_tooltip.outdoor,p.parsed.x,p.parsed.y)}}
|
|
2448
2448
|
},
|
|
2449
2449
|
scales:{
|
|
2450
|
-
x:{title:{display:true,text
|
|
2451
|
-
y:{title:{display:true,text
|
|
2450
|
+
x:{title:{display:true,text:"${T('axisOutdoorTemp')}"},grid:{color:'#f5f5f5'}},
|
|
2451
|
+
y:{title:{display:true,text:"${T('axisHeatDemand')}"},beginAtZero:true,grid:{color:'#f5f5f5'}}
|
|
2452
2452
|
},
|
|
2453
2453
|
plugins:{
|
|
2454
2454
|
zoom:{
|
|
@@ -2481,7 +2481,7 @@ ${hasCurve && corrPairs2.length >= 5 ? `
|
|
|
2481
2481
|
type:'scatter',
|
|
2482
2482
|
data:{datasets:[
|
|
2483
2483
|
{
|
|
2484
|
-
label
|
|
2484
|
+
label:"${T('chartActualFlow')}",
|
|
2485
2485
|
data:pts,
|
|
2486
2486
|
backgroundColor:'rgba(78,154,241,0.4)',
|
|
2487
2487
|
pointRadius:3,
|
|
@@ -2489,7 +2489,7 @@ ${hasCurve && corrPairs2.length >= 5 ? `
|
|
|
2489
2489
|
type:'scatter'
|
|
2490
2490
|
},
|
|
2491
2491
|
{
|
|
2492
|
-
label
|
|
2492
|
+
label:"${T('chartHeatingCurve',{slope:CURVE_SLOPE,shift:CURVE_SHIFT})}",
|
|
2493
2493
|
data:curve,
|
|
2494
2494
|
type:'line',
|
|
2495
2495
|
borderColor:'#f57c00',
|
|
@@ -2500,7 +2500,7 @@ ${hasCurve && corrPairs2.length >= 5 ? `
|
|
|
2500
2500
|
tension:0
|
|
2501
2501
|
},
|
|
2502
2502
|
{
|
|
2503
|
-
label
|
|
2503
|
+
label:"${T('chartCondensingLimit')}",
|
|
2504
2504
|
data:[{x:-30,y:55},{x:30,y:55}],
|
|
2505
2505
|
type:'line',
|
|
2506
2506
|
borderColor:'rgba(67,160,71,0.7)',
|
|
@@ -2523,8 +2523,8 @@ ${hasCurve && corrPairs2.length >= 5 ? `
|
|
|
2523
2523
|
: _tt(_tooltip.flowCurve,p.parsed.x,p.parsed.y)}}
|
|
2524
2524
|
},
|
|
2525
2525
|
scales:{
|
|
2526
|
-
x:{title:{display:true,text
|
|
2527
|
-
y:{title:{display:true,text
|
|
2526
|
+
x:{title:{display:true,text:"${T('axisOutdoorTemp')}"},grid:{color:'#f5f5f5'}},
|
|
2527
|
+
y:{title:{display:true,text:"${T('axisFlowTemp')}"},grid:{color:'#f5f5f5'},suggestedMin:20,suggestedMax:80}
|
|
2528
2528
|
},
|
|
2529
2529
|
plugins:{
|
|
2530
2530
|
zoom:{
|
|
@@ -2571,7 +2571,7 @@ ${dailyEfficiency.hasData?`
|
|
|
2571
2571
|
data:{
|
|
2572
2572
|
labels:${JSON.stringify(dailyEfficiency.labels)},
|
|
2573
2573
|
datasets:[{
|
|
2574
|
-
label
|
|
2574
|
+
label:"${T('chartThermalEff')}",
|
|
2575
2575
|
data:vals,
|
|
2576
2576
|
borderColor:'#43a047',
|
|
2577
2577
|
backgroundColor:'rgba(67,160,71,.09)',
|
|
@@ -2601,11 +2601,11 @@ ${energyFlow&&energyFlow.hasData?`
|
|
|
2601
2601
|
const c=document.getElementById('cEnergyFlow');if(!c)return;
|
|
2602
2602
|
const ef=${JSON.stringify(energyFlow)};
|
|
2603
2603
|
const ds=[
|
|
2604
|
-
{label
|
|
2605
|
-
{label
|
|
2606
|
-
{label
|
|
2604
|
+
{label:"${T('chartPV')}", data:ef.pv, backgroundColor:'rgba(249,168,37,.75)',borderColor:'#f9a825',borderWidth:1,borderRadius:2,stack:'s'},
|
|
2605
|
+
{label:"${T('chartBattCharge')}", data:ef.battChr, backgroundColor:'rgba(67,160,71,.65)', borderColor:'#43a047',borderWidth:1,borderRadius:2,stack:'s'},
|
|
2606
|
+
{label:"${T('chartGridDraw')}", data:ef.gridDraw,backgroundColor:'rgba(30,136,229,.65)',borderColor:'#1e88e5',borderWidth:1,borderRadius:2,stack:'s'},
|
|
2607
2607
|
];
|
|
2608
|
-
if(ef.wallbox.some(v=>v>0))ds.push({label
|
|
2608
|
+
if(ef.wallbox.some(v=>v>0))ds.push({label:"${T('chartWallbox')}",data:ef.wallbox,backgroundColor:'rgba(123,31,162,.55)',borderColor:'#7b1fa2',borderWidth:1,borderRadius:2,stack:'s'});
|
|
2609
2609
|
new Chart(c,{
|
|
2610
2610
|
type:'bar',
|
|
2611
2611
|
data:{labels:ef.labels,datasets:ds},
|
|
@@ -2615,7 +2615,7 @@ ${energyFlow&&energyFlow.hasData?`
|
|
|
2615
2615
|
plugins:{legend:{position:'top',labels:{boxWidth:11,padding:12}}},
|
|
2616
2616
|
scales:{
|
|
2617
2617
|
x:{grid:{color:'#f5f5f5'},stacked:true},
|
|
2618
|
-
y:{title:{display:true,text
|
|
2618
|
+
y:{title:{display:true,text:"${T('axisAvgW')}"},grid:{color:'#f5f5f5'},stacked:true,beginAtZero:true}
|
|
2619
2619
|
}
|
|
2620
2620
|
}
|
|
2621
2621
|
});
|