iobroker.sprinklecontrol 0.2.14 → 0.2.16
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/README.md +9 -8
- package/admin/i18n/de/translations.json +3 -1
- package/admin/i18n/en/translations.json +3 -1
- package/admin/i18n/es/translations.json +3 -1
- package/admin/i18n/fr/translations.json +3 -1
- package/admin/i18n/it/translations.json +3 -1
- package/admin/i18n/nl/translations.json +3 -1
- package/admin/i18n/pl/translations.json +3 -1
- package/admin/i18n/pt/translations.json +3 -1
- package/admin/i18n/ru/translations.json +3 -1
- package/admin/i18n/uk/translations.json +3 -1
- package/admin/i18n/zh-cn/translations.json +3 -1
- package/admin/index_m.html +11 -1
- package/admin/words.js +134 -133
- package/io-package.json +29 -27
- package/lib/evaporation.js +16 -4
- package/lib/myConfig.js +10 -11
- package/lib/valveControl.js +57 -26
- package/main.js +87 -83
- package/package.json +6 -6
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sprinklecontrol",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.16",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "Sprinkler Control",
|
|
7
7
|
"de": "Sprinklersteuerung",
|
|
@@ -19,6 +19,32 @@
|
|
|
19
19
|
"Dirk Peter <dirk.peter@freenet.de>"
|
|
20
20
|
],
|
|
21
21
|
"news": {
|
|
22
|
+
"0.2.16": {
|
|
23
|
+
"en": "issue #95 Pump lead time added",
|
|
24
|
+
"de": "ausgabe #95 Pumpe Lieferzeit hinzugefügt",
|
|
25
|
+
"ru": "#95 Время работы насоса добавлено",
|
|
26
|
+
"pt": "número de edição #95 Tempo de lançamento da bomba adicionado",
|
|
27
|
+
"nl": "nummer #95 Pump doorlooptijd toegevoegd",
|
|
28
|
+
"fr": "numéro 95 Temps d'avance de la pompe ajouté",
|
|
29
|
+
"it": "numero #95 Pump lead time aggiunto",
|
|
30
|
+
"es": "#95 Tiempo de inicio de bomba añadido",
|
|
31
|
+
"pl": "wydanie # 95 Dodany czas ołowiu pompy",
|
|
32
|
+
"uk": "problem #95 Насос додано час",
|
|
33
|
+
"zh-cn": "增加了泵前准备时间"
|
|
34
|
+
},
|
|
35
|
+
"0.2.15": {
|
|
36
|
+
"en": "Readme updated\nFixed an error when switching off with autoOnOff\nioBroker-Bot [W028]",
|
|
37
|
+
"de": "Reader aktualisiert\nFehler beim Ausschalten mit autoOnOff behoben\nioBroker-Bot [W028]",
|
|
38
|
+
"ru": "Readme обновлено\nИсправлена ошибка при выключении с помощью autoOnOff\nioBroker-Bot [W028]",
|
|
39
|
+
"pt": "Readme atualizado\nCorrigido um erro ao desligar com autoOnOff\nioBroker-Bot [W028]",
|
|
40
|
+
"nl": "Readme bijgewerkt\nEen fout hersteld bij het uitschakelen met autoOnOff\nioBroker-Bot [W028]",
|
|
41
|
+
"fr": "Lire mise à jour\nCorrection d'une erreur lors de l'arrêt automatique\nioBoker-Bot [W028]",
|
|
42
|
+
"it": "Readme aggiornato\nRisolto un errore durante l'accensione con autoOnOff\nioBroker-Bot [W028]",
|
|
43
|
+
"es": "Readme updated\nSe corrigió un error al apagarse con autoOnOff\nioBroker-Bot [W028]",
|
|
44
|
+
"pl": "Readme zaktualizowany\nNaprawiono błąd podczas wyłączania autoOnOff\njoBroker- Bot [W028]",
|
|
45
|
+
"uk": "Читати далі\nВиправлено помилку при вимкненні з автоматичноOnOff\nioBroker-Bot [W028]",
|
|
46
|
+
"zh-cn": "更新我\n用 autoOnOff 关闭时修补错误\nioBroker-Bot [W028] (英语)"
|
|
47
|
+
},
|
|
22
48
|
"0.2.14": {
|
|
23
49
|
"en": "eslint-config added\nDependencies updated\nUpdate License\nissue #92 Sprinkler im Gewächshaus solved\nadd Button control.autoStart",
|
|
24
50
|
"de": "eslint-config hinzugefügt\nAusgaben aktualisiert\nLizenz aktualisieren\nausgabe #92 Sprinkler im Gewächshaus gelöst\nbutton Control.autoStart",
|
|
@@ -83,32 +109,6 @@
|
|
|
83
109
|
"pl": "- nawadnianie ręczne ograniczone do maksymalnie 100%; - Naprawiono błąd wiadomości WhatsApp",
|
|
84
110
|
"uk": "- ручний полив обмежений максимум на 100%; - Виправлено повідомлення про помилку WhatsApp",
|
|
85
111
|
"zh-cn": "- 手动浇水限制为最大 100%; - 错误whatsapp消息已修复"
|
|
86
|
-
},
|
|
87
|
-
"0.2.9": {
|
|
88
|
-
"en": "Bug initialization routine",
|
|
89
|
-
"de": "Bug-Initialisierungsroutine",
|
|
90
|
-
"ru": "Процедура инициализации ошибки",
|
|
91
|
-
"pt": "Rotina de inicialização de bugs",
|
|
92
|
-
"nl": "Bug initialisatie routine",
|
|
93
|
-
"fr": "Routine d'initialisation de bogue",
|
|
94
|
-
"it": "Routine di inizializzazione dei bug",
|
|
95
|
-
"es": "Rutina de inicialización de errores",
|
|
96
|
-
"pl": "Procedura inicjowania błędów",
|
|
97
|
-
"uk": "Процедура ініціалізації помилок",
|
|
98
|
-
"zh-cn": "错误初始化例程"
|
|
99
|
-
},
|
|
100
|
-
"0.2.8": {
|
|
101
|
-
"en": "Adaptation for js controller 4; switched main.js to async",
|
|
102
|
-
"de": "Anpassung für js-Controller 4; main.js auf async umgestellt",
|
|
103
|
-
"ru": "Адаптация для js контроллера 4; переключил main.js на асинхронный",
|
|
104
|
-
"pt": "Adaptação para controlador js 4; mudou main.js para assíncrono",
|
|
105
|
-
"nl": "Aanpassing voor js-controller 4; main.js overgeschakeld naar async",
|
|
106
|
-
"fr": "Adaptation pour le contrôleur js 4 ; a basculé main.js en asynchrone",
|
|
107
|
-
"it": "Adattamento per js controller 4; cambiato main.js in asincrono",
|
|
108
|
-
"es": "Adaptación para controlador js 4; cambió main.js a asíncrono",
|
|
109
|
-
"pl": "Adaptacja pod kontroler js 4; przełączył main.js na asynchroniczny",
|
|
110
|
-
"uk": "Адаптація під js контролер 4; переключив main.js на асинхронний",
|
|
111
|
-
"zh-cn": "适配js控制器4;将 main.js 切换为异步"
|
|
112
112
|
}
|
|
113
113
|
},
|
|
114
114
|
"desc": {
|
|
@@ -172,9 +172,11 @@
|
|
|
172
172
|
"switchingDistance": "300",
|
|
173
173
|
"triggerMainPump": "hm-rpc.0.MEQ1234567.1.STATE",
|
|
174
174
|
"triggerMainPumpPower": "2000",
|
|
175
|
+
"mainPumpLeadTime": "15",
|
|
175
176
|
"cisternSettings": false,
|
|
176
177
|
"triggerCisternPump": "",
|
|
177
178
|
"triggerCisternPumpPower": "1800",
|
|
179
|
+
"cisternPumpLeadTime": "10",
|
|
178
180
|
"actualValueLevel": "",
|
|
179
181
|
"triggerMinCisternLevel": "25",
|
|
180
182
|
"wateringStartTime": "livingGoldenHourEnd",
|
package/lib/evaporation.js
CHANGED
|
@@ -194,7 +194,10 @@ function calcEvaporation (timeDifference) {
|
|
|
194
194
|
*/
|
|
195
195
|
const eTp = (( m6 * m5 + 0.65 * m7 * ( m1 - m2 )) / ( m6 + 0.65 )) - 0.5;
|
|
196
196
|
|
|
197
|
-
adapter.setState('evaporation.ETpCurrent', {
|
|
197
|
+
adapter.setState('evaporation.ETpCurrent', {
|
|
198
|
+
val: Math.round(eTp * 10000) / 10000,
|
|
199
|
+
ack: true
|
|
200
|
+
});
|
|
198
201
|
|
|
199
202
|
addEvaporation(eTp * timeDifference);
|
|
200
203
|
}
|
|
@@ -203,7 +206,10 @@ function addEvaporation (value) {
|
|
|
203
206
|
if (value < 2) { // um Fehler in der Auswertung beim Neustart zu löschen
|
|
204
207
|
ETpTodayNum += value;
|
|
205
208
|
}
|
|
206
|
-
adapter.setState('evaporation.ETpToday', {
|
|
209
|
+
adapter.setState('evaporation.ETpToday', {
|
|
210
|
+
val: Math.round(ETpTodayNum * 10000) / 10000,
|
|
211
|
+
ack: true
|
|
212
|
+
});
|
|
207
213
|
|
|
208
214
|
myConfig.applyEvaporation (value);
|
|
209
215
|
}
|
|
@@ -419,9 +425,15 @@ const evaporation = {
|
|
|
419
425
|
setNewDay () {
|
|
420
426
|
extraTerStr();
|
|
421
427
|
setTimeout(() => {
|
|
422
|
-
adapter.setState('evaporation.ETpYesterday', {
|
|
428
|
+
adapter.setState('evaporation.ETpYesterday', {
|
|
429
|
+
val: Math.round(ETpTodayNum * 10000) / 10000,
|
|
430
|
+
ack: true
|
|
431
|
+
});
|
|
423
432
|
ETpTodayNum = 0;
|
|
424
|
-
adapter.setState('evaporation.ETpToday', {
|
|
433
|
+
adapter.setState('evaporation.ETpToday', {
|
|
434
|
+
val: 0,
|
|
435
|
+
ack: true
|
|
436
|
+
});
|
|
425
437
|
}, 100);
|
|
426
438
|
},
|
|
427
439
|
/**
|
package/lib/myConfig.js
CHANGED
|
@@ -164,9 +164,9 @@ const myConfig = {
|
|
|
164
164
|
booster: res.booster,
|
|
165
165
|
endIrrigation: res.endIrrigation,
|
|
166
166
|
autoOn: true,
|
|
167
|
-
autoOnID: `${adapter.namespace
|
|
167
|
+
autoOnID: `${adapter.namespace}.sprinkle.${objectName}.autoOn`, // sprinklecontrol.0.sprinkle.Rasenumrandung.autoOnID
|
|
168
168
|
objectName: objectName, // z.B. Rasenumrandung
|
|
169
|
-
objectID: `${adapter.namespace
|
|
169
|
+
objectID: `${adapter.namespace}.sprinkle.${objectName}.runningTime`, // sprinklecontrol.0.sprinkle.Rasenumrandung.runningTime
|
|
170
170
|
idState: res.name, // "hm-rpc.0.MEQ1234567.3.STATE"
|
|
171
171
|
updateStateTimerID: null, // Timer wird gelöscht wenn Rückmeldung erfolgte
|
|
172
172
|
sprinkleID: myConfig.config.length, // Array[0...]
|
|
@@ -251,7 +251,7 @@ const myConfig = {
|
|
|
251
251
|
setSoilMoistPct100: (mySprinkleID) => {
|
|
252
252
|
myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxIrrigation;
|
|
253
253
|
myConfig.config[mySprinkleID].soilMoisture.pct = 100;
|
|
254
|
-
adapter.setState(`sprinkle.${
|
|
254
|
+
adapter.setState(`sprinkle.${myConfig.config[mySprinkleID].objectName}.actualSoilMoisture`, {
|
|
255
255
|
val: myConfig.config[mySprinkleID].soilMoisture.pct,
|
|
256
256
|
ack: true
|
|
257
257
|
});
|
|
@@ -266,7 +266,7 @@ const myConfig = {
|
|
|
266
266
|
if (myConfig.config[mySprinkleID].methodControlSM === 'bistable') {
|
|
267
267
|
if (typeof newVal === 'boolean') {
|
|
268
268
|
myConfig.config[mySprinkleID].soilMoisture.bool = newVal;
|
|
269
|
-
adapter.setState(`sprinkle.${
|
|
269
|
+
adapter.setState(`sprinkle.${[myConfig.config[mySprinkleID].objectName]}.actualSoilMoisture`, {
|
|
270
270
|
val: myConfig.config[mySprinkleID].soilMoisture.bool,
|
|
271
271
|
ack: true
|
|
272
272
|
});
|
|
@@ -313,7 +313,7 @@ const myConfig = {
|
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
myConfig.config[mySprinkleID].soilMoisture.pct = Math.round(10 * trend(myConfig.config[mySprinkleID].analogZPct, myConfig.config[mySprinkleID].analogOHPct, 0, 100, myVal)) / 10;
|
|
316
|
-
adapter.setState(`sprinkle.${
|
|
316
|
+
adapter.setState(`sprinkle.${[myConfig.config[mySprinkleID].objectName]}.actualSoilMoisture`, {
|
|
317
317
|
val: myConfig.config[mySprinkleID].soilMoisture.pct,
|
|
318
318
|
ack: true
|
|
319
319
|
});
|
|
@@ -340,7 +340,7 @@ const myConfig = {
|
|
|
340
340
|
|
|
341
341
|
myConfig.config[mySprinkleID].soilMoisture.pct = Math.round(1000 * myConfig.config[mySprinkleID].soilMoisture.val
|
|
342
342
|
/ myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) / 10; // Berechnung in %
|
|
343
|
-
adapter.setState(`sprinkle.${
|
|
343
|
+
adapter.setState(`sprinkle.${myConfig.config[mySprinkleID].objectName}.actualSoilMoisture`, {
|
|
344
344
|
val: myConfig.config[mySprinkleID].soilMoisture.pct,
|
|
345
345
|
ack: true
|
|
346
346
|
});
|
|
@@ -361,11 +361,10 @@ const myConfig = {
|
|
|
361
361
|
myConfig.config[mySprinkleID].startFixDay[curDay] = false;
|
|
362
362
|
nextDay = (+ curDay + 1 > 6) ? (+ curDay-6) : (+ curDay+1);
|
|
363
363
|
myConfig.config[mySprinkleID].startFixDay[nextDay] = true;
|
|
364
|
-
adapter.setStateAsync(
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
).catch((e) => adapter.log.warn(`postponeByOneDay setStateAsync: ${e}`));
|
|
364
|
+
adapter.setStateAsync(`${id}`, {
|
|
365
|
+
val: nextDay,
|
|
366
|
+
ack: true
|
|
367
|
+
}).catch((e) => adapter.log.warn(`postponeByOneDay setStateAsync: ${e}`));
|
|
369
368
|
}
|
|
370
369
|
}
|
|
371
370
|
}
|
package/lib/valveControl.js
CHANGED
|
@@ -176,12 +176,15 @@ function boostKill (sprinkleID) {
|
|
|
176
176
|
|
|
177
177
|
/**
|
|
178
178
|
* Schaltintervall der Ventile, Schaltabstand ist in der Config hinterlegt
|
|
179
|
+
*
|
|
180
|
+
* @param delay wenn keine Zeit eingegeben ist, wird der Schaltabstand der Config verwendet
|
|
179
181
|
*/
|
|
180
|
-
const valveDelay = () => {
|
|
182
|
+
const valveDelay = (delay = parseInt(adapter.config.switchingDistance)) => {
|
|
181
183
|
return new Promise (
|
|
182
|
-
resolve => setTimeout (resolve,
|
|
184
|
+
resolve => setTimeout (resolve, delay)
|
|
183
185
|
);
|
|
184
186
|
};
|
|
187
|
+
|
|
185
188
|
/**
|
|
186
189
|
* Ausschalten der Ventile mit Schaltabstand
|
|
187
190
|
*
|
|
@@ -219,7 +222,7 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
|
|
|
219
222
|
}
|
|
220
223
|
}
|
|
221
224
|
if (currentPumpUse.pumpName !== '') {
|
|
222
|
-
setPumpOnOff(parallel > 0);
|
|
225
|
+
await setPumpOnOff(parallel > 0);
|
|
223
226
|
await valveDelay ();
|
|
224
227
|
}
|
|
225
228
|
if (adapter.config.triggerControlVoltage) {
|
|
@@ -306,8 +309,8 @@ function updateList () {
|
|
|
306
309
|
}
|
|
307
310
|
entry.count ++;
|
|
308
311
|
if ((entry.count < entry.wateringTime) // Zeit noch nicht abgelaufen?
|
|
309
|
-
&& (!entry.calcOn //
|
|
310
|
-
|| !entry.autoOn //
|
|
312
|
+
&& (!entry.calcOn // alles ausser Berechnung der Verdunstung
|
|
313
|
+
|| !entry.autoOn // Handbetrieb
|
|
311
314
|
|| (myConfig.config[entry.sprinkleID].soilMoisture.val < myConfig.config[entry.sprinkleID].soilMoisture.maxIrrigation)) // Bodenfeuchte noch nicht erreicht? (z.B. beim Regen)
|
|
312
315
|
) { /* Zeit läuft */
|
|
313
316
|
adapter.setState(`sprinkle.${entry.sprinkleName}.countdown`, {
|
|
@@ -322,7 +325,7 @@ function updateList () {
|
|
|
322
325
|
}
|
|
323
326
|
/* Intervall-Beregnung wenn angegeben (onOffTime > 0) */
|
|
324
327
|
if ((entry.onOffTime > 0) && !(entry.count % entry.onOffTime)) {
|
|
325
|
-
adapter.log.info(`Intervall-Beregnung, onOffTime: ${entry.onOffTime}, count: ${entry.count}
|
|
328
|
+
adapter.log.info(`Intervall-Beregnung, onOffTime: ${entry.onOffTime}, count: ${entry.count}`);
|
|
326
329
|
entry.enabled = false;
|
|
327
330
|
entry.myBreak = true;
|
|
328
331
|
/* Zustand des Ventils im Thread < 0 > off, < 1 > wait, < 2 > on, <<< 3 >>> break, < 4 > Boost(on), < 5 > off(Boost) */
|
|
@@ -496,6 +499,7 @@ function setActualPump () {
|
|
|
496
499
|
currentPumpUse.pumpCistern = false;
|
|
497
500
|
currentPumpUse.pumpName = adapter.config.triggerMainPump || '';
|
|
498
501
|
currentPumpUse.pumpPower = parseInt(adapter.config.triggerMainPumpPower);
|
|
502
|
+
currentPumpUse.leadTime = parseInt(adapter.config.mainPumpLeadTime)*1000 || 1000;
|
|
499
503
|
adapter.setForeignState(currentPumpUse.pumpName, {
|
|
500
504
|
val: true,
|
|
501
505
|
ack: false
|
|
@@ -531,6 +535,7 @@ function setActualPump () {
|
|
|
531
535
|
currentPumpUse.pumpCistern = true;
|
|
532
536
|
currentPumpUse.pumpName = adapter.config.triggerCisternPump || '';
|
|
533
537
|
currentPumpUse.pumpPower = parseInt(adapter.config.triggerCisternPumpPower);
|
|
538
|
+
currentPumpUse.leadTime = parseInt(adapter.config.cisternPumpLeadTime)*1000 || 1000;
|
|
534
539
|
adapter.setState('control.restFlow', {
|
|
535
540
|
val: `${currentPumpUse.pumpPower} (${currentPumpUse.pumpPower} Zisterne)`,
|
|
536
541
|
ack: true
|
|
@@ -544,6 +549,7 @@ function setActualPump () {
|
|
|
544
549
|
currentPumpUse.pumpCistern = false;
|
|
545
550
|
currentPumpUse.pumpName = adapter.config.triggerMainPump || '';
|
|
546
551
|
currentPumpUse.pumpPower = parseInt(adapter.config.triggerMainPumpPower);
|
|
552
|
+
currentPumpUse.leadTime = parseInt(adapter.config.mainPumpLeadTime)*1000 || 1000;
|
|
547
553
|
adapter.setState('control.restFlow', {
|
|
548
554
|
val: `${currentPumpUse.pumpPower} (${currentPumpUse.pumpPower} Grundwasser)`,
|
|
549
555
|
ack: true
|
|
@@ -568,21 +574,23 @@ function setActualPump () {
|
|
|
568
574
|
*
|
|
569
575
|
* @param pumpOnOff ; Pumpe on = true
|
|
570
576
|
*/
|
|
571
|
-
|
|
577
|
+
const setPumpOnOff = async (pumpOnOff) => {
|
|
572
578
|
if (currentPumpUse.pumpName !== '') {
|
|
573
|
-
|
|
574
|
-
|
|
579
|
+
try {
|
|
580
|
+
const curPumpState = await adapter.getForeignStateAsync(currentPumpUse.pumpName);
|
|
581
|
+
if (curPumpState) {
|
|
575
582
|
if (pumpOnOff) {
|
|
576
|
-
if (
|
|
583
|
+
if (curPumpState.val === false) {
|
|
577
584
|
adapter.setForeignState(currentPumpUse.pumpName, {
|
|
578
585
|
val: true,
|
|
579
586
|
ack: false
|
|
580
587
|
});
|
|
581
588
|
currentPumpUse.enable = true;
|
|
582
589
|
adapter.log.info('Set (pump) on');
|
|
590
|
+
await valveDelay(currentPumpUse.leadTime);
|
|
583
591
|
}
|
|
584
592
|
} else {
|
|
585
|
-
if (
|
|
593
|
+
if (curPumpState.val !== false) {
|
|
586
594
|
adapter.setForeignState(currentPumpUse.pumpName, {
|
|
587
595
|
val: false,
|
|
588
596
|
ack: false
|
|
@@ -591,10 +599,10 @@ function setPumpOnOff(pumpOnOff) {
|
|
|
591
599
|
adapter.log.info('Set (pump) off');
|
|
592
600
|
}
|
|
593
601
|
}
|
|
594
|
-
} else if (err) {
|
|
595
|
-
adapter.log.error(`triggerMainPump ${currentPumpUse.pumpName} is not available (ist nicht erreichbar): ${err}`);
|
|
596
602
|
}
|
|
597
|
-
})
|
|
603
|
+
} catch (error) {
|
|
604
|
+
adapter.log.error(`triggerMainPump ${currentPumpUse.pumpName} is not available (ist nicht erreichbar): ${error}`);
|
|
605
|
+
}
|
|
598
606
|
}
|
|
599
607
|
} // End setPumpOnOff
|
|
600
608
|
|
|
@@ -690,6 +698,7 @@ const valveControl = {
|
|
|
690
698
|
currentPumpUse.pumpCistern = false;
|
|
691
699
|
currentPumpUse.pumpName = adapter.config.triggerMainPump || '';
|
|
692
700
|
currentPumpUse.pumpPower = parseInt(adapter.config.triggerMainPumpPower) || 0;
|
|
701
|
+
currentPumpUse.leadTime = parseInt(adapter.config.mainPumpLeadTime)*1000 || 1000;
|
|
693
702
|
maxParallel = parseInt(adapter.config.maximumParallelValves);
|
|
694
703
|
/* Objekt control.restFlow befüllen */
|
|
695
704
|
adapter.setState('control.restFlow', {
|
|
@@ -701,11 +710,22 @@ const valveControl = {
|
|
|
701
710
|
val: `0 : ${adapter.config.maximumParallelValves}`,
|
|
702
711
|
ack: true
|
|
703
712
|
});
|
|
713
|
+
/* 24V ausschalter, wenn vorhanden */
|
|
714
|
+
if (adapter.config.triggerControlVoltage !== '') {
|
|
715
|
+
adapter.getForeignState('adapter.config.triggerControlVoltage', (err, state) => {
|
|
716
|
+
if (state && state.val === true) {
|
|
717
|
+
adapter.setForeignState(adapter.config.triggerControlVoltage, {
|
|
718
|
+
val: false,
|
|
719
|
+
ack: false
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
});
|
|
723
|
+
}
|
|
704
724
|
/* Pumpe ausschalter, wenn vorhanden */
|
|
705
725
|
if (adapter.config.triggerMainPump !== '') {
|
|
706
|
-
adapter.
|
|
707
|
-
if (state) {
|
|
708
|
-
adapter.
|
|
726
|
+
adapter.getForeignState('adapter.config.triggerMainPump', (err, state) => {
|
|
727
|
+
if (state && state.val === true) {
|
|
728
|
+
adapter.setForeignState(adapter.config.triggerMainPump, {
|
|
709
729
|
val: false,
|
|
710
730
|
ack: false
|
|
711
731
|
});
|
|
@@ -714,9 +734,9 @@ const valveControl = {
|
|
|
714
734
|
}
|
|
715
735
|
/* Pumpe (Zisterne) ausschalter, wenn vorhanden */
|
|
716
736
|
if (adapter.config.triggerCisternPump !== '') {
|
|
717
|
-
adapter.
|
|
718
|
-
if (state) {
|
|
719
|
-
adapter.
|
|
737
|
+
adapter.getForeignState('adapter.config.triggerCisternPump', (err, state) => {
|
|
738
|
+
if (state && state.val === true) {
|
|
739
|
+
adapter.setForeignState(adapter.config.triggerCisternPump, {
|
|
720
740
|
val: false,
|
|
721
741
|
ack: false
|
|
722
742
|
});
|
|
@@ -727,9 +747,9 @@ const valveControl = {
|
|
|
727
747
|
const result = adapter.config.events;
|
|
728
748
|
if (result) {
|
|
729
749
|
for (const res of result) {
|
|
730
|
-
adapter.
|
|
731
|
-
if (state) {
|
|
732
|
-
adapter.
|
|
750
|
+
adapter.getForeignState(res.name, (err, state) => {
|
|
751
|
+
if (state && state.val === true) {
|
|
752
|
+
adapter.setForeignState(res.name, {
|
|
733
753
|
val: false,
|
|
734
754
|
ack: false
|
|
735
755
|
});
|
|
@@ -772,6 +792,15 @@ const valveControl = {
|
|
|
772
792
|
});
|
|
773
793
|
addDone = true; // Sprinkle found
|
|
774
794
|
adapter.log.debug(`update ID: ${entry.sprinkleName} new time: ${addTime(res.wateringTime)}`);
|
|
795
|
+
// Wenn aktueller Spränger im BoostOn ausgeschaltet werden soll (ersten 30s)
|
|
796
|
+
if (boostOn
|
|
797
|
+
&& myConfig.config[res.sprinkleID].booster
|
|
798
|
+
&& entry.wateringTime <= 0
|
|
799
|
+
) {
|
|
800
|
+
boostKill(res.sprinkleID);
|
|
801
|
+
boostReady = true;
|
|
802
|
+
adapter.log.debug(`ID: ${res.sprinkleName} BoostKill Sprinkle Off: boostReady = ${boostReady}`);
|
|
803
|
+
}
|
|
775
804
|
break;
|
|
776
805
|
}
|
|
777
806
|
}
|
|
@@ -820,8 +849,8 @@ const valveControl = {
|
|
|
820
849
|
soilMoisture15s: 15 * (myConfig.config[res.sprinkleID].soilMoisture.maxIrrigation - myConfig.config[res.sprinkleID].soilMoisture.triggersIrrigation)
|
|
821
850
|
/ (60 * myConfig.config[res.sprinkleID].wateringTime),
|
|
822
851
|
times: {
|
|
823
|
-
boostTime1: null, // boost start
|
|
824
|
-
boostTime2: null, // boost ende
|
|
852
|
+
boostTime1: null, // boost start in die Zwangspause schicken in 0,25s
|
|
853
|
+
boostTime2: null, // boost ende aus der Zwangspause holen nach 31s
|
|
825
854
|
}, // hinterlegen der verschiedenen Zeiten von timeout für gezieltes späteres löschen
|
|
826
855
|
id: threadList.length || 0,
|
|
827
856
|
};
|
|
@@ -849,6 +878,8 @@ const valveControl = {
|
|
|
849
878
|
setVoltageOnOff(false);
|
|
850
879
|
setPumpOnOff(false);
|
|
851
880
|
if (boostListTimer) {
|
|
881
|
+
boostReady = true;
|
|
882
|
+
boostOn = false;
|
|
852
883
|
clearTimeout(boostListTimer);
|
|
853
884
|
}
|
|
854
885
|
// let bValveFound = false; // Ventil gefunden
|
|
@@ -860,7 +891,7 @@ const valveControl = {
|
|
|
860
891
|
adapter.log.info(`Set Valve (SprinkleControl: off) ID: ${entry.sprinkleName}, value: false`);
|
|
861
892
|
adapter.setForeignState(entry.idState, {
|
|
862
893
|
val: false,
|
|
863
|
-
ack:
|
|
894
|
+
ack: false
|
|
864
895
|
});
|
|
865
896
|
}
|
|
866
897
|
/* Zustand des Ventils im Thread <<< 0 >>> off, < 1 > wait, < 2 > on, < 3 > break, < 4 > Boost(on), < 5 > off(Boost) */
|