homebridge-enphase-envoy 10.7.1 → 10.7.2

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/CHANGELOG.md CHANGED
@@ -11,6 +11,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
  - For plugin >= v10.4.0 use Homebridge UI >= v5.13.0
12
12
  - after update to v10.0.0 and above the accessory and bridge need to be removed from the homebridge / Home.app and added again
13
13
 
14
+ ## [10.7.2] - (14.05.2026)
15
+
16
+ ### Fixed
17
+
18
+ - Energy meter (`energyMeter`) with meters enabled: `EveCurrent` and `EveVoltage` characteristics were never updated because `characteristics2.push([...])` inserted a nested array instead of two separate objects; changed to `push(item1, item2)`
19
+ - Energy history: `prit`, `cnit`, `ctit` returned `null` for the first record of each day (when previous record is from a different day or history is empty); changed to `0`
20
+ - Energy history: `r3()` rounding helper now strictly checks `typeof v === 'number' && isFinite(v)` to prevent `NaN` or `Infinity` from being serialised as string `"null"` by `JSON.stringify`
21
+
14
22
  ## [10.7.1] - (14.05.2026)
15
23
 
16
24
  ### Changed
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "displayName": "Enphase Envoy",
4
4
  "name": "homebridge-enphase-envoy",
5
- "version": "10.7.1",
5
+ "version": "10.7.2",
6
6
  "description": "Homebridge plugin for Photovoltaic Energy System manufactured by Enphase.",
7
7
  "license": "MIT",
8
8
  "author": "grzegorz914",
@@ -4291,10 +4291,10 @@ class EnvoyDevice extends EventEmitter {
4291
4291
 
4292
4292
  // Create characteristics energy meter
4293
4293
  if (meterEnabled) {
4294
- characteristics2.push([
4294
+ characteristics2.push(
4295
4295
  { type: Characteristic.EveCurrent, value: obj.current },
4296
4296
  { type: Characteristic.EveVoltage, value: obj.voltage },
4297
- ]);
4297
+ );
4298
4298
  }
4299
4299
 
4300
4300
  // Update characteristics
@@ -4337,12 +4337,12 @@ class EnvoyDevice extends EventEmitter {
4337
4337
  const lastRealRecord = energyHistory.reduce((last, item) => item?.pr != null ? item : last, null);
4338
4338
 
4339
4339
  const nullRecord = (ts) => ({
4340
- ts, prt: null, pr: null, prit: null, prut: null, pru: null,
4341
- cnt: null, cn: null, cnit: null, cnut: null, cnu: null,
4342
- ctt: null, ct: null, ctit: null, ctpt: null, ctp: null
4340
+ ts, prt: null, pr: null, prit: 0, prut: null, pru: null,
4341
+ cnt: null, cn: null, cnit: 0, cnut: null, cnu: null,
4342
+ ctt: null, ct: null, ctit: 0, ctpt: null, ctp: null
4343
4343
  });
4344
4344
 
4345
- const r3 = (v) => v != null ? Math.round(v * 1000) / 1000 : null;
4345
+ const r3 = (v) => (typeof v === 'number' && isFinite(v)) ? Math.round(v * 1000) / 1000 : null;
4346
4346
 
4347
4347
  const makeRecord = (ts) => {
4348
4348
  const pr = r3(powerAndEnergyDataObj.production.energyLifetime);
@@ -4355,17 +4355,17 @@ class EnvoyDevice extends EventEmitter {
4355
4355
  ts,
4356
4356
  prt: r3(powerAndEnergyDataObj.production.energyToday),
4357
4357
  pr,
4358
- prit: sameDay && pr != null && lastRealRecord.pr != null ? r3(pr - lastRealRecord.pr) : null,
4358
+ prit: sameDay && pr != null && lastRealRecord.pr != null ? r3(pr - lastRealRecord.pr) : 0,
4359
4359
  prut: r3(powerAndEnergyDataObj.production.energyTodayUpload),
4360
4360
  pru: r3(powerAndEnergyDataObj.production.energyLifetimeUpload),
4361
4361
  cnt: r3(powerAndEnergyDataObj.consumptionNet.energyToday),
4362
4362
  cn,
4363
- cnit: sameDay && cn != null && lastRealRecord.cn != null ? r3(cn - lastRealRecord.cn) : null,
4363
+ cnit: sameDay && cn != null && lastRealRecord.cn != null ? r3(cn - lastRealRecord.cn) : 0,
4364
4364
  cnut: r3(powerAndEnergyDataObj.consumptionNet.energyTodayUpload),
4365
4365
  cnu: r3(powerAndEnergyDataObj.consumptionNet.energyLifetimeUpload),
4366
4366
  ctt: r3(powerAndEnergyDataObj.consumptionTotal.energyToday),
4367
4367
  ct,
4368
- ctit: sameDay && ct != null && lastRealRecord.ct != null ? r3(ct - lastRealRecord.ct) : null,
4368
+ ctit: sameDay && ct != null && lastRealRecord.ct != null ? r3(ct - lastRealRecord.ct) : 0,
4369
4369
  ctpt: r3(powerAndEnergyDataObj.consumptionTotal.energyTodayFromPv),
4370
4370
  ctp: r3(powerAndEnergyDataObj.consumptionTotal.energyLifetimeFromPv)
4371
4371
  };