iobroker.sprinklecontrol 1.0.3 → 1.0.5
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 +8 -10
- package/admin/i18n/de/translations.json +7 -0
- package/admin/i18n/en/translations.json +7 -0
- package/admin/i18n/es/translations.json +7 -0
- package/admin/i18n/fr/translations.json +7 -0
- package/admin/i18n/it/translations.json +7 -0
- package/admin/i18n/nl/translations.json +7 -0
- package/admin/i18n/pl/translations.json +7 -0
- package/admin/i18n/pt/translations.json +7 -0
- package/admin/i18n/ru/translations.json +7 -0
- package/admin/i18n/uk/translations.json +7 -0
- package/admin/i18n/zh-cn/translations.json +7 -0
- package/admin/index_m.html +74 -56
- package/admin/index_m.js +10 -3
- package/admin/words.js +7 -0
- package/io-package.json +33 -31
- package/lib/myConfig.js +3 -1
- package/lib/valveControl.js +52 -40
- package/main.js +272 -254
- package/package.json +2 -2
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sprinklecontrol",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.5",
|
|
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
|
+
"1.0.5": {
|
|
23
|
+
"en": "Adapter benötigt jetzt node.js >= 22\nSecond start time added\nbug fixed in sprinklerState",
|
|
24
|
+
"de": "Adapter benötigt jetzt node.js >= 22\nZweite Startzeit hinzugefügt\nfehler behoben in SprinklerState",
|
|
25
|
+
"ru": "Адаптер benötigt jetzt node.js >= 22\nДобавлено второе время\nбаг фиксируется в SprinklerState",
|
|
26
|
+
"pt": "Adaptador benötigt jetzt node.js >= 22\nSegunda hora de início adicionada\nerro corrigido no aspersorState",
|
|
27
|
+
"nl": "Voor de toepassing van deze onderverdeling wordt verstaan onder:\nTweede starttijd toegevoegd\nbug vast in sprinklerState",
|
|
28
|
+
"fr": "Adaptateur benötigt jetzt node.js >= 22\nDeuxième heure de départ ajoutée\nbug corrigé dans l'état arroseur",
|
|
29
|
+
"it": "Adattatore Benötigt jetzt node.js >= 22\nTempo di partenza aggiunto\nbug fisso in sprinkler",
|
|
30
|
+
"es": "Adaptador benötigt jetzt node.js ⇩= 22\nSegundo tiempo de inicio añadido\nbug fijado en sprinklerState",
|
|
31
|
+
"pl": "Adapter benötigt jetzt node.js > = 22\nDodano drugi czas rozpoczęcia\nbłąd zainstalowany w zraszaczu Stan",
|
|
32
|
+
"uk": "Адаптер benötigt jetzt node.js >= 22\nДругий час запуску\nвиправлено помилку в sprinklerState",
|
|
33
|
+
"zh-cn": "Benötigt喷气式喷气式喷气式喷气式喷气式喷气式喷气式喷气式喷气式喷气式喷雾器\n第二次开始时间添加\n在喷洒状态中修正错误"
|
|
34
|
+
},
|
|
35
|
+
"1.0.4": {
|
|
36
|
+
"en": "GitHub error message #274",
|
|
37
|
+
"de": "GitHub Fehlermeldung #274",
|
|
38
|
+
"ru": "Сообщение об ошибке GitHub #274",
|
|
39
|
+
"pt": "Mensagem de erro do GitHub # 274",
|
|
40
|
+
"nl": "GitHub foutmelding #274",
|
|
41
|
+
"fr": "Message d'erreur GitHub #274",
|
|
42
|
+
"it": "Messaggio di errore GitHub #274",
|
|
43
|
+
"es": "Mensaje de error GitHub #274",
|
|
44
|
+
"pl": "Komunikat błędu GitHub # 274",
|
|
45
|
+
"uk": "Повідомлення про помилку GitHub #274",
|
|
46
|
+
"zh-cn": "GitHub 错误消息 # 274"
|
|
47
|
+
},
|
|
22
48
|
"1.0.3": {
|
|
23
49
|
"en": "Pressure relief valve added after irrigation.",
|
|
24
50
|
"de": "Druckentlastungsventil nach Bewässerung hinzugefügt.",
|
|
@@ -83,32 +109,6 @@
|
|
|
83
109
|
"pl": "Przełączanie hysterezy cysterny jest teraz przechowywane w konfiguracji.",
|
|
84
110
|
"uk": "У конфігурації тепер зберігається комутаційний гістерезис цистерни.",
|
|
85
111
|
"zh-cn": "晶体的开关式歇斯底里现保存在配置中."
|
|
86
|
-
},
|
|
87
|
-
"0.2.18": {
|
|
88
|
-
"en": "Hysteresis switch-on value of the cistern changed to 20%",
|
|
89
|
-
"de": "Hysterese Einschaltwert der Zisterne auf 20% geändert",
|
|
90
|
-
"ru": "Значение Hysteresis switch-on цистерны изменилось до 20%",
|
|
91
|
-
"pt": "O valor da histerese da cisterna mudou para 20%",
|
|
92
|
-
"nl": "Hysterese schakelaar waarde van de cisterne veranderd in 20%",
|
|
93
|
-
"fr": "La valeur d'activation de l'hystérie de la citerne est passée à 20%",
|
|
94
|
-
"it": "Il valore di commutazione della cisterna di Hysteresis è cambiato al 20%",
|
|
95
|
-
"es": "El valor de conmutación de la histeria cambió al 20%",
|
|
96
|
-
"pl": "Zmiana wartości hysterezy cysterny na 20%",
|
|
97
|
-
"uk": "Гістерез змінився на 20%",
|
|
98
|
-
"zh-cn": "贮器的开关值改为20%"
|
|
99
|
-
},
|
|
100
|
-
"0.2.17": {
|
|
101
|
-
"en": "Valve timing corrected",
|
|
102
|
-
"de": "Ventilzeit korrigiert",
|
|
103
|
-
"ru": "Время клапана скорректировано",
|
|
104
|
-
"pt": "Regulação da válvula",
|
|
105
|
-
"nl": "Gecorrigeerde kleptijd",
|
|
106
|
-
"fr": "Réglage de la vanne",
|
|
107
|
-
"it": "Valvola tempistica corretta",
|
|
108
|
-
"es": "Tiempo de válvula corregido",
|
|
109
|
-
"pl": "Skorygowany czas zaworu",
|
|
110
|
-
"uk": "Терміни клапана, виправлені",
|
|
111
|
-
"zh-cn": "阀门时间得到纠正"
|
|
112
112
|
}
|
|
113
113
|
},
|
|
114
114
|
"desc": {
|
|
@@ -184,6 +184,7 @@
|
|
|
184
184
|
"wateringStartTime": "livingGoldenHourEnd",
|
|
185
185
|
"timeShift": "0",
|
|
186
186
|
"weekLiving": "06:30",
|
|
187
|
+
"secondStartTime": "8:00",
|
|
187
188
|
"selectAddStartTime": "noAddStartTime",
|
|
188
189
|
"triggerAddStartTimeETpCur": "3.5",
|
|
189
190
|
"triggerAddStartTimeETpToday": "30",
|
|
@@ -202,12 +203,12 @@
|
|
|
202
203
|
"sensorWindSpeed": "",
|
|
203
204
|
"sensorBrightness": "",
|
|
204
205
|
"sensorRainfall": "",
|
|
205
|
-
"switchingBehavior": "
|
|
206
|
-
"weatherForecastService": "
|
|
206
|
+
"switchingBehavior": "noResponse",
|
|
207
|
+
"weatherForecastService": "noWeatherData",
|
|
207
208
|
"weatherForInstance": "",
|
|
208
209
|
"pathRainForecast": "",
|
|
209
210
|
"thresholdRain": "2",
|
|
210
|
-
"notificationsType": "
|
|
211
|
+
"notificationsType": "noNotification",
|
|
211
212
|
"telegramInstance": "",
|
|
212
213
|
"telegramNoticeType": "longTelegramNotice",
|
|
213
214
|
"telegramUser": "",
|
|
@@ -237,6 +238,7 @@
|
|
|
237
238
|
"sprinkleName": "sprinkle example",
|
|
238
239
|
"name": "hm-rpc.0.MEQ1234567.3.STATE",
|
|
239
240
|
"triggerID": "",
|
|
241
|
+
"startTimeSelection": "firstStartTime",
|
|
240
242
|
"wateringTime": "10",
|
|
241
243
|
"wateringAdd": "200",
|
|
242
244
|
"wateringIntervalOff": "0",
|
|
@@ -249,7 +251,7 @@
|
|
|
249
251
|
"pipeFlow": "1100",
|
|
250
252
|
"booster": false,
|
|
251
253
|
"endIrrigation": true,
|
|
252
|
-
"methodControlSM": "
|
|
254
|
+
"methodControlSM": "fixDay",
|
|
253
255
|
"triggerSM": "",
|
|
254
256
|
"inGreenhouse": false,
|
|
255
257
|
"analogZPct": "0",
|
package/lib/myConfig.js
CHANGED
|
@@ -39,7 +39,9 @@ const myConfig = {
|
|
|
39
39
|
|
|
40
40
|
const newEntry = {
|
|
41
41
|
// Schaltzustand des Ventils
|
|
42
|
-
enabled: res.enabled || false,
|
|
42
|
+
enabled: res.enabled || false,
|
|
43
|
+
// Auswahl der Startzeit (firstStartTime = Startzeit 1, secondStartTime = Startzeit 2)
|
|
44
|
+
startTimeSelection: res.startTimeSelection || "firstStartTime",
|
|
43
45
|
booster: res.booster,
|
|
44
46
|
autoOn: true,
|
|
45
47
|
// sprinklecontrol.0.sprinkle.Rasenumrandung.autoOnID
|
package/lib/valveControl.js
CHANGED
|
@@ -104,6 +104,16 @@ const setValve = async (thread, val) => {
|
|
|
104
104
|
ack: false
|
|
105
105
|
});
|
|
106
106
|
thread.enable = val;
|
|
107
|
+
if (thread.name !== 'Cistern pump' && thread.name !== 'Main pump' && thread.name !== '24V' && thread.name !== 'no Pump') {
|
|
108
|
+
adapter.setStateAsync(`sprinkle.${thread.name}.sprinklerState`, {
|
|
109
|
+
val: thread.state,
|
|
110
|
+
ack: true
|
|
111
|
+
});
|
|
112
|
+
adapter.setStateAsync(`sprinkle.${thread.name}.valveOn`, {
|
|
113
|
+
val: thread.enable,
|
|
114
|
+
ack: true
|
|
115
|
+
});
|
|
116
|
+
}
|
|
107
117
|
adapter.log.info(`setValve ${ thread.name }: ${ val }, ${ thread.wateringTime > 0 && val === true ? `${ tools.addTime(thread.wateringTime,'') }, ` : '' }`);
|
|
108
118
|
return thread.control.idState;
|
|
109
119
|
} catch (error) {
|
|
@@ -194,11 +204,12 @@ const setValve = async (thread, val) => {
|
|
|
194
204
|
`);
|
|
195
205
|
if (thread.ac.acSetValveCancelTimeout.aborted === false) thread.ac.acSetValveCancelTimeout.abort();
|
|
196
206
|
}
|
|
197
|
-
|
|
198
|
-
val: thread.state,
|
|
199
|
-
ack: true
|
|
200
|
-
});
|
|
207
|
+
|
|
201
208
|
if (thread.name !== 'Cistern pump' && thread.name !== 'Main pump' && thread.name !== '24V' && thread.name !== 'no Pump') {
|
|
209
|
+
adapter.setStateAsync(`sprinkle.${thread.name}.sprinklerState`, {
|
|
210
|
+
val: thread.state,
|
|
211
|
+
ack: true
|
|
212
|
+
});
|
|
202
213
|
adapter.setStateAsync(`sprinkle.${thread.name}.valveOn`, {
|
|
203
214
|
val: thread.enable,
|
|
204
215
|
ack: true
|
|
@@ -356,6 +367,7 @@ const countSprinkleTime = async (entry) => {
|
|
|
356
367
|
|
|
357
368
|
/* Alle 15s die Bodenfeuchte anpassen */
|
|
358
369
|
if (entry.calcOn // Vergleich nur bei Berechnung der Verdunstung
|
|
370
|
+
&& entry.autoOn // Vergleich nur bei Automatik
|
|
359
371
|
&& !(entry.count % 15) // alle 15s ausführen
|
|
360
372
|
) {
|
|
361
373
|
myConfig.addSoilMoistVal(entry.sprinkleID, entry.soilMoisture15s);
|
|
@@ -701,33 +713,33 @@ const updateList = async () => {
|
|
|
701
713
|
adapter.setStateAsync(currentPumpUse.id,{
|
|
702
714
|
val: currentPumpUse.enable,
|
|
703
715
|
ack: true
|
|
704
|
-
});
|
|
705
|
-
|
|
706
|
-
|
|
716
|
+
});
|
|
717
|
+
}
|
|
718
|
+
await asyncTime.setTimeout(switchingDistanceMS, undefined, undefined);
|
|
707
719
|
} catch (error) {
|
|
708
720
|
adapter.log.error(`Error trigger current Pump [${currentPumpUse.idState}]: ${error}`);
|
|
709
|
-
}
|
|
710
|
-
}
|
|
721
|
+
}
|
|
711
722
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
723
|
+
// Druckentlastungsventil ansteuern wenn in Konfiguration aktiv
|
|
724
|
+
if (adapter.config.pressureRelief === true // Druckentlastungsventil aktiviert
|
|
725
|
+
) {
|
|
726
|
+
try {
|
|
727
|
+
const empty = await findPressureReliefValve();
|
|
728
|
+
if (empty) {
|
|
729
|
+
pressureReliefValve.name = empty.objectName;
|
|
730
|
+
pressureReliefValve.wateringTime = 10;
|
|
731
|
+
pressureReliefValve.pipeFlow = empty.pipeFlow;
|
|
732
|
+
pressureReliefValve.enable = false;
|
|
733
|
+
pressureReliefValve.control = empty.control;
|
|
734
|
+
adapter.log.info(`Pressure relief valve: ${pressureReliefValve.name} with pipeFlow ${pressureReliefValve.pipeFlow} l/h for 10s opened!`);
|
|
735
|
+
await setValve(pressureReliefValve, true);
|
|
736
|
+
await asyncTime.setTimeout(1000 * pressureReliefValve.wateringTime, undefined, undefined);
|
|
737
|
+
await setValve(pressureReliefValve, false);
|
|
738
|
+
await asyncTime.setTimeout(switchingDistanceMS, undefined, undefined);
|
|
739
|
+
}
|
|
740
|
+
} catch (error) {
|
|
741
|
+
adapter.log.error(`Error trigger pressure relief valve: ${error}`);
|
|
728
742
|
}
|
|
729
|
-
} catch (error) {
|
|
730
|
-
adapter.log.error(`Error trigger pressure relief valve: ${error}`);
|
|
731
743
|
}
|
|
732
744
|
}
|
|
733
745
|
|
|
@@ -1517,9 +1529,11 @@ const valveControl = {
|
|
|
1517
1529
|
*/
|
|
1518
1530
|
clearEntireList: async function () {
|
|
1519
1531
|
try {
|
|
1520
|
-
await setValve(controlVoltage, false);
|
|
1521
|
-
await setValve(currentPumpUse, false);
|
|
1522
|
-
|
|
1532
|
+
if (controlVoltage?.control?.idState) await setValve(controlVoltage, false);
|
|
1533
|
+
if (currentPumpUse?.control?.idState) await setValve(currentPumpUse, false);
|
|
1534
|
+
boostReady = true;
|
|
1535
|
+
boostOn = false;
|
|
1536
|
+
if (threadList.length === 0) return true; // keine Ventile in der Liste => Exit
|
|
1523
1537
|
for (let counter = threadList.length - 1; // Loop über das Array
|
|
1524
1538
|
counter >= 0;
|
|
1525
1539
|
counter--) {
|
|
@@ -1528,18 +1542,18 @@ const valveControl = {
|
|
|
1528
1542
|
entry.state = 'off'; //0
|
|
1529
1543
|
if (entry.enable) {
|
|
1530
1544
|
await setValve(entry, false);
|
|
1531
|
-
adapter.log.info(`Set Valve (SprinkleControl: off) ID: ${entry.name}, value: false`);
|
|
1545
|
+
adapter.log.info(`Set Valve (SprinkleControl: off) ID: ${ entry.name }, value: false`);
|
|
1532
1546
|
} else {
|
|
1533
|
-
adapter.setStateAsync(`sprinkle.${entry.name}.sprinklerState`, {
|
|
1547
|
+
adapter.setStateAsync(`sprinkle.${ entry.name}.sprinklerState`, {
|
|
1534
1548
|
val: entry.state,
|
|
1535
1549
|
ack: true
|
|
1536
1550
|
});
|
|
1537
1551
|
}
|
|
1538
|
-
adapter.setStateAsync(`sprinkle.${entry.name}.runningTime`, {
|
|
1552
|
+
adapter.setStateAsync(`sprinkle.${ entry.name }.runningTime`, {
|
|
1539
1553
|
val: '00:00',
|
|
1540
1554
|
ack: true
|
|
1541
1555
|
});
|
|
1542
|
-
adapter.setStateAsync(`sprinkle.${entry.name}.countdown`, {
|
|
1556
|
+
adapter.setStateAsync(`sprinkle.${ entry.name }.countdown`, {
|
|
1543
1557
|
val: '0',
|
|
1544
1558
|
ack: true
|
|
1545
1559
|
});
|
|
@@ -1556,19 +1570,17 @@ const valveControl = {
|
|
|
1556
1570
|
if (entry?.ac?.acUpdateListBoostOn?.aborted === false) entry.ac.acUpdateListBoostOn.abort(); // UpdateList Ausschalten der Ventile bei BoostOn
|
|
1557
1571
|
if (entry?.ac?.acOnOffTimeoutOff?.aborted === false) entry.ac.acOnOffTimeoutOff.abort(); // OnOffTimeoutOff Ausschaltdauer bei on-off-Betrieb
|
|
1558
1572
|
|
|
1559
|
-
adapter.log.debug(`order deleted Stop all ID: ${entry.name} ( rest orders: ${threadList.length} )`);
|
|
1573
|
+
adapter.log.debug(`order deleted Stop all ID: ${ entry.name } ( rest orders: ${ threadList.length } )`);
|
|
1560
1574
|
threadList.pop(); // del last array
|
|
1561
1575
|
}
|
|
1562
|
-
boostReady = true;
|
|
1563
|
-
boostOn = false;
|
|
1564
1576
|
const _currentConsumption = await currentConsumption(true);
|
|
1565
|
-
if (_currentConsumption
|
|
1577
|
+
if (_currentConsumption?.parallel > 0) throw new Error(`Not all valves in the list have been deleted`); // Nicht alle Ventile in der Liste wurden gelöscht
|
|
1566
1578
|
return true;
|
|
1567
1579
|
} catch (error) {
|
|
1568
1580
|
if (error) {
|
|
1569
|
-
adapter.log.warn(`valveControl.clearEntireList() => ${error}`);
|
|
1581
|
+
adapter.log.warn(`valveControl.clearEntireList() => ${ error }`);
|
|
1570
1582
|
}
|
|
1571
|
-
|
|
1583
|
+
return false;
|
|
1572
1584
|
}
|
|
1573
1585
|
|
|
1574
1586
|
}, // End clearEntireList
|