homebridge-enphase-envoy 10.2.7-beta.5 → 10.2.7-beta.7

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
@@ -77,7 +77,7 @@ class EnvoyPlatform {
77
77
  const postFix = host.split('.').join('');
78
78
  const envoyIdFile = join(prefDir, `envoyId_${postFix}`);
79
79
  const envoyTokenFile = join(prefDir, `envoyToken_${postFix}`);
80
- const energyMeterHistoryFileName = `energyMeterHistory_${postFix}.json`;
80
+ const energyMeterHistoryFileName = `energyMeterHistory_${postFix}`;
81
81
 
82
82
  try {
83
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",
5
+ "version": "10.2.7-beta.7",
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",
@@ -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,22 +2995,39 @@ class EnvoyDevice extends EventEmitter {
2998
2995
 
2999
2996
  accessories.push(accessory);
3000
2997
  break;
3001
- case 1: //Energy Meter
3002
- if (this.logDebug) this.emit('debug', `Prepare Fakegato ${this.pv.powerAndEnergyData.data[0].measurementType} Service`);
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
-
3011
- // Energy Meter Service
2998
+ case 1: //Energy Meter Production
2999
+ this.fakegatoHistoryServices = [];
3012
3000
  this.energyMeterServices = [];
3013
3001
  for (const source of this.pv.powerAndEnergyData.data) {
3014
3002
  const measurementType = source.measurementType;
3003
+ const envoySerialNumber = `${this.pv.info.serialNumber}${measurementType}`;
3004
+ const accessoryName = `${this.name} Energy Meter ${measurementType}`;
3015
3005
  const power = source.power > 0 ? source.power : 0;
3016
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
3017
3031
  if (this.logDebug) this.emit('debug', `Prepare Energy Meter ${measurementType} Service`);
3018
3032
  const energyMeterService = accessory.addService(Service.EvePowerMeter, `Energy Meter ${measurementType}`, `energyMeterService${measurementType}`);
3019
3033
  energyMeterService.setCharacteristic(Characteristic.ConfiguredName, `Energy Meter ${measurementType}`);
@@ -3056,10 +3070,11 @@ class EnvoyDevice extends EventEmitter {
3056
3070
  }
3057
3071
  });
3058
3072
 
3073
+ this.fakegatoHistoryServices.push(fakegatoHistoryService);
3059
3074
  this.energyMeterServices.push(energyMeterService);
3060
- }
3061
3075
 
3062
- accessories.push(accessory);
3076
+ accessories.push(accessory);
3077
+ }
3063
3078
  break;
3064
3079
  }
3065
3080
  }
@@ -4103,10 +4118,10 @@ class EnvoyDevice extends EventEmitter {
4103
4118
  }
4104
4119
 
4105
4120
  // Energy meter
4106
- if (key === 'production' && this.energyMeter) {
4121
+ if (this.energyMeter) {
4107
4122
  const power = obj.power > 0 ? obj.power : 0;
4108
4123
  // Add to fakegato history
4109
- this.fakegatoHistoryService?.addEntry({
4124
+ this.fakegatoHistoryServices?.[index]?.addEntry({
4110
4125
  time: Math.floor(Date.now() / 1000),
4111
4126
  power: power ?? 0
4112
4127
  });