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 +31 -34
- package/package.json +1 -1
- package/src/digestauth.js +2 -6
- package/src/energymeter.js +7 -8
- package/src/envoydata.js +2 -3
- package/src/envoydevice.js +2024 -1907
- package/src/functions.js +1 -1
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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.
|
|
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 = {};
|
package/src/energymeter.js
CHANGED
|
@@ -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
|
-
|
|
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 :
|
|
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 :
|
|
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
|
-
|
|
454
|
-
}
|
|
452
|
+
if (this.checkTokenRunning) return;
|
|
453
|
+
|
|
455
454
|
this.feature.info.jwtToken.token = '';
|
|
456
455
|
this.feature.info.tokenValid = false;
|
|
457
456
|
return;
|