homebridge-enphase-envoy 10.2.7-beta.4 → 10.2.7-beta.6
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 +1 -2
- package/package.json +1 -1
- package/src/constants.js +8 -0
- package/src/envoydevice.js +53 -40
- package/src/energymeter.js +0 -1208
package/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { mkdirSync, existsSync, writeFileSync } from 'fs';
|
|
3
3
|
import EnvoyDevice from './src/envoydevice.js';
|
|
4
|
-
import EnergyMeter from './src/energymeter.js';
|
|
5
4
|
import ImpulseGenerator from './src/impulsegenerator.js';
|
|
6
5
|
import { PluginName, PlatformName } from './src/constants.js';
|
|
7
6
|
import CustomCharacteristics from './src/customcharacteristics.js';
|
|
@@ -78,7 +77,7 @@ class EnvoyPlatform {
|
|
|
78
77
|
const postFix = host.split('.').join('');
|
|
79
78
|
const envoyIdFile = join(prefDir, `envoyId_${postFix}`);
|
|
80
79
|
const envoyTokenFile = join(prefDir, `envoyToken_${postFix}`);
|
|
81
|
-
const energyMeterHistoryFileName = `energyMeterHistory_${postFix}
|
|
80
|
+
const energyMeterHistoryFileName = `energyMeterHistory_${postFix}`;
|
|
82
81
|
|
|
83
82
|
try {
|
|
84
83
|
[envoyIdFile, envoyTokenFile].forEach(file => {
|
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.6",
|
|
6
6
|
"description": "Homebridge p7ugin for Photovoltaic Energy System manufactured by Enphase.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "grzegorz914",
|
package/src/constants.js
CHANGED
|
@@ -399,6 +399,14 @@ export const MetersKeyMap = {
|
|
|
399
399
|
"pv3p": "pv3p"
|
|
400
400
|
};
|
|
401
401
|
|
|
402
|
+
export const MetersKeyMap1 = {
|
|
403
|
+
"Production": "production",
|
|
404
|
+
"Consumption Net": "consumptionNet",
|
|
405
|
+
"Consumption Total": "consumptionTotal",
|
|
406
|
+
"Storage": "storage",
|
|
407
|
+
"Generator": "generator",
|
|
408
|
+
};
|
|
409
|
+
|
|
402
410
|
export const DeviceTypeMap = {
|
|
403
411
|
1: "Microinverter",
|
|
404
412
|
12: "Q-Relay",
|
package/src/envoydevice.js
CHANGED
|
@@ -4,7 +4,7 @@ import RestFul from './restful.js';
|
|
|
4
4
|
import Mqtt from './mqtt.js';
|
|
5
5
|
import Functions from './functions.js';
|
|
6
6
|
import fakegato from 'fakegato-history';
|
|
7
|
-
import { PartNumbers, ApiCodes, MetersKeyMap, DeviceTypeMap, LedStatus } from './constants.js';
|
|
7
|
+
import { PartNumbers, ApiCodes, MetersKeyMap, MetersKeyMap1, DeviceTypeMap, LedStatus } from './constants.js';
|
|
8
8
|
let Accessory, Characteristic, Service, Categories, AccessoryUUID;
|
|
9
9
|
|
|
10
10
|
class EnvoyDevice extends EventEmitter {
|
|
@@ -785,27 +785,24 @@ class EnvoyDevice extends EventEmitter {
|
|
|
785
785
|
const accessories = [];
|
|
786
786
|
const devices = this.energyMeter ? 2 : 1;
|
|
787
787
|
for (let i = 0; i < devices; i++) {
|
|
788
|
-
|
|
789
|
-
const envoySerialNumber = i === 0 ? this.pv.info.serialNumber : this.pv.info.serialNumber + 'Energy Meter';
|
|
790
|
-
const displayType = i === 0 ? this.displayType : 4;
|
|
791
|
-
const accessoryName = i === 0 ? this.name : `${this.name} ${this.pv.powerAndEnergyData.data[0].measurementType}`;
|
|
792
|
-
|
|
793
|
-
//accessory
|
|
794
|
-
if (this.logDebug) this.emit('debug', `Prepare ${accessoryName} accessory`);
|
|
795
|
-
const accessoryUUID = AccessoryUUID.generate(envoySerialNumber);
|
|
796
|
-
const accessoryCategory = [Categories.OTHER, Categories.LIGHTBULB, Categories.FAN, Categories.SENSOR, Categories.SENSOR][displayType];
|
|
797
|
-
const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
|
|
798
|
-
|
|
799
|
-
//information service
|
|
800
|
-
if (this.logDebug) this.emit('debug', `Prepare Information Service`);
|
|
801
|
-
accessory.getService(Service.AccessoryInformation)
|
|
802
|
-
.setCharacteristic(Characteristic.Manufacturer, 'Enphase')
|
|
803
|
-
.setCharacteristic(Characteristic.Model, this.pv.info.modelName ?? 'Model Name')
|
|
804
|
-
.setCharacteristic(Characteristic.SerialNumber, envoySerialNumber ?? 'Serial Number')
|
|
805
|
-
.setCharacteristic(Characteristic.FirmwareRevision, this.pv.info.software.replace(/[a-zA-Z]/g, '') ?? '0');
|
|
806
|
-
|
|
807
788
|
switch (i) {
|
|
808
789
|
case 0://PV
|
|
790
|
+
const envoySerialNumber = this.pv.info.serialNumber;
|
|
791
|
+
const accessoryName = this.name;
|
|
792
|
+
|
|
793
|
+
//accessory
|
|
794
|
+
if (this.logDebug) this.emit('debug', `Prepare ${accessoryName} accessory`);
|
|
795
|
+
const accessoryUUID = AccessoryUUID.generate(envoySerialNumber);
|
|
796
|
+
const accessoryCategory = [Categories.OTHER, Categories.LIGHTBULB, Categories.FAN, Categories.SENSOR, Categories.SENSOR][this.displayType];
|
|
797
|
+
const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
|
|
798
|
+
|
|
799
|
+
//information service
|
|
800
|
+
if (this.logDebug) this.emit('debug', `Prepare Information Service`);
|
|
801
|
+
accessory.getService(Service.AccessoryInformation)
|
|
802
|
+
.setCharacteristic(Characteristic.Manufacturer, 'Enphase')
|
|
803
|
+
.setCharacteristic(Characteristic.Model, this.pv.info.modelName ?? 'Model Name')
|
|
804
|
+
.setCharacteristic(Characteristic.SerialNumber, envoySerialNumber ?? 'Serial Number')
|
|
805
|
+
.setCharacteristic(Characteristic.FirmwareRevision, this.pv.info.software.replace(/[a-zA-Z]/g, '') ?? '0');
|
|
809
806
|
//system
|
|
810
807
|
if (this.systemAccessory) {
|
|
811
808
|
if (this.logDebug) this.emit('debug', `Prepare System Service`);
|
|
@@ -2998,32 +2995,46 @@ class EnvoyDevice extends EventEmitter {
|
|
|
2998
2995
|
|
|
2999
2996
|
accessories.push(accessory);
|
|
3000
2997
|
break;
|
|
3001
|
-
case 1: //Energy Meter
|
|
3002
|
-
|
|
3003
|
-
this.fakegatoHistoryService = new this.fakegatoHistory(`energy`, accessory, {
|
|
3004
|
-
storage: 'fs',
|
|
3005
|
-
disableRepeatLastData: true,
|
|
3006
|
-
disableTimer: false,
|
|
3007
|
-
path: this.prefDir,
|
|
3008
|
-
filename: this.energyMeterHistoryFileName
|
|
3009
|
-
})
|
|
3010
|
-
this.fakegatoHistoryService.addEntry({
|
|
3011
|
-
time: Math.floor(Date.now() / 1000),
|
|
3012
|
-
power: this.pv.powerAndEnergyData.data[0].power ?? 0
|
|
3013
|
-
});
|
|
3014
|
-
|
|
3015
|
-
// Energy Meter Service
|
|
2998
|
+
case 1: //Energy Meter Production
|
|
2999
|
+
this.fakegatoHistoryServices = [];
|
|
3016
3000
|
this.energyMeterServices = [];
|
|
3017
3001
|
for (const source of this.pv.powerAndEnergyData.data) {
|
|
3018
3002
|
const measurementType = source.measurementType;
|
|
3019
|
-
|
|
3003
|
+
const envoySerialNumber = `${this.pv.info.serialNumber}${measurementType}`;
|
|
3004
|
+
const accessoryName = `${this.name} Energy Meter ${measurementType}`;
|
|
3005
|
+
const power = source.power > 0 ? source.power : 0;
|
|
3006
|
+
|
|
3007
|
+
//accessory
|
|
3008
|
+
if (this.logDebug) this.emit('debug', `Prepare ${accessoryName} accessory`);
|
|
3009
|
+
const accessoryUUID = AccessoryUUID.generate(envoySerialNumber);
|
|
3010
|
+
const accessoryCategory = Categories.SENSOR;
|
|
3011
|
+
const accessory = new Accessory(accessoryName, accessoryUUID, accessoryCategory);
|
|
3012
|
+
|
|
3013
|
+
//information service
|
|
3014
|
+
if (this.logDebug) this.emit('debug', `Prepare Information Service`);
|
|
3015
|
+
accessory.getService(Service.AccessoryInformation)
|
|
3016
|
+
.setCharacteristic(Characteristic.Manufacturer, 'Enphase')
|
|
3017
|
+
.setCharacteristic(Characteristic.Model, this.pv.info.modelName ?? 'Model Name')
|
|
3018
|
+
.setCharacteristic(Characteristic.SerialNumber, envoySerialNumber ?? 'Serial Number')
|
|
3019
|
+
.setCharacteristic(Characteristic.FirmwareRevision, this.pv.info.software.replace(/[a-zA-Z]/g, '') ?? '0');
|
|
3020
|
+
|
|
3021
|
+
if (this.logDebug) this.emit('debug', `Prepare Fakegato ${measurementType} Service`);
|
|
3022
|
+
const fakegatoHistoryService = new this.fakegatoHistory(`energy`, accessory, {
|
|
3023
|
+
storage: 'fs',
|
|
3024
|
+
disableRepeatLastData: true,
|
|
3025
|
+
disableTimer: false,
|
|
3026
|
+
path: this.prefDir,
|
|
3027
|
+
filename: `${this.energyMeterHistoryFileName}_${MetersKeyMap1[measurementType]}.json`
|
|
3028
|
+
})
|
|
3029
|
+
|
|
3030
|
+
// Energy Meter Service
|
|
3020
3031
|
if (this.logDebug) this.emit('debug', `Prepare Energy Meter ${measurementType} Service`);
|
|
3021
3032
|
const energyMeterService = accessory.addService(Service.EvePowerMeter, `Energy Meter ${measurementType}`, `energyMeterService${measurementType}`);
|
|
3022
3033
|
energyMeterService.setCharacteristic(Characteristic.ConfiguredName, `Energy Meter ${measurementType}`);
|
|
3023
3034
|
|
|
3024
3035
|
// Create characteristics
|
|
3025
3036
|
const characteristics = [
|
|
3026
|
-
{ type: Characteristic.EvePower, label: 'power', value:
|
|
3037
|
+
{ type: Characteristic.EvePower, label: 'power', value: power, unit: 'W' },
|
|
3027
3038
|
{ type: Characteristic.EveEnergyLifetime, label: 'energy lifetime', value: source.energyLifetimeWithOffset, unit: 'kWh' },
|
|
3028
3039
|
];
|
|
3029
3040
|
|
|
@@ -3059,6 +3070,7 @@ class EnvoyDevice extends EventEmitter {
|
|
|
3059
3070
|
}
|
|
3060
3071
|
});
|
|
3061
3072
|
|
|
3073
|
+
this.fakegatoHistoryServices.push(fakegatoHistoryService);
|
|
3062
3074
|
this.energyMeterServices.push(energyMeterService);
|
|
3063
3075
|
}
|
|
3064
3076
|
|
|
@@ -4106,16 +4118,17 @@ class EnvoyDevice extends EventEmitter {
|
|
|
4106
4118
|
}
|
|
4107
4119
|
|
|
4108
4120
|
// Energy meter
|
|
4109
|
-
if (
|
|
4121
|
+
if (this.energyMeter) {
|
|
4122
|
+
const power = obj.power > 0 ? obj.power : 0;
|
|
4110
4123
|
// Add to fakegato history
|
|
4111
|
-
this.
|
|
4124
|
+
this.fakegatoHistoryServices?.[index]?.addEntry({
|
|
4112
4125
|
time: Math.floor(Date.now() / 1000),
|
|
4113
4126
|
power: power ?? 0
|
|
4114
4127
|
});
|
|
4115
4128
|
|
|
4116
4129
|
// Create characteristics energy meter
|
|
4117
4130
|
const characteristics2 = [
|
|
4118
|
-
{ type: Characteristic.EvePower, value:
|
|
4131
|
+
{ type: Characteristic.EvePower, value: power },
|
|
4119
4132
|
{ type: Characteristic.EveEnergyLifetime, value: obj.energyLifetimeKw },
|
|
4120
4133
|
];
|
|
4121
4134
|
|