iobroker.poolcontrol 1.2.12 → 1.2.13

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.
Files changed (35) hide show
  1. package/README.md +6 -0
  2. package/admin/i18n/de/translations.json +0 -2
  3. package/admin/i18n/es/translations.json +0 -2
  4. package/admin/i18n/fr/translations.json +0 -2
  5. package/admin/i18n/it/translations.json +0 -2
  6. package/admin/i18n/nl/translations.json +0 -2
  7. package/admin/i18n/pl/translations.json +0 -2
  8. package/admin/i18n/pt/translations.json +0 -2
  9. package/admin/i18n/ru/translations.json +0 -2
  10. package/admin/i18n/uk/translations.json +0 -2
  11. package/admin/i18n/zh-cn/translations.json +0 -2
  12. package/io-package.json +16 -15
  13. package/lib/stateDefinitions/actuatorsStates.js +132 -19
  14. package/lib/stateDefinitions/aiChemistryHelpStates.js +28 -11
  15. package/lib/stateDefinitions/aiStates.js +201 -31
  16. package/lib/stateDefinitions/consumptionStates.js +140 -14
  17. package/lib/stateDefinitions/controlStates.js +120 -34
  18. package/lib/stateDefinitions/debugLogStates.js +32 -10
  19. package/lib/stateDefinitions/generalStates.js +28 -4
  20. package/lib/stateDefinitions/heatStates.js +132 -17
  21. package/lib/stateDefinitions/infoStates.js +20 -5
  22. package/lib/stateDefinitions/photovoltaicStates.js +78 -19
  23. package/lib/stateDefinitions/pumpSpeedStates.js +76 -11
  24. package/lib/stateDefinitions/pumpStates.js +100 -15
  25. package/lib/stateDefinitions/pumpStates2.js +36 -9
  26. package/lib/stateDefinitions/pumpStates3.js +92 -23
  27. package/lib/stateDefinitions/pumpStates4.js +120 -30
  28. package/lib/stateDefinitions/runtimeStates.js +74 -10
  29. package/lib/stateDefinitions/solarStates.js +68 -9
  30. package/lib/stateDefinitions/speechStates.js +133 -18
  31. package/lib/stateDefinitions/statisticsStates.js +167 -24
  32. package/lib/stateDefinitions/statusStates.js +92 -12
  33. package/lib/stateDefinitions/temperatureStates.js +117 -18
  34. package/lib/stateDefinitions/timeStates.js +43 -12
  35. package/package.json +1 -1
@@ -31,7 +31,10 @@ async function createAiStates(adapter) {
31
31
  await adapter.setObjectNotExistsAsync('ai', {
32
32
  type: 'channel',
33
33
  common: {
34
- name: 'AI functions',
34
+ name: {
35
+ en: 'AI functions',
36
+ de: 'KI-Funktionen',
37
+ },
35
38
  },
36
39
  native: {},
37
40
  });
@@ -43,8 +46,14 @@ async function createAiStates(adapter) {
43
46
  await adapter.setObjectNotExistsAsync('ai.enabled', {
44
47
  type: 'state',
45
48
  common: {
46
- name: 'Enable AI',
47
- desc: 'Global master switch for all AI functions',
49
+ name: {
50
+ en: 'Enable AI',
51
+ de: 'KI aktivieren',
52
+ },
53
+ desc: {
54
+ en: 'Global master switch for all AI functions',
55
+ de: 'Globaler Hauptschalter für alle KI-Funktionen',
56
+ },
48
57
  type: 'boolean',
49
58
  role: 'switch',
50
59
  read: true,
@@ -61,8 +70,10 @@ async function createAiStates(adapter) {
61
70
  await adapter.setObjectNotExistsAsync('ai.weather', {
62
71
  type: 'channel',
63
72
  common: {
64
- name: 'Weather-related AI functions',
65
- desc: 'All AI functions about weather, forecasts and pool tips',
73
+ name: {
74
+ en: 'Weather-related AI functions',
75
+ de: 'Wetterbezogene KI-Funktionen',
76
+ },
66
77
  },
67
78
  native: {},
68
79
  });
@@ -73,8 +84,10 @@ async function createAiStates(adapter) {
73
84
  await adapter.setObjectNotExistsAsync('ai.weather.switches', {
74
85
  type: 'channel',
75
86
  common: {
76
- name: 'Switches (weather AI)',
77
- desc: 'Individual switches for weather-related AI functions',
87
+ name: {
88
+ en: 'Switches (weather AI)',
89
+ de: 'Schalter (Wetter-KI)',
90
+ },
78
91
  },
79
92
  native: {},
80
93
  });
@@ -85,33 +98,90 @@ async function createAiStates(adapter) {
85
98
  // Steuerung & Debug für Wetter-KI
86
99
  {
87
100
  id: 'allow_speech',
88
- name: 'Allow speech output for weather AI',
101
+ name: {
102
+ en: 'Allow speech output for weather AI',
103
+ de: 'Sprachausgabe für Wetter-KI erlauben',
104
+ },
105
+ desc: {
106
+ en: 'Enables speech output for weather AI messages',
107
+ de: 'Aktiviert die Sprachausgabe für Wetter-KI-Nachrichten',
108
+ },
109
+ def: false,
110
+ }, // GEÄNDERT: von ai.switches → ai.weather.switches
111
+ {
112
+ id: 'debug_mode',
113
+ name: {
114
+ en: 'Debug mode for weather AI',
115
+ de: 'Debug-Modus für Wetter-KI',
116
+ },
117
+ desc: {
118
+ en: 'Enables debug mode for weather AI functions',
119
+ de: 'Aktiviert den Debug-Modus für Wetter-KI-Funktionen',
120
+ },
89
121
  def: false,
90
122
  }, // GEÄNDERT: von ai.switches → ai.weather.switches
91
- { id: 'debug_mode', name: 'Debug mode for weather AI', def: false }, // GEÄNDERT: von ai.switches → ai.weather.switches
92
123
 
93
124
  // Modulspezifische Schalter
94
125
  {
95
126
  id: 'daily_summary_enabled',
96
- name: 'Enable daily summary',
127
+ name: {
128
+ en: 'Enable daily summary',
129
+ de: 'Tageszusammenfassung aktivieren',
130
+ },
131
+ desc: {
132
+ en: 'Enables the daily summary output',
133
+ de: 'Aktiviert die Ausgabe der Tageszusammenfassung',
134
+ },
97
135
  def: false,
98
136
  },
99
137
  {
100
138
  id: 'daily_pool_tips_enabled',
101
- name: 'Enable daily pool tips',
139
+ name: {
140
+ en: 'Enable daily pool tips',
141
+ de: 'Tägliche Pooltipps aktivieren',
142
+ },
143
+ desc: {
144
+ en: 'Enables the daily pool tips output',
145
+ de: 'Aktiviert die Ausgabe der täglichen Pooltipps',
146
+ },
147
+ def: false,
148
+ },
149
+ {
150
+ id: 'weather_advice_enabled',
151
+ name: {
152
+ en: 'Enable weather advice',
153
+ de: 'Wetterhinweise aktivieren',
154
+ },
155
+ desc: {
156
+ en: 'Enables the weather advice output',
157
+ de: 'Aktiviert die Ausgabe der Wetterhinweise',
158
+ },
102
159
  def: false,
103
160
  },
104
- { id: 'weather_advice_enabled', name: 'Enable weather advice', def: false },
105
161
  {
106
162
  id: 'weekend_summary_enabled',
107
- name: 'Enable weekend summary',
163
+ name: {
164
+ en: 'Enable weekend summary',
165
+ de: 'Wochenendzusammenfassung aktivieren',
166
+ },
167
+ desc: {
168
+ en: 'Enables the weekend summary output',
169
+ de: 'Aktiviert die Ausgabe der Wochenendzusammenfassung',
170
+ },
108
171
  def: false,
109
172
  },
110
173
 
111
174
  // NEU: Schalter für "Vorhersage für morgen"
112
175
  {
113
176
  id: 'tomorrow_forecast_enabled',
114
- name: 'Enable tomorrow forecast',
177
+ name: {
178
+ en: 'Enable tomorrow forecast',
179
+ de: 'Vorhersage für morgen aktivieren',
180
+ },
181
+ desc: {
182
+ en: 'Enables the tomorrow forecast output',
183
+ de: 'Aktiviert die Ausgabe der Vorhersage für morgen',
184
+ },
115
185
  def: false,
116
186
  }, // NEU
117
187
  ];
@@ -121,6 +191,7 @@ async function createAiStates(adapter) {
121
191
  type: 'state',
122
192
  common: {
123
193
  name: s.name,
194
+ desc: s.desc,
124
195
  type: 'boolean',
125
196
  role: 'switch',
126
197
  read: true,
@@ -138,10 +209,10 @@ async function createAiStates(adapter) {
138
209
  await adapter.setObjectNotExistsAsync('ai.weather.schedule', {
139
210
  type: 'channel',
140
211
  common: {
141
- // FIX: i18n
142
- name: 'Schedules (weather AI)',
143
- // FIX: i18n
144
- desc: 'Time control for weather-related AI outputs',
212
+ name: {
213
+ en: 'Schedules (weather AI)',
214
+ de: 'Zeitpläne (Wetter-KI)',
215
+ },
145
216
  },
146
217
  native: {},
147
218
  });
@@ -151,29 +222,64 @@ async function createAiStates(adapter) {
151
222
  const weatherSchedule = [
152
223
  {
153
224
  id: 'daily_summary_time',
154
- name: 'Time for daily summary',
225
+ name: {
226
+ en: 'Time for daily summary',
227
+ de: 'Zeit für Tageszusammenfassung',
228
+ },
229
+ desc: {
230
+ en: 'Configured time for the daily summary output',
231
+ de: 'Eingestellte Zeit für die Ausgabe der Tageszusammenfassung',
232
+ },
155
233
  def: '09:00',
156
234
  },
157
235
  {
158
236
  id: 'daily_pool_tips_time',
159
- name: 'Time for daily pool tips',
237
+ name: {
238
+ en: 'Time for daily pool tips',
239
+ de: 'Zeit für tägliche Pooltipps',
240
+ },
241
+ desc: {
242
+ en: 'Configured time for the daily pool tips output',
243
+ de: 'Eingestellte Zeit für die Ausgabe der täglichen Pooltipps',
244
+ },
160
245
  def: '10:00',
161
246
  },
162
247
  {
163
248
  id: 'weather_advice_time',
164
- name: 'Time for weather advice',
249
+ name: {
250
+ en: 'Time for weather advice',
251
+ de: 'Zeit für Wetterhinweise',
252
+ },
253
+ desc: {
254
+ en: 'Configured time for the weather advice output',
255
+ de: 'Eingestellte Zeit für die Ausgabe der Wetterhinweise',
256
+ },
165
257
  def: '08:00',
166
258
  },
167
259
  {
168
260
  id: 'weekend_summary_time',
169
- name: 'Time for weekend summary',
261
+ name: {
262
+ en: 'Time for weekend summary',
263
+ de: 'Zeit für Wochenendzusammenfassung',
264
+ },
265
+ desc: {
266
+ en: 'Configured time for the weekend summary output',
267
+ de: 'Eingestellte Zeit für die Ausgabe der Wochenendzusammenfassung',
268
+ },
170
269
  def: '18:00',
171
270
  },
172
271
 
173
272
  // NEU: Zeitplan für "Vorhersage für morgen"
174
273
  {
175
274
  id: 'tomorrow_forecast_time',
176
- name: 'Time for tomorrow forecast',
275
+ name: {
276
+ en: 'Time for tomorrow forecast',
277
+ de: 'Zeit für Vorhersage für morgen',
278
+ },
279
+ desc: {
280
+ en: 'Configured time for the tomorrow forecast output',
281
+ de: 'Eingestellte Zeit für die Ausgabe der Vorhersage für morgen',
282
+ },
177
283
  def: '19:00',
178
284
  }, // NEU
179
285
  ];
@@ -183,6 +289,7 @@ async function createAiStates(adapter) {
183
289
  type: 'state',
184
290
  common: {
185
291
  name: t.name,
292
+ desc: t.desc,
186
293
  type: 'string',
187
294
  role: 'text',
188
295
  read: true,
@@ -200,8 +307,10 @@ async function createAiStates(adapter) {
200
307
  await adapter.setObjectNotExistsAsync('ai.weather.outputs', {
201
308
  type: 'channel',
202
309
  common: {
203
- name: 'AI outputs (weather texts)',
204
- desc: 'Text outputs of the weather AI (advice, tips, summaries)',
310
+ name: {
311
+ en: 'AI outputs (weather texts)',
312
+ de: 'KI-Ausgaben (Wettertexte)',
313
+ },
205
314
  },
206
315
  native: {},
207
316
  });
@@ -209,16 +318,76 @@ async function createAiStates(adapter) {
209
318
  // NEU / GEÄNDERT:
210
319
  // Alle bisherigen Ausgaben + neue Vorhersage + last_message unter ai.weather.outputs.*
211
320
  const weatherOutputs = [
212
- { id: 'daily_summary', name: 'Daily summary' },
213
- { id: 'pool_tips', name: 'Pool tips' },
214
- { id: 'weather_advice', name: 'Weather advice' },
215
- { id: 'weekend_summary', name: 'Weekend summary' },
321
+ {
322
+ id: 'daily_summary',
323
+ name: {
324
+ en: 'Daily summary',
325
+ de: 'Tageszusammenfassung',
326
+ },
327
+ desc: {
328
+ en: 'Generated text output for the daily summary',
329
+ de: 'Generierte Textausgabe für die Tageszusammenfassung',
330
+ },
331
+ },
332
+ {
333
+ id: 'pool_tips',
334
+ name: {
335
+ en: 'Pool tips',
336
+ de: 'Pooltipps',
337
+ },
338
+ desc: {
339
+ en: 'Generated text output for pool tips',
340
+ de: 'Generierte Textausgabe für Pooltipps',
341
+ },
342
+ },
343
+ {
344
+ id: 'weather_advice',
345
+ name: {
346
+ en: 'Weather advice',
347
+ de: 'Wetterhinweise',
348
+ },
349
+ desc: {
350
+ en: 'Generated text output for weather advice',
351
+ de: 'Generierte Textausgabe für Wetterhinweise',
352
+ },
353
+ },
354
+ {
355
+ id: 'weekend_summary',
356
+ name: {
357
+ en: 'Weekend summary',
358
+ de: 'Wochenendzusammenfassung',
359
+ },
360
+ desc: {
361
+ en: 'Generated text output for the weekend summary',
362
+ de: 'Generierte Textausgabe für die Wochenendzusammenfassung',
363
+ },
364
+ },
216
365
 
217
366
  // NEU: Ausgabefeld für die Vorhersage für morgen
218
- { id: 'tomorrow_forecast', name: 'Tomorrow forecast' }, // NEU
367
+ {
368
+ id: 'tomorrow_forecast',
369
+ name: {
370
+ en: 'Tomorrow forecast',
371
+ de: 'Vorhersage für morgen',
372
+ },
373
+ desc: {
374
+ en: 'Generated text output for the tomorrow forecast',
375
+ de: 'Generierte Textausgabe für die Vorhersage für morgen',
376
+ },
377
+ }, // NEU
219
378
 
220
379
  // GEÄNDERT: last_message gehört aktuell zur Wetter-KI
221
- { id: 'last_message', name: 'Last weather AI message' }, // GEÄNDERT: von ai.outputs → ai.weather.outputs
380
+ {
381
+ id: 'last_message',
382
+ name: {
383
+ en: 'Last weather AI message',
384
+ de: 'Letzte Wetter-KI-Nachricht',
385
+ },
386
+ desc: {
387
+ en: 'Last generated message from the weather AI',
388
+ de: 'Letzte generierte Nachricht der Wetter-KI',
389
+ },
390
+ }, // GEÄNDERT: von ai.outputs → ai.weather.outputs
222
391
  ];
223
392
 
224
393
  for (const o of weatherOutputs) {
@@ -226,6 +395,7 @@ async function createAiStates(adapter) {
226
395
  type: 'state',
227
396
  common: {
228
397
  name: o.name,
398
+ desc: o.desc,
229
399
  type: 'string',
230
400
  role: 'text',
231
401
  read: true,
@@ -17,22 +17,91 @@ async function createConsumptionStates(adapter) {
17
17
  // --- Kanal consumption ---
18
18
  await adapter.setObjectNotExistsAsync('consumption', {
19
19
  type: 'channel',
20
- common: { name: 'Power consumption' },
20
+ common: {
21
+ name: {
22
+ en: 'Power consumption',
23
+ de: 'Stromverbrauch',
24
+ },
25
+ },
21
26
  native: {},
22
27
  });
23
28
 
24
29
  const consumptionStates = {
25
- total_kwh: { name: 'Total consumption', unit: 'kWh' },
26
- day_kwh: { name: 'Consumption today', unit: 'kWh' },
27
- week_kwh: { name: 'Consumption this week', unit: 'kWh' },
28
- month_kwh: { name: 'Consumption this month', unit: 'kWh' },
29
- year_kwh: { name: 'Consumption this year', unit: 'kWh' },
30
+ total_kwh: {
31
+ name: {
32
+ en: 'Total consumption',
33
+ de: 'Gesamtverbrauch',
34
+ },
35
+ desc: {
36
+ en: 'Total accumulated power consumption',
37
+ de: 'Gesamt aufgelaufener Stromverbrauch',
38
+ },
39
+ unit: 'kWh',
40
+ },
41
+ day_kwh: {
42
+ name: {
43
+ en: 'Consumption today',
44
+ de: 'Verbrauch heute',
45
+ },
46
+ desc: {
47
+ en: 'Power consumption accumulated today',
48
+ de: 'Heute aufgelaufener Stromverbrauch',
49
+ },
50
+ unit: 'kWh',
51
+ },
52
+ week_kwh: {
53
+ name: {
54
+ en: 'Consumption this week',
55
+ de: 'Verbrauch diese Woche',
56
+ },
57
+ desc: {
58
+ en: 'Power consumption accumulated this week',
59
+ de: 'Diese Woche aufgelaufener Stromverbrauch',
60
+ },
61
+ unit: 'kWh',
62
+ },
63
+ month_kwh: {
64
+ name: {
65
+ en: 'Consumption this month',
66
+ de: 'Verbrauch diesen Monat',
67
+ },
68
+ desc: {
69
+ en: 'Power consumption accumulated this month',
70
+ de: 'Diesen Monat aufgelaufener Stromverbrauch',
71
+ },
72
+ unit: 'kWh',
73
+ },
74
+ year_kwh: {
75
+ name: {
76
+ en: 'Consumption this year',
77
+ de: 'Verbrauch dieses Jahr',
78
+ },
79
+ desc: {
80
+ en: 'Power consumption accumulated this year',
81
+ de: 'Dieses Jahr aufgelaufener Stromverbrauch',
82
+ },
83
+ unit: 'kWh',
84
+ },
30
85
  last_total_kwh: {
31
- name: 'Last meter reading (baseline)',
86
+ name: {
87
+ en: 'Last meter reading (baseline)',
88
+ de: 'Letzter Zaehlerstand (Baseline)',
89
+ },
90
+ desc: {
91
+ en: 'Last stored meter reading used as internal baseline',
92
+ de: 'Zuletzt gespeicherter Zaehlerstand als interne Baseline',
93
+ },
32
94
  unit: 'kWh',
33
95
  },
34
96
  offset_kwh: {
35
- name: 'Offset kWh (internal counter adjustment)',
97
+ name: {
98
+ en: 'Offset kWh (internal counter adjustment)',
99
+ de: 'Offset kWh (interner Zaehlerausgleich)',
100
+ },
101
+ desc: {
102
+ en: 'Internal offset for meter correction after reset or counter change',
103
+ de: 'Interner Offset zur Zaehlerkorrektur nach Reset oder Zaehlerwechsel',
104
+ },
36
105
  unit: 'kWh',
37
106
  },
38
107
  };
@@ -42,6 +111,7 @@ async function createConsumptionStates(adapter) {
42
111
  type: 'state',
43
112
  common: {
44
113
  name: cfg.name,
114
+ desc: cfg.desc,
45
115
  type: 'number',
46
116
  role: 'value.power.consumption',
47
117
  unit: cfg.unit,
@@ -61,16 +131,71 @@ async function createConsumptionStates(adapter) {
61
131
  // --- Kanal costs ---
62
132
  await adapter.setObjectNotExistsAsync('costs', {
63
133
  type: 'channel',
64
- common: { name: 'Costs' },
134
+ common: {
135
+ name: {
136
+ en: 'Costs',
137
+ de: 'Kosten',
138
+ },
139
+ },
65
140
  native: {},
66
141
  });
67
142
 
68
143
  const costStates = {
69
- total_eur: { name: 'Total costs', unit: '€' },
70
- day_eur: { name: 'Costs today', unit: '€' },
71
- week_eur: { name: 'Costs this week', unit: '€' },
72
- month_eur: { name: 'Costs this month', unit: '€' },
73
- year_eur: { name: 'Costs this year', unit: '€' },
144
+ total_eur: {
145
+ name: {
146
+ en: 'Total costs',
147
+ de: 'Gesamtkosten',
148
+ },
149
+ desc: {
150
+ en: 'Total accumulated costs',
151
+ de: 'Gesamt aufgelaufene Kosten',
152
+ },
153
+ unit: '€',
154
+ },
155
+ day_eur: {
156
+ name: {
157
+ en: 'Costs today',
158
+ de: 'Kosten heute',
159
+ },
160
+ desc: {
161
+ en: 'Costs accumulated today',
162
+ de: 'Heute aufgelaufene Kosten',
163
+ },
164
+ unit: '€',
165
+ },
166
+ week_eur: {
167
+ name: {
168
+ en: 'Costs this week',
169
+ de: 'Kosten diese Woche',
170
+ },
171
+ desc: {
172
+ en: 'Costs accumulated this week',
173
+ de: 'Diese Woche aufgelaufene Kosten',
174
+ },
175
+ unit: '€',
176
+ },
177
+ month_eur: {
178
+ name: {
179
+ en: 'Costs this month',
180
+ de: 'Kosten diesen Monat',
181
+ },
182
+ desc: {
183
+ en: 'Costs accumulated this month',
184
+ de: 'Diesen Monat aufgelaufene Kosten',
185
+ },
186
+ unit: '€',
187
+ },
188
+ year_eur: {
189
+ name: {
190
+ en: 'Costs this year',
191
+ de: 'Kosten dieses Jahr',
192
+ },
193
+ desc: {
194
+ en: 'Costs accumulated this year',
195
+ de: 'Dieses Jahr aufgelaufene Kosten',
196
+ },
197
+ unit: '€',
198
+ },
74
199
  };
75
200
 
76
201
  for (const [id, cfg] of Object.entries(costStates)) {
@@ -78,6 +203,7 @@ async function createConsumptionStates(adapter) {
78
203
  type: 'state',
79
204
  common: {
80
205
  name: cfg.name,
206
+ desc: cfg.desc,
81
207
  type: 'number',
82
208
  role: 'value.cost',
83
209
  unit: cfg.unit,