iobroker.pv-notifications 1.2.22 → 1.2.24
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/admin/jsonConfig.json +16 -16
- package/io-package.json +33 -30
- package/main.js +95 -23
- package/package.json +1 -1
package/admin/jsonConfig.json
CHANGED
|
@@ -388,10 +388,10 @@
|
|
|
388
388
|
"type": "checkbox",
|
|
389
389
|
"label": "label_statsUseSunset",
|
|
390
390
|
"xs": 12,
|
|
391
|
-
"sm":
|
|
392
|
-
"md":
|
|
393
|
-
"lg":
|
|
394
|
-
"xl":
|
|
391
|
+
"sm": 2,
|
|
392
|
+
"md": 2,
|
|
393
|
+
"lg": 2,
|
|
394
|
+
"xl": 2,
|
|
395
395
|
"default": false,
|
|
396
396
|
"tooltip": "tooltip_statsUseSunset"
|
|
397
397
|
},
|
|
@@ -399,10 +399,10 @@
|
|
|
399
399
|
"type": "objectId",
|
|
400
400
|
"label": "label_statsSunsetObject",
|
|
401
401
|
"xs": 12,
|
|
402
|
-
"sm":
|
|
403
|
-
"md":
|
|
404
|
-
"lg":
|
|
405
|
-
"xl":
|
|
402
|
+
"sm": 6,
|
|
403
|
+
"md": 6,
|
|
404
|
+
"lg": 6,
|
|
405
|
+
"xl": 6,
|
|
406
406
|
"tooltip": "tooltip_statsSunsetObject",
|
|
407
407
|
"disabled": "!statsUseSunset"
|
|
408
408
|
},
|
|
@@ -410,10 +410,10 @@
|
|
|
410
410
|
"type": "number",
|
|
411
411
|
"label": "label_statsWeekDay",
|
|
412
412
|
"xs": 12,
|
|
413
|
-
"sm":
|
|
414
|
-
"md":
|
|
415
|
-
"lg":
|
|
416
|
-
"xl":
|
|
413
|
+
"sm": 4,
|
|
414
|
+
"md": 4,
|
|
415
|
+
"lg": 4,
|
|
416
|
+
"xl": 4,
|
|
417
417
|
"min": 0,
|
|
418
418
|
"max": 6,
|
|
419
419
|
"default": 0,
|
|
@@ -423,10 +423,10 @@
|
|
|
423
423
|
"type": "text",
|
|
424
424
|
"label": "label_statsWeekTime",
|
|
425
425
|
"xs": 12,
|
|
426
|
-
"sm":
|
|
427
|
-
"md":
|
|
428
|
-
"lg":
|
|
429
|
-
"xl":
|
|
426
|
+
"sm": 4,
|
|
427
|
+
"md": 4,
|
|
428
|
+
"lg": 4,
|
|
429
|
+
"xl": 4,
|
|
430
430
|
"default": "10:00",
|
|
431
431
|
"tooltip": "tooltip_statsWeekTime"
|
|
432
432
|
},
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "pv-notifications",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.24",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "PV Notifications",
|
|
7
7
|
"de": "PV-Benachrichtigungen",
|
|
@@ -29,6 +29,32 @@
|
|
|
29
29
|
"zh-cn": "发送 Telegram 通知用于 PV 电池状态"
|
|
30
30
|
},
|
|
31
31
|
"news": {
|
|
32
|
+
"1.2.24": {
|
|
33
|
+
"en": "Add missing uk translations to news, fix prettier formatting in main.js",
|
|
34
|
+
"de": "Fehlende uk-Uebersetzungen in news ergaenzt, Prettier-Formatierung in main.js korrigiert",
|
|
35
|
+
"ru": "Добавлены недостающие uk-переводы в news, исправлено форматирование prettier в main.js",
|
|
36
|
+
"fr": "Ajout des traductions uk manquantes dans news, correction formatage prettier dans main.js",
|
|
37
|
+
"it": "Aggiunte traduzioni uk mancanti in news, corretta formattazione prettier in main.js",
|
|
38
|
+
"es": "Anadidas traducciones uk faltantes en news, corregido formato prettier en main.js",
|
|
39
|
+
"pl": "Dodano brakujace tlumaczenia uk w news, poprawiono formatowanie prettier w main.js",
|
|
40
|
+
"pt": "Adicionadas traducoes uk em falta em news, corrigida formatacao prettier em main.js",
|
|
41
|
+
"nl": "Ontbrekende uk-vertalingen toegevoegd aan news, prettier-opmaak gecorrigeerd in main.js",
|
|
42
|
+
"uk": "Додано відсутні uk-переклади до news, виправлено форматування prettier у main.js",
|
|
43
|
+
"zh-cn": "添加 news 中缺失的 uk 翻译,修复 main.js 中的 prettier 格式"
|
|
44
|
+
},
|
|
45
|
+
"1.2.23": {
|
|
46
|
+
"en": "Fix statistics section layout: align daily time, sunset checkbox and sunset object on one row",
|
|
47
|
+
"de": "Layout der Statistik-Sektion korrigiert: Tageszeit, Sonnenuntergang-Checkbox und Objekt in einer Zeile",
|
|
48
|
+
"ru": "Исправлен макет секции статистики: время, чекбокс заката и объект в одну строку",
|
|
49
|
+
"fr": "Correction mise en page section statistiques: heure, case coucher soleil et objet sur une ligne",
|
|
50
|
+
"it": "Correzione layout sezione statistiche: ora, checkbox tramonto e oggetto su una riga",
|
|
51
|
+
"es": "Correccion diseno seccion estadisticas: hora, casilla atardecer y objeto en una fila",
|
|
52
|
+
"pl": "Poprawka ukladu sekcji statystyk: czas, pole zachodu slonca i obiekt w jednym wierszu",
|
|
53
|
+
"pt": "Correcao layout seccao estatisticas: hora, caixa por do sol e objeto numa linha",
|
|
54
|
+
"nl": "Lay-out statistieksectie gecorrigeerd: tijd, zonsondergang-checkbox en object op een rij",
|
|
55
|
+
"zh-cn": "修复统计部分布局:将时间、日落复选框和对象放在同一行",
|
|
56
|
+
"uk": "Виправлено макет секції статистики: час, чекбокс заходу сонця та обєкт в одному рядку"
|
|
57
|
+
},
|
|
32
58
|
"1.2.22": {
|
|
33
59
|
"en": "Add sunset-based daily statistics: optional checkbox to send daily stats at sunset time from a configurable object instead of fixed time",
|
|
34
60
|
"de": "Sonnenuntergang-basierte Tagesstatistik: optionale Checkbox um Tagesstatistik zur Sonnenuntergangszeit aus einem konfigurierbaren Objekt zu senden statt zur festen Uhrzeit",
|
|
@@ -39,7 +65,8 @@
|
|
|
39
65
|
"pl": "Statystyki dzienne o zachodzie slonca: opcjonalne pole wyboru do wysylania statystyk o zachodzie slonca z konfigurowalnego obiektu zamiast stalej godziny",
|
|
40
66
|
"pt": "Estatisticas diarias ao por do sol: caixa opcional para enviar estatisticas na hora do por do sol de um objeto configuravel em vez de hora fixa",
|
|
41
67
|
"nl": "Dagelijkse statistieken bij zonsondergang: optioneel selectievakje om dagelijkse statistieken te sturen op zonsondergangtijd van een configureerbaar object in plaats van vaste tijd",
|
|
42
|
-
"zh-cn": "日落时发送每日统计:可选复选框,在可配置对象的日落时间发送每日统计,而非固定时间"
|
|
68
|
+
"zh-cn": "日落时发送每日统计:可选复选框,在可配置对象的日落时间发送每日统计,而非固定时间",
|
|
69
|
+
"uk": "Додано відправку денної статистики за заходом сонця: опціональний чекбокс для відправки статистики в момент заходу сонця з обєкта що налаштовується замість фіксованого часу"
|
|
43
70
|
},
|
|
44
71
|
"1.2.21": {
|
|
45
72
|
"en": "Fix: use extendObject instead of setObjectNotExists for states with unit/role to update existing instances",
|
|
@@ -51,7 +78,8 @@
|
|
|
51
78
|
"pl": "Fix: extendObject zamiast setObjectNotExists dla states z unit/role aby zaktualizowac istniejace instancje",
|
|
52
79
|
"pt": "Fix: extendObject em vez de setObjectNotExists para states com unit/role para atualizar instancias existentes",
|
|
53
80
|
"nl": "Fix: extendObject in plaats van setObjectNotExists voor states met unit/role om bestaande instanties bij te werken",
|
|
54
|
-
"zh-cn": "修复:对带有 unit/role 的 state 使用 extendObject 而非 setObjectNotExists,以更新现有实例"
|
|
81
|
+
"zh-cn": "修复:对带有 unit/role 的 state 使用 extendObject 而非 setObjectNotExists,以更新现有实例",
|
|
82
|
+
"uk": "Виправлено: extendObject замість setObjectNotExists для states з unit/role для оновлення існуючих екземплярів"
|
|
55
83
|
},
|
|
56
84
|
"1.2.20": {
|
|
57
85
|
"en": "Fix PR#5576: remove unused admin files, reduce info logs to debug, English state names with units, channel objects for statistics/info, button read:false, this.setInterval, translate fallback to English",
|
|
@@ -63,7 +91,8 @@
|
|
|
63
91
|
"pl": "Fix PR#5576: usunieto nieuzywane pliki admin, logi info zredukowane do debug, angielskie nazwy stanow z jednostkami, obiekty channel dla statistics/info, button read:false, this.setInterval, fallback translate na angielski",
|
|
64
92
|
"pt": "Fix PR#5576: removidos ficheiros admin nao usados, logs info reduzidos a debug, nomes estados ingles com unidades, objetos channel para statistics/info, button read:false, this.setInterval, fallback translate para ingles",
|
|
65
93
|
"nl": "Fix PR#5576: ongebruikte admin-bestanden verwijderd, info-logs teruggebracht naar debug, Engelse state-namen met eenheden, channel-objecten voor statistics/info, button read:false, this.setInterval, translate fallback naar Engels",
|
|
66
|
-
"zh-cn": "修复 PR#5576:删除未使用的 admin 文件,将 info 日志降级为 debug,英文 state 名称带单位,statistics/info 的 channel 对象,button read:false,this.setInterval,translate 回退到英文"
|
|
94
|
+
"zh-cn": "修复 PR#5576:删除未使用的 admin 文件,将 info 日志降级为 debug,英文 state 名称带单位,statistics/info 的 channel 对象,button read:false,this.setInterval,translate 回退到英文",
|
|
95
|
+
"uk": "Fix PR#5576: видалено невикористані файли admin, info-логи знижено до debug, англійські імена states з одиницями, channel-обєкти для statistics/info, button read:false, this.setInterval, fallback translate на англійську"
|
|
67
96
|
},
|
|
68
97
|
"1.2.19": {
|
|
69
98
|
"en": "Added v1.2.18 entry to news section in io-package.json",
|
|
@@ -90,32 +119,6 @@
|
|
|
90
119
|
"pl": "Naprawiono brakujący await w onBatterySOCChange, sprawdzanie null w buildTestMessage, bezpieczne parsowanie intermediateSteps, usunięto martwy kod",
|
|
91
120
|
"uk": "Виправлено відсутній await в onBatterySOCChange, перевірка null в buildTestMessage, безпечний парсинг intermediateSteps, видалено мертвий код",
|
|
92
121
|
"zh-cn": "修复 onBatterySOCChange 中缺少的 await,buildTestMessage 中的 null 检查,安全的 intermediateSteps 解析,删除死代码"
|
|
93
|
-
},
|
|
94
|
-
"1.2.17": {
|
|
95
|
-
"en": "Removed old versions from common.news to comply with W1032 (maximum 7 versions)",
|
|
96
|
-
"de": "Alte Versionen aus common.news entfernt zur Einhaltung von W1032 (maximal 7 Versionen)",
|
|
97
|
-
"ru": "Удалены старые версии из common.news для соответствия W1032 (максимум 7 версий)",
|
|
98
|
-
"pt": "Versões antigas removidas de common.news para cumprir W1032 (máximo 7 versões)",
|
|
99
|
-
"nl": "Oude versies verwijderd uit common.news om te voldoen aan W1032 (maximaal 7 versies)",
|
|
100
|
-
"fr": "Anciennes versions supprimées de common.news pour respecter W1032 (maximum 7 versions)",
|
|
101
|
-
"it": "Rimosse vecchie versioni da common.news per rispettare W1032 (massimo 7 versioni)",
|
|
102
|
-
"es": "Versiones antiguas eliminadas de common.news para cumplir con W1032 (máximo 7 versiones)",
|
|
103
|
-
"pl": "Usunięto stare wersje z common.news zgodnie z W1032 (maksymalnie 7 wersji)",
|
|
104
|
-
"uk": "Видалено старі версії з common.news для відповідності W1032 (максимум 7 версій)",
|
|
105
|
-
"zh-cn": "已从 common.news 中删除旧版本以符合 W1032(最多 7 个版本)"
|
|
106
|
-
},
|
|
107
|
-
"1.2.16": {
|
|
108
|
-
"en": "Removed empty line in battery full message for improved formatting",
|
|
109
|
-
"de": "Leere Zeile in Batterie VOLL Nachricht für bessere Formatierung entfernt",
|
|
110
|
-
"ru": "Удалена пустая строка в сообщении о полной батарее для улучшения форматирования",
|
|
111
|
-
"pt": "Removida linha vazia na mensagem de bateria cheia para melhor formatação",
|
|
112
|
-
"nl": "Lege regel verwijderd in batterij vol-bericht voor verbeterde opmaak",
|
|
113
|
-
"fr": "Suppression de la ligne vide dans le message batterie pleine pour un meilleur formatage",
|
|
114
|
-
"it": "Rimossa riga vuota nel messaggio di batteria piena per un migliore formattazione",
|
|
115
|
-
"es": "Eliminada línea vacía en el mensaje de batería llena para mejorar el formato",
|
|
116
|
-
"pl": "Usunięto pusty wiersz w wiadomości o pełnej baterii dla lepszej formatowania",
|
|
117
|
-
"uk": "Видалено порожній рядок у повідомленні про повну батарею для покращення форматування",
|
|
118
|
-
"zh-cn": "已删除电池满消息中的空行以改善格式"
|
|
119
122
|
}
|
|
120
123
|
},
|
|
121
124
|
"authors": [
|
package/main.js
CHANGED
|
@@ -125,11 +125,27 @@ class PvNotifications extends utils.Adapter {
|
|
|
125
125
|
});
|
|
126
126
|
await this.extendObject('statistics.maxSOCToday', {
|
|
127
127
|
type: 'state',
|
|
128
|
-
common: {
|
|
128
|
+
common: {
|
|
129
|
+
name: 'Max SOC today',
|
|
130
|
+
type: 'number',
|
|
131
|
+
role: 'value.battery',
|
|
132
|
+
read: true,
|
|
133
|
+
write: false,
|
|
134
|
+
def: 0,
|
|
135
|
+
unit: '%',
|
|
136
|
+
},
|
|
129
137
|
});
|
|
130
138
|
await this.extendObject('statistics.minSOCToday', {
|
|
131
139
|
type: 'state',
|
|
132
|
-
common: {
|
|
140
|
+
common: {
|
|
141
|
+
name: 'Min SOC today',
|
|
142
|
+
type: 'number',
|
|
143
|
+
role: 'value.battery',
|
|
144
|
+
read: true,
|
|
145
|
+
write: false,
|
|
146
|
+
def: 100,
|
|
147
|
+
unit: '%',
|
|
148
|
+
},
|
|
133
149
|
});
|
|
134
150
|
await this.setObjectNotExists('statistics.fullCyclesWeek', {
|
|
135
151
|
type: 'state',
|
|
@@ -141,7 +157,15 @@ class PvNotifications extends utils.Adapter {
|
|
|
141
157
|
});
|
|
142
158
|
await this.extendObject('statistics.currentSOC', {
|
|
143
159
|
type: 'state',
|
|
144
|
-
common: {
|
|
160
|
+
common: {
|
|
161
|
+
name: 'Current SOC',
|
|
162
|
+
type: 'number',
|
|
163
|
+
role: 'value.battery',
|
|
164
|
+
read: true,
|
|
165
|
+
write: false,
|
|
166
|
+
def: 0,
|
|
167
|
+
unit: '%',
|
|
168
|
+
},
|
|
145
169
|
});
|
|
146
170
|
await this.extendObject('statistics.currentEnergyKWh', {
|
|
147
171
|
type: 'state',
|
|
@@ -157,7 +181,15 @@ class PvNotifications extends utils.Adapter {
|
|
|
157
181
|
});
|
|
158
182
|
await this.extendObject('statistics.currentPower', {
|
|
159
183
|
type: 'state',
|
|
160
|
-
common: {
|
|
184
|
+
common: {
|
|
185
|
+
name: 'Current power',
|
|
186
|
+
type: 'number',
|
|
187
|
+
role: 'value.power',
|
|
188
|
+
read: true,
|
|
189
|
+
write: false,
|
|
190
|
+
def: 0,
|
|
191
|
+
unit: 'W',
|
|
192
|
+
},
|
|
161
193
|
});
|
|
162
194
|
await this.extendObject('statistics.currentTotalProduction', {
|
|
163
195
|
type: 'state',
|
|
@@ -173,15 +205,39 @@ class PvNotifications extends utils.Adapter {
|
|
|
173
205
|
});
|
|
174
206
|
await this.extendObject('statistics.currentFeedIn', {
|
|
175
207
|
type: 'state',
|
|
176
|
-
common: {
|
|
208
|
+
common: {
|
|
209
|
+
name: 'Feed-in today',
|
|
210
|
+
type: 'number',
|
|
211
|
+
role: 'value.energy',
|
|
212
|
+
read: true,
|
|
213
|
+
write: false,
|
|
214
|
+
def: 0,
|
|
215
|
+
unit: 'kWh',
|
|
216
|
+
},
|
|
177
217
|
});
|
|
178
218
|
await this.extendObject('statistics.currentConsumption', {
|
|
179
219
|
type: 'state',
|
|
180
|
-
common: {
|
|
220
|
+
common: {
|
|
221
|
+
name: 'Consumption today',
|
|
222
|
+
type: 'number',
|
|
223
|
+
role: 'value.energy',
|
|
224
|
+
read: true,
|
|
225
|
+
write: false,
|
|
226
|
+
def: 0,
|
|
227
|
+
unit: 'kWh',
|
|
228
|
+
},
|
|
181
229
|
});
|
|
182
230
|
await this.extendObject('statistics.currentGridPower', {
|
|
183
231
|
type: 'state',
|
|
184
|
-
common: {
|
|
232
|
+
common: {
|
|
233
|
+
name: 'Grid power today',
|
|
234
|
+
type: 'number',
|
|
235
|
+
role: 'value.energy',
|
|
236
|
+
read: true,
|
|
237
|
+
write: false,
|
|
238
|
+
def: 0,
|
|
239
|
+
unit: 'kWh',
|
|
240
|
+
},
|
|
185
241
|
});
|
|
186
242
|
|
|
187
243
|
// States für letzte Monats-/Wochenstatistik
|
|
@@ -269,7 +325,15 @@ class PvNotifications extends utils.Adapter {
|
|
|
269
325
|
});
|
|
270
326
|
await this.extendObject('statistics.lastWeekConsumption', {
|
|
271
327
|
type: 'state',
|
|
272
|
-
common: {
|
|
328
|
+
common: {
|
|
329
|
+
name: 'Consumption last week',
|
|
330
|
+
type: 'number',
|
|
331
|
+
role: 'value.energy',
|
|
332
|
+
read: true,
|
|
333
|
+
write: false,
|
|
334
|
+
def: 0,
|
|
335
|
+
unit: 'kWh',
|
|
336
|
+
},
|
|
273
337
|
});
|
|
274
338
|
await this.extendObject('statistics.lastWeekFeedIn', {
|
|
275
339
|
type: 'state',
|
|
@@ -285,7 +349,15 @@ class PvNotifications extends utils.Adapter {
|
|
|
285
349
|
});
|
|
286
350
|
await this.extendObject('statistics.lastWeekGridPower', {
|
|
287
351
|
type: 'state',
|
|
288
|
-
common: {
|
|
352
|
+
common: {
|
|
353
|
+
name: 'Grid power last week',
|
|
354
|
+
type: 'number',
|
|
355
|
+
role: 'value.energy',
|
|
356
|
+
read: true,
|
|
357
|
+
write: false,
|
|
358
|
+
def: 0,
|
|
359
|
+
unit: 'kWh',
|
|
360
|
+
},
|
|
289
361
|
});
|
|
290
362
|
await this.setObjectNotExists('statistics.lastWeekFullCycles', {
|
|
291
363
|
type: 'state',
|
|
@@ -1098,9 +1170,7 @@ class PvNotifications extends utils.Adapter {
|
|
|
1098
1170
|
|
|
1099
1171
|
// Einheitlicher Status-Text für alle Intermediate-Stufen
|
|
1100
1172
|
const statusText =
|
|
1101
|
-
direction === 'up'
|
|
1102
|
-
? this.translate('Battery charging')
|
|
1103
|
-
: this.translate('Battery discharging');
|
|
1173
|
+
direction === 'up' ? this.translate('Battery charging') : this.translate('Battery discharging');
|
|
1104
1174
|
|
|
1105
1175
|
// Einheitliche Nachricht für alle Stufen (20, 40, 60, 80)
|
|
1106
1176
|
const batteryAt = this.translate('Battery at');
|
|
@@ -1508,19 +1578,21 @@ ${statusText}
|
|
|
1508
1578
|
// Tägliche Statistik — entweder zur konfigurierten Zeit oder zum Sonnenuntergang
|
|
1509
1579
|
if (this.config.statsUseSunset && this.config.statsSunsetObject) {
|
|
1510
1580
|
// Sonnenuntergangszeit aus dem konfigurierten Objekt lesen
|
|
1511
|
-
this.getForeignStateAsync(this.config.statsSunsetObject)
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1581
|
+
this.getForeignStateAsync(this.config.statsSunsetObject)
|
|
1582
|
+
.then(sunsetState => {
|
|
1583
|
+
if (sunsetState && sunsetState.val) {
|
|
1584
|
+
const sunsetTime = String(sunsetState.val).trim();
|
|
1585
|
+
const match = sunsetTime.match(/^(\d{1,2}):(\d{2})/);
|
|
1586
|
+
if (match) {
|
|
1587
|
+
const sunsetHours = parseInt(match[1], 10);
|
|
1588
|
+
const sunsetMinutes = parseInt(match[2], 10);
|
|
1589
|
+
if (hours === sunsetHours && minutes === sunsetMinutes) {
|
|
1590
|
+
this.sendDailyStatsMessage();
|
|
1591
|
+
}
|
|
1520
1592
|
}
|
|
1521
1593
|
}
|
|
1522
|
-
}
|
|
1523
|
-
|
|
1594
|
+
})
|
|
1595
|
+
.catch(e => this.log.warn(`Could not read sunset object: ${e.message}`));
|
|
1524
1596
|
} else {
|
|
1525
1597
|
const [dayHours, dayMinutes] = this.config.statsDayTime.split(':').map(Number);
|
|
1526
1598
|
if (hours === dayHours && minutes === dayMinutes) {
|