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
@@ -30,7 +30,7 @@ const statisticsHelperMonth = {
30
30
 
31
31
  async init(adapter) {
32
32
  this.adapter = adapter;
33
- adapter.log.debug('statisticsHelperMonth: Initialisierung gestartet.');
33
+ adapter.log.debug('statisticsHelperMonth: Initialization started.');
34
34
 
35
35
  // --- Überinstallationsschutz ---
36
36
  try {
@@ -43,9 +43,9 @@ const statisticsHelperMonth = {
43
43
  await this._createTemperatureStatistics();
44
44
  await this._subscribeActiveSensors();
45
45
  await this._scheduleMonthReset();
46
- adapter.log.debug('statisticsHelperMonth: Initialisierung abgeschlossen (Sensorüberwachung aktiv).');
46
+ adapter.log.debug('statisticsHelperMonth: Initialization completed (sensor monitoring active).');
47
47
  } catch (err) {
48
- adapter.log.warn(`statisticsHelperMonth: Fehler bei Initialisierung: ${err.message}`);
48
+ adapter.log.warn(`statisticsHelperMonth: Error during initialization: ${err.message}`);
49
49
  }
50
50
  },
51
51
 
@@ -336,9 +336,9 @@ const statisticsHelperMonth = {
336
336
  ack: true,
337
337
  });
338
338
 
339
- adapter.log.debug('statisticsHelperMonth: Gesamtzusammenfassung erfolgreich aktualisiert.');
339
+ adapter.log.debug('statisticsHelperMonth: Overall summary updated successfully.');
340
340
  } catch (err) {
341
- adapter.log.warn(`statisticsHelperMonth: Fehler bei Gesamtzusammenfassung: ${err.message}`);
341
+ adapter.log.warn(`statisticsHelperMonth: Error while updating overall summary: ${err.message}`);
342
342
  }
343
343
  },
344
344
 
@@ -357,7 +357,7 @@ const statisticsHelperMonth = {
357
357
 
358
358
  // Wenn heute bereits der 1. ist → keinen sofortigen Reset starten!
359
359
  if (now.getDate() === 1) {
360
- adapter.log.debug('statisticsHelperMonth: Heute ist bereits der 1.Reset wurde übersprungen.');
360
+ adapter.log.debug('statisticsHelperMonth: Today is already the 1streset skipped.');
361
361
  // Plan auf nächsten Monat verschieben
362
362
  nextReset.setMonth(nextReset.getMonth() + 1);
363
363
  msUntilReset = nextReset.getTime() - now.getTime();
@@ -365,14 +365,14 @@ const statisticsHelperMonth = {
365
365
 
366
366
  // Wenn Berechnung negativ oder zu klein ist → Sicherheit
367
367
  if (msUntilReset <= 0 || msUntilReset < 10 * 60 * 1000) {
368
- adapter.log.debug('statisticsHelperMonth: msUntilReset war zu kleinkorrigiere Timer.');
368
+ adapter.log.debug('statisticsHelperMonth: msUntilReset was too smalladjusting timer.');
369
369
  msUntilReset = 10 * 60 * 1000; // mindestens 10 Minuten warten
370
370
  }
371
371
 
372
372
  // Timer setzen
373
373
  this.monthResetTimer = setTimeout(async () => {
374
374
  if (this.isResetting) {
375
- adapter.log.debug('statisticsHelperMonth: Reset läuft bereitsTimer übersprungen.');
375
+ adapter.log.debug('statisticsHelperMonth: Reset already runningtimer skipped.');
376
376
  return;
377
377
  }
378
378
 
@@ -381,7 +381,7 @@ const statisticsHelperMonth = {
381
381
  }, msUntilReset);
382
382
 
383
383
  adapter.log.debug(
384
- `statisticsHelperMonth: Monats-Reset geplant in ${Math.round(msUntilReset / 60000)} Minuten.`,
384
+ `statisticsHelperMonth: Monthly reset scheduled in ${Math.round(msUntilReset / 60000)} minutes.`,
385
385
  );
386
386
  },
387
387
 
@@ -398,22 +398,22 @@ const statisticsHelperMonth = {
398
398
 
399
399
  // Nur am 1. Tag des Monats ausführen (00:05 Uhr geplant)
400
400
  if (currentDay !== 1) {
401
- adapter.log.debug('[statisticsHelperMonth] Kein MonatsanfangReset übersprungen.');
401
+ adapter.log.debug('[statisticsHelperMonth] Not the first day of the month reset skipped.');
402
402
  return;
403
403
  }
404
404
  } catch (err) {
405
- adapter.log.warn(`[statisticsHelperMonth] Fehler bei Monatsbeginn-Prüfung: ${err.message}`);
405
+ adapter.log.warn(`[statisticsHelperMonth] Error while checking month start: ${err.message}`);
406
406
  }
407
407
 
408
408
  // 🟢 NEU: Schutz vor Endlosschleifen und Mehrfachausführung
409
409
  if (this.isResetting) {
410
- adapter.log.debug('statisticsHelperMonth: Reset bereits aktivübersprungen.');
410
+ adapter.log.debug('statisticsHelperMonth: Reset already activeskipped.');
411
411
  return;
412
412
  }
413
413
  this.isResetting = true;
414
414
 
415
415
  try {
416
- adapter.log.info('statisticsHelperMonth: Monatsstatistik wird zurückgesetzt.');
416
+ adapter.log.info('statisticsHelperMonth: Monthly statistics are being reset.');
417
417
 
418
418
  // 🟢 NEU: fehlende Zeile wieder einfügen
419
419
  const resetDate = new Date().toISOString().slice(0, 19).replace('T', ' ');
@@ -482,9 +482,9 @@ const statisticsHelperMonth = {
482
482
  ack: true,
483
483
  });
484
484
 
485
- adapter.log.debug('statisticsHelperMonth: Monatsstatistik zurückgesetzt.');
485
+ adapter.log.debug('statisticsHelperMonth: Monthly statistics reset completed.');
486
486
  } catch (err) {
487
- adapter.log.warn(`statisticsHelperMonth: Fehler beim Monatsreset: ${err.message}`);
487
+ adapter.log.warn(`statisticsHelperMonth: Error during monthly reset: ${err.message}`);
488
488
  } finally {
489
489
  this.isResetting = false; // 🟢 NEU: Flag wieder freigeben
490
490
  }
@@ -30,7 +30,7 @@ const statisticsHelperWeek = {
30
30
 
31
31
  async init(adapter) {
32
32
  this.adapter = adapter;
33
- adapter.log.debug('statisticsHelperWeek: Initialisierung gestartet.');
33
+ adapter.log.debug('statisticsHelperWeek: Initialization started.');
34
34
 
35
35
  // --- Überinstallationsschutz ---
36
36
  try {
@@ -44,9 +44,9 @@ const statisticsHelperWeek = {
44
44
  await this._createTemperatureStatistics();
45
45
  await this._subscribeActiveSensors();
46
46
  await this._scheduleWeekReset();
47
- adapter.log.debug('statisticsHelperWeek: Initialisierung abgeschlossen (Sensorüberwachung aktiv).');
47
+ adapter.log.debug('statisticsHelperWeek: Initialization completed (sensor monitoring active).');
48
48
  } catch (err) {
49
- adapter.log.warn(`statisticsHelperWeek: Fehler bei Initialisierung: ${err.message}`);
49
+ adapter.log.warn(`statisticsHelperWeek: Error during initialization: ${err.message}`);
50
50
  }
51
51
  },
52
52
 
@@ -373,9 +373,7 @@ const statisticsHelperWeek = {
373
373
  // 🟢 NEU: Schutz – falls Resetzeitpunkt in der Vergangenheit liegt
374
374
  if (msUntilReset < 60 * 1000) {
375
375
  // unter 1 Minute Differenz
376
- adapter.log.warn(
377
- 'statisticsHelperWeek: Berechneter Resetzeitpunkt liegt in der Vergangenheit – Korrigiere auf nächste Woche.',
378
- );
376
+ adapter.log.warn('statisticsHelperWeek: Calculated reset time is in the past – adjusting to next week.');
379
377
  const corrected = new Date(now);
380
378
  corrected.setDate(now.getDate() + 7);
381
379
  corrected.setHours(0, 5, 0, 0);
@@ -392,7 +390,9 @@ const statisticsHelperWeek = {
392
390
  // await this._scheduleWeekReset();
393
391
  }, msUntilReset);
394
392
 
395
- adapter.log.debug(`statisticsHelperWeek: Wochen-Reset geplant in ${Math.round(msUntilReset / 60000)} Minuten.`);
393
+ adapter.log.debug(
394
+ `statisticsHelperWeek: Weekly reset scheduled in ${Math.round(msUntilReset / 60000)} minutes.`,
395
+ );
396
396
  },
397
397
 
398
398
  /**
@@ -403,13 +403,13 @@ const statisticsHelperWeek = {
403
403
 
404
404
  // 🟢 NEU: Schutz vor Endlosschleifen und Mehrfachausführung
405
405
  if (this.isResetting) {
406
- adapter.log.debug('statisticsHelperWeek: Reset bereits aktivübersprungen.');
406
+ adapter.log.debug('statisticsHelperWeek: Reset already activeskipped.');
407
407
  return;
408
408
  }
409
409
  this.isResetting = true;
410
410
 
411
411
  try {
412
- adapter.log.info('statisticsHelperWeek: Wochenstatistik wird zurückgesetzt.');
412
+ adapter.log.info('statisticsHelperWeek: Weekly statistics are being reset.');
413
413
  const resetDate = new Date().toISOString().slice(0, 19).replace('T', ' ');
414
414
 
415
415
  for (const sensor of this.sensors) {
@@ -476,9 +476,9 @@ const statisticsHelperWeek = {
476
476
  ack: true,
477
477
  });
478
478
 
479
- adapter.log.debug('statisticsHelperWeek: Wochenstatistik zurückgesetzt.');
479
+ adapter.log.debug('statisticsHelperWeek: Weekly statistics reset completed.');
480
480
  } catch (err) {
481
- adapter.log.warn(`statisticsHelperWeek: Fehler beim Wochenreset: ${err.message}`);
481
+ adapter.log.warn(`statisticsHelperWeek: Error during weekly reset: ${err.message}`);
482
482
  } finally {
483
483
  this.isResetting = false; // 🟢 NEU: Flag wieder freigeben
484
484
  }
@@ -44,16 +44,16 @@ const statusHelper = {
44
44
 
45
45
  // Beim Start initiale Updates
46
46
  this.updateSummary().catch(err =>
47
- this.adapter.log.warn(`[statusHelper] Initial-Update fehlgeschlagen: ${err.message}`),
47
+ this.adapter.log.warn(`[statusHelper] Initial update failed: ${err.message}`),
48
48
  );
49
49
  this.updateSystemStatus().catch(err =>
50
- this.adapter.log.warn(`[statusHelper] Initial-Systemstatus fehlgeschlagen: ${err.message}`),
50
+ this.adapter.log.warn(`[statusHelper] Initial system status update failed: ${err.message}`),
51
51
  );
52
52
 
53
53
  // Mitternacht-Reset einplanen
54
54
  this.scheduleMidnightReset();
55
55
 
56
- this.adapter.log.debug('[statusHelper] initialisiert');
56
+ this.adapter.log.debug('[statusHelper] initialized');
57
57
  },
58
58
 
59
59
  async handleStateChange(id, state) {
@@ -108,7 +108,7 @@ const statusHelper = {
108
108
  try {
109
109
  // FIX: Throttle - Mehrfachupdates innerhalb 1 Sekunde vermeiden
110
110
  if (Date.now() - this._lastSummaryUpdate < 1000) {
111
- this.adapter.log.debug('[statusHelper] UpdateSummary übersprungen (Throttle)');
111
+ this.adapter.log.debug('[statusHelper] updateSummary skipped (throttle)');
112
112
  return;
113
113
  }
114
114
  this._lastSummaryUpdate = Date.now();
@@ -184,7 +184,7 @@ const statusHelper = {
184
184
  ack: true,
185
185
  });
186
186
  } catch (err) {
187
- this.adapter.log.warn(`[statusHelper] Fehler beim Update: ${err.message}`);
187
+ this.adapter.log.warn(`[statusHelper] Error while updating summary: ${err.message}`);
188
188
  }
189
189
  },
190
190
 
@@ -209,7 +209,7 @@ const statusHelper = {
209
209
  await this.adapter.setStateAsync('status.system_warning_text', { val: warningText.trim(), ack: true });
210
210
  await this.adapter.setStateAsync('status.system_ok', { val: !warningActive, ack: true });
211
211
  } catch (err) {
212
- this.adapter.log.warn(`[statusHelper] Fehler beim Systemstatus: ${err.message}`);
212
+ this.adapter.log.warn(`[statusHelper] Error while updating system status: ${err.message}`);
213
213
  }
214
214
  },
215
215
 
@@ -227,16 +227,16 @@ const statusHelper = {
227
227
  this.scheduleMidnightReset(); // neu einplanen
228
228
  }, msToMidnight);
229
229
 
230
- this.adapter.log.debug(`[statusHelper] Tagesreset geplant in ${Math.round(msToMidnight / 1000)}s`);
230
+ this.adapter.log.debug(`[statusHelper] Daily reset scheduled in ${Math.round(msToMidnight / 1000)}s`);
231
231
  },
232
232
 
233
233
  async doMidnightReset() {
234
234
  try {
235
235
  await this.adapter.setStateAsync('status.pump_today_count', { val: 0, ack: true });
236
236
  await this.adapter.setStateAsync('status.pump_was_on_today', { val: false, ack: true });
237
- this.adapter.log.debug('[statusHelper] Tagesreset durchgeführt');
237
+ this.adapter.log.debug('[statusHelper] Daily reset completed');
238
238
  } catch (err) {
239
- this.adapter.log.warn(`[statusHelper] Fehler beim Tagesreset: ${err.message}`);
239
+ this.adapter.log.warn(`[statusHelper] Error during daily reset: ${err.message}`);
240
240
  }
241
241
  },
242
242
 
@@ -40,12 +40,12 @@ const temperatureHelper = {
40
40
  this.values[key] = val;
41
41
  await this._setCurrentValue(key, val);
42
42
  await this._updateMinMax(key, val);
43
- adapter.log.debug(`[temperatureHelper] Initialwert für ${key}: ${val} °C`);
43
+ adapter.log.debug(`[temperatureHelper] Initial value for ${key}: ${val} °C`);
44
44
  } else {
45
- adapter.log.debug(`[temperatureHelper] Kein gültiger Initialwert für ${key}`);
45
+ adapter.log.debug(`[temperatureHelper] No valid initial value for ${key}`);
46
46
  }
47
47
  } catch (err) {
48
- adapter.log.warn(`[temperatureHelper] Fehler beim Initial-Read ${key}: ${err.message}`);
48
+ adapter.log.warn(`[temperatureHelper] Error during initial read for ${key}: ${err.message}`);
49
49
  }
50
50
  }
51
51
 
@@ -61,7 +61,7 @@ const temperatureHelper = {
61
61
 
62
62
  // >>> NEU: Alte Min/Max-Werte wiederherstellen
63
63
  this._restoreMinMaxFromStates().catch(err =>
64
- this.adapter.log.warn(`[temperatureHelper] Restore Min/Max fehlgeschlagen: ${err.message}`),
64
+ this.adapter.log.warn(`[temperatureHelper] Min/Max restore failed: ${err.message}`),
65
65
  );
66
66
 
67
67
  // Reset um Mitternacht
@@ -73,7 +73,7 @@ const temperatureHelper = {
73
73
  ? Object.entries(this.sensors)
74
74
  .map(([k, v]) => `${k}=${v}`)
75
75
  .join(', ')
76
- : 'keine Sensoren konfiguriert'
76
+ : 'no sensors configured'
77
77
  }`,
78
78
  );
79
79
  },
@@ -140,7 +140,7 @@ const temperatureHelper = {
140
140
  ack: true,
141
141
  });
142
142
  } catch (err) {
143
- this.adapter.log.warn(`[temperatureHelper] setState current ${key} fehlgeschlagen: ${err.message}`);
143
+ this.adapter.log.warn(`[temperatureHelper] setState current ${key} failed: ${err.message}`);
144
144
  }
145
145
  },
146
146
 
@@ -152,7 +152,7 @@ const temperatureHelper = {
152
152
  try {
153
153
  await this.adapter.setStateAsync(stateId, { val: delta, ack: true });
154
154
  } catch (err) {
155
- this.adapter.log.warn(`[temperatureHelper] setState ${stateId} fehlgeschlagen: ${err.message}`);
155
+ this.adapter.log.warn(`[temperatureHelper] setState ${stateId} failed: ${err.message}`);
156
156
  }
157
157
  },
158
158
 
@@ -209,9 +209,7 @@ const temperatureHelper = {
209
209
  ack: true,
210
210
  });
211
211
  } catch (err) {
212
- this.adapter.log.warn(
213
- `[temperatureHelper] setState delta_per_hour ${key} fehlgeschlagen: ${err.message}`,
214
- );
212
+ this.adapter.log.warn(`[temperatureHelper] setState delta_per_hour ${key} failed: ${err.message}`);
215
213
  }
216
214
  }
217
215
  },
@@ -230,7 +228,7 @@ const temperatureHelper = {
230
228
  },
231
229
 
232
230
  async _resetMinMax() {
233
- this.adapter.log.debug('[temperatureHelper] Setze Tages-Min/Max zurück');
231
+ this.adapter.log.debug('[temperatureHelper] Resetting daily min/max');
234
232
  for (const key of Object.keys(this.sensors)) {
235
233
  // Bugfix: statt leeres Objekt → löschen, damit Neu-Init greift
236
234
  delete this.minMax[key];
@@ -18,7 +18,7 @@ const timeHelper = {
18
18
  // Minütlicher Check
19
19
  this._scheduleCheck();
20
20
 
21
- this.adapter.log.debug('[timeHelper] initialisiert (Prüfung alle 60s)');
21
+ this.adapter.log.debug('[timeHelper] Initialized (check every 60s)');
22
22
  },
23
23
 
24
24
  _scheduleCheck() {
@@ -39,7 +39,7 @@ const timeHelper = {
39
39
  const activeHelper = (await this.adapter.getStateAsync('pump.active_helper'))?.val;
40
40
  if (activeHelper === 'timeHelper') {
41
41
  await this.adapter.setStateAsync('pump.active_helper', { val: '', ack: true });
42
- this.adapter.log.debug('[timeHelper] Zeitmodus beendetVorrang an Solar/Control freigegeben.');
42
+ this.adapter.log.debug('[timeHelper] Time mode ended priority released to solar/control.');
43
43
  }
44
44
  return;
45
45
  } // nur aktiv im Zeitmodus
@@ -77,11 +77,11 @@ const timeHelper = {
77
77
  const activeHelper = (await this.adapter.getStateAsync('pump.active_helper'))?.val;
78
78
  if (shouldRun && activeHelper !== 'timeHelper') {
79
79
  await this.adapter.setStateAsync('pump.active_helper', { val: 'timeHelper', ack: true });
80
- this.adapter.log.debug('[timeHelper] Vorrang übernommen (Zeitfenster aktiv).');
80
+ this.adapter.log.debug('[timeHelper] Priority claimed (time window active).');
81
81
  }
82
82
  if (!shouldRun && activeHelper === 'timeHelper') {
83
83
  await this.adapter.setStateAsync('pump.active_helper', { val: '', ack: true });
84
- this.adapter.log.debug('[timeHelper] Vorrang zurückgegeben (Zeitfenster beendet).');
84
+ this.adapter.log.debug('[timeHelper] Priority released (time window ended).');
85
85
  }
86
86
 
87
87
  // --- Nur schalten, wenn sich der Zustand wirklich ändert ---
@@ -91,14 +91,12 @@ const timeHelper = {
91
91
  val: shouldRun,
92
92
  ack: false,
93
93
  });
94
- this.adapter.log.debug(`[timeHelper] Pumpenschalter ${shouldRun ? 'EIN' : 'AUS'} (${hhmm})`);
94
+ this.adapter.log.debug(`[timeHelper] Pump switch ${shouldRun ? 'ON' : 'OFF'} (${hhmm})`);
95
95
  } else {
96
- this.adapter.log.debug(
97
- `[timeHelper] Keine Änderung (${hhmm}) – Zustand bleibt ${shouldRun ? 'EIN' : 'AUS'}.`,
98
- );
96
+ this.adapter.log.debug(`[timeHelper] No change (${hhmm}) – state remains ${shouldRun ? 'ON' : 'OFF'}.`);
99
97
  }
100
98
  } catch (err) {
101
- this.adapter.log.warn(`[timeHelper] Fehler im Check: ${err.message}`);
99
+ this.adapter.log.warn(`[timeHelper] Error during check: ${err.message}`);
102
100
  }
103
101
  },
104
102
 
@@ -28,7 +28,7 @@ async function createActuatorsStates(adapter) {
28
28
  await adapter.setObjectNotExistsAsync('actuators', {
29
29
  type: 'channel',
30
30
  common: {
31
- name: 'Zusatz-Aktoren',
31
+ name: { de: 'Zusatz-Aktoren', en: 'Additional actuators' },
32
32
  },
33
33
  native: {},
34
34
  });
@@ -39,7 +39,7 @@ async function createActuatorsStates(adapter) {
39
39
  await adapter.setObjectNotExistsAsync('actuators.lighting', {
40
40
  type: 'channel',
41
41
  common: {
42
- name: 'Beleuchtung',
42
+ name: { de: 'Beleuchtung', en: 'Lighting' },
43
43
  },
44
44
  native: {},
45
45
  });
@@ -50,7 +50,7 @@ async function createActuatorsStates(adapter) {
50
50
  await adapter.setObjectNotExistsAsync(base, {
51
51
  type: 'channel',
52
52
  common: {
53
- name: `Beleuchtung ${i}`,
53
+ name: { de: `Beleuchtung ${i}`, en: `Lighting ${i}` },
54
54
  },
55
55
  native: {},
56
56
  });
@@ -58,7 +58,7 @@ async function createActuatorsStates(adapter) {
58
58
  await adapter.setObjectNotExistsAsync(`${base}.switch`, {
59
59
  type: 'state',
60
60
  common: {
61
- name: 'Schalten (Ein/Aus)',
61
+ name: { de: 'Schalten (Ein/Aus)', en: 'Switch (On/Off)' },
62
62
  type: 'boolean',
63
63
  role: 'switch',
64
64
  read: true,
@@ -72,7 +72,7 @@ async function createActuatorsStates(adapter) {
72
72
  await adapter.setObjectNotExistsAsync(`${base}.active`, {
73
73
  type: 'state',
74
74
  common: {
75
- name: 'Aktiv',
75
+ name: { de: 'Aktiv', en: 'Active' },
76
76
  type: 'boolean',
77
77
  role: 'indicator',
78
78
  read: true,
@@ -87,7 +87,7 @@ async function createActuatorsStates(adapter) {
87
87
  await adapter.setObjectNotExistsAsync(`${base}.name`, {
88
88
  type: 'state',
89
89
  common: {
90
- name: 'Name',
90
+ name: { de: 'Name', en: 'Name' },
91
91
  type: 'string',
92
92
  role: 'text',
93
93
  read: true,
@@ -102,7 +102,7 @@ async function createActuatorsStates(adapter) {
102
102
  await adapter.setObjectNotExistsAsync(`${base}.permanent`, {
103
103
  type: 'state',
104
104
  common: {
105
- name: 'Dauerbetrieb',
105
+ name: { de: 'Dauerbetrieb', en: 'Continuous operation' },
106
106
  type: 'boolean',
107
107
  role: 'switch',
108
108
  read: true,
@@ -117,7 +117,7 @@ async function createActuatorsStates(adapter) {
117
117
  await adapter.setObjectNotExistsAsync(`${base}.runtime_minutes`, {
118
118
  type: 'state',
119
119
  common: {
120
- name: 'Laufzeit (Minuten)',
120
+ name: { de: 'Laufzeit (Minuten)', en: 'Runtime (minutes)' },
121
121
  type: 'number',
122
122
  role: 'value',
123
123
  read: true,
@@ -133,7 +133,7 @@ async function createActuatorsStates(adapter) {
133
133
  await adapter.setObjectNotExistsAsync(`${base}.remaining_minutes`, {
134
134
  type: 'state',
135
135
  common: {
136
- name: 'Restlaufzeit',
136
+ name: { de: 'Restlaufzeit', en: 'Remaining runtime' },
137
137
  type: 'number',
138
138
  role: 'value',
139
139
  read: true,
@@ -147,7 +147,7 @@ async function createActuatorsStates(adapter) {
147
147
  await adapter.setObjectNotExistsAsync(`${base}.status`, {
148
148
  type: 'state',
149
149
  common: {
150
- name: 'Status',
150
+ name: { de: 'Status', en: 'Status' },
151
151
  type: 'string',
152
152
  role: 'text',
153
153
  read: true,
@@ -164,7 +164,7 @@ async function createActuatorsStates(adapter) {
164
164
  await adapter.setObjectNotExistsAsync('actuators.extrapumps', {
165
165
  type: 'channel',
166
166
  common: {
167
- name: 'Zusatzpumpen & Attraktionen',
167
+ name: { de: 'Zusatzpumpen & Attraktionen', en: 'Auxiliary pumps & attractions' },
168
168
  },
169
169
  native: {},
170
170
  });
@@ -175,7 +175,7 @@ async function createActuatorsStates(adapter) {
175
175
  await adapter.setObjectNotExistsAsync(base, {
176
176
  type: 'channel',
177
177
  common: {
178
- name: `Zusatzpumpe / Attraktion ${i}`,
178
+ name: { de: `Zusatzpumpe / Attraktion ${i}`, en: `Auxiliary pump / attraction ${i}` },
179
179
  },
180
180
  native: {},
181
181
  });
@@ -183,7 +183,7 @@ async function createActuatorsStates(adapter) {
183
183
  await adapter.setObjectNotExistsAsync(`${base}.switch`, {
184
184
  type: 'state',
185
185
  common: {
186
- name: 'Schalten (Ein/Aus)',
186
+ name: { de: 'Schalten (Ein/Aus)', en: 'Switch (On/Off)' },
187
187
  type: 'boolean',
188
188
  role: 'switch',
189
189
  read: true,
@@ -197,7 +197,7 @@ async function createActuatorsStates(adapter) {
197
197
  await adapter.setObjectNotExistsAsync(`${base}.active`, {
198
198
  type: 'state',
199
199
  common: {
200
- name: 'Aktiv',
200
+ name: { de: 'Aktiv', en: 'Active' },
201
201
  type: 'boolean',
202
202
  role: 'indicator',
203
203
  read: true,
@@ -212,7 +212,7 @@ async function createActuatorsStates(adapter) {
212
212
  await adapter.setObjectNotExistsAsync(`${base}.name`, {
213
213
  type: 'state',
214
214
  common: {
215
- name: 'Name',
215
+ name: { de: 'Name', en: 'Name' },
216
216
  type: 'string',
217
217
  role: 'text',
218
218
  read: true,
@@ -227,7 +227,7 @@ async function createActuatorsStates(adapter) {
227
227
  await adapter.setObjectNotExistsAsync(`${base}.permanent`, {
228
228
  type: 'state',
229
229
  common: {
230
- name: 'Dauerbetrieb',
230
+ name: { de: 'Dauerbetrieb', en: 'Continuous operation' },
231
231
  type: 'boolean',
232
232
  role: 'switch',
233
233
  read: true,
@@ -242,7 +242,7 @@ async function createActuatorsStates(adapter) {
242
242
  await adapter.setObjectNotExistsAsync(`${base}.runtime_minutes`, {
243
243
  type: 'state',
244
244
  common: {
245
- name: 'Laufzeit (Minuten)',
245
+ name: { de: 'Laufzeit (Minuten)', en: 'Runtime (minutes)' },
246
246
  type: 'number',
247
247
  role: 'value',
248
248
  read: true,
@@ -258,7 +258,7 @@ async function createActuatorsStates(adapter) {
258
258
  await adapter.setObjectNotExistsAsync(`${base}.remaining_minutes`, {
259
259
  type: 'state',
260
260
  common: {
261
- name: 'Restlaufzeit',
261
+ name: { de: 'Restlaufzeit', en: 'Remaining runtime' },
262
262
  type: 'number',
263
263
  role: 'value',
264
264
  read: true,
@@ -272,7 +272,7 @@ async function createActuatorsStates(adapter) {
272
272
  await adapter.setObjectNotExistsAsync(`${base}.status`, {
273
273
  type: 'state',
274
274
  common: {
275
- name: 'Status',
275
+ name: { de: 'Status', en: 'Status' },
276
276
  type: 'string',
277
277
  role: 'text',
278
278
  read: true,