homebridge-enphase-envoy 10.2.7-beta.0 → 10.2.7-beta.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/index.js CHANGED
@@ -91,41 +91,38 @@ class EnvoyPlatform {
91
91
 
92
92
  try {
93
93
  const url = envoyFirmware7xxTokenGenerationMode > 0 ? `https://${host}` : `http://${host}`;
94
- const devicesClass = device.energyMeter ? [EnvoyDevice, EnergyMeter] : [EnvoyDevice];
95
- for (const [index, DeviceClass] of devicesClass.entries()) {
96
- const accessoryName = index === 0 ? deviceName : 'Energy Meter';
97
-
98
- // create impulse generator
99
- const impulseGenerator = new ImpulseGenerator()
100
- .on('start', async () => {
101
- try {
102
- const envoyDevice = new DeviceClass(api, log, url, accessoryName, device, envoyIdFile, envoyTokenFile, prefDir, energyMeterHistoryFileName)
103
- .on('devInfo', (info) => logLevel.devInfo && log.info(info))
104
- .on('success', (msg) => logLevel.success && log.success(`Device: ${host} ${accessoryName}, ${msg}`))
105
- .on('info', (msg) => logLevel.info && log.info(`Device: ${host} ${accessoryName}, ${msg}`))
106
- .on('debug', (msg, data) => logLevel.debug && log.info(`Device: ${host} ${accessoryName}, debug: ${data ? `${msg} ${JSON.stringify(data, null, 2)}` : msg}`))
107
- .on('warn', (msg) => logLevel.warn && log.warn(`Device: ${host} ${accessoryName}, ${msg}`))
108
- .on('error', (msg) => logLevel.error && log.error(`Device: ${host} ${accessoryName}, ${msg}`));
109
-
110
- const accessory = await envoyDevice.start();
111
- if (accessory) {
112
- api.publishExternalAccessories(PluginName, [accessory]);
113
- if (logLevel.success) log.success(`Device: ${host} ${accessoryName}, Published as external accessory.`);
114
-
115
- await impulseGenerator.state(false);
116
- await envoyDevice.startStopImpulseGenerator(true);
117
- }
118
- } catch (error) {
119
- if (logLevel.error) log.error(`Device: ${host} ${accessoryName}, Start impulse generator error: ${error}, retrying.`);
94
+
95
+ // create impulse generator
96
+ const impulseGenerator = new ImpulseGenerator()
97
+ .on('start', async () => {
98
+ try {
99
+ const envoyDevice = new EnvoyDevice(api, log, url, deviceName, device, envoyIdFile, envoyTokenFile, prefDir, energyMeterHistoryFileName)
100
+ .on('devInfo', (info) => logLevel.devInfo && log.info(info))
101
+ .on('success', (msg) => logLevel.success && log.success(`Device: ${host} ${deviceName}, ${msg}`))
102
+ .on('info', (msg) => logLevel.info && log.info(`Device: ${host} ${deviceName}, ${msg}`))
103
+ .on('debug', (msg, data) => logLevel.debug && log.info(`Device: ${host} ${deviceName}, debug: ${data ? `${msg} ${JSON.stringify(data, null, 2)}` : msg}`))
104
+ .on('warn', (msg) => logLevel.warn && log.warn(`Device: ${host} ${deviceName}, ${msg}`))
105
+ .on('error', (msg) => logLevel.error && log.error(`Device: ${host} ${deviceName}, ${msg}`));
106
+
107
+ const accessory = await envoyDevice.start();
108
+ if (accessory) {
109
+ api.publishExternalAccessories(PluginName, accessory);
110
+ if (logLevel.success) log.success(`Device: ${host} ${deviceName}, Published as external accessory.`);
111
+
112
+ await impulseGenerator.state(false);
113
+ await envoyDevice.startStopImpulseGenerator(true);
120
114
  }
121
- })
122
- .on('state', state => {
123
- if (logLevel.debug) log.info(`Device: ${host} ${accessoryName}, Start impulse generator ${state ? 'started' : 'stopped'}.`);
124
- });
125
-
126
- // start impulse generator
127
- await impulseGenerator.state(true, [{ name: 'start', sampling: 120000 }]);
128
- }
115
+ } catch (error) {
116
+ if (logLevel.error) log.error(`Device: ${host} ${deviceName}, Start impulse generator error: ${error}, retrying.`);
117
+ }
118
+ })
119
+ .on('state', state => {
120
+ if (logLevel.debug) log.info(`Device: ${host} ${deviceName}, Start impulse generator ${state ? 'started' : 'stopped'}.`);
121
+ });
122
+
123
+ // start impulse generator
124
+ await impulseGenerator.state(true, [{ name: 'start', sampling: 120000 }]);
125
+
129
126
  } catch (error) {
130
127
  if (logLevel.error) log.error(`Device: ${host} ${deviceName}, Did finish launching error: ${error}`);
131
128
  }
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.2.7-beta.0",
5
+ "version": "10.2.7-beta.2",
6
6
  "description": "Homebridge p7ugin for Photovoltaic Energy System manufactured by Enphase.",
7
7
  "license": "MIT",
8
8
  "author": "grzegorz914",
package/src/digestauth.js CHANGED
@@ -16,14 +16,10 @@ class DigestAuth {
16
16
  return await axios.request(url, options);
17
17
  } catch (error) {
18
18
  const resError = error.response;
19
- if (!resError || resError.status !== 401) {
20
- throw new Error(`Digest authentication response error: ${resError ? resError.status : 'Unknown error'}`);
21
- }
19
+ if (!resError || resError.status !== 401) throw new Error(`Digest authentication response error: ${resError ? resError.status : 'Unknown error'}`);
22
20
 
23
21
  const resHeaders = resError.headers["www-authenticate"];
24
- if (!resHeaders || !resHeaders.includes('nonce')) {
25
- throw new Error(`Digest authentication headers error: ${resHeaders || 'Header not found'}`);
26
- }
22
+ if (!resHeaders || !resHeaders.includes('nonce')) throw new Error(`Digest authentication headers error: ${resHeaders || 'Header not found'}`);
27
23
 
28
24
  try {
29
25
  const authDetails = {};
@@ -229,9 +229,8 @@ class EnergyMeter extends EventEmitter {
229
229
  const errorString = error.toString();
230
230
  const tokenNotValid = errorString.includes('status code 401');
231
231
  if (tokenNotValid) {
232
- if (this.checkTokenRunning) {
233
- return;
234
- }
232
+ if (this.checkTokenRunning) return;
233
+
235
234
  this.feature.info.jwtToken.token = '';
236
235
  this.feature.tokenValid = false;
237
236
  return;
@@ -968,7 +967,7 @@ class EnergyMeter extends EventEmitter {
968
967
  const sourceEim = this.pv.powerAndEnergy[key].eim;
969
968
  sourceMeter = meterEnabled ? this.pv.meters.find(m => m.measurementType === 'production') : sourcePcu;
970
969
  sourceEnergy = meterEnabled ? sourceEim : sourcePcu;
971
- power = this.functions.isValidValue(sourceMeter.power) && sourceMeter.power >=0? sourceMeter.power : 0;
970
+ power = this.functions.isValidValue(sourceMeter.power) && sourceMeter.power >= 0 ? sourceMeter.power : 0;
972
971
  energyLifetime = this.functions.isValidValue(sourceMeter.energyLifetime) ? sourceMeter.energyLifetime / 1000 : null;
973
972
  energyLifetimeWithOffset = this.functions.isValidValue(energyLifetime) ? energyLifetime + this.energyProductionLifetimeOffset : null;
974
973
  break;
@@ -976,7 +975,7 @@ class EnergyMeter extends EventEmitter {
976
975
  case 'consumptionNet': {
977
976
  sourceMeter = this.pv.meters.find(m => m.measurementType === 'net-consumption');
978
977
  sourceEnergy = this.pv.powerAndEnergy.consumptionNet;
979
- power = this.functions.isValidValue(sourceMeter.power) ? sourceMeter.power : null;
978
+ power = this.functions.isValidValue(sourceMeter.power) && sourceMeter.power >= 0 ? sourceMeter.power : 0;
980
979
  energyLifetime = this.functions.isValidValue(sourceMeter.energyLifetime) ? sourceMeter.energyLifetime / 1000 : null;
981
980
  energyLifetimeWithOffset = this.functions.isValidValue(energyLifetime) ? energyLifetime + this.energyConsumptionNetLifetimeOffset : null;
982
981
  break;
@@ -984,7 +983,7 @@ class EnergyMeter extends EventEmitter {
984
983
  case 'consumptionTotal': {
985
984
  sourceMeter = this.pv.meters.find(m => m.measurementType === 'total-consumption');
986
985
  sourceEnergy = this.pv.powerAndEnergy.consumptionTotal;
987
- power = this.functions.isValidValue(sourceMeter.power) ? sourceMeter.power : null;
986
+ power = this.functions.isValidValue(sourceMeter.power) && sourceMeter.power >= 0 ? sourceMeter.power : 0;
988
987
  energyLifetime = this.functions.isValidValue(sourceMeter.energyLifetime) ? sourceMeter.energyLifetime / 1000 : null;
989
988
  energyLifetimeWithOffset = this.functions.isValidValue(energyLifetime) ? energyLifetime + this.energyConsumptionTotalLifetimeOffset : null;
990
989
  break;
@@ -1010,7 +1009,7 @@ class EnergyMeter extends EventEmitter {
1010
1009
  // Add to fakegato history
1011
1010
  this.fakegatoHistoryService?.addEntry({
1012
1011
  time: Math.floor(Date.now() / 1000),
1013
- power: power
1012
+ power: power ?? 0
1014
1013
  });
1015
1014
 
1016
1015
  // Create characteristics energy meter
@@ -1096,7 +1095,7 @@ class EnergyMeter extends EventEmitter {
1096
1095
  })
1097
1096
  this.fakegatoHistoryService.addEntry({
1098
1097
  time: Math.floor(Date.now() / 1000),
1099
- power: this.pv.powerAndEnergy.data[0].power
1098
+ power: this.pv.powerAndEnergy.data[0].power ?? 0
1100
1099
  });
1101
1100
 
1102
1101
  // Energy Meter Service
package/src/envoydata.js CHANGED
@@ -449,9 +449,8 @@ class EnvoyData extends EventEmitter {
449
449
  const errorString = error.toString();
450
450
  const tokenNotValid = errorString.includes('status code 401');
451
451
  if (tokenNotValid) {
452
- if (this.checkTokenRunning) {
453
- return;
454
- }
452
+ if (this.checkTokenRunning) return;
453
+
455
454
  this.feature.info.jwtToken.token = '';
456
455
  this.feature.info.tokenValid = false;
457
456
  return;