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,15 +3,15 @@
|
|
|
3
3
|
* Verarbeitet Änderungen an den Port-Modi und deren Einstellungen
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
'use strict';
|
|
7
7
|
|
|
8
8
|
const {
|
|
9
9
|
MODE_OPTIONS,
|
|
10
10
|
SETTINGS_MODE_OPTIONS,
|
|
11
11
|
SCHEDULE_DISABLED_VALUE,
|
|
12
12
|
SCHEDULE_MIDNIGHT_VALUE,
|
|
13
|
-
SCHEDULE_EOD_VALUE
|
|
14
|
-
} = require(
|
|
13
|
+
SCHEDULE_EOD_VALUE,
|
|
14
|
+
} = require('../constants');
|
|
15
15
|
|
|
16
16
|
class PortModeHandler {
|
|
17
17
|
constructor(stateManager) {
|
|
@@ -26,7 +26,7 @@ class PortModeHandler {
|
|
|
26
26
|
|
|
27
27
|
setClient(client) {
|
|
28
28
|
this.client = client;
|
|
29
|
-
this.adapter.log.debug(
|
|
29
|
+
this.adapter.log.debug('API-Client erfolgreich an PortModeHandler übergeben');
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -34,7 +34,7 @@ class PortModeHandler {
|
|
|
34
34
|
*/
|
|
35
35
|
async handlePortModeChange(deviceId, portId, path, value) {
|
|
36
36
|
if (path.length < 1) {
|
|
37
|
-
this.adapter.log.warn(`Ungültiger Pfad für Port-Modus: ${path.join(
|
|
37
|
+
this.adapter.log.warn(`Ungültiger Pfad für Port-Modus: ${path.join('.')}`);
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ class PortModeHandler {
|
|
|
42
42
|
|
|
43
43
|
try {
|
|
44
44
|
if (!this.client) {
|
|
45
|
-
throw new Error(
|
|
45
|
+
throw new Error('API-Client nicht gesetzt.');
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
const normalizedDeviceId = String(deviceId);
|
|
@@ -81,12 +81,11 @@ class PortModeHandler {
|
|
|
81
81
|
*/
|
|
82
82
|
async getCurrentSpeeds(deviceId, portId) {
|
|
83
83
|
const onSpeedState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.onSpeed`);
|
|
84
|
-
const onSpeed =
|
|
85
|
-
? onSpeedState.val : 3;
|
|
84
|
+
const onSpeed =
|
|
85
|
+
onSpeedState && typeof onSpeedState.val === 'number' && onSpeedState.val > 0 ? onSpeedState.val : 3;
|
|
86
86
|
|
|
87
87
|
const offSpeedState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.offSpeed`);
|
|
88
|
-
const offSpeed =
|
|
89
|
-
? offSpeedState.val : 0;
|
|
88
|
+
const offSpeed = offSpeedState && typeof offSpeedState.val === 'number' ? offSpeedState.val : 0;
|
|
90
89
|
|
|
91
90
|
return { onSpeed, offSpeed };
|
|
92
91
|
}
|
|
@@ -96,7 +95,7 @@ class PortModeHandler {
|
|
|
96
95
|
*/
|
|
97
96
|
async getCurrentAtType(deviceId, portId) {
|
|
98
97
|
const modeState = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.mode.active`);
|
|
99
|
-
const modeName = modeState ? modeState.val :
|
|
98
|
+
const modeName = modeState ? modeState.val : 'On';
|
|
100
99
|
const modeIndex = MODE_OPTIONS.indexOf(modeName);
|
|
101
100
|
return modeIndex >= 0 ? modeIndex + 1 : 2; // fallback: On (2)
|
|
102
101
|
}
|
|
@@ -114,20 +113,20 @@ class PortModeHandler {
|
|
|
114
113
|
}
|
|
115
114
|
|
|
116
115
|
switch (settingType) {
|
|
117
|
-
case
|
|
116
|
+
case 'active':
|
|
118
117
|
await this.handleActiveModeChange(deviceId, portId, value);
|
|
119
118
|
break;
|
|
120
119
|
|
|
121
|
-
case
|
|
120
|
+
case 'onSpeed':
|
|
122
121
|
await this.handleOnSpeedChange(deviceId, portId, value);
|
|
123
122
|
break;
|
|
124
123
|
|
|
125
|
-
case
|
|
124
|
+
case 'offSpeed':
|
|
126
125
|
await this.handleOffSpeedChange(deviceId, portId, value);
|
|
127
126
|
break;
|
|
128
127
|
|
|
129
128
|
default:
|
|
130
|
-
if ([
|
|
129
|
+
if (['timer', 'cycle', 'schedule', 'auto', 'vpd'].includes(settingType) && path.length > 1) {
|
|
131
130
|
await this.handleNestedPortSettingsChange(deviceId, portId, settingType, path.slice(1), value);
|
|
132
131
|
} else {
|
|
133
132
|
this.adapter.log.warn(`Unbekannter Port-Modus-Einstellungstyp: ${settingType}`);
|
|
@@ -148,7 +147,7 @@ class PortModeHandler {
|
|
|
148
147
|
const modeIndex = MODE_OPTIONS.indexOf(modeName);
|
|
149
148
|
|
|
150
149
|
if (modeIndex < 0) {
|
|
151
|
-
this.adapter.log.warn(`Ungültiger Modus-Wert: "${modeName}". Gültige Werte: ${MODE_OPTIONS.join(
|
|
150
|
+
this.adapter.log.warn(`Ungültiger Modus-Wert: "${modeName}". Gültige Werte: ${MODE_OPTIONS.join(', ')}`);
|
|
152
151
|
return;
|
|
153
152
|
}
|
|
154
153
|
|
|
@@ -158,15 +157,17 @@ class PortModeHandler {
|
|
|
158
157
|
// Optimistic UI update
|
|
159
158
|
await this.stateManager.updateUIState(`devices.${deviceId}.ports.${portId}.mode.active`, modeName);
|
|
160
159
|
|
|
161
|
-
this.adapter.log.info(
|
|
160
|
+
this.adapter.log.info(
|
|
161
|
+
`Modus-Wechsel: Gerät=${deviceId}, Port=${portId}, Modus="${modeName}" (atType=${atType})`,
|
|
162
|
+
);
|
|
162
163
|
|
|
163
164
|
try {
|
|
164
165
|
const success = await this.client.setDeviceMode(deviceId, portId, atType, onSpeed, offSpeed);
|
|
165
166
|
if (success) {
|
|
166
|
-
await this.adapter.setStateAsync(
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
);
|
|
167
|
+
await this.adapter.setStateAsync(`devices.${deviceId}.ports.${portId}.mode.active`, {
|
|
168
|
+
val: modeName,
|
|
169
|
+
ack: true,
|
|
170
|
+
});
|
|
170
171
|
}
|
|
171
172
|
} catch (error) {
|
|
172
173
|
this.adapter.log.error(`Fehler beim Modus-Wechsel: ${error.message}`);
|
|
@@ -194,10 +195,10 @@ class PortModeHandler {
|
|
|
194
195
|
try {
|
|
195
196
|
const success = await this.client.setDeviceMode(deviceId, portId, atType, speedValue, offSpeed);
|
|
196
197
|
if (success) {
|
|
197
|
-
await this.adapter.setStateAsync(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
);
|
|
198
|
+
await this.adapter.setStateAsync(`devices.${deviceId}.ports.${portId}.mode.onSpeed`, {
|
|
199
|
+
val: speedValue,
|
|
200
|
+
ack: true,
|
|
201
|
+
});
|
|
201
202
|
}
|
|
202
203
|
} catch (error) {
|
|
203
204
|
this.adapter.log.error(`Fehler beim onSpeed-Wechsel: ${error.message}`);
|
|
@@ -225,10 +226,10 @@ class PortModeHandler {
|
|
|
225
226
|
try {
|
|
226
227
|
const success = await this.client.setDeviceMode(deviceId, portId, atType, onSpeed, speedValue);
|
|
227
228
|
if (success) {
|
|
228
|
-
await this.adapter.setStateAsync(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
);
|
|
229
|
+
await this.adapter.setStateAsync(`devices.${deviceId}.ports.${portId}.mode.offSpeed`, {
|
|
230
|
+
val: speedValue,
|
|
231
|
+
ack: true,
|
|
232
|
+
});
|
|
232
233
|
}
|
|
233
234
|
} catch (error) {
|
|
234
235
|
this.adapter.log.error(`Fehler beim offSpeed-Wechsel: ${error.message}`);
|
|
@@ -260,19 +261,19 @@ class PortModeHandler {
|
|
|
260
261
|
this.adapter.log.debug(`Verarbeite ${category}.${setting} = ${value}`);
|
|
261
262
|
|
|
262
263
|
switch (category) {
|
|
263
|
-
case
|
|
264
|
+
case 'timer':
|
|
264
265
|
this.applyTimerSetting(currentSettings, setting, value);
|
|
265
266
|
break;
|
|
266
|
-
case
|
|
267
|
+
case 'cycle':
|
|
267
268
|
this.applyCycleSetting(currentSettings, setting, value);
|
|
268
269
|
break;
|
|
269
|
-
case
|
|
270
|
+
case 'schedule':
|
|
270
271
|
this.applyScheduleSetting(currentSettings, setting, value);
|
|
271
272
|
break;
|
|
272
|
-
case
|
|
273
|
+
case 'auto':
|
|
273
274
|
this.applyAutoSetting(currentSettings, setting, value);
|
|
274
275
|
break;
|
|
275
|
-
case
|
|
276
|
+
case 'vpd':
|
|
276
277
|
this.applyVpdSetting(currentSettings, setting, value);
|
|
277
278
|
break;
|
|
278
279
|
default:
|
|
@@ -281,11 +282,7 @@ class PortModeHandler {
|
|
|
281
282
|
}
|
|
282
283
|
|
|
283
284
|
try {
|
|
284
|
-
await this.client.updateDeviceModeSettings(
|
|
285
|
-
deviceId,
|
|
286
|
-
portId,
|
|
287
|
-
Object.entries(currentSettings)
|
|
288
|
-
);
|
|
285
|
+
await this.client.updateDeviceModeSettings(deviceId, portId, Object.entries(currentSettings));
|
|
289
286
|
this.adapter.log.debug(`${category}.${setting} erfolgreich gesetzt`);
|
|
290
287
|
} catch (apiError) {
|
|
291
288
|
this.adapter.log.error(`API-Fehler bei ${category}.${setting}: ${apiError.message}`);
|
|
@@ -296,10 +293,10 @@ class PortModeHandler {
|
|
|
296
293
|
|
|
297
294
|
applyTimerSetting(settings, setting, value) {
|
|
298
295
|
switch (setting) {
|
|
299
|
-
case
|
|
296
|
+
case 'toOnMinutes':
|
|
300
297
|
settings.acitveTimerOn = parseInt(value) * 60;
|
|
301
298
|
break;
|
|
302
|
-
case
|
|
299
|
+
case 'toOffMinutes':
|
|
303
300
|
settings.acitveTimerOff = parseInt(value) * 60;
|
|
304
301
|
break;
|
|
305
302
|
default:
|
|
@@ -311,10 +308,10 @@ class PortModeHandler {
|
|
|
311
308
|
|
|
312
309
|
applyCycleSetting(settings, setting, value) {
|
|
313
310
|
switch (setting) {
|
|
314
|
-
case
|
|
311
|
+
case 'onMinutes':
|
|
315
312
|
settings.activeCycleOn = parseInt(value) * 60;
|
|
316
313
|
break;
|
|
317
|
-
case
|
|
314
|
+
case 'offMinutes':
|
|
318
315
|
settings.activeCycleOff = parseInt(value) * 60;
|
|
319
316
|
break;
|
|
320
317
|
default:
|
|
@@ -326,14 +323,14 @@ class PortModeHandler {
|
|
|
326
323
|
|
|
327
324
|
applyScheduleSetting(settings, setting, value) {
|
|
328
325
|
switch (setting) {
|
|
329
|
-
case
|
|
326
|
+
case 'startEnabled':
|
|
330
327
|
settings.schedStartTime = value ? SCHEDULE_MIDNIGHT_VALUE : SCHEDULE_DISABLED_VALUE;
|
|
331
328
|
break;
|
|
332
|
-
case
|
|
329
|
+
case 'endEnabled':
|
|
333
330
|
settings.schedEndtTime = value ? SCHEDULE_EOD_VALUE : SCHEDULE_DISABLED_VALUE;
|
|
334
331
|
break;
|
|
335
|
-
case
|
|
336
|
-
const parts = String(value).split(
|
|
332
|
+
case 'startTime': {
|
|
333
|
+
const parts = String(value).split(':');
|
|
337
334
|
if (parts.length === 2) {
|
|
338
335
|
settings.schedStartTime = parseInt(parts[0]) * 60 + parseInt(parts[1]);
|
|
339
336
|
} else {
|
|
@@ -341,8 +338,8 @@ class PortModeHandler {
|
|
|
341
338
|
}
|
|
342
339
|
break;
|
|
343
340
|
}
|
|
344
|
-
case
|
|
345
|
-
const parts = String(value).split(
|
|
341
|
+
case 'endTime': {
|
|
342
|
+
const parts = String(value).split(':');
|
|
346
343
|
if (parts.length === 2) {
|
|
347
344
|
settings.schedEndtTime = parseInt(parts[0]) * 60 + parseInt(parts[1]);
|
|
348
345
|
} else {
|
|
@@ -359,54 +356,56 @@ class PortModeHandler {
|
|
|
359
356
|
|
|
360
357
|
applyAutoSetting(settings, setting, value) {
|
|
361
358
|
switch (setting) {
|
|
362
|
-
case
|
|
359
|
+
case 'settingsMode': {
|
|
363
360
|
const idx = SETTINGS_MODE_OPTIONS.indexOf(value);
|
|
364
|
-
if (idx >= 0)
|
|
361
|
+
if (idx >= 0) {
|
|
362
|
+
settings.settingMode = idx;
|
|
363
|
+
}
|
|
365
364
|
break;
|
|
366
365
|
}
|
|
367
|
-
case
|
|
366
|
+
case 'tempHighEnabled':
|
|
368
367
|
settings.activeHt = value ? 1 : 0;
|
|
369
368
|
break;
|
|
370
|
-
case
|
|
369
|
+
case 'tempHighTrigger': {
|
|
371
370
|
const c = parseInt(value);
|
|
372
371
|
settings.devHt = c;
|
|
373
372
|
settings.devHtf = Math.round(c * 1.8 + 32);
|
|
374
373
|
break;
|
|
375
374
|
}
|
|
376
|
-
case
|
|
375
|
+
case 'tempLowEnabled':
|
|
377
376
|
settings.activeLt = value ? 1 : 0;
|
|
378
377
|
break;
|
|
379
|
-
case
|
|
378
|
+
case 'tempLowTrigger': {
|
|
380
379
|
const c = parseInt(value);
|
|
381
380
|
settings.devLt = c;
|
|
382
381
|
settings.devLtf = Math.round(c * 1.8 + 32);
|
|
383
382
|
break;
|
|
384
383
|
}
|
|
385
|
-
case
|
|
384
|
+
case 'humidityHighEnabled':
|
|
386
385
|
settings.activeHh = value ? 1 : 0;
|
|
387
386
|
break;
|
|
388
|
-
case
|
|
387
|
+
case 'humidityHighTrigger':
|
|
389
388
|
settings.devHh = parseInt(value);
|
|
390
389
|
break;
|
|
391
|
-
case
|
|
390
|
+
case 'humidityLowEnabled':
|
|
392
391
|
settings.activeLh = value ? 1 : 0;
|
|
393
392
|
break;
|
|
394
|
-
case
|
|
393
|
+
case 'humidityLowTrigger':
|
|
395
394
|
settings.devLh = parseInt(value);
|
|
396
395
|
break;
|
|
397
|
-
case
|
|
396
|
+
case 'targetTempEnabled':
|
|
398
397
|
settings.targetTSwitch = value ? 1 : 0;
|
|
399
398
|
break;
|
|
400
|
-
case
|
|
399
|
+
case 'targetTemp': {
|
|
401
400
|
const c = parseInt(value);
|
|
402
401
|
settings.targetTemp = c;
|
|
403
402
|
settings.targetTempF = Math.round(c * 1.8 + 32);
|
|
404
403
|
break;
|
|
405
404
|
}
|
|
406
|
-
case
|
|
405
|
+
case 'targetHumidityEnabled':
|
|
407
406
|
settings.targetHumiSwitch = value ? 1 : 0;
|
|
408
407
|
break;
|
|
409
|
-
case
|
|
408
|
+
case 'targetHumidity':
|
|
410
409
|
settings.targetHumi = parseInt(value);
|
|
411
410
|
break;
|
|
412
411
|
default:
|
|
@@ -418,27 +417,29 @@ class PortModeHandler {
|
|
|
418
417
|
|
|
419
418
|
applyVpdSetting(settings, setting, value) {
|
|
420
419
|
switch (setting) {
|
|
421
|
-
case
|
|
420
|
+
case 'settingsMode': {
|
|
422
421
|
const idx = SETTINGS_MODE_OPTIONS.indexOf(value);
|
|
423
|
-
if (idx >= 0)
|
|
422
|
+
if (idx >= 0) {
|
|
423
|
+
settings.vpdSettingMode = idx;
|
|
424
|
+
}
|
|
424
425
|
break;
|
|
425
426
|
}
|
|
426
|
-
case
|
|
427
|
+
case 'highEnabled':
|
|
427
428
|
settings.activeHtVpd = value ? 1 : 0;
|
|
428
429
|
break;
|
|
429
|
-
case
|
|
430
|
+
case 'highTrigger':
|
|
430
431
|
settings.activeHtVpdNums = Math.round(parseFloat(value) * 10);
|
|
431
432
|
break;
|
|
432
|
-
case
|
|
433
|
+
case 'lowEnabled':
|
|
433
434
|
settings.activeLtVpd = value ? 1 : 0;
|
|
434
435
|
break;
|
|
435
|
-
case
|
|
436
|
+
case 'lowTrigger':
|
|
436
437
|
settings.activeLtVpdNums = Math.round(parseFloat(value) * 10);
|
|
437
438
|
break;
|
|
438
|
-
case
|
|
439
|
+
case 'targetEnabled':
|
|
439
440
|
settings.targetVpdSwitch = value ? 1 : 0;
|
|
440
441
|
break;
|
|
441
|
-
case
|
|
442
|
+
case 'target':
|
|
442
443
|
settings.targetVpd = Math.round(parseFloat(value) * 10);
|
|
443
444
|
break;
|
|
444
445
|
default:
|
|
@@ -3,17 +3,14 @@
|
|
|
3
3
|
* Verarbeitet Änderungen an den erweiterten Port-Einstellungen
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
'use strict';
|
|
7
7
|
|
|
8
|
-
const {
|
|
9
|
-
ADVANCED_SETTINGS_KEY,
|
|
10
|
-
DEVICE_LOAD_TYPE_OPTIONS,
|
|
11
|
-
DYNAMIC_RESPONSE_OPTIONS
|
|
12
|
-
} = require("../constants");
|
|
8
|
+
const { ADVANCED_SETTINGS_KEY, DEVICE_LOAD_TYPE_OPTIONS, DYNAMIC_RESPONSE_OPTIONS } = require('../constants');
|
|
13
9
|
|
|
14
10
|
class PortSettingsHandler {
|
|
15
11
|
/**
|
|
16
12
|
* Erstellt einen neuen PortSettingsHandler
|
|
13
|
+
*
|
|
17
14
|
* @param {object} stateManager - Referenz zum StateManager
|
|
18
15
|
*/
|
|
19
16
|
constructor(stateManager) {
|
|
@@ -24,15 +21,17 @@ class PortSettingsHandler {
|
|
|
24
21
|
|
|
25
22
|
/**
|
|
26
23
|
* Setzt den API-Client für diesen Handler
|
|
24
|
+
*
|
|
27
25
|
* @param {object} client - AC Infinity API-Client
|
|
28
26
|
*/
|
|
29
27
|
setClient(client) {
|
|
30
28
|
this.client = client;
|
|
31
|
-
this.adapter.log.debug(
|
|
29
|
+
this.adapter.log.debug('API-Client erfolgreich an PortSettingsHandler übergeben');
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
/**
|
|
35
33
|
* Verarbeitet Änderungen an erweiterten Port-Einstellungen
|
|
34
|
+
*
|
|
36
35
|
* @param {string} deviceId - Geräte-ID
|
|
37
36
|
* @param {number} portId - Port-ID
|
|
38
37
|
* @param {Array} path - Pfadkomponenten
|
|
@@ -40,41 +39,45 @@ class PortSettingsHandler {
|
|
|
40
39
|
*/
|
|
41
40
|
async handlePortAdvancedSettingsChange(deviceId, portId, path, value) {
|
|
42
41
|
if (path.length < 1) {
|
|
43
|
-
this.adapter.log.warn(`Ungültiger Pfad für erweiterte Port-Einstellungen: ${path.join(
|
|
42
|
+
this.adapter.log.warn(`Ungültiger Pfad für erweiterte Port-Einstellungen: ${path.join('.')}`);
|
|
44
43
|
return;
|
|
45
44
|
}
|
|
46
|
-
|
|
45
|
+
|
|
47
46
|
const setting = path[0];
|
|
48
47
|
const statePath = `devices.${deviceId}.ports.${portId}.settings.${setting}`;
|
|
49
|
-
|
|
48
|
+
|
|
50
49
|
// UI sofort aktualisieren, um Flackern zu vermeiden
|
|
51
50
|
await this.stateManager.updateUIState(statePath, value);
|
|
52
|
-
|
|
51
|
+
|
|
53
52
|
try {
|
|
54
53
|
// Prüfen, ob der Client gesetzt ist
|
|
55
54
|
if (!this.client) {
|
|
56
|
-
throw new Error(
|
|
55
|
+
throw new Error('API-Client nicht gesetzt. Kann Port-Einstellungen nicht aktualisieren.');
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
// Hole den Port-Namen für den Aktualisierungsaufruf
|
|
60
59
|
let portName = await this.adapter.getStateAsync(`devices.${deviceId}.ports.${portId}.info.name`);
|
|
61
60
|
portName = portName && portName.val ? portName.val : `Port ${portId}`;
|
|
62
|
-
|
|
61
|
+
|
|
63
62
|
// Aktuelle Temperatureinheit abrufen
|
|
64
63
|
const tempUnitState = await this.adapter.getStateAsync(`devices.${deviceId}.settings.temperatureUnit`);
|
|
65
|
-
const isUnitC = tempUnitState && tempUnitState.val ===
|
|
66
|
-
|
|
67
|
-
this.adapter.log.debug(
|
|
68
|
-
|
|
64
|
+
const isUnitC = tempUnitState && tempUnitState.val === 'C';
|
|
65
|
+
|
|
66
|
+
this.adapter.log.debug(
|
|
67
|
+
`Verarbeite Port-Einstellungsänderung: deviceId=${deviceId}, portId=${portId}, setting=${setting}, value=${value}`,
|
|
68
|
+
);
|
|
69
|
+
|
|
69
70
|
try {
|
|
70
71
|
switch (setting) {
|
|
71
|
-
case
|
|
72
|
+
case 'deviceType': {
|
|
72
73
|
// value is the numeric load type ID (ioBroker sends the key of the states map)
|
|
73
74
|
const loadTypeId = parseInt(value);
|
|
74
75
|
if (!isNaN(loadTypeId) && DEVICE_LOAD_TYPE_OPTIONS[loadTypeId] !== undefined) {
|
|
75
|
-
this.adapter.log.debug(
|
|
76
|
+
this.adapter.log.debug(
|
|
77
|
+
`Sende Gerätetyp an API: deviceId=${deviceId}, portId=${portId}, loadTypeId=${loadTypeId} (${DEVICE_LOAD_TYPE_OPTIONS[loadTypeId]})`,
|
|
78
|
+
);
|
|
76
79
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
77
|
-
[ADVANCED_SETTINGS_KEY.DEVICE_LOAD_TYPE, loadTypeId]
|
|
80
|
+
[ADVANCED_SETTINGS_KEY.DEVICE_LOAD_TYPE, loadTypeId],
|
|
78
81
|
]);
|
|
79
82
|
this.adapter.log.debug(`API-Antwort für Gerätetyp erfolgreich`);
|
|
80
83
|
} else {
|
|
@@ -82,13 +85,15 @@ class PortSettingsHandler {
|
|
|
82
85
|
}
|
|
83
86
|
break;
|
|
84
87
|
}
|
|
85
|
-
|
|
86
|
-
case
|
|
88
|
+
|
|
89
|
+
case 'dynamicResponse': {
|
|
87
90
|
const responseTypeIndex = DYNAMIC_RESPONSE_OPTIONS.indexOf(value);
|
|
88
91
|
if (responseTypeIndex >= 0) {
|
|
89
|
-
this.adapter.log.debug(
|
|
92
|
+
this.adapter.log.debug(
|
|
93
|
+
`Sende dynamischen Antworttyp an API: deviceId=${deviceId}, portId=${portId}, type=${value}, index=${responseTypeIndex}`,
|
|
94
|
+
);
|
|
90
95
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
91
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE, responseTypeIndex]
|
|
96
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_RESPONSE_TYPE, responseTypeIndex],
|
|
92
97
|
]);
|
|
93
98
|
this.adapter.log.debug(`API-Antwort für dynamischen Antworttyp erfolgreich`);
|
|
94
99
|
} else {
|
|
@@ -96,114 +101,136 @@ class PortSettingsHandler {
|
|
|
96
101
|
}
|
|
97
102
|
break;
|
|
98
103
|
}
|
|
99
|
-
|
|
100
|
-
case
|
|
104
|
+
|
|
105
|
+
case 'dynamicTransitionTemp': {
|
|
101
106
|
const transitionTempValue = parseInt(value);
|
|
102
|
-
this.adapter.log.debug(
|
|
103
|
-
|
|
107
|
+
this.adapter.log.debug(
|
|
108
|
+
`Sende dynamische Übergangstemperatur an API: deviceId=${deviceId}, portId=${portId}, temp=${transitionTempValue}, isUnitC=${isUnitC}`,
|
|
109
|
+
);
|
|
110
|
+
|
|
104
111
|
if (isUnitC) {
|
|
105
112
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
106
113
|
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP, transitionTempValue],
|
|
107
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F, transitionTempValue * 2]
|
|
114
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F, transitionTempValue * 2],
|
|
108
115
|
]);
|
|
109
116
|
} else {
|
|
110
117
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
111
118
|
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP, Math.floor(transitionTempValue / 2)],
|
|
112
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F, transitionTempValue]
|
|
119
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_TEMP_F, transitionTempValue],
|
|
113
120
|
]);
|
|
114
121
|
}
|
|
115
|
-
|
|
122
|
+
|
|
116
123
|
this.adapter.log.debug(`API-Antwort für dynamische Übergangstemperatur erfolgreich`);
|
|
117
124
|
break;
|
|
118
125
|
}
|
|
119
|
-
|
|
120
|
-
case
|
|
126
|
+
|
|
127
|
+
case 'dynamicBufferTemp': {
|
|
121
128
|
const bufferTempValue = parseInt(value);
|
|
122
|
-
this.adapter.log.debug(
|
|
123
|
-
|
|
129
|
+
this.adapter.log.debug(
|
|
130
|
+
`Sende dynamische Puffertemperatur an API: deviceId=${deviceId}, portId=${portId}, temp=${bufferTempValue}, isUnitC=${isUnitC}`,
|
|
131
|
+
);
|
|
132
|
+
|
|
124
133
|
if (isUnitC) {
|
|
125
134
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
126
135
|
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP, bufferTempValue],
|
|
127
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F, bufferTempValue * 2]
|
|
136
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F, bufferTempValue * 2],
|
|
128
137
|
]);
|
|
129
138
|
} else {
|
|
130
139
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
131
140
|
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP, Math.floor(bufferTempValue / 2)],
|
|
132
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F, bufferTempValue]
|
|
141
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_TEMP_F, bufferTempValue],
|
|
133
142
|
]);
|
|
134
143
|
}
|
|
135
|
-
|
|
144
|
+
|
|
136
145
|
this.adapter.log.debug(`API-Antwort für dynamische Puffertemperatur erfolgreich`);
|
|
137
146
|
break;
|
|
138
147
|
}
|
|
139
|
-
|
|
148
|
+
|
|
140
149
|
// Weitere Fälle für andere Einstellungen...
|
|
141
|
-
case
|
|
142
|
-
this.adapter.log.debug(
|
|
150
|
+
case 'dynamicTransitionHumidity': {
|
|
151
|
+
this.adapter.log.debug(
|
|
152
|
+
`Sende dynamische Übergangsfeuchtigkeit an API: deviceId=${deviceId}, portId=${portId}, humidity=${parseInt(value)}`,
|
|
153
|
+
);
|
|
143
154
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
144
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY, parseInt(value)]
|
|
155
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_HUMIDITY, parseInt(value)],
|
|
145
156
|
]);
|
|
146
157
|
this.adapter.log.debug(`API-Antwort für dynamische Übergangsfeuchtigkeit erfolgreich`);
|
|
147
158
|
break;
|
|
148
159
|
}
|
|
149
|
-
|
|
150
|
-
case
|
|
151
|
-
this.adapter.log.debug(
|
|
160
|
+
|
|
161
|
+
case 'dynamicBufferHumidity': {
|
|
162
|
+
this.adapter.log.debug(
|
|
163
|
+
`Sende dynamische Pufferfeuchtigkeit an API: deviceId=${deviceId}, portId=${portId}, humidity=${parseInt(value)}`,
|
|
164
|
+
);
|
|
152
165
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
153
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY, parseInt(value)]
|
|
166
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_HUMIDITY, parseInt(value)],
|
|
154
167
|
]);
|
|
155
168
|
this.adapter.log.debug(`API-Antwort für dynamische Pufferfeuchtigkeit erfolgreich`);
|
|
156
169
|
break;
|
|
157
170
|
}
|
|
158
|
-
|
|
159
|
-
case
|
|
171
|
+
|
|
172
|
+
case 'dynamicTransitionVPD': {
|
|
160
173
|
const transitionVpdValue = Math.round(parseFloat(value) * 10);
|
|
161
|
-
this.adapter.log.debug(
|
|
174
|
+
this.adapter.log.debug(
|
|
175
|
+
`Sende dynamisches Übergangs-VPD an API: deviceId=${deviceId}, portId=${portId}, vpd=${value}, scaledValue=${transitionVpdValue}`,
|
|
176
|
+
);
|
|
162
177
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
163
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD, transitionVpdValue]
|
|
178
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_TRANSITION_VPD, transitionVpdValue],
|
|
164
179
|
]);
|
|
165
180
|
this.adapter.log.debug(`API-Antwort für dynamisches Übergangs-VPD erfolgreich`);
|
|
166
181
|
break;
|
|
167
182
|
}
|
|
168
|
-
|
|
169
|
-
case
|
|
183
|
+
|
|
184
|
+
case 'dynamicBufferVPD': {
|
|
170
185
|
const bufferVpdValue = Math.round(parseFloat(value) * 10);
|
|
171
|
-
this.adapter.log.debug(
|
|
186
|
+
this.adapter.log.debug(
|
|
187
|
+
`Sende dynamisches Puffer-VPD an API: deviceId=${deviceId}, portId=${portId}, vpd=${value}, scaledValue=${bufferVpdValue}`,
|
|
188
|
+
);
|
|
172
189
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
173
|
-
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD, bufferVpdValue]
|
|
190
|
+
[ADVANCED_SETTINGS_KEY.DYNAMIC_BUFFER_VPD, bufferVpdValue],
|
|
174
191
|
]);
|
|
175
192
|
this.adapter.log.debug(`API-Antwort für dynamisches Puffer-VPD erfolgreich`);
|
|
176
193
|
break;
|
|
177
194
|
}
|
|
178
|
-
|
|
179
|
-
case
|
|
180
|
-
this.adapter.log.debug(
|
|
195
|
+
|
|
196
|
+
case 'sunriseTimerEnabled': {
|
|
197
|
+
this.adapter.log.debug(
|
|
198
|
+
`Sende Sonnenaufgang/Sonnenuntergang-Timer-Aktivierung an API: deviceId=${deviceId}, portId=${portId}, enabled=${value}`,
|
|
199
|
+
);
|
|
181
200
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
182
|
-
[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED, value ? 1 : 0]
|
|
201
|
+
[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_ENABLED, value ? 1 : 0],
|
|
183
202
|
]);
|
|
184
|
-
this.adapter.log.debug(
|
|
203
|
+
this.adapter.log.debug(
|
|
204
|
+
`API-Antwort für Sonnenaufgang/Sonnenuntergang-Timer-Aktivierung erfolgreich`,
|
|
205
|
+
);
|
|
185
206
|
break;
|
|
186
207
|
}
|
|
187
|
-
|
|
188
|
-
case
|
|
189
|
-
this.adapter.log.debug(
|
|
208
|
+
|
|
209
|
+
case 'sunriseTimerMinutes': {
|
|
210
|
+
this.adapter.log.debug(
|
|
211
|
+
`Sende Sonnenaufgang/Sonnenuntergang-Timer-Minuten an API: deviceId=${deviceId}, portId=${portId}, minutes=${parseInt(value)}`,
|
|
212
|
+
);
|
|
190
213
|
await this.client.updateAdvancedSettings(deviceId, portId, portName, [
|
|
191
|
-
[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION, parseInt(value)]
|
|
214
|
+
[ADVANCED_SETTINGS_KEY.SUNRISE_TIMER_DURATION, parseInt(value)],
|
|
192
215
|
]);
|
|
193
|
-
this.adapter.log.debug(
|
|
216
|
+
this.adapter.log.debug(
|
|
217
|
+
`API-Antwort für Sonnenaufgang/Sonnenuntergang-Timer-Minuten erfolgreich`,
|
|
218
|
+
);
|
|
194
219
|
break;
|
|
195
220
|
}
|
|
196
|
-
|
|
221
|
+
|
|
197
222
|
default:
|
|
198
223
|
this.adapter.log.warn(`Unbekannte erweiterte Port-Einstellung: ${setting}`);
|
|
199
224
|
}
|
|
200
225
|
} catch (error) {
|
|
201
|
-
this.adapter.log.error(
|
|
226
|
+
this.adapter.log.error(
|
|
227
|
+
`API-Fehler beim Aktualisieren der Port-Einstellung ${setting}: ${error.message}`,
|
|
228
|
+
);
|
|
202
229
|
if (error.response) {
|
|
203
230
|
this.adapter.log.error(`API-Antwort: ${JSON.stringify(error.response.data || {})}`);
|
|
204
231
|
}
|
|
205
232
|
}
|
|
206
|
-
|
|
233
|
+
|
|
207
234
|
// Aktualisierung der Daten auslösen, um die Zustände zu aktualisieren
|
|
208
235
|
await this.stateManager.refreshWithThrottle();
|
|
209
236
|
} catch (error) {
|
|
@@ -212,4 +239,4 @@ class PortSettingsHandler {
|
|
|
212
239
|
}
|
|
213
240
|
}
|
|
214
241
|
|
|
215
|
-
module.exports = PortSettingsHandler;
|
|
242
|
+
module.exports = PortSettingsHandler;
|