iobroker.sun2000 2.3.3 → 2.3.4

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
@@ -65,6 +65,10 @@ browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
65
65
  Placeholder for the next version (at the beginning of the line):
66
66
  ### **WORK IN PROGRESS**
67
67
  -->
68
+ ### 2.3.4 (2025-11-01)
69
+ * dependency and configuration updates
70
+ * new state `collected.dailyExternalYield` Riemann sum of `collected.externalPower`
71
+
68
72
  ### 2.3.3 (2025-10-31)
69
73
  * Improved verification of the adapter configuration
70
74
  * new state `inverter.x.derived.dailyActiveEnergy` Inverter daily active energy, which is determined via the Riemann sum of `inverter.x.activePower`
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sun2000",
4
- "version": "2.3.3",
4
+ "version": "2.3.4",
5
5
  "news": {
6
+ "2.3.4": {
7
+ "en": "dependency and configuration updates\nnew state `collected.dailyExternalYield` Riemann sum of `collected.externalPower`",
8
+ "de": "abhängigkeits- und konfigurationsupdates\nneuer Zustand `collect.dailyExternalYield` Riemann Summe von `collected.externalPower `",
9
+ "ru": "обновления зависимостей и конфигурации\nновый государственный «коллектив.dailyExternalYield» Riemann sum of 'collected.externalPower пункт",
10
+ "pt": "atualizações de dependência e configuração\nnovo estado «colected.dailyEnergieYield» Riemann soma de `colected.externalPower `",
11
+ "nl": "afhankelijkheid en configuratie-updates\nnieuwe staat Riemann som van gecollecteerd.externe kracht Wat",
12
+ "fr": "mises à jour de la dépendance et de la configuration\nnouvel état `collected.dailyExternalYield` Riemann somme de `collected.externalPower \"",
13
+ "it": "aggiornamenti di dipendenza e configurazione\nnuovo stato `colletto.dailyExternalYield` Riemann somma di `colletto.Power esterno #",
14
+ "es": "actualizaciones de dependencia y configuración\nnuevo estado `colected.dailyExternalYield` Riemann sum of `collected.externalPower `",
15
+ "pl": "aktualizacje zależności i konfiguracji\nnowy stan \"collected.dailyExternalYield\" Riemann sum of 'collected.externalPower'",
16
+ "uk": "оновлення залежності та конфігурації\nновий стан `collected.dailyExternalYield` Сума Riemann `collected.externalPower й",
17
+ "zh-cn": "依赖和配置更新\n新国家`收集.每日外部耶尔德' 收集的里曼总和。 `"
18
+ },
6
19
  "2.3.3": {
7
20
  "en": "Improved verification of the adapter configuration\nnew state `inverter.x.derived.dailyActiveEnergy` Inverter daily active energy, which is determined via the Riemann sum of `inverter.x.activePower`\nstate `collected.dailyInputYield` was redisigned based on inverter.[0..n-1].derived.dailyActiveEnergy",
8
21
  "de": "Verbesserte Überprüfung der Adapterkonfiguration\n`inverter.x.derived.dailyActiveEnergy` Inverter tägliche aktive Energie, die über die Riemann Summe von `inverter.x.activePower bestimmt wird `\nstate `collected.dailyInputYield` wurde basierend auf Inverter zurückgeteilt. [0.n-1].derived.dailyActiveEnergy",
@@ -80,19 +93,6 @@
80
93
  "pl": "aktualizacje zależności i konfiguracji\nnowy stan 'meter.derived.signConventionForPowerFeed- in' znak meter.active Energia zasilana obecnie do sieci energetycznej\nnowy stan 'meter.derived.feed-inPower' energia elektryczna, która jest dostarczana do sieci (\"karmiona w\")",
81
94
  "uk": "оновлення залежності та конфігурації\nновий стан `meter.derived.signConventionForPowerFeed-in` знак лічильника.active Потужність, яка в даний час вдається в електромережу\nновий стан `meter.derived.feed-inPower` електрична потужність, яка подається в сітку (\"fed in\")",
82
95
  "zh-cn": "依赖和配置更新\n新的状态“ 公尺” 。 生成。 签署 Convention ForPowerFeed- in' sign of meter. 活动 目前输入电网的电力\n新状态“ met. entered. feed-inpower” 供电给电网(“ feeded in”)"
83
- },
84
- "2.1.1": {
85
- "en": "dependency and configuration updates\nfix: adjust event value limits based on usableSurplus parameters\nfix: swap register values for power consumption in Emma driver #190\nemma: improve power calculation with exponential moving average in EmmaCharger\nupdate surplus power state definitions and deprecate old identifiers",
86
- "de": "abhängigkeits- und konfigurationsupdates\nfix: Event-Wert-Grenze basierend auf nutzbar Überschüssige Parameter\nfix: Swap-Registerwerte für den Stromverbrauch in Emma Treiber #190\nemma: Leistungsberechnung mit exponentiellem Bewegungsmittel in EmmaCharger verbessern\naktualisierung der überschussstrom-zustandsdefinitionen und abschreibung alter kennungen",
87
- "ru": "обновления зависимостей и конфигурации\nисправление: корректировка предельных значений событий на основе пригодных для использования Дополнительные параметры\nисправление: значения регистра свопов для энергопотребления в драйвере Emma #190\nemma: улучшите расчет мощности с экспоненциальной скользящей средней в EmmaCharger\nобновить определения состояния избыточной мощности и обесценить старые идентификаторы",
88
- "pt": "atualizações de dependência e configuração\ncorreção: ajustar os limites do valor do evento com base no utilizável Parâmetros do excedente\ncorreção: valores de registro de swap para consumo de energia em Emma driver #190\nemma: melhorar o cálculo de potência com média móvel exponencial em EmmaCharger\natualizar definições de estado de potência excedente e depreciar identificadores antigos",
89
- "nl": "afhankelijkheid en configuratie-updates\nfix: aanpassen gebeurtenis waarde limieten op basis van bruikbaar Overschotparameters\nfix: swap register waarden voor energieverbruik in Emma driver #190\nemma: verbeteren van de stroomberekening met exponentieel bewegend gemiddelde in EmmaCharger\nde definitie van overtollige vermogenstoestand bij te werken en oude identificatienummers te schrappen",
90
- "fr": "mises à jour de la dépendance et de la configuration\nfix: ajuster les limites de valeur d'événement en fonction de la valeur utilisable Paramètres excédentaires\nfix: valeurs de registre d'échange pour la consommation d'énergie en Emma driver #190\nemma: améliorer le calcul de la puissance avec la moyenne mobile exponentielle en EmmaCharger\nmettre à jour les définitions de l'état de puissance excédentaire et supprimer les anciens identifiants",
91
- "it": "aggiornamenti di dipendenza e configurazione\ncorrezione: regolare i limiti del valore dell'evento in base all'utilizzabile Parametri in eccesso\ncorrezione: swap valori di registro per il consumo di energia in Emma driver #190\nemma: migliorare il calcolo di potenza con una media mobile esponenziale in EmmaCharger\naggiornare le definizioni di stato di potenza eccedente e deprecare vecchi identificatori",
92
- "es": "actualizaciones de dependencia y configuración\nfijación: ajustar los límites de valor de evento basados en utilizables Parámetros adicionales\nfijado: cambiar los valores de registro para el consumo de energía en el controlador Emma #190\nemma: mejorar el cálculo de potencia con promedio de movimiento exponencial en EmmaCharger\nactualizar las definiciones de estado de excedente de energía y depreparar identificadores antiguos",
93
- "pl": "aktualizacje zależności i konfiguracji\nfix: dostosować wartości graniczne dla zdarzeń w oparciu o wartość użytkową Parametry nadwyżki\nfix: wartości rejestru swap dla zużycia energii w sterowniku Emma # 190\nemma: ulepszenie obliczania mocy przy zastosowaniu wykładniczej średniej ruchomej w EmmaCharger\naktualizacja definicji nadwyżek energii elektrycznej i deprecjacja starych identyfikatorów",
94
- "uk": "оновлення залежності та конфігурації\nвиправити: регулювати ліміти значення події на основі Параметри Surplus\nвиправити: значення swap для споживання енергії в машині Емма #190\nемма: поліпшення розрахунку потужності з постійним рухомим середнім в ЕммаКхаргер\nоновлення надлишок визначення стану живлення та депресувати старі ідентифікатори",
95
- "zh-cn": "依赖和配置更新\n固定:根据可用值调整事件值限制 盈余参数\n修补: Emma 驱动器中用电量的交换记录值 # 190\nemma: 改进电量计算, 以 Emmacourer 中的指数移动平均值\n更新剩余电源状态定义并折旧旧标识符"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -96,15 +96,13 @@ class InverterSun2000 extends DriverBase {
96
96
  this.solarSum = new RiemannSum();
97
97
  this.adapter.getState(`${this.deviceInfo.path}.derived.dailySolarYield`, (err, state) => {
98
98
  if (!err && state) {
99
- this.solarSum.setStart(state.val, state.ts);
99
+ this.solarSum.setStart(state?.val, state?.ts);
100
100
  }
101
101
  });
102
-
103
- //
104
102
  this.activePowerSum = new RiemannSum();
105
103
  this.adapter.getState(`${this.deviceInfo.path}.derived.dailyActiveEnergy`, (err, state) => {
106
104
  if (!err && state) {
107
- this.activePowerSum.setStart(state.val, state.ts);
105
+ this.activePowerSum.setStart(state?.val, state?.ts);
108
106
  }
109
107
  });
110
108
 
@@ -1521,7 +1519,8 @@ class InverterSun2000 extends DriverBase {
1521
1519
  const charge = this.stateCache.get(`${path}battery.currentDayChargeCapacity`)?.value ?? 0;
1522
1520
  //let inputYield = this.stateCache.get(`${path}dailyEnergyYield`)?.value ?? 0 * 0.97 + charge - disCharge;
1523
1521
  const activeEnergy = this.stateCache.get(`${path}derived.dailyActiveEnergy`)?.value ?? 0;
1524
- let inYield = activeEnergy + (charge - disCharge) * 0.97; //efficiency loss of battery 3%
1522
+ //let inYield = activeEnergy + (charge - disCharge) * 0.97; //efficiency loss of battery 3%
1523
+ let inYield = activeEnergy + (charge - disCharge); //efficiency loss of battery 3%
1525
1524
  if (inYield < 0) {
1526
1525
  inYield = 0;
1527
1526
  }
package/lib/register.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const { deviceType, driverClasses, dataRefreshRate } = require(`${__dirname}/types.js`);
4
- const { StateMap } = require(`${__dirname}/tools.js`);
4
+ const { RiemannSum, StateMap } = require(`${__dirname}/tools.js`);
5
5
  const getDriverHandler = require(`${__dirname}/drivers/index.js`);
6
6
 
7
7
  class Registers {
@@ -9,6 +9,8 @@ class Registers {
9
9
  this.adapter = adapterInstance;
10
10
  this.stateCache = new StateMap();
11
11
 
12
+ this.externalSum = new RiemannSum();
13
+
12
14
  for (const device of this.adapter.devices) {
13
15
  //DriverInfo Instance or Sdongle
14
16
  const handler = getDriverHandler(device.driverClass);
@@ -153,6 +155,7 @@ class Registers {
153
155
  const feedinPower = this.stateCache.get('meter.derived.feed-inPower')?.value ?? 0;
154
156
 
155
157
  const extPower = this.adapter.control.get('externalPower')?.value ?? 0;
158
+ this.externalSum.add(extPower); //riemann Sum
156
159
 
157
160
  //Zu geringe Erzeugerenegie
158
161
  let houseConsum = actPower - feedinPower + extPower;
@@ -234,6 +237,14 @@ class Registers {
234
237
  },
235
238
  { id: 'collected.SOC', name: 'State of battery capacity', type: 'number', unit: '%', role: 'value.battery', desc: 'SOC' },
236
239
  { id: 'collected.ratedCapacity', name: 'Rated of battery capacity', type: 'number', unit: 'Wh', role: 'value.capacity' },
240
+ {
241
+ id: 'collected.dailyExternalYield',
242
+ name: 'daily external yield',
243
+ type: 'number',
244
+ unit: 'kWh',
245
+ role: 'value.power.consumption',
246
+ desc: 'Riemann sum of external power',
247
+ },
237
248
  /*
238
249
  {
239
250
  id: 'collected.dailyActiveEnergy',
@@ -281,8 +292,9 @@ class Registers {
281
292
  }
282
293
  }
283
294
  //this.stateCache.set('collected.dailyActiveEnergy', activeEnergy, { type: 'number' });
295
+ this.stateCache.set('collected.dailyExternalYield', this.externalSum.sum, { type: 'number' }); //of externalPower
284
296
  this.stateCache.set('collected.dailyEnergyYield', outYield, { type: 'number' });
285
- this.stateCache.set('collected.dailyInputYield', inYield, { type: 'number' }); //deprecated
297
+ this.stateCache.set('collected.dailyInputYield', inYield, { type: 'number' });
286
298
  this.stateCache.set('collected.dailySolarYield', solarYield, { type: 'number' });
287
299
  this.stateCache.set('collected.accumulatedEnergyYield', enYield, { type: 'number' });
288
300
  const sign = this.stateCache.get('meter.derived.signConventionForPowerFeed-in')?.value ?? 1;
@@ -315,7 +327,10 @@ class Registers {
315
327
  //new computation of consumption today
316
328
  this.stateCache.set(
317
329
  'collected.consumptionToday',
318
- activeEnergy + this.stateCache.get('collected.gridImportToday')?.value - this.stateCache.get('collected.gridExportToday')?.value,
330
+ activeEnergy +
331
+ this.externalSum.sum +
332
+ this.stateCache.get('collected.gridImportToday')?.value -
333
+ this.stateCache.get('collected.gridExportToday')?.value,
319
334
  { type: 'number' },
320
335
  );
321
336
  //compute battery
@@ -433,7 +448,9 @@ class Registers {
433
448
  this.stateCache.set('collected.gridImportStart', state?.val, { type: 'number', stored: true });
434
449
  state = await this.adapter.getState('collected.consumptionStart');
435
450
  this.stateCache.set('collected.consumptionStart', state?.val, { type: 'number', stored: true });
436
- //this.stateCache.set('collected.consumptionStart', 100000, { type: 'number', stored: true });
451
+ state = await this.adapter.getState('collected.dailyExternalYield');
452
+ this.stateCache.set('collected.dailyExternalYield', state?.val, { type: 'number', stored: true });
453
+ this.externalSum.setStart(state?.val, state?.ts);
437
454
  }
438
455
 
439
456
  //state
@@ -502,6 +519,8 @@ class Registers {
502
519
  this.stateCache.set('collected.gridExportStart', this.stateCache.get('meter.positiveActiveEnergy')?.value ?? 0, { type: 'number' });
503
520
  this.stateCache.set('collected.gridImportStart', this.stateCache.get('meter.reverseActiveEnergy')?.value ?? 0, { type: 'number' });
504
521
  }
522
+ this.externalSum.reset(); //reset for next day
523
+ this.stateCache.set('collected.dailyExternalYield', 0, { type: 'number' });
505
524
  // copy consumption Sum to Start for the next day
506
525
  this.stateCache.set('collected.consumptionStart', this.stateCache.get('collected.consumptionSum')?.value ?? 0, { type: 'number' });
507
526
  for (const device of this.adapter.devices) {
package/lib/tools.js CHANGED
@@ -202,8 +202,12 @@ class RiemannSum {
202
202
  }
203
203
 
204
204
  setStart(sum, ts) {
205
- this._sum = sum;
206
- this._lastDate = new Date(ts);
205
+ if (!isNaN(sum)) {
206
+ this._sum = sum;
207
+ this._lastDate = new Date(ts);
208
+ } else {
209
+ this.reset();
210
+ }
207
211
  }
208
212
  }
209
213
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sun2000",
3
- "version": "2.3.3",
3
+ "version": "2.3.4",
4
4
  "description": "sun2000",
5
5
  "author": {
6
6
  "name": "bolliy",
@@ -33,18 +33,18 @@
33
33
  "tcp-port-used": "^1.0.2"
34
34
  },
35
35
  "devDependencies": {
36
- "@alcalzone/release-script": "^3.8.0",
37
- "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
38
- "@alcalzone/release-script-plugin-license": "^3.7.0",
39
- "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
36
+ "@alcalzone/release-script": "^5.0.0",
37
+ "@alcalzone/release-script-plugin-iobroker": "^4.0.0",
38
+ "@alcalzone/release-script-plugin-license": "^4.0.0",
39
+ "@alcalzone/release-script-plugin-manual-review": "^4.0.0",
40
40
  "@eslint/eslintrc": "^3.3.1",
41
- "@eslint/js": "^9.36.0",
41
+ "@eslint/js": "^9.39.0",
42
42
  "@iobroker/adapter-dev": "^1.5.0",
43
43
  "@iobroker/eslint-config": "^2.2.0",
44
44
  "@iobroker/testing": "^5.1.1",
45
45
  "@tsconfig/node20": "^20.1.6",
46
- "@types/node": "^24.6.2",
47
- "globals": "^16.4.0",
46
+ "@types/node": "^24.9.2",
47
+ "globals": "^16.5.0",
48
48
  "typescript": "~5.9.3"
49
49
  },
50
50
  "main": "main.js",