iobroker.poolcontrol 1.2.0 → 1.2.1

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 (66) hide show
  1. package/README.md +285 -292
  2. package/admin/i18n/de/translations.json +158 -4
  3. package/admin/i18n/en/translations.json +161 -3
  4. package/admin/i18n/es/translations.json +158 -4
  5. package/admin/i18n/fr/translations.json +158 -4
  6. package/admin/i18n/it/translations.json +158 -4
  7. package/admin/i18n/nl/translations.json +158 -4
  8. package/admin/i18n/pl/translations.json +158 -4
  9. package/admin/i18n/pt/translations.json +158 -4
  10. package/admin/i18n/ru/translations.json +158 -4
  11. package/admin/i18n/uk/translations.json +158 -4
  12. package/admin/i18n/zh-cn/translations.json +158 -4
  13. package/admin/jsonConfig.json +180 -602
  14. package/io-package.json +107 -100
  15. package/lib/helpers/actuatorsHelper.js +6 -8
  16. package/lib/helpers/aiChemistryHelpHelper.js +7 -7
  17. package/lib/helpers/aiForecastHelper.js +21 -21
  18. package/lib/helpers/aiHelper.js +53 -63
  19. package/lib/helpers/consumptionHelper.js +23 -25
  20. package/lib/helpers/controlHelper.js +24 -24
  21. package/lib/helpers/controlHelper2.js +17 -17
  22. package/lib/helpers/debugLogHelper.js +12 -14
  23. package/lib/helpers/frostHelper.js +6 -6
  24. package/lib/helpers/heatHelper.js +14 -14
  25. package/lib/helpers/infoHelper.js +2 -2
  26. package/lib/helpers/migrationHelper.js +16 -16
  27. package/lib/helpers/photovoltaicHelper.js +28 -28
  28. package/lib/helpers/pumpHelper.js +16 -18
  29. package/lib/helpers/pumpHelper2.js +8 -10
  30. package/lib/helpers/pumpHelper3.js +9 -9
  31. package/lib/helpers/pumpHelper4.js +9 -9
  32. package/lib/helpers/pumpSpeedHelper.js +6 -6
  33. package/lib/helpers/runtimeHelper.js +14 -14
  34. package/lib/helpers/solarHelper.js +9 -9
  35. package/lib/helpers/speechHelper.js +13 -15
  36. package/lib/helpers/speechTextHelper.js +13 -13
  37. package/lib/helpers/statisticsHelper.js +9 -9
  38. package/lib/helpers/statisticsHelperMonth.js +15 -15
  39. package/lib/helpers/statisticsHelperWeek.js +11 -11
  40. package/lib/helpers/statusHelper.js +9 -9
  41. package/lib/helpers/temperatureHelper.js +9 -11
  42. package/lib/helpers/timeHelper.js +7 -9
  43. package/lib/stateDefinitions/actuatorsStates.js +19 -19
  44. package/lib/stateDefinitions/aiChemistryHelpStates.js +59 -28
  45. package/lib/stateDefinitions/aiStates.js +119 -31
  46. package/lib/stateDefinitions/consumptionStates.js +20 -14
  47. package/lib/stateDefinitions/controlStates.js +90 -37
  48. package/lib/stateDefinitions/debugLogStates.js +28 -13
  49. package/lib/stateDefinitions/generalStates.js +4 -4
  50. package/lib/stateDefinitions/heatStates.js +21 -21
  51. package/lib/stateDefinitions/infoStates.js +11 -5
  52. package/lib/stateDefinitions/photovoltaicStates.js +52 -24
  53. package/lib/stateDefinitions/pumpSpeedStates.js +11 -11
  54. package/lib/stateDefinitions/pumpStates.js +24 -15
  55. package/lib/stateDefinitions/pumpStates2.js +22 -10
  56. package/lib/stateDefinitions/pumpStates3.js +63 -24
  57. package/lib/stateDefinitions/pumpStates4.js +62 -32
  58. package/lib/stateDefinitions/runtimeStates.js +10 -10
  59. package/lib/stateDefinitions/solarStates.js +9 -9
  60. package/lib/stateDefinitions/speechStates.js +24 -21
  61. package/lib/stateDefinitions/statisticsStates.js +107 -29
  62. package/lib/stateDefinitions/statusStates.js +14 -12
  63. package/lib/stateDefinitions/temperatureStates.js +18 -12
  64. package/lib/stateDefinitions/timeStates.js +5 -5
  65. package/main.js +38 -0
  66. package/package.json +7 -8
@@ -22,7 +22,7 @@
22
22
  * @param {import('iobroker').Adapter} adapter – Aktive ioBroker Adapterinstanz
23
23
  */
24
24
  async function createPumpStates4(adapter) {
25
- adapter.log.debug('[pumpStates4] Initialisierung der Drucksensor-States gestartet.');
25
+ adapter.log.debug('[pumpStates4] Pressure sensor state initialization started.');
26
26
 
27
27
  // ------------------------------------------------------
28
28
  // Root-Kanal: pump.pressure
@@ -30,7 +30,7 @@ async function createPumpStates4(adapter) {
30
30
  await adapter.setObjectNotExistsAsync('pump.pressure', {
31
31
  type: 'channel',
32
32
  common: {
33
- name: 'Pumpen-Drucksensor (Filterdruck)',
33
+ name: { de: 'Pumpen-Drucksensor (Filterdruck)', en: 'Pump pressure sensor (filter pressure)' },
34
34
  },
35
35
  native: {},
36
36
  });
@@ -41,8 +41,8 @@ async function createPumpStates4(adapter) {
41
41
  await adapter.setObjectNotExistsAsync('pump.pressure.current_bar', {
42
42
  type: 'state',
43
43
  common: {
44
- name: 'Aktueller Druck (bar)',
45
- desc: 'Gemessener aktueller Filterdruck in bar',
44
+ name: { de: 'Aktueller Druck (bar)', en: 'Current pressure (bar)' },
45
+ desc: { de: 'Gemessener aktueller Filterdruck in bar', en: 'Measured current filter pressure in bar' },
46
46
  type: 'number',
47
47
  role: 'value.pressure',
48
48
  unit: 'bar',
@@ -65,8 +65,11 @@ async function createPumpStates4(adapter) {
65
65
  await adapter.setObjectNotExistsAsync('pump.pressure.previous_bar', {
66
66
  type: 'state',
67
67
  common: {
68
- name: 'Vorheriger Druck (bar)',
69
- desc: 'Letzter bekannter Filterdruck vor der aktuellen Messung',
68
+ name: { de: 'Vorheriger Druck (bar)', en: 'Previous pressure (bar)' },
69
+ desc: {
70
+ de: 'Letzter bekannter Filterdruck vor der aktuellen Messung',
71
+ en: 'Last known filter pressure before the current measurement',
72
+ },
70
73
  type: 'number',
71
74
  role: 'value.pressure',
72
75
  unit: 'bar',
@@ -91,8 +94,11 @@ async function createPumpStates4(adapter) {
91
94
  await adapter.setObjectNotExistsAsync('pump.pressure.normal_min_bar', {
92
95
  type: 'state',
93
96
  common: {
94
- name: 'Normaldruck MIN (bar)',
95
- desc: 'Unterer Grenzwert des Normaldruck-Bereichs. Werte unterhalb gelten als zu niedrig.',
97
+ name: { de: 'Normaldruck MIN (bar)', en: 'Normal pressure MIN (bar)' },
98
+ desc: {
99
+ de: 'Unterer Grenzwert des Normaldruck-Bereichs. Werte unterhalb gelten als zu niedrig.',
100
+ en: 'Lower limit of the normal pressure range. Values below are considered too low.',
101
+ },
96
102
  type: 'number',
97
103
  role: 'level',
98
104
  unit: 'bar',
@@ -115,8 +121,11 @@ async function createPumpStates4(adapter) {
115
121
  await adapter.setObjectNotExistsAsync('pump.pressure.normal_max_bar', {
116
122
  type: 'state',
117
123
  common: {
118
- name: 'Normaldruck MAX (bar)',
119
- desc: 'Oberer Grenzwert des Normaldruck-Bereichs. Werte oberhalb gelten als erhöht.',
124
+ name: { de: 'Normaldruck MAX (bar)', en: 'Normal pressure MAX (bar)' },
125
+ desc: {
126
+ de: 'Oberer Grenzwert des Normaldruck-Bereichs. Werte oberhalb gelten als erhöht.',
127
+ en: 'Upper limit of the normal pressure range. Values above are considered elevated.',
128
+ },
120
129
  type: 'number',
121
130
  role: 'level',
122
131
  unit: 'bar',
@@ -143,8 +152,11 @@ async function createPumpStates4(adapter) {
143
152
  await adapter.setObjectNotExistsAsync('pump.pressure.status_text', {
144
153
  type: 'state',
145
154
  common: {
146
- name: 'Statusmeldung',
147
- desc: 'Bewertung des Drucks (z. B. Normal / Hoch / Rückspülen nötig)',
155
+ name: { de: 'Statusmeldung', en: 'Status message' },
156
+ desc: {
157
+ de: 'Bewertung des Drucks (z. B. Normal / Hoch / Rückspülen nötig)',
158
+ en: 'Assessment of the pressure (e.g. normal / high / backwash required)',
159
+ },
148
160
  type: 'string',
149
161
  role: 'text',
150
162
  read: true,
@@ -158,8 +170,11 @@ async function createPumpStates4(adapter) {
158
170
  await adapter.setObjectNotExistsAsync('pump.pressure.status_text_diagnostic', {
159
171
  type: 'state',
160
172
  common: {
161
- name: 'Diagnose',
162
- desc: 'Ausführliche Diagnose basierend auf Trend- und Lernwerten',
173
+ name: { de: 'Diagnose', en: 'Diagnostics' },
174
+ desc: {
175
+ de: 'Ausführliche Diagnose basierend auf Trend- und Lernwerten',
176
+ en: 'Detailed diagnostics based on trend and learning values',
177
+ },
163
178
  type: 'string',
164
179
  role: 'text',
165
180
  read: true,
@@ -173,8 +188,8 @@ async function createPumpStates4(adapter) {
173
188
  await adapter.setObjectNotExistsAsync('pump.pressure.last_update', {
174
189
  type: 'state',
175
190
  common: {
176
- name: 'Letzte Aktualisierung',
177
- desc: 'Zeitstempel der letzten Druckaktualisierung',
191
+ name: { de: 'Letzte Aktualisierung', en: 'Last update' },
192
+ desc: { de: 'Zeitstempel der letzten Druckaktualisierung', en: 'Timestamp of the last pressure update' },
178
193
  type: 'string',
179
194
  role: 'date',
180
195
  read: true,
@@ -190,7 +205,7 @@ async function createPumpStates4(adapter) {
190
205
  await adapter.setObjectNotExistsAsync('pump.pressure.learning', {
191
206
  type: 'channel',
192
207
  common: {
193
- name: 'Lernwerte (Druckverhalten der Pumpe)',
208
+ name: { de: 'Lernwerte (Druckverhalten der Pumpe)', en: 'Learning values (pump pressure behavior)' },
194
209
  },
195
210
  native: {},
196
211
  });
@@ -199,8 +214,11 @@ async function createPumpStates4(adapter) {
199
214
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.learned_min_bar', {
200
215
  type: 'state',
201
216
  common: {
202
- name: 'Gelerntes Minimum (bar)',
203
- desc: 'Niedrigster Druck, der im stabilen Betrieb häufig auftritt',
217
+ name: { de: 'Gelerntes Minimum (bar)', en: 'Learned minimum (bar)' },
218
+ desc: {
219
+ de: 'Niedrigster Druck, der im stabilen Betrieb häufig auftritt',
220
+ en: 'Lowest pressure frequently occurring during stable operation',
221
+ },
204
222
  type: 'number',
205
223
  unit: 'bar',
206
224
  role: 'value',
@@ -215,8 +233,11 @@ async function createPumpStates4(adapter) {
215
233
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.learned_max_bar', {
216
234
  type: 'state',
217
235
  common: {
218
- name: 'Gelerntes Maximum (bar)',
219
- desc: 'Höchster Druck, der im stabilen Betrieb häufig auftritt',
236
+ name: { de: 'Gelerntes Maximum (bar)', en: 'Learned maximum (bar)' },
237
+ desc: {
238
+ de: 'Höchster Druck, der im stabilen Betrieb häufig auftritt',
239
+ en: 'Highest pressure frequently occurring during stable operation',
240
+ },
220
241
  type: 'number',
221
242
  unit: 'bar',
222
243
  role: 'value',
@@ -231,8 +252,11 @@ async function createPumpStates4(adapter) {
231
252
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.avg_bar', {
232
253
  type: 'state',
233
254
  common: {
234
- name: 'Gleitender Durchschnittsdruck (bar)',
235
- desc: 'Berechneter Mittelwert der letzten Messungen',
255
+ name: { de: 'Gleitender Durchschnittsdruck (bar)', en: 'Rolling average pressure (bar)' },
256
+ desc: {
257
+ de: 'Berechneter Mittelwert der letzten Messungen',
258
+ en: 'Calculated average of the latest measurements',
259
+ },
236
260
  type: 'number',
237
261
  unit: 'bar',
238
262
  role: 'value',
@@ -247,8 +271,8 @@ async function createPumpStates4(adapter) {
247
271
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.trend_rising', {
248
272
  type: 'state',
249
273
  common: {
250
- name: 'Trend Steigend (0–1)',
251
- desc: 'Gibt an, wie stark der Druck steigt',
274
+ name: { de: 'Trend Steigend (0–1)', en: 'Trend rising (0–1)' },
275
+ desc: { de: 'Gibt an, wie stark der Druck steigt', en: 'Indicates how strongly the pressure is rising' },
252
276
  type: 'number',
253
277
  role: 'indicator',
254
278
  read: true,
@@ -262,8 +286,8 @@ async function createPumpStates4(adapter) {
262
286
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.trend_falling', {
263
287
  type: 'state',
264
288
  common: {
265
- name: 'Trend Fallend (0–1)',
266
- desc: 'Gibt an, wie stark der Druck fällt',
289
+ name: { de: 'Trend Fallend (0–1)', en: 'Trend falling (0–1)' },
290
+ desc: { de: 'Gibt an, wie stark der Druck fällt', en: 'Indicates how strongly the pressure is falling' },
267
291
  type: 'number',
268
292
  role: 'indicator',
269
293
  read: true,
@@ -277,8 +301,11 @@ async function createPumpStates4(adapter) {
277
301
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.trend_stability', {
278
302
  type: 'state',
279
303
  common: {
280
- name: 'Trend Stabilität (0–1)',
281
- desc: 'Gibt an, wie stabil der Druck insgesamt ist',
304
+ name: { de: 'Trend Stabilität (0–1)', en: 'Trend stability (0–1)' },
305
+ desc: {
306
+ de: 'Gibt an, wie stabil der Druck insgesamt ist',
307
+ en: 'Indicates how stable the pressure is overall',
308
+ },
282
309
  type: 'number',
283
310
  role: 'indicator',
284
311
  read: true,
@@ -292,8 +319,11 @@ async function createPumpStates4(adapter) {
292
319
  await adapter.setObjectNotExistsAsync('pump.pressure.learning.reset', {
293
320
  type: 'state',
294
321
  common: {
295
- name: 'Lernsystem zurücksetzen',
296
- desc: 'Setzt alle Lernwerte (Min/Max/Avg/Trend) auf den aktuellen Druck zurück',
322
+ name: { de: 'Lernsystem zurücksetzen', en: 'Reset learning system' },
323
+ desc: {
324
+ de: 'Setzt alle Lernwerte (Min/Max/Avg/Trend) auf den aktuellen Druck zurück',
325
+ en: 'Resets all learning values (min/max/avg/trend) to the current pressure',
326
+ },
297
327
  type: 'boolean',
298
328
  role: 'button',
299
329
  read: true,
@@ -304,7 +334,7 @@ async function createPumpStates4(adapter) {
304
334
  native: {},
305
335
  });
306
336
 
307
- adapter.log.debug('[pumpStates4] Drucksensor-States erfolgreich erstellt oder geprüft.');
337
+ adapter.log.debug('[pumpStates4] Pressure sensor states created or verified successfully.');
308
338
  }
309
339
 
310
340
  module.exports = {
@@ -19,7 +19,7 @@ async function createRuntimeStates(adapter) {
19
19
  // --- Kanal runtime ---
20
20
  await adapter.setObjectNotExistsAsync('runtime', {
21
21
  type: 'channel',
22
- common: { name: 'Pumpenlaufzeit' },
22
+ common: { name: { de: 'Pumpenlaufzeit', en: 'Pump runtime' } },
23
23
  native: {},
24
24
  });
25
25
 
@@ -27,7 +27,7 @@ async function createRuntimeStates(adapter) {
27
27
  await adapter.setObjectNotExistsAsync('runtime.total', {
28
28
  type: 'state',
29
29
  common: {
30
- name: 'Gesamtlaufzeit (formatiert)',
30
+ name: { de: 'Gesamtlaufzeit (formatiert)', en: 'Total runtime (formatted)' },
31
31
  type: 'string',
32
32
  role: 'text',
33
33
  read: true,
@@ -45,7 +45,7 @@ async function createRuntimeStates(adapter) {
45
45
  await adapter.setObjectNotExistsAsync('runtime.today', {
46
46
  type: 'state',
47
47
  common: {
48
- name: 'Tageslaufzeit (formatiert)',
48
+ name: { de: 'Tageslaufzeit (formatiert)', en: 'Today runtime (formatted)' },
49
49
  type: 'string',
50
50
  role: 'text',
51
51
  read: true,
@@ -64,7 +64,7 @@ async function createRuntimeStates(adapter) {
64
64
  await adapter.setObjectNotExistsAsync('runtime.start_count_today', {
65
65
  type: 'state',
66
66
  common: {
67
- name: 'Pumpenstarts heute',
67
+ name: { de: 'Pumpenstarts heute', en: 'Pump starts today' },
68
68
  type: 'number',
69
69
  role: 'value',
70
70
  read: true,
@@ -82,7 +82,7 @@ async function createRuntimeStates(adapter) {
82
82
  await adapter.setObjectNotExistsAsync('runtime.current_session', {
83
83
  type: 'state',
84
84
  common: {
85
- name: 'Aktuelle Laufzeit (seit Einschalten)',
85
+ name: { de: 'Aktuelle Laufzeit (seit Einschalten)', en: 'Current runtime (since switched on)' },
86
86
  type: 'string',
87
87
  role: 'text',
88
88
  read: true,
@@ -100,7 +100,7 @@ async function createRuntimeStates(adapter) {
100
100
  await adapter.setObjectNotExistsAsync('runtime.season_total', {
101
101
  type: 'state',
102
102
  common: {
103
- name: 'Gesamtlaufzeit aktuelle Saison (formatiert)',
103
+ name: { de: 'Gesamtlaufzeit aktuelle Saison (formatiert)', en: 'Total runtime current season (formatted)' },
104
104
  type: 'string',
105
105
  role: 'text',
106
106
  read: true,
@@ -118,14 +118,14 @@ async function createRuntimeStates(adapter) {
118
118
  // --- Kanal circulation ---
119
119
  await adapter.setObjectNotExistsAsync('circulation', {
120
120
  type: 'channel',
121
- common: { name: 'Umwälzung' },
121
+ common: { name: { de: 'Umwälzung', en: 'Circulation' } },
122
122
  native: {},
123
123
  });
124
124
 
125
125
  await adapter.setObjectNotExistsAsync('circulation.daily_total', {
126
126
  type: 'state',
127
127
  common: {
128
- name: 'Tägliche Umwälzmenge',
128
+ name: { de: 'Tägliche Umwälzmenge', en: 'Daily circulation volume' },
129
129
  type: 'number',
130
130
  role: 'value.volume',
131
131
  unit: 'l',
@@ -139,7 +139,7 @@ async function createRuntimeStates(adapter) {
139
139
  await adapter.setObjectNotExistsAsync('circulation.daily_required', {
140
140
  type: 'state',
141
141
  common: {
142
- name: 'Erforderliche tägliche Umwälzmenge',
142
+ name: { de: 'Erforderliche tägliche Umwälzmenge', en: 'Required daily circulation volume' },
143
143
  type: 'number',
144
144
  role: 'value.volume',
145
145
  unit: 'l',
@@ -157,7 +157,7 @@ async function createRuntimeStates(adapter) {
157
157
  await adapter.setObjectNotExistsAsync('circulation.daily_remaining', {
158
158
  type: 'state',
159
159
  common: {
160
- name: 'Verbleibende Umwälzmenge heute',
160
+ name: { de: 'Verbleibende Umwälzmenge heute', en: 'Remaining circulation volume today' },
161
161
  type: 'number',
162
162
  role: 'value.volume',
163
163
  unit: 'l',
@@ -18,7 +18,7 @@ async function createSolarStates(adapter) {
18
18
  await adapter.setObjectNotExistsAsync('solar', {
19
19
  type: 'channel',
20
20
  common: {
21
- name: 'Solar',
21
+ name: { de: 'Solar', en: 'Solar' },
22
22
  },
23
23
  native: {},
24
24
  });
@@ -27,7 +27,7 @@ async function createSolarStates(adapter) {
27
27
  await adapter.setObjectNotExistsAsync('solar.solar_control_active', {
28
28
  type: 'state',
29
29
  common: {
30
- name: 'Solarsteuerung aktivieren',
30
+ name: { de: 'Solarsteuerung aktivieren', en: 'Enable solar control' },
31
31
  type: 'boolean',
32
32
  role: 'switch',
33
33
  read: true,
@@ -48,7 +48,7 @@ async function createSolarStates(adapter) {
48
48
  await adapter.setObjectNotExistsAsync('solar.hysteresis_active', {
49
49
  type: 'state',
50
50
  common: {
51
- name: 'Regelung mit Hysterese verwenden',
51
+ name: { de: 'Regelung mit Hysterese verwenden', en: 'Use hysteresis control' },
52
52
  type: 'boolean',
53
53
  role: 'switch',
54
54
  read: true,
@@ -69,7 +69,7 @@ async function createSolarStates(adapter) {
69
69
  await adapter.setObjectNotExistsAsync('solar.temp_on', {
70
70
  type: 'state',
71
71
  common: {
72
- name: 'Kollektortemperatur Einschaltgrenze (°C)',
72
+ name: { de: 'Kollektortemperatur Einschaltgrenze (°C)', en: 'Collector temperature ON threshold (°C)' },
73
73
  type: 'number',
74
74
  role: 'value.temperature',
75
75
  unit: '°C',
@@ -91,7 +91,7 @@ async function createSolarStates(adapter) {
91
91
  await adapter.setObjectNotExistsAsync('solar.temp_off', {
92
92
  type: 'state',
93
93
  common: {
94
- name: 'Kollektortemperatur Ausschaltgrenze (°C)',
94
+ name: { de: 'Kollektortemperatur Ausschaltgrenze (°C)', en: 'Collector temperature OFF threshold (°C)' },
95
95
  type: 'number',
96
96
  role: 'value.temperature',
97
97
  unit: '°C',
@@ -113,7 +113,7 @@ async function createSolarStates(adapter) {
113
113
  await adapter.setObjectNotExistsAsync('solar.collector_warning', {
114
114
  type: 'state',
115
115
  common: {
116
- name: 'Kollektortemperatur-Warnung aktiv',
116
+ name: { de: 'Kollektortemperatur-Warnung aktiv', en: 'Collector temperature warning active' },
117
117
  type: 'boolean',
118
118
  role: 'indicator.error',
119
119
  read: true,
@@ -130,7 +130,7 @@ async function createSolarStates(adapter) {
130
130
  await adapter.setObjectNotExistsAsync('solar.warn_active', {
131
131
  type: 'state',
132
132
  common: {
133
- name: 'Warnung Kollektortemperatur aktivieren',
133
+ name: { de: 'Warnung Kollektortemperatur aktivieren', en: 'Enable collector temperature warning' },
134
134
  type: 'boolean',
135
135
  role: 'switch',
136
136
  read: true,
@@ -151,7 +151,7 @@ async function createSolarStates(adapter) {
151
151
  await adapter.setObjectNotExistsAsync('solar.warn_temp', {
152
152
  type: 'state',
153
153
  common: {
154
- name: 'Warnschwelle Kollektortemperatur (°C)',
154
+ name: { de: 'Warnschwelle Kollektortemperatur (°C)', en: 'Collector temperature warning threshold (°C)' },
155
155
  type: 'number',
156
156
  role: 'value.temperature',
157
157
  unit: '°C',
@@ -170,7 +170,7 @@ async function createSolarStates(adapter) {
170
170
  await adapter.setObjectNotExistsAsync('solar.warn_speech', {
171
171
  type: 'state',
172
172
  common: {
173
- name: 'Sprachausgabe bei Warnung aktivieren',
173
+ name: { de: 'Sprachausgabe bei Warnung aktivieren', en: 'Enable speech output for warnings' },
174
174
  type: 'boolean',
175
175
  role: 'switch',
176
176
  read: true,
@@ -14,7 +14,7 @@ async function createSpeechStates(adapter) {
14
14
  // Root-Kanal
15
15
  await adapter.setObjectNotExistsAsync('speech', {
16
16
  type: 'channel',
17
- common: { name: 'Sprachausgaben' },
17
+ common: { name: { de: 'Sprachausgaben', en: 'Speech outputs' } },
18
18
  native: {},
19
19
  });
20
20
 
@@ -22,7 +22,7 @@ async function createSpeechStates(adapter) {
22
22
  await adapter.setObjectNotExistsAsync('speech.active', {
23
23
  type: 'state',
24
24
  common: {
25
- name: 'Sprachausgaben aktiv',
25
+ name: { de: 'Sprachausgaben aktiv', en: 'Enable speech outputs' },
26
26
  type: 'boolean',
27
27
  role: 'switch',
28
28
  read: true,
@@ -45,7 +45,7 @@ async function createSpeechStates(adapter) {
45
45
  await adapter.setObjectNotExistsAsync('speech.last_text', {
46
46
  type: 'state',
47
47
  common: {
48
- name: 'Zuletzt gesprochener Text',
48
+ name: { de: 'Zuletzt gesprochener Text', en: 'Last spoken text' },
49
49
  type: 'string',
50
50
  role: 'text',
51
51
  read: true,
@@ -60,8 +60,11 @@ async function createSpeechStates(adapter) {
60
60
  await adapter.setObjectNotExistsAsync('speech.queue', {
61
61
  type: 'state',
62
62
  common: {
63
- name: 'Interne Sprach-Nachrichtenwarteschlange',
64
- desc: 'Dient als Übergabepunkt für Textmeldungen aus anderen Modulen (nicht vom Benutzer beschreibbar)',
63
+ name: { de: 'Interne Sprach-Nachrichtenwarteschlange', en: 'Internal speech message queue' },
64
+ desc: {
65
+ de: 'Dient als Übergabepunkt für Textmeldungen aus anderen Modulen (nicht vom Benutzer beschreibbar)',
66
+ en: 'Used as a handoff point for text messages from other modules (not writable by the user).',
67
+ },
65
68
  type: 'string',
66
69
  role: 'text',
67
70
  read: true,
@@ -75,7 +78,7 @@ async function createSpeechStates(adapter) {
75
78
  await adapter.setObjectNotExistsAsync('speech.start_text', {
76
79
  type: 'state',
77
80
  common: {
78
- name: 'Starttext',
81
+ name: { de: 'Starttext', en: 'Start text' },
79
82
  type: 'string',
80
83
  role: 'text',
81
84
  read: true,
@@ -91,7 +94,7 @@ async function createSpeechStates(adapter) {
91
94
  await adapter.setObjectNotExistsAsync('speech.end_text', {
92
95
  type: 'state',
93
96
  common: {
94
- name: 'Endtext',
97
+ name: { de: 'Endtext', en: 'End text' },
95
98
  type: 'string',
96
99
  role: 'text',
97
100
  read: true,
@@ -110,56 +113,56 @@ async function createSpeechStates(adapter) {
110
113
 
111
114
  await adapter.setObjectNotExistsAsync('speech.amazon_alexa', {
112
115
  type: 'channel',
113
- common: { name: 'Amazon Alexa (Sprachausgabe)' },
116
+ common: { name: { de: 'Amazon Alexa (Sprachausgabe)', en: 'Amazon Alexa (speech output)' } },
114
117
  native: {},
115
118
  });
116
119
 
117
120
  const alexaStates = [
118
121
  {
119
122
  id: 'quiet_time_week_enabled',
120
- name: 'Ruhezeit (Mo–Fr) aktiv',
123
+ name: { de: 'Ruhezeit (Mo–Fr) aktiv', en: 'Quiet time (Mon–Fri) enabled' },
121
124
  type: 'boolean',
122
125
  role: 'switch',
123
126
  def: false,
124
127
  },
125
128
  {
126
129
  id: 'quiet_time_week_start',
127
- name: 'Ruhezeit (Mo–Fr) Startzeit (HH:MM)',
130
+ name: { de: 'Ruhezeit (Mo–Fr) Startzeit (HH:MM)', en: 'Quiet time (Mon–Fri) start time (HH:MM)' },
128
131
  type: 'string',
129
132
  role: 'value.time',
130
133
  def: '22:00',
131
134
  },
132
135
  {
133
136
  id: 'quiet_time_week_end',
134
- name: 'Ruhezeit (Mo–Fr) Endzeit (HH:MM)',
137
+ name: { de: 'Ruhezeit (Mo–Fr) Endzeit (HH:MM)', en: 'Quiet time (Mon–Fri) end time (HH:MM)' },
135
138
  type: 'string',
136
139
  role: 'value.time',
137
140
  def: '07:00',
138
141
  },
139
142
  {
140
143
  id: 'quiet_time_weekend_enabled',
141
- name: 'Ruhezeit (Sa–So) aktiv',
144
+ name: { de: 'Ruhezeit (Sa–So) aktiv', en: 'Quiet time (Sat–Sun) enabled' },
142
145
  type: 'boolean',
143
146
  role: 'switch',
144
147
  def: false,
145
148
  },
146
149
  {
147
150
  id: 'quiet_time_weekend_start',
148
- name: 'Ruhezeit (Sa–So) Startzeit (HH:MM)',
151
+ name: { de: 'Ruhezeit (Sa–So) Startzeit (HH:MM)', en: 'Quiet time (Sat–Sun) start time (HH:MM)' },
149
152
  type: 'string',
150
153
  role: 'value.time',
151
154
  def: '22:00',
152
155
  },
153
156
  {
154
157
  id: 'quiet_time_weekend_end',
155
- name: 'Ruhezeit (Sa–So) Endzeit (HH:MM)',
158
+ name: { de: 'Ruhezeit (Sa–So) Endzeit (HH:MM)', en: 'Quiet time (Sat–Sun) end time (HH:MM)' },
156
159
  type: 'string',
157
160
  role: 'value.time',
158
161
  def: '08:00',
159
162
  },
160
163
  {
161
164
  id: 'quiet_time_active_now',
162
- name: 'Alexa derzeit stumm (Ruhezeit aktiv)',
165
+ name: { de: 'Alexa derzeit stumm (Ruhezeit aktiv)', en: 'Alexa muted now (quiet time active)' },
163
166
  type: 'boolean',
164
167
  role: 'indicator',
165
168
  def: false,
@@ -189,14 +192,14 @@ async function createSpeechStates(adapter) {
189
192
  }
190
193
  }
191
194
 
192
- adapter.log.debug('[speechStates] Amazon Alexa – Ruhezeit-States geprüft und angelegt.');
195
+ adapter.log.debug('[speechStates] Amazon Alexa quiet-time states checked and created.');
193
196
 
194
197
  // versteckte Dateien
195
198
 
196
199
  await adapter.setObjectNotExistsAsync('speech.solar_active', {
197
200
  type: 'state',
198
201
  common: {
199
- name: 'Solarsteuerung aktiv',
202
+ name: { de: 'Solarsteuerung aktiv', en: 'Solar control active' },
200
203
  type: 'boolean',
201
204
  role: 'indicator',
202
205
  read: true,
@@ -210,7 +213,7 @@ async function createSpeechStates(adapter) {
210
213
  await adapter.setObjectNotExistsAsync('speech.time_active', {
211
214
  type: 'state',
212
215
  common: {
213
- name: 'Zeitsteuerung aktiv',
216
+ name: { de: 'Zeitsteuerung aktiv', en: 'Time control active' },
214
217
  type: 'boolean',
215
218
  role: 'indicator',
216
219
  read: true,
@@ -224,7 +227,7 @@ async function createSpeechStates(adapter) {
224
227
  await adapter.setObjectNotExistsAsync('speech.frost_active', {
225
228
  type: 'state',
226
229
  common: {
227
- name: 'Frostschutz aktiv',
230
+ name: { de: 'Frostschutz aktiv', en: 'Frost protection active' },
228
231
  type: 'boolean',
229
232
  role: 'indicator',
230
233
  read: true,
@@ -247,10 +250,10 @@ async function createSpeechStates(adapter) {
247
250
  },
248
251
  });
249
252
  } catch (err) {
250
- adapter.log.warn(`[speechStates] Konnte hidden-Flag für ${id} nicht setzen: ${err.message}`);
253
+ adapter.log.warn(`[speechStates] Could not set hidden flags for ${id}: ${err.message}`);
251
254
  }
252
255
  }
253
- adapter.log.debug('[speechStates] Hidden-Flags für Solar/Time/Frost geprüft und aktualisiert');
256
+ adapter.log.debug('[speechStates] Hidden flags for Solar/Time/Frost checked and updated');
254
257
  }
255
258
 
256
259
  module.exports = {