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.
- package/io-package.json +14 -1
- package/lib/client.js +84 -54
- package/lib/constants.js +96 -108
- package/lib/creators/deviceCreator.js +97 -91
- package/lib/creators/portCreator.js +238 -225
- package/lib/creators/stateCreator.js +27 -21
- package/lib/dataModels.js +25 -20
- package/lib/handlers/deviceSettingsHandler.js +55 -38
- package/lib/handlers/portModeHandler.js +72 -71
- package/lib/handlers/portSettingsHandler.js +95 -68
- package/lib/stateManager.js +62 -42
- package/lib/updaters/deviceUpdater.js +133 -96
- package/lib/updaters/portUpdater.js +256 -207
- package/main.js +102 -77
- package/package.json +4 -4
|
@@ -3,21 +3,22 @@
|
|
|
3
3
|
* Verantwortlich für das Aktualisieren von Port-Daten in ioBroker
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
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(
|
|
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 ===
|
|
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(
|
|
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 ===
|
|
63
|
-
await this.stateManager.updateState(
|
|
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(
|
|
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 ?
|
|
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(
|
|
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 ===
|
|
91
|
-
const isOn =
|
|
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(
|
|
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(
|
|
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(
|
|
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 ===
|
|
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(
|
|
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(
|
|
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(
|
|
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] ===
|
|
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] ===
|
|
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(
|
|
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(
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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 ===
|
|
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,
|
|
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 ===
|
|
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,
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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(
|
|
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 ===
|
|
486
|
-
await this.stateManager.updateState(
|
|
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 ===
|
|
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 =
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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] ===
|
|
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(
|
|
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;
|