homebridge-solaxcloud-api 1.5.1 → 2.0.1-beta.0

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/README.md CHANGED
@@ -15,11 +15,11 @@ The Solax Cloud Plugin for [Homebridge](https://homebridge.io/) was created as a
15
15
 
16
16
  As HomeKit is still clueless about what a solar panel is, this plugin exposes a set of standard HomeKit accessories though Homebridge that will allow interacting and automating your smart home based on the data made available from the Solax platform:
17
17
 
18
- - **Inverter PV** (outlet with power consumption)
19
- - **Inverter AC** (outlet with power and total energy consumptions)
20
- - **Inverter to Grid** (outlet with power consumption)
21
- - **Inverter to House** (outlet with power consumption)
22
- - **Grid To House** (outlet with power consumption)
18
+ - **PV** (PV outlet with power consumption)
19
+ - **AC** (Inverter AC outlet with power and total energy consumptions)
20
+ - **To Grid** (Inverter to Grid outlet with power consumption)
21
+ - **To House** (Inverter to House outlet with power consumption)
22
+ - **From Grid** (Grid to House outlet with power consumption)
23
23
  - **Update** (Motion sensor)
24
24
 
25
25
  <img src="images/plugin-accessories-home.png" width="50%" height="50%">
@@ -42,7 +42,7 @@ Edit `config.json` manually to add your Solax inverters. See below for instructi
42
42
 
43
43
  ## Platform configuration
44
44
 
45
- Platform configuration is depicted by the example configuration file below:
45
+ Minimal platform configuration is depicted by the example configuration file below:
46
46
 
47
47
  ```json
48
48
  {
@@ -51,23 +51,24 @@ Platform configuration is depicted by the example configuration file below:
51
51
  "platform": "SolaxCloudAPI",
52
52
  "name": "My Solax",
53
53
  "tokenId": "20200722185111234567890",
54
- "sn": "ABCDEFGHIJ",
55
- "pollingFrequency": 60
54
+ "sn": "ABCDEFGHIJ"
56
55
  }
57
56
  ]
58
57
  }
59
58
  ```
60
59
  Configuration parameters are described on the table below:
61
60
 
62
- | **Parameter** | **Type** | **Description** | **Default** | **Mandatory?** |
63
- | ------------------ | -------- | --------------- | ----------: | :------------: |
64
- | `platform` | string | Platform name (must be SolaxCloudAPI) | - | Y |
65
- | `name` | string | Inverter name, used as prefix for accessory naming | - | Y |
66
- | `tokenId` | string | Users get information from Solax Cloud through the granted tokenID. Please obtain your tokenID on the API page of Solax Cloud. | - | Y |
67
- | `sn` | string | Registration No. (inverter module SN) | - | Y |
68
- | `pollingFrequency` | number | Plugin data polling frequency from Solax Cloud (in seconds) | 300 | N |
61
+ | **Parameter** | **Type** | **Description** | **Default** | **Mandatory?** |
62
+ | ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------- | -------------:| :------------: |
63
+ | `platform` | string | Platform name (must be SolaxCloudAPI) | - | Y |
64
+ | `name` | string | Inverter name, used as prefix for accessory naming | - | Y |
65
+ | `tokenId` | string | Users get information from Solax Cloud through the granted tokenID. Please obtain your tokenID on the API page of Solax Cloud. | - | Y |
66
+ | `sn` | string | Registration No. (inverter module SN) | - | Y |
67
+ | `pollingFrequency` | number | Plugin data polling frequency from Solax Cloud (in seconds) | 300 | N |
68
+ | `smoothingMeters` | boolean | Whether to create additional meters by smoothing raw values from Solax Cloud | true | N |
69
+ | `pureHomeApp` | boolean | Whether to create meters as standard accessories that can be used on the Home App (power will show as ambient light sensors). | false | N |
69
70
 
70
- **NOTE:** The `pollingFrequency` parameter is optional and defaults to 300 seconds, since Solax inverters update cloud data every 5 minutes.
71
+ **NOTE:** The `pollingFrequency` parameter defaults to 300 seconds, since Solax inverters update cloud data every 5 minutes.
71
72
 
72
73
  Configuration through the the use of [Homebridge UI](https://github.com/oznu/homebridge-config-ui-x) plugin is also available and recommended:
73
74
 
@@ -81,6 +82,10 @@ This will allow some important non-standard characteristics to be visible (like
81
82
 
82
83
  <img src="images/plugin-outlet-consumption.png" width="50%" height="50%">
83
84
 
85
+ If you want to rely solely on the native Home App, please enable the `pureHomeApp` config setting by editing the `config.json` file or using Homebridge UI. In this case, power consumption on each meter will be exposed as an Ambient Light Sensor, as shown below (minimum value for an Ambient Light Sensor is 0.1 lux):
86
+
87
+
88
+
84
89
  # Automation
85
90
 
86
91
  Automation can be achieved with the help of the virtual **Update** motion sensor that was specifically tailored for this effect. This motion sensor will be triggered whenever data gets updated from the Solax Cloud API (according to what is defined on the `pollingFrequency` configuration setting).
@@ -168,4 +173,6 @@ Next planned plugin releases should include:
168
173
 
169
174
  - [X] **Inverter AC** to include Yield Energy
170
175
  - [X] Consumption history through the [fakegato-history](https://github.com/simont77/fakegato-history) module
176
+ - [x] Enable support for "pure" Home App accessories (power meters will be exposed as Ambient Light sensors)
177
+ - [x] Add "smooth" accessories for power meters (compensating for sporadic scenarios like cloud a passing)
171
178
  - [ ] Accessories for battery state and consumptions (do not have one available)
@@ -44,6 +44,20 @@
44
44
  { "title": "900 (15 minutes)", "enum": [ 900 ] }
45
45
  ],
46
46
  "description": "Plugin data polling frequency from Solax Cloud (in seconds)."
47
+ },
48
+ "smoothMeters": {
49
+ "title": "Add accessories for smooth meters?",
50
+ "type": "boolean",
51
+ "required": false,
52
+ "default": true,
53
+ "description": "Enable this option to create accessories for smoothing raw values read from Solax Cloud."
54
+ },
55
+ "pureHomeApp": {
56
+ "title": "Add \"pure\" Home app accessories?",
57
+ "type": "boolean",
58
+ "required": false,
59
+ "default": false,
60
+ "description": "Enable this option to create light ambient sensors for power consumption."
47
61
  }
48
62
  }
49
63
  }
@@ -0,0 +1,36 @@
1
+ import { AccessoryPlugin, CharacteristicGetCallback, Logging, Service } from 'homebridge';
2
+ import { SolaxCloudAPIPlatform } from './platform';
3
+ import { SolaxPlatformAccessory } from './platformAccessory';
4
+ /**
5
+ * Solax Light Sensor Accessory.
6
+ * Virtual light sensor used to monitor and measure both power consumption from Solax devices
7
+ * (for "Home app"-only purists).
8
+ * Using Lux to display power comsumption.
9
+ */
10
+ export declare class SolaxLightSensorAccessory extends SolaxPlatformAccessory implements AccessoryPlugin {
11
+ private readonly lightService;
12
+ /**
13
+ * Ambient light level.
14
+ */
15
+ private lux;
16
+ /**
17
+ * Solax virtual light sensor class constructor.
18
+ * @param {SolaxCloudApiPlatform} platform The API Platform for Solax Cloud.
19
+ * @param {Logging} log The platform logging for homebridge.
20
+ * @param {string} name The accessory name.
21
+ * @param {string} serial "Real world" serial number for this accessory.
22
+ * @param {string} model Accessory model.
23
+ */
24
+ constructor(platform: SolaxCloudAPIPlatform, log: Logging, name: string, serial: string, model: string);
25
+ /**
26
+ * Gets the current ambient light level (power consumpion in Watts).
27
+ */
28
+ getAmbientLightLevel(callback: CharacteristicGetCallback): void;
29
+ /**
30
+ * Sets the current ambient light level (power consumption in Watts).
31
+ * @param {number} lux The lux (power consumption) value to set.
32
+ */
33
+ setAmbientLightLevel(lux: number): void;
34
+ getServices(): Service[];
35
+ }
36
+ //# sourceMappingURL=lightSensorAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightSensorAccessory.d.ts","sourceRoot":"","sources":["../src/lightSensorAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA4B,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEpH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,sBAAuB,YAAW,eAAe;IAC9F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IAEvC;;OAEG;IACH,OAAO,CAAC,GAAG,CAAK;IAEhB;;;;;;;OAOG;gBACS,QAAQ,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAgBtG;;OAEG;IACI,oBAAoB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAMtE;;;OAGG;IACI,oBAAoB,CAAC,GAAG,EAAE,MAAM;IAavC,WAAW,IAAI,OAAO,EAAE;CAIzB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolaxLightSensorAccessory = void 0;
4
+ const platformAccessory_1 = require("./platformAccessory");
5
+ /**
6
+ * Solax Light Sensor Accessory.
7
+ * Virtual light sensor used to monitor and measure both power consumption from Solax devices
8
+ * (for "Home app"-only purists).
9
+ * Using Lux to display power comsumption.
10
+ */
11
+ class SolaxLightSensorAccessory extends platformAccessory_1.SolaxPlatformAccessory {
12
+ /**
13
+ * Solax virtual light sensor class constructor.
14
+ * @param {SolaxCloudApiPlatform} platform The API Platform for Solax Cloud.
15
+ * @param {Logging} log The platform logging for homebridge.
16
+ * @param {string} name The accessory name.
17
+ * @param {string} serial "Real world" serial number for this accessory.
18
+ * @param {string} model Accessory model.
19
+ */
20
+ constructor(platform, log, name, serial, model) {
21
+ super(platform, log, name, serial, model);
22
+ /**
23
+ * Ambient light level.
24
+ */
25
+ this.lux = 0;
26
+ const hap = this.platform.api.hap;
27
+ this.log.debug(`Creating light "${this.name}"`);
28
+ this.lightService = new hap.Service.LightSensor(name);
29
+ this.lightService
30
+ .getCharacteristic(hap.Characteristic.CurrentAmbientLightLevel)
31
+ .on("get" /* GET */, this.getAmbientLightLevel.bind(this));
32
+ log.info(`Solax light (watts reader) ${name} created!`);
33
+ }
34
+ /**
35
+ * Gets the current ambient light level (power consumpion in Watts).
36
+ */
37
+ getAmbientLightLevel(callback) {
38
+ this.log.debug(`${this.name}: GET Ambient Light Level (lux=${this.lux})`);
39
+ callback(null, this.lux);
40
+ }
41
+ /**
42
+ * Sets the current ambient light level (power consumption in Watts).
43
+ * @param {number} lux The lux (power consumption) value to set.
44
+ */
45
+ setAmbientLightLevel(lux) {
46
+ this.log.debug(`${this.name}: SET Ambient Light Level (lux=${lux})`);
47
+ // Minimum value allowed for light sensor is 0.1
48
+ this.lux = Math.max(0.1, lux);
49
+ this.lightService.updateCharacteristic(this.platform.api.hap.Characteristic.CurrentAmbientLightLevel, this.lux);
50
+ }
51
+ /*
52
+ * This method is called directly after creation of this instance.
53
+ * It should return all services which should be added to the accessory.
54
+ */
55
+ getServices() {
56
+ return [this.informationService, this.lightService];
57
+ }
58
+ }
59
+ exports.SolaxLightSensorAccessory = SolaxLightSensorAccessory;
60
+ //# sourceMappingURL=lightSensorAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightSensorAccessory.js","sourceRoot":"","sources":["../src/lightSensorAccessory.ts"],"names":[],"mappings":";;;AAGA,2DAA6D;AAE7D;;;;;GAKG;AACH,MAAa,yBAA0B,SAAQ,0CAAsB;IAQnE;;;;;;;OAOG;IACH,YAAY,QAA+B,EAAE,GAAY,EAAE,IAAY,EAAE,MAAc,EAAE,KAAa;QACpG,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAd5C;;WAEG;QACK,QAAG,GAAG,CAAC,CAAC;QAad,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAElC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY;aACd,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC;aAC9D,EAAE,kBAA+B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1E,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACI,oBAAoB,CAAC,QAAmC;QAC7D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,kCAAkC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAE1E,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,GAAW;QACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,kCAAkC,GAAG,GAAG,CAAC,CAAC;QAErE,gDAAgD;QAChD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAClH,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,CAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAE,CAAC;IACxD,CAAC;CAEF;AA9DD,8DA8DC"}
@@ -23,6 +23,10 @@ export declare class SolaxOutletAccessory extends SolaxPlatformAccessory impleme
23
23
  * Elgato Eve fake history service for energy and status.
24
24
  */
25
25
  private readonly loggingService;
26
+ /**
27
+ * Power series for smoothing operations.
28
+ * */
29
+ private readonly powerSeries;
26
30
  /**
27
31
  * Solax virtual outlet class constructor.
28
32
  * @param {SolaxCloudApiPlatform} platform The API Platform for Solax Cloud.
@@ -33,11 +37,22 @@ export declare class SolaxOutletAccessory extends SolaxPlatformAccessory impleme
33
37
  */
34
38
  constructor(platform: SolaxCloudAPIPlatform, log: Logging, name: string, serial: string, model: string);
35
39
  /**
36
- * Sets a characteristic value for a sepecific characteristic.
37
- * @param {string} charName The characteristic name.
38
- * @param {number} value The characteristic value to set.
40
+ * Adds new power entry to series array of power values.
41
+ * @param {number} powerConsumption Power value to add (in Watts).
42
+ */
43
+ private addPowerEntry;
44
+ /**
45
+ * Gets array series with power consumption values.
46
+ * @returns {number[]} Array with power consumption values.
47
+ */
48
+ getPowerSeries(): number[];
49
+ /**
50
+ * Get outlet power from power series by smoothing data using the desired method and window size.
51
+ * @param {string} method Method to smooth data ('SMA' or 'EMA').
52
+ * @param {number} windowSize Window size for SMA or EMA.
53
+ * @returns {number} Power value after smoothing (rounded to nearest integer number).
39
54
  */
40
- setCharacteristicValue(charName: string, value: number): void;
55
+ getSmoothPowerConsumption(method: string, windowSize: number): number;
41
56
  /**
42
57
  * Gets the current power consumpion.
43
58
  */
@@ -1 +1 @@
1
- {"version":3,"file":"outletAccessory.d.ts","sourceRoot":"","sources":["../src/outletAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,yBAAyB,EAAkB,MAAM,YAAY,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAI7D;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,sBAAuB,YAAW,eAAe;IAEzF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAAO;IAErC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IAExD;;;;;;;OAOG;gBACS,QAAQ,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IA8BtG;;;;OAIG;IACI,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAS7D;;OAEG;IACI,mBAAmB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAMrE;;wEAEoE;IAC7D,mBAAmB,CAAC,gBAAgB,EAAE,MAAM;IAYnD;;OAEG;IACI,yBAAyB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAM3E;;;OAGG;IACI,yBAAyB,CAAC,sBAAsB,EAAE,MAAM;IAQ/D;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAU1D,WAAW,IAAI,OAAO,EAAE;CAQzB"}
1
+ {"version":3,"file":"outletAccessory.d.ts","sourceRoot":"","sources":["../src/outletAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAW7D;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,sBAAuB,YAAW,eAAe;IAEzF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAAO;IAErC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IAExD;;SAEK;IACL,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAE5C;;;;;;;OAOG;gBACS,QAAQ,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IA8BtG;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;;OAKG;IACI,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IA4B5E;;OAEG;IACI,mBAAmB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAMrE;;wEAEoE;IAC7D,mBAAmB,CAAC,gBAAgB,EAAE,MAAM;IAcnD;;OAEG;IACI,yBAAyB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAM3E;;;OAGG;IACI,yBAAyB,CAAC,sBAAsB,EAAE,MAAM;IAQ/D;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAU1D,WAAW,IAAI,OAAO,EAAE;CAIzB"}
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SolaxOutletAccessory = void 0;
4
4
  const platformAccessory_1 = require("./platformAccessory");
5
+ const statistics_1 = require("./statistics");
6
+ /**
7
+ * Maximum size for the outlet power series.
8
+ */
9
+ const MAX_POWER_SERIES_SIZE = 1024;
5
10
  /**
6
11
  * Solax Outlet Accessory.
7
12
  * Virtual outlet used to monitor and measure both power and total energy consumption from Solax devices.
@@ -26,6 +31,10 @@ class SolaxOutletAccessory extends platformAccessory_1.SolaxPlatformAccessory {
26
31
  * Total energy readings in KWh.
27
32
  */
28
33
  this.totalEnergyConsumption = 0.0;
34
+ /**
35
+ * Power series for smoothing operations.
36
+ * */
37
+ this.powerSeries = [];
29
38
  const hap = this.platform.api.hap;
30
39
  this.log.debug(`Creating outlet "${this.name}"`);
31
40
  // create power meter service
@@ -45,16 +54,49 @@ class SolaxOutletAccessory extends platformAccessory_1.SolaxPlatformAccessory {
45
54
  log.info(`Outlet "${name}" created!`);
46
55
  }
47
56
  /**
48
- * Sets a characteristic value for a sepecific characteristic.
49
- * @param {string} charName The characteristic name.
50
- * @param {number} value The characteristic value to set.
57
+ * Adds new power entry to series array of power values.
58
+ * @param {number} powerConsumption Power value to add (in Watts).
59
+ */
60
+ addPowerEntry(powerConsumption) {
61
+ // check if we reached the limit
62
+ if (this.powerSeries.length === MAX_POWER_SERIES_SIZE) {
63
+ // remove first element
64
+ this.powerSeries.shift();
65
+ }
66
+ // add new element
67
+ this.powerSeries.push(powerConsumption);
68
+ }
69
+ /**
70
+ * Gets array series with power consumption values.
71
+ * @returns {number[]} Array with power consumption values.
72
+ */
73
+ getPowerSeries() {
74
+ return this.powerSeries;
75
+ }
76
+ /**
77
+ * Get outlet power from power series by smoothing data using the desired method and window size.
78
+ * @param {string} method Method to smooth data ('SMA' or 'EMA').
79
+ * @param {number} windowSize Window size for SMA or EMA.
80
+ * @returns {number} Power value after smoothing (rounded to nearest integer number).
51
81
  */
52
- setCharacteristicValue(charName, value) {
53
- // set up characteristic
54
- const char = this.outletService.getCharacteristic(charName);
55
- if (char) {
56
- char.updateValue(value);
82
+ getSmoothPowerConsumption(method, windowSize) {
83
+ this.log.debug(`${this.name}: GET Power Smooth (method=${method}, window=${windowSize})`);
84
+ let result = 0;
85
+ // check if we have enough data for averaging
86
+ switch (method) {
87
+ case 'sma':
88
+ // get power series for window size
89
+ // eslint-disable-next-line no-case-declarations
90
+ const series = this.getPowerSeries().slice(-windowSize);
91
+ // calculate simple moving average from given window size
92
+ // eslint-disable-next-line no-case-declarations
93
+ const [sma] = statistics_1.Statistics.simpleMovingAverage(series, Math.min(windowSize, series.length));
94
+ this.log.debug(`${this.name}: simple moving average (window data=[${series}], power=${sma}W)`);
95
+ result = sma;
96
+ break;
97
+ case 'ema':
57
98
  }
99
+ return result;
58
100
  }
59
101
  /**
60
102
  * Gets the current power consumpion.
@@ -69,10 +111,11 @@ class SolaxOutletAccessory extends platformAccessory_1.SolaxPlatformAccessory {
69
111
  setPowerConsumption(powerConsumption) {
70
112
  this.log.debug(`${this.name}: SET Power (power=${powerConsumption}W)`);
71
113
  this.powerConsumption = powerConsumption >= 0 ? powerConsumption : 0;
72
- this.setCharacteristicValue(this.platform.eve.Characteristics.CurrentConsumption, this.powerConsumption);
114
+ this.outletService.getCharacteristic(this.platform.eve.Characteristics.CurrentConsumption).updateValue(this.powerConsumption);
73
115
  // add entries to history
74
- this.loggingService.
75
- addEntry({ time: Math.round(new Date().valueOf() / 1000), power: this.powerConsumption });
116
+ this.loggingService.addEntry({ time: Math.round(new Date().valueOf() / 1000), power: this.powerConsumption });
117
+ // add new value to power series
118
+ this.addPowerEntry(this.powerConsumption);
76
119
  }
77
120
  /**
78
121
  * Gets the total energy consumpion.
@@ -88,7 +131,7 @@ class SolaxOutletAccessory extends platformAccessory_1.SolaxPlatformAccessory {
88
131
  setTotalEnergyConsumption(totalEnergyConsumption) {
89
132
  this.log.debug(`${this.name}: SET Total Energy (energy=${totalEnergyConsumption}kWh)`);
90
133
  this.totalEnergyConsumption = totalEnergyConsumption;
91
- this.setCharacteristicValue(this.platform.eve.Characteristics.TotalConsumption, this.totalEnergyConsumption);
134
+ this.outletService.getCharacteristic(this.platform.eve.Characteristics.TotalConsumption).updateValue(this.totalEnergyConsumption);
92
135
  }
93
136
  /**
94
137
  * Gets the outlet state Characteristic based on its consumed power.
@@ -103,11 +146,7 @@ class SolaxOutletAccessory extends platformAccessory_1.SolaxPlatformAccessory {
103
146
  * It should return all services which should be added to the accessory.
104
147
  */
105
148
  getServices() {
106
- return [
107
- this.informationService,
108
- this.outletService,
109
- this.loggingService,
110
- ];
149
+ return [this.informationService, this.outletService, this.loggingService];
111
150
  }
112
151
  }
113
152
  exports.SolaxOutletAccessory = SolaxOutletAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"outletAccessory.js","sourceRoot":"","sources":["../src/outletAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outletAccessory.js","sourceRoot":"","sources":["../src/outletAccessory.ts"],"names":[],"mappings":"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"}
@@ -14,31 +14,34 @@ export declare class SolaxCloudAPIPlatform implements StaticPlatformPlugin {
14
14
  readonly eve: EveHomeKitTypes;
15
15
  eveService: fakegato;
16
16
  private readonly solaxCloudAPI;
17
- private apiData;
18
17
  /**
19
- * Virtual outlet used to detect and measure photovoltaic production.
20
- */
21
- private outletPV;
18
+ * Numeber of periods to use for data smoothing.
19
+ */
20
+ private smoothingWindow;
22
21
  /**
23
- * Virtual outlet used to detect and measure inverter AC production.
22
+ * Outlets with raw data gather.
24
23
  */
25
- private outletInverterAC;
24
+ private rawOutlets;
26
25
  /**
27
- * Virtual outlet used to detect and measure inverter excess production injected in the grid.
26
+ * Smooth data outlets.
27
+ * These outlets present smoothed values based on the raw data figures to
28
+ * prevent events like the temporary passage of a cloud to directly affect values.
28
29
  */
29
- private outletInverterToGrid;
30
+ private smoothOutlets;
30
31
  /**
31
- * Virtual outlet used to detect and measure inverter production directly fed into the house (self-consumption).
32
+ * Virtual motion sensor triggered by data updates from Solax Cloud.
32
33
  */
33
- private outletInverterToHouse;
34
+ private motionUpdate;
34
35
  /**
35
- * Virtual outlet used to detect and measure grid power fed into the house.
36
+ * Ambient light sensors for Power Consumption (pure Home App config)
36
37
  */
37
- private outletGridToHouse;
38
+ private rawLightSensors;
38
39
  /**
39
- * Virtual motion sensor triggered by data updates from Solax Cloud.
40
+ * Ambient light sensors for smooth power consumption lights.
41
+ * These lights present smoothed values based on the raw data figures to
42
+ * prevent events like the temporary passage of a cloud to directly affect values.
40
43
  */
41
- private motionUpdate;
44
+ private smoothLightSensors;
42
45
  /** Array with all accessories */
43
46
  private solaxAccessories;
44
47
  /**
@@ -54,6 +57,34 @@ export declare class SolaxCloudAPIPlatform implements StaticPlatformPlugin {
54
57
  * Periodically retrieves inverter data from Solax Cloud API using configured tokenID and SN.
55
58
  */
56
59
  private fetchDataPeriodically;
60
+ /**
61
+ * Update all platform accessory status based on the values read from the API.
62
+ * @param {SolaxCloudAPIResponse} apiData API data from Solax Cloud.
63
+ */
64
+ private updateAccessories;
65
+ /**
66
+ * Updates smooth ambient light sensors data from raw outlet data by applying configured smoothing function.
67
+ */
68
+ private updateSmoothLightSensors;
69
+ /**
70
+ * Update raw ambient light sensors with power consumption data from Solax Cloud API.
71
+ * @param {SolaxCloudAPIResponse} apiData API data retrieved from Solax Cloud.
72
+ */
73
+ private updateRawLightSensors;
74
+ /**
75
+ * Updates smooth outlet data from raw outlet data by applying configured smoothing function.
76
+ */
77
+ private updateSmoothOutlets;
78
+ /**
79
+ * Update raw outlet data from API data read from Solax Cloud.
80
+ * @param {SolaxCloudAPIResponse} apiData Solax Cloud API data.
81
+ * */
82
+ private updateRawOutlets;
83
+ /**
84
+ * Checks platform config validity and sets defaults whenever needed.
85
+ * @returns {boolean} Whether the config is valid.
86
+ */
87
+ private checkConfig;
57
88
  accessories(callback: (foundAccessories: AccessoryPlugin[]) => void): void;
58
89
  }
59
90
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,EAAY,MAAM,YAAY,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AA6BxC;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,SAAgB,GAAG,EAAE,GAAG,CAAC;IAEzB,SAAgB,GAAG,EAAE,eAAe,CAAC;IAC9B,UAAU,EAAE,QAAQ,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,OAAO,CAAyB;IAExC;;MAEE;IACF,OAAO,CAAC,QAAQ,CAAwB;IAExC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAwB;IAEhD;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAAwB;IAEpD;;OAEG;IACH,OAAO,CAAC,qBAAqB,CAAwB;IAErD;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAwB;IAEjD;;OAEG;IACH,OAAO,CAAC,YAAY,CAAwB;IAE5C,iCAAiC;IACjC,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;OAMG;gBACU,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG;IA0G3D,KAAK,8CAA8B;IAEnC;;OAEG;YACW,qBAAqB;IAyCnC,WAAW,CAAC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,IAAI;CAG3E"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,EAAY,MAAM,YAAY,CAAC;AAE3G,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AAmDxC;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,SAAgB,GAAG,EAAE,GAAG,CAAC;IAEzB,SAAgB,GAAG,EAAE,eAAe,CAAC;IAC9B,UAAU,EAAE,QAAQ,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C;;OAEG;IACH,OAAO,CAAC,eAAe,CAAK;IAE5B;;OAEG;IACH,OAAO,CAAC,UAAU,CAAwB;IAE1C;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAwB;IAE7C;;OAEG;IACH,OAAO,CAAC,YAAY,CAAwB;IAE5C;;OAEG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAA6B;IAEvD,iCAAiC;IACjC,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;OAMG;gBACU,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG;IA4J3D,KAAK,8CAA8B;IAEnC;;OAEG;YACW,qBAAqB;IAuBnC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;SAGK;IACL,OAAO,CAAC,gBAAgB;IASxB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAiFnB,WAAW,CAAC,QAAQ,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,KAAK,IAAI,GAAG,IAAI;CAG3E"}