iobroker.acinfinity 0.7.1 → 0.7.2

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.
@@ -3,21 +3,22 @@
3
3
  * Verantwortlich für das Aktualisieren von Port-Daten in ioBroker
4
4
  */
5
5
 
6
- "use strict";
6
+ 'use strict';
7
7
 
8
- const {
9
- MODE_OPTIONS,
8
+ const {
9
+ MODE_OPTIONS,
10
10
  SETTINGS_MODE_OPTIONS,
11
11
  DEVICE_LOAD_TYPE_OPTIONS,
12
12
  DYNAMIC_RESPONSE_OPTIONS,
13
13
  PORT_CONTROL_KEY,
14
14
  ADVANCED_SETTINGS_KEY,
15
- SCHEDULE_DISABLED_VALUE
16
- } = require("../constants");
15
+ SCHEDULE_DISABLED_VALUE,
16
+ } = require('../constants');
17
17
 
18
18
  class PortUpdater {
19
19
  /**
20
20
  * Erstellt einen neuen PortUpdater
21
+ *
21
22
  * @param {object} stateManager - Referenz zum StateManager
22
23
  */
23
24
  constructor(stateManager) {
@@ -27,6 +28,7 @@ class PortUpdater {
27
28
 
28
29
  /**
29
30
  * Aktualisiert Port-Daten mit den neuesten Werten
31
+ *
30
32
  * @param {string} deviceId - Geräte-ID
31
33
  * @param {number} portId - Port-ID
32
34
  * @param {object} portData - Port-Datenobjekt
@@ -36,18 +38,21 @@ class PortUpdater {
36
38
  try {
37
39
  // Aktualisiere grundlegende Port-Informationen
38
40
  await this.updatePortInfoStates(deviceId, portId, portData);
39
-
41
+
40
42
  // Aktualisiere Modus-Informationen, falls verfügbar
41
- if (typeof portData.curMode === "number" || typeof portData.atType === "number") {
43
+ if (typeof portData.curMode === 'number' || typeof portData.atType === 'number') {
42
44
  await this.updatePortModeStates(deviceId, portId, portData);
43
45
  }
44
46
  } catch (error) {
45
- this.adapter.log.error(`Fehler beim Aktualisieren der Port-Daten für ${deviceId}.${portId}: ${error.message}`);
47
+ this.adapter.log.error(
48
+ `Fehler beim Aktualisieren der Port-Daten für ${deviceId}.${portId}: ${error.message}`,
49
+ );
46
50
  }
47
51
  }
48
52
 
49
53
  /**
50
54
  * Aktualisiert die grundlegenden Port-Informationen
55
+ *
51
56
  * @param {string} deviceId - Geräte-ID
52
57
  * @param {number} portId - Port-ID
53
58
  * @param {object} portData - Port-Datenobjekt
@@ -58,14 +63,20 @@ class PortUpdater {
58
63
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.online`, portData.online === 1);
59
64
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.power`, portData.speak);
60
65
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.state`, portData.loadState === 1);
61
-
62
- if (typeof portData.remainTime === "number") {
63
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.remainingTime`, portData.remainTime);
64
-
66
+
67
+ if (typeof portData.remainTime === 'number') {
68
+ await this.stateManager.updateState(
69
+ `devices.${deviceId}.ports.${portId}.info.remainingTime`,
70
+ portData.remainTime,
71
+ );
72
+
65
73
  if (portData.remainTime > 0) {
66
74
  const now = new Date();
67
75
  const nextChange = new Date(now.getTime() + portData.remainTime * 1000);
68
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.nextStateChange`, nextChange.toISOString());
76
+ await this.stateManager.updateState(
77
+ `devices.${deviceId}.ports.${portId}.info.nextStateChange`,
78
+ nextChange.toISOString(),
79
+ );
69
80
  } else {
70
81
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.info.nextStateChange`, null);
71
82
  }
@@ -74,6 +85,7 @@ class PortUpdater {
74
85
 
75
86
  /**
76
87
  * Aktualisiert die Modus-Informationen des Ports
88
+ *
77
89
  * @param {string} deviceId - Geräte-ID
78
90
  * @param {number} portId - Port-ID
79
91
  * @param {object} portData - Port-Datenobjekt
@@ -81,41 +93,51 @@ class PortUpdater {
81
93
  */
82
94
  async updatePortModeStates(deviceId, portId, portData) {
83
95
  // Modus-Index (API verwendet 1-basierte Modi, unser Array ist 0-basiert)
84
- const modeIndex = portData.atType ? (portData.atType - 1) : (portData.curMode - 1);
96
+ const modeIndex = portData.atType ? portData.atType - 1 : portData.curMode - 1;
85
97
  if (modeIndex >= 0 && modeIndex < MODE_OPTIONS.length) {
86
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.active`, MODE_OPTIONS[modeIndex]);
98
+ await this.stateManager.updateState(
99
+ `devices.${deviceId}.ports.${portId}.mode.active`,
100
+ MODE_OPTIONS[modeIndex],
101
+ );
87
102
  }
88
-
103
+
89
104
  // Geschwindigkeitseinstellungen
90
- if (typeof portData.speak === "number") {
91
- const isOn = (portData.atType === 2 || portData.curMode === 2);
92
-
105
+ if (typeof portData.speak === 'number') {
106
+ const isOn = portData.atType === 2 || portData.curMode === 2;
107
+
93
108
  // Wenn der Ventilator eingeschaltet ist oder der Geschwindigkeitswert > 0
94
109
  if (isOn && portData.speak > 0) {
95
110
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.onSpeed`, portData.speak);
96
111
  } else if (isOn && portData.speak === 0) {
97
112
  // Wenn der Ventilator eingeschaltet ist, aber die Geschwindigkeit 0 ist,
98
113
  // dann rufen wir den aktuellen Wert ab und behalten ihn bei
99
- const currentSpeed = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.onSpeed`);
114
+ const currentSpeed = await this.adapter.getStateAsync(
115
+ `devices.${deviceId}.ports.${portId}.mode.onSpeed`,
116
+ );
100
117
  if (!currentSpeed || currentSpeed.val === 0) {
101
- // Nur wenn noch kein Wert gesetzt ist oder der aktuelle Wert 0 ist,
118
+ // Nur wenn noch kein Wert gesetzt ist oder der aktuelle Wert 0 ist,
102
119
  // setzen wir einen Standardwert
103
120
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.onSpeed`, 3);
104
121
  }
105
122
  }
106
123
  }
107
-
124
+
108
125
  // WICHTIG: Prüfe, ob es einen gecachten offSpeed-Wert gibt, bevor wir aktualisieren
109
- const offSpeedCacheState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.offSpeedCache`);
126
+ const offSpeedCacheState = await this.adapter.getStateAsync(
127
+ `devices.${deviceId}.ports.${portId}.mode.offSpeedCache`,
128
+ );
110
129
  if (offSpeedCacheState && offSpeedCacheState.val !== undefined) {
111
130
  // Wenn ein gecachter Wert existiert, verwende diesen anstelle des API-Werts
112
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.offSpeed`, offSpeedCacheState.val);
131
+ await this.stateManager.updateState(
132
+ `devices.${deviceId}.ports.${portId}.mode.offSpeed`,
133
+ offSpeedCacheState.val,
134
+ );
113
135
  this.adapter.log.debug(`offSpeed aus Cache verwendet: ${offSpeedCacheState.val} anstelle von API-Wert`);
114
136
  } else if (portData.offSpead !== undefined) {
115
137
  // Nur aktualisieren, wenn kein Cache existiert
116
138
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.offSpeed`, portData.offSpead);
117
139
  this.adapter.log.debug(`offSpeed aktualisiert von portData.offSpead: ${portData.offSpead}`);
118
- } else if (portData.onSpead !== undefined && typeof portData.onSpead === "number") {
140
+ } else if (portData.onSpead !== undefined && typeof portData.onSpead === 'number') {
119
141
  // Wenn der onSpead-Wert existiert, könnte der offSpeed-Wert ebenfalls dort sein
120
142
  const offSpeed = portData.offSpead !== undefined ? portData.offSpead : 0;
121
143
  await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.offSpeed`, offSpeed);
@@ -125,6 +147,7 @@ class PortUpdater {
125
147
 
126
148
  /**
127
149
  * Aktualisiert die Port-Einstellungen
150
+ *
128
151
  * @param {string} deviceId - Geräte-ID
129
152
  * @param {number} portId - Port-ID
130
153
  * @param {object} settings - Einstellungsobjekt
@@ -135,53 +158,62 @@ class PortUpdater {
135
158
  this.adapter.log.warn(`Erhielt leere Einstellungen für Port ${deviceId}.${portId}`);
136
159
  return;
137
160
  }
138
-
139
- this.adapter.log.debug(`Aktualisiere Port-Einstellungen für ${deviceId}.${portId}: ${JSON.stringify(settings).substring(0, 500)}...`);
140
-
161
+
162
+ this.adapter.log.debug(
163
+ `Aktualisiere Port-Einstellungen für ${deviceId}.${portId}: ${JSON.stringify(settings).substring(0, 500)}...`,
164
+ );
165
+
141
166
  try {
142
167
  // Explizit nach offSpead im settings-Objekt suchen und aktualisieren
143
168
  if (settings.offSpead !== undefined) {
144
169
  // Prüfe, ob es einen gecachten Wert gibt
145
- const offSpeedCacheState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.offSpeedCache`);
170
+ const offSpeedCacheState = await this.adapter.getStateAsync(
171
+ `devices.${deviceId}.ports.${portId}.mode.offSpeedCache`,
172
+ );
146
173
  if (!offSpeedCacheState || offSpeedCacheState.val === undefined) {
147
174
  // Nur aktualisieren, wenn kein Cache existiert
148
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.mode.offSpeed`, settings.offSpead);
175
+ await this.stateManager.updateState(
176
+ `devices.${deviceId}.ports.${portId}.mode.offSpeed`,
177
+ settings.offSpead,
178
+ );
149
179
  this.adapter.log.debug(`offSpeed aktualisiert aus Settings: ${settings.offSpead}`);
150
180
  }
151
181
  }
152
-
182
+
153
183
  // Aktualisiere Gerätetyp
154
- if (typeof settings[PORT_CONTROL_KEY.DEVICE_LOAD_TYPE] === "number") {
184
+ if (typeof settings[PORT_CONTROL_KEY.DEVICE_LOAD_TYPE] === 'number') {
155
185
  const deviceTypeId = settings[PORT_CONTROL_KEY.DEVICE_LOAD_TYPE];
156
186
  if (deviceTypeId in DEVICE_LOAD_TYPE_OPTIONS) {
157
187
  await this.stateManager.updateState(
158
- `devices.${deviceId}.ports.${portId}.settings.deviceType`,
159
- deviceTypeId
188
+ `devices.${deviceId}.ports.${portId}.settings.deviceType`,
189
+ deviceTypeId,
160
190
  );
161
191
  }
162
192
  }
163
-
193
+
164
194
  // Aktualisiere dynamische Reaktion
165
- if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE] === "number") {
195
+ if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE] === 'number') {
166
196
  const responseTypeIndex = settings[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE];
167
197
  if (responseTypeIndex < DYNAMIC_RESPONSE_OPTIONS.length) {
168
198
  await this.stateManager.updateState(
169
- `devices.${deviceId}.ports.${portId}.settings.dynamicResponse`,
170
- DYNAMIC_RESPONSE_OPTIONS[responseTypeIndex]
199
+ `devices.${deviceId}.ports.${portId}.settings.dynamicResponse`,
200
+ DYNAMIC_RESPONSE_OPTIONS[responseTypeIndex],
171
201
  );
172
202
  }
173
203
  }
174
-
204
+
175
205
  // Weitere Methoden zur Aktualisierung verschiedener Einstellungen aufrufen
176
206
  await this.updatePortModeSettings(deviceId, portId, settings);
177
-
178
207
  } catch (error) {
179
- this.adapter.log.error(`Fehler beim Aktualisieren der Port-Einstellungen für ${deviceId}.${portId}: ${error.message}`);
208
+ this.adapter.log.error(
209
+ `Fehler beim Aktualisieren der Port-Einstellungen für ${deviceId}.${portId}: ${error.message}`,
210
+ );
180
211
  }
181
212
  }
182
213
 
183
214
  /**
184
215
  * Aktualisiert die Port-Modus-Einstellungen
216
+ *
185
217
  * @param {string} deviceId - Geräte-ID
186
218
  * @param {number} portId - Port-ID
187
219
  * @param {object} settings - Einstellungsobjekt
@@ -191,54 +223,58 @@ class PortUpdater {
191
223
  // Überprüfe und aktualisiere offSpead/onSpead direkt aus den Einstellungen
192
224
  if (settings[PORT_CONTROL_KEY.OFF_SPEED] !== undefined) {
193
225
  // Prüfe, ob es einen gecachten Wert gibt
194
- const offSpeedCacheState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.offSpeedCache`);
226
+ const offSpeedCacheState = await this.adapter.getStateAsync(
227
+ `devices.${deviceId}.ports.${portId}.mode.offSpeedCache`,
228
+ );
195
229
  if (!offSpeedCacheState || offSpeedCacheState.val === undefined) {
196
230
  // Nur aktualisieren, wenn kein Cache existiert
197
231
  await this.stateManager.updateState(
198
- `devices.${deviceId}.ports.${portId}.mode.offSpeed`,
199
- settings[PORT_CONTROL_KEY.OFF_SPEED]
232
+ `devices.${deviceId}.ports.${portId}.mode.offSpeed`,
233
+ settings[PORT_CONTROL_KEY.OFF_SPEED],
234
+ );
235
+ this.adapter.log.debug(
236
+ `offSpeed aktualisiert aus PORT_CONTROL_KEY.OFF_SPEED: ${settings[PORT_CONTROL_KEY.OFF_SPEED]}`,
200
237
  );
201
- this.adapter.log.debug(`offSpeed aktualisiert aus PORT_CONTROL_KEY.OFF_SPEED: ${settings[PORT_CONTROL_KEY.OFF_SPEED]}`);
202
238
  }
203
239
  }
204
-
240
+
205
241
  if (settings[PORT_CONTROL_KEY.ON_SPEED] !== undefined) {
206
242
  await this.stateManager.updateState(
207
- `devices.${deviceId}.ports.${portId}.mode.onSpeed`,
208
- settings[PORT_CONTROL_KEY.ON_SPEED]
243
+ `devices.${deviceId}.ports.${portId}.mode.onSpeed`,
244
+ settings[PORT_CONTROL_KEY.ON_SPEED],
209
245
  );
210
246
  }
211
-
247
+
212
248
  // Aktualisiere Timer-Einstellungen
213
- if (typeof settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_ON] === "number") {
249
+ if (typeof settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_ON] === 'number') {
214
250
  await this.stateManager.updateState(
215
- `devices.${deviceId}.ports.${portId}.mode.timer.toOnMinutes`,
216
- Math.floor(settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_ON] / 60)
251
+ `devices.${deviceId}.ports.${portId}.mode.timer.toOnMinutes`,
252
+ Math.floor(settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_ON] / 60),
217
253
  );
218
254
  }
219
-
220
- if (typeof settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_OFF] === "number") {
255
+
256
+ if (typeof settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_OFF] === 'number') {
221
257
  await this.stateManager.updateState(
222
- `devices.${deviceId}.ports.${portId}.mode.timer.toOffMinutes`,
223
- Math.floor(settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_OFF] / 60)
258
+ `devices.${deviceId}.ports.${portId}.mode.timer.toOffMinutes`,
259
+ Math.floor(settings[PORT_CONTROL_KEY.TIMER_DURATION_TO_OFF] / 60),
224
260
  );
225
261
  }
226
-
262
+
227
263
  // Aktualisiere Zyklus-Einstellungen
228
- if (typeof settings[PORT_CONTROL_KEY.CYCLE_DURATION_ON] === "number") {
264
+ if (typeof settings[PORT_CONTROL_KEY.CYCLE_DURATION_ON] === 'number') {
229
265
  await this.stateManager.updateState(
230
- `devices.${deviceId}.ports.${portId}.mode.cycle.onMinutes`,
231
- Math.floor(settings[PORT_CONTROL_KEY.CYCLE_DURATION_ON] / 60)
266
+ `devices.${deviceId}.ports.${portId}.mode.cycle.onMinutes`,
267
+ Math.floor(settings[PORT_CONTROL_KEY.CYCLE_DURATION_ON] / 60),
232
268
  );
233
269
  }
234
-
235
- if (typeof settings[PORT_CONTROL_KEY.CYCLE_DURATION_OFF] === "number") {
270
+
271
+ if (typeof settings[PORT_CONTROL_KEY.CYCLE_DURATION_OFF] === 'number') {
236
272
  await this.stateManager.updateState(
237
- `devices.${deviceId}.ports.${portId}.mode.cycle.offMinutes`,
238
- Math.floor(settings[PORT_CONTROL_KEY.CYCLE_DURATION_OFF] / 60)
273
+ `devices.${deviceId}.ports.${portId}.mode.cycle.offMinutes`,
274
+ Math.floor(settings[PORT_CONTROL_KEY.CYCLE_DURATION_OFF] / 60),
239
275
  );
240
276
  }
241
-
277
+
242
278
  // Zusätzliche Aktualisierungsmethoden
243
279
  await this.updateScheduleSettings(deviceId, portId, settings);
244
280
  await this.updateAutoModeSettings(deviceId, portId, settings);
@@ -247,6 +283,7 @@ class PortUpdater {
247
283
 
248
284
  /**
249
285
  * Aktualisiert die Zeitplan-Einstellungen
286
+ *
250
287
  * @param {string} deviceId - Geräte-ID
251
288
  * @param {number} portId - Port-ID
252
289
  * @param {object} settings - Einstellungsobjekt
@@ -255,35 +292,35 @@ class PortUpdater {
255
292
  async updateScheduleSettings(deviceId, portId, settings) {
256
293
  const startTime = settings[PORT_CONTROL_KEY.SCHEDULED_START_TIME];
257
294
  const endTime = settings[PORT_CONTROL_KEY.SCHEDULED_END_TIME];
258
-
259
- if (typeof startTime === "number") {
295
+
296
+ if (typeof startTime === 'number') {
260
297
  await this.stateManager.updateState(
261
- `devices.${deviceId}.ports.${portId}.mode.schedule.startEnabled`,
262
- startTime !== SCHEDULE_DISABLED_VALUE
298
+ `devices.${deviceId}.ports.${portId}.mode.schedule.startEnabled`,
299
+ startTime !== SCHEDULE_DISABLED_VALUE,
263
300
  );
264
-
301
+
265
302
  if (startTime !== SCHEDULE_DISABLED_VALUE) {
266
303
  const hours = Math.floor(startTime / 60);
267
304
  const minutes = startTime % 60;
268
305
  await this.stateManager.updateState(
269
- `devices.${deviceId}.ports.${portId}.mode.schedule.startTime`,
270
- `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`
306
+ `devices.${deviceId}.ports.${portId}.mode.schedule.startTime`,
307
+ `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`,
271
308
  );
272
309
  }
273
310
  }
274
-
275
- if (typeof endTime === "number") {
311
+
312
+ if (typeof endTime === 'number') {
276
313
  await this.stateManager.updateState(
277
- `devices.${deviceId}.ports.${portId}.mode.schedule.endEnabled`,
278
- endTime !== SCHEDULE_DISABLED_VALUE
314
+ `devices.${deviceId}.ports.${portId}.mode.schedule.endEnabled`,
315
+ endTime !== SCHEDULE_DISABLED_VALUE,
279
316
  );
280
-
317
+
281
318
  if (endTime !== SCHEDULE_DISABLED_VALUE) {
282
319
  const hours = Math.floor(endTime / 60);
283
320
  const minutes = endTime % 60;
284
321
  await this.stateManager.updateState(
285
- `devices.${deviceId}.ports.${portId}.mode.schedule.endTime`,
286
- `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`
322
+ `devices.${deviceId}.ports.${portId}.mode.schedule.endTime`,
323
+ `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`,
287
324
  );
288
325
  }
289
326
  }
@@ -291,6 +328,7 @@ class PortUpdater {
291
328
 
292
329
  /**
293
330
  * Aktualisiert die Auto-Modus-Einstellungen
331
+ *
294
332
  * @param {string} deviceId - Geräte-ID
295
333
  * @param {number} portId - Port-ID
296
334
  * @param {object} settings - Einstellungsobjekt
@@ -298,109 +336,110 @@ class PortUpdater {
298
336
  */
299
337
  async updateAutoModeSettings(deviceId, portId, settings) {
300
338
  // Einstellungsmodus
301
- if (typeof settings[PORT_CONTROL_KEY.AUTO_SETTINGS_MODE] === "number") {
339
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_SETTINGS_MODE] === 'number') {
302
340
  const settingsMode = settings[PORT_CONTROL_KEY.AUTO_SETTINGS_MODE];
303
341
  if (settingsMode >= 0 && settingsMode < SETTINGS_MODE_OPTIONS.length) {
304
342
  await this.stateManager.updateState(
305
- `devices.${deviceId}.ports.${portId}.mode.auto.settingsMode`,
306
- SETTINGS_MODE_OPTIONS[settingsMode]
343
+ `devices.${deviceId}.ports.${portId}.mode.auto.settingsMode`,
344
+ SETTINGS_MODE_OPTIONS[settingsMode],
307
345
  );
308
346
  }
309
347
  }
310
-
348
+
311
349
  // Temperatur-Hochgrenze
312
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_ENABLED] === "number") {
350
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_ENABLED] === 'number') {
313
351
  await this.stateManager.updateState(
314
- `devices.${deviceId}.ports.${portId}.mode.auto.tempHighEnabled`,
315
- settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_ENABLED] === 1
352
+ `devices.${deviceId}.ports.${portId}.mode.auto.tempHighEnabled`,
353
+ settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_ENABLED] === 1,
316
354
  );
317
355
  }
318
-
319
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_TRIGGER] === "number") {
356
+
357
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_TRIGGER] === 'number') {
320
358
  await this.stateManager.updateState(
321
- `devices.${deviceId}.ports.${portId}.mode.auto.tempHighTrigger`,
322
- settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_TRIGGER]
359
+ `devices.${deviceId}.ports.${portId}.mode.auto.tempHighTrigger`,
360
+ settings[PORT_CONTROL_KEY.AUTO_TEMP_HIGH_TRIGGER],
323
361
  );
324
362
  }
325
-
363
+
326
364
  // Temperatur-Tiefgrenze
327
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_ENABLED] === "number") {
365
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_ENABLED] === 'number') {
328
366
  await this.stateManager.updateState(
329
- `devices.${deviceId}.ports.${portId}.mode.auto.tempLowEnabled`,
330
- settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_ENABLED] === 1
367
+ `devices.${deviceId}.ports.${portId}.mode.auto.tempLowEnabled`,
368
+ settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_ENABLED] === 1,
331
369
  );
332
370
  }
333
-
334
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_TRIGGER] === "number") {
371
+
372
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_TRIGGER] === 'number') {
335
373
  await this.stateManager.updateState(
336
- `devices.${deviceId}.ports.${portId}.mode.auto.tempLowTrigger`,
337
- settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_TRIGGER]
374
+ `devices.${deviceId}.ports.${portId}.mode.auto.tempLowTrigger`,
375
+ settings[PORT_CONTROL_KEY.AUTO_TEMP_LOW_TRIGGER],
338
376
  );
339
377
  }
340
-
378
+
341
379
  // Feuchtigkeit-Hochgrenze
342
- if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_ENABLED] === "number") {
380
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_ENABLED] === 'number') {
343
381
  await this.stateManager.updateState(
344
- `devices.${deviceId}.ports.${portId}.mode.auto.humidityHighEnabled`,
345
- settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_ENABLED] === 1
382
+ `devices.${deviceId}.ports.${portId}.mode.auto.humidityHighEnabled`,
383
+ settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_ENABLED] === 1,
346
384
  );
347
385
  }
348
-
349
- if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_TRIGGER] === "number") {
386
+
387
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_TRIGGER] === 'number') {
350
388
  await this.stateManager.updateState(
351
- `devices.${deviceId}.ports.${portId}.mode.auto.humidityHighTrigger`,
352
- settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_TRIGGER]
389
+ `devices.${deviceId}.ports.${portId}.mode.auto.humidityHighTrigger`,
390
+ settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_HIGH_TRIGGER],
353
391
  );
354
392
  }
355
-
393
+
356
394
  // Feuchtigkeit-Tiefgrenze
357
- if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_ENABLED] === "number") {
395
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_ENABLED] === 'number') {
358
396
  await this.stateManager.updateState(
359
- `devices.${deviceId}.ports.${portId}.mode.auto.humidityLowEnabled`,
360
- settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_ENABLED] === 1
397
+ `devices.${deviceId}.ports.${portId}.mode.auto.humidityLowEnabled`,
398
+ settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_ENABLED] === 1,
361
399
  );
362
400
  }
363
-
364
- if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_TRIGGER] === "number") {
401
+
402
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_TRIGGER] === 'number') {
365
403
  await this.stateManager.updateState(
366
- `devices.${deviceId}.ports.${portId}.mode.auto.humidityLowTrigger`,
367
- settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_TRIGGER]
404
+ `devices.${deviceId}.ports.${portId}.mode.auto.humidityLowTrigger`,
405
+ settings[PORT_CONTROL_KEY.AUTO_HUMIDITY_LOW_TRIGGER],
368
406
  );
369
407
  }
370
-
408
+
371
409
  // Zieltemperatur
372
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP_ENABLED] === "number") {
410
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP_ENABLED] === 'number') {
373
411
  await this.stateManager.updateState(
374
- `devices.${deviceId}.ports.${portId}.mode.auto.targetTempEnabled`,
375
- settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP_ENABLED] === 1
412
+ `devices.${deviceId}.ports.${portId}.mode.auto.targetTempEnabled`,
413
+ settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP_ENABLED] === 1,
376
414
  );
377
415
  }
378
-
379
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP] === "number") {
416
+
417
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP] === 'number') {
380
418
  await this.stateManager.updateState(
381
- `devices.${deviceId}.ports.${portId}.mode.auto.targetTemp`,
382
- settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP]
419
+ `devices.${deviceId}.ports.${portId}.mode.auto.targetTemp`,
420
+ settings[PORT_CONTROL_KEY.AUTO_TARGET_TEMP],
383
421
  );
384
422
  }
385
-
423
+
386
424
  // Zielfeuchtigkeit
387
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY_ENABLED] === "number") {
425
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY_ENABLED] === 'number') {
388
426
  await this.stateManager.updateState(
389
- `devices.${deviceId}.ports.${portId}.mode.auto.targetHumidityEnabled`,
390
- settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY_ENABLED] === 1
427
+ `devices.${deviceId}.ports.${portId}.mode.auto.targetHumidityEnabled`,
428
+ settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY_ENABLED] === 1,
391
429
  );
392
430
  }
393
-
394
- if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY] === "number") {
431
+
432
+ if (typeof settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY] === 'number') {
395
433
  await this.stateManager.updateState(
396
- `devices.${deviceId}.ports.${portId}.mode.auto.targetHumidity`,
397
- settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY]
434
+ `devices.${deviceId}.ports.${portId}.mode.auto.targetHumidity`,
435
+ settings[PORT_CONTROL_KEY.AUTO_TARGET_HUMIDITY],
398
436
  );
399
437
  }
400
438
  }
401
439
 
402
440
  /**
403
441
  * Aktualisiert die VPD-Modus-Einstellungen
442
+ *
404
443
  * @param {string} deviceId - Geräte-ID
405
444
  * @param {number} portId - Port-ID
406
445
  * @param {object} settings - Einstellungsobjekt
@@ -408,64 +447,65 @@ class PortUpdater {
408
447
  */
409
448
  async updateVpdModeSettings(deviceId, portId, settings) {
410
449
  // Einstellungsmodus
411
- if (typeof settings[PORT_CONTROL_KEY.VPD_SETTINGS_MODE] === "number") {
450
+ if (typeof settings[PORT_CONTROL_KEY.VPD_SETTINGS_MODE] === 'number') {
412
451
  const vpdSettingsMode = settings[PORT_CONTROL_KEY.VPD_SETTINGS_MODE];
413
452
  if (vpdSettingsMode >= 0 && vpdSettingsMode < SETTINGS_MODE_OPTIONS.length) {
414
453
  await this.stateManager.updateState(
415
- `devices.${deviceId}.ports.${portId}.mode.vpd.settingsMode`,
416
- SETTINGS_MODE_OPTIONS[vpdSettingsMode]
454
+ `devices.${deviceId}.ports.${portId}.mode.vpd.settingsMode`,
455
+ SETTINGS_MODE_OPTIONS[vpdSettingsMode],
417
456
  );
418
457
  }
419
458
  }
420
-
459
+
421
460
  // VPD-Hochgrenze
422
- if (typeof settings[PORT_CONTROL_KEY.VPD_HIGH_ENABLED] === "number") {
461
+ if (typeof settings[PORT_CONTROL_KEY.VPD_HIGH_ENABLED] === 'number') {
423
462
  await this.stateManager.updateState(
424
- `devices.${deviceId}.ports.${portId}.mode.vpd.highEnabled`,
425
- settings[PORT_CONTROL_KEY.VPD_HIGH_ENABLED] === 1
463
+ `devices.${deviceId}.ports.${portId}.mode.vpd.highEnabled`,
464
+ settings[PORT_CONTROL_KEY.VPD_HIGH_ENABLED] === 1,
426
465
  );
427
466
  }
428
-
429
- if (typeof settings[PORT_CONTROL_KEY.VPD_HIGH_TRIGGER] === "number") {
467
+
468
+ if (typeof settings[PORT_CONTROL_KEY.VPD_HIGH_TRIGGER] === 'number') {
430
469
  await this.stateManager.updateState(
431
- `devices.${deviceId}.ports.${portId}.mode.vpd.highTrigger`,
432
- parseFloat((settings[PORT_CONTROL_KEY.VPD_HIGH_TRIGGER] / 10).toFixed(1))
470
+ `devices.${deviceId}.ports.${portId}.mode.vpd.highTrigger`,
471
+ parseFloat((settings[PORT_CONTROL_KEY.VPD_HIGH_TRIGGER] / 10).toFixed(1)),
433
472
  );
434
473
  }
435
-
474
+
436
475
  // VPD-Tiefgrenze
437
- if (typeof settings[PORT_CONTROL_KEY.VPD_LOW_ENABLED] === "number") {
476
+ if (typeof settings[PORT_CONTROL_KEY.VPD_LOW_ENABLED] === 'number') {
438
477
  await this.stateManager.updateState(
439
- `devices.${deviceId}.ports.${portId}.mode.vpd.lowEnabled`,
440
- settings[PORT_CONTROL_KEY.VPD_LOW_ENABLED] === 1
478
+ `devices.${deviceId}.ports.${portId}.mode.vpd.lowEnabled`,
479
+ settings[PORT_CONTROL_KEY.VPD_LOW_ENABLED] === 1,
441
480
  );
442
481
  }
443
-
444
- if (typeof settings[PORT_CONTROL_KEY.VPD_LOW_TRIGGER] === "number") {
482
+
483
+ if (typeof settings[PORT_CONTROL_KEY.VPD_LOW_TRIGGER] === 'number') {
445
484
  await this.stateManager.updateState(
446
- `devices.${deviceId}.ports.${portId}.mode.vpd.lowTrigger`,
447
- parseFloat((settings[PORT_CONTROL_KEY.VPD_LOW_TRIGGER] / 10).toFixed(1))
485
+ `devices.${deviceId}.ports.${portId}.mode.vpd.lowTrigger`,
486
+ parseFloat((settings[PORT_CONTROL_KEY.VPD_LOW_TRIGGER] / 10).toFixed(1)),
448
487
  );
449
488
  }
450
-
489
+
451
490
  // Ziel-VPD
452
- if (typeof settings[PORT_CONTROL_KEY.VPD_TARGET_ENABLED] === "number") {
491
+ if (typeof settings[PORT_CONTROL_KEY.VPD_TARGET_ENABLED] === 'number') {
453
492
  await this.stateManager.updateState(
454
- `devices.${deviceId}.ports.${portId}.mode.vpd.targetEnabled`,
455
- settings[PORT_CONTROL_KEY.VPD_TARGET_ENABLED] === 1
493
+ `devices.${deviceId}.ports.${portId}.mode.vpd.targetEnabled`,
494
+ settings[PORT_CONTROL_KEY.VPD_TARGET_ENABLED] === 1,
456
495
  );
457
496
  }
458
-
459
- if (typeof settings[PORT_CONTROL_KEY.VPD_TARGET] === "number") {
497
+
498
+ if (typeof settings[PORT_CONTROL_KEY.VPD_TARGET] === 'number') {
460
499
  await this.stateManager.updateState(
461
- `devices.${deviceId}.ports.${portId}.mode.vpd.target`,
462
- parseFloat((settings[PORT_CONTROL_KEY.VPD_TARGET] / 10).toFixed(1))
500
+ `devices.${deviceId}.ports.${portId}.mode.vpd.target`,
501
+ parseFloat((settings[PORT_CONTROL_KEY.VPD_TARGET] / 10).toFixed(1)),
463
502
  );
464
503
  }
465
504
  }
466
505
 
467
506
  /**
468
507
  * Aktualisiert die erweiterten Port-Einstellungen
508
+ *
469
509
  * @param {string} deviceId - Geräte-ID
470
510
  * @param {number} portId - Port-ID
471
511
  * @param {object} settings - Einstellungsobjekt
@@ -476,100 +516,109 @@ class PortUpdater {
476
516
  this.adapter.log.warn(`Erhielt leere erweiterte Einstellungen für Port ${deviceId}.${portId}`);
477
517
  return;
478
518
  }
479
-
480
- this.adapter.log.debug(`Aktualisiere erweiterte Port-Einstellungen für ${deviceId}.${portId}: ${JSON.stringify(settings).substring(0, 500)}...`);
481
-
519
+
520
+ this.adapter.log.debug(
521
+ `Aktualisiere erweiterte Port-Einstellungen für ${deviceId}.${portId}: ${JSON.stringify(settings).substring(0, 500)}...`,
522
+ );
523
+
482
524
  try {
483
525
  // Gerätetyp
484
526
  const loadType = settings[ADVANCED_SETTINGS_KEY.DEVICE_LOAD_TYPE];
485
- if (typeof loadType === "number" && loadType in DEVICE_LOAD_TYPE_OPTIONS) {
486
- await this.stateManager.updateState(`devices.${deviceId}.ports.${portId}.settings.deviceType`, loadType);
527
+ if (typeof loadType === 'number' && loadType in DEVICE_LOAD_TYPE_OPTIONS) {
528
+ await this.stateManager.updateState(
529
+ `devices.${deviceId}.ports.${portId}.settings.deviceType`,
530
+ loadType,
531
+ );
487
532
  }
488
-
533
+
489
534
  // Dynamischer Antworttyp
490
535
  const dynamicResponseType = settings[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE];
491
- if (typeof dynamicResponseType === "number" && dynamicResponseType < DYNAMIC_RESPONSE_OPTIONS.length) {
536
+ if (typeof dynamicResponseType === 'number' && dynamicResponseType < DYNAMIC_RESPONSE_OPTIONS.length) {
492
537
  await this.stateManager.updateState(
493
- `devices.${deviceId}.ports.${portId}.settings.dynamicResponse`,
494
- DYNAMIC_RESPONSE_OPTIONS[dynamicResponseType]
538
+ `devices.${deviceId}.ports.${portId}.settings.dynamicResponse`,
539
+ DYNAMIC_RESPONSE_OPTIONS[dynamicResponseType],
495
540
  );
496
541
  }
497
-
542
+
498
543
  // Temperatur-dynamische Einstellungen basierend auf Temperatureinheit
499
544
  const tempUnit = settings[ADVANCED_SETTINGS_KEY.TEMP_UNIT];
500
-
545
+
501
546
  if (tempUnit !== undefined) {
502
- const transitionTemp = tempUnit > 0
503
- ? settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP]
504
- : settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F];
505
-
506
- const bufferTemp = tempUnit > 0
507
- ? settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP]
508
- : settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F];
509
-
547
+ const transitionTemp =
548
+ tempUnit > 0
549
+ ? settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP]
550
+ : settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F];
551
+
552
+ const bufferTemp =
553
+ tempUnit > 0
554
+ ? settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP]
555
+ : settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F];
556
+
510
557
  if (transitionTemp !== undefined) {
511
558
  await this.stateManager.updateState(
512
- `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionTemp`,
513
- transitionTemp
559
+ `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionTemp`,
560
+ transitionTemp,
514
561
  );
515
562
  }
516
-
563
+
517
564
  if (bufferTemp !== undefined) {
518
565
  await this.stateManager.updateState(
519
- `devices.${deviceId}.ports.${portId}.settings.dynamicBufferTemp`,
520
- bufferTemp
566
+ `devices.${deviceId}.ports.${portId}.settings.dynamicBufferTemp`,
567
+ bufferTemp,
521
568
  );
522
569
  }
523
570
  }
524
-
571
+
525
572
  // Feuchtigkeit-dynamische Einstellungen
526
- if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY] === "number") {
573
+ if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY] === 'number') {
527
574
  await this.stateManager.updateState(
528
- `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionHumidity`,
529
- settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY]
575
+ `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionHumidity`,
576
+ settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY],
530
577
  );
531
578
  }
532
-
533
- if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY] === "number") {
579
+
580
+ if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY] === 'number') {
534
581
  await this.stateManager.updateState(
535
- `devices.${deviceId}.ports.${portId}.settings.dynamicBufferHumidity`,
536
- settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY]
582
+ `devices.${deviceId}.ports.${portId}.settings.dynamicBufferHumidity`,
583
+ settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY],
537
584
  );
538
585
  }
539
-
586
+
540
587
  // VPD-dynamische Einstellungen (gespeichert als Zehntel-Prozent)
541
- if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD] === "number") {
588
+ if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD] === 'number') {
542
589
  await this.stateManager.updateState(
543
- `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionVPD`,
544
- parseFloat((settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD] / 10).toFixed(1))
590
+ `devices.${deviceId}.ports.${portId}.settings.dynamicTransitionVPD`,
591
+ parseFloat((settings[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD] / 10).toFixed(1)),
545
592
  );
546
593
  }
547
-
548
- if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD] === "number") {
594
+
595
+ if (typeof settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD] === 'number') {
549
596
  await this.stateManager.updateState(
550
- `devices.${deviceId}.ports.${portId}.settings.dynamicBufferVPD`,
551
- parseFloat((settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD] / 10).toFixed(1))
597
+ `devices.${deviceId}.ports.${portId}.settings.dynamicBufferVPD`,
598
+ parseFloat((settings[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD] / 10).toFixed(1)),
552
599
  );
553
600
  }
554
-
601
+
555
602
  // Sunrise-Timer-Einstellungen
556
- if (typeof settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED] === "number") {
603
+ if (typeof settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED] === 'number') {
557
604
  await this.stateManager.updateState(
558
- `devices.${deviceId}.ports.${portId}.settings.sunriseTimerEnabled`,
559
- settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED] === 1
605
+ `devices.${deviceId}.ports.${portId}.settings.sunriseTimerEnabled`,
606
+ settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED] === 1,
560
607
  );
561
608
  }
562
-
563
- if (typeof settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION] === "number") {
609
+
610
+ if (typeof settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION] === 'number') {
564
611
  await this.stateManager.updateState(
565
- `devices.${deviceId}.ports.${portId}.settings.sunriseTimerMinutes`,
566
- settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION]
612
+ `devices.${deviceId}.ports.${portId}.settings.sunriseTimerMinutes`,
613
+ settings[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION],
567
614
  );
568
615
  }
569
616
  } catch (error) {
570
- this.adapter.log.error(`Fehler beim Aktualisieren erweiterter Port-Einstellungen für ${deviceId}.${portId}: ${error.message}`);
617
+ this.adapter.log.error(
618
+ `Fehler beim Aktualisieren erweiterter Port-Einstellungen für ${deviceId}.${portId}: ${error.message}`,
619
+ );
571
620
  }
572
621
  }
573
622
  }
574
623
 
575
- module.exports = PortUpdater;
624
+ module.exports = PortUpdater;