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 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}.json`;
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.4",
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",
@@ -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
- 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
- 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: source.power, unit: 'W' },
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 (key === 'production' && this.energyMeter) {
4121
+ if (this.energyMeter) {
4122
+ const power = obj.power > 0 ? obj.power : 0;
4110
4123
  // Add to fakegato history
4111
- this.fakegatoHistoryService?.addEntry({
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: obj.power },
4131
+ { type: Characteristic.EvePower, value: power },
4119
4132
  { type: Characteristic.EveEnergyLifetime, value: obj.energyLifetimeKw },
4120
4133
  ];
4121
4134