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/io-package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sprinklecontrol",
4
- "version": "1.0.3",
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": "standard",
206
- "weatherForecastService": "dasWetter",
206
+ "switchingBehavior": "noResponse",
207
+ "weatherForecastService": "noWeatherData",
207
208
  "weatherForInstance": "",
208
209
  "pathRainForecast": "",
209
210
  "thresholdRain": "2",
210
- "notificationsType": "Telegram",
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": "calculation",
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
@@ -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
- adapter.setStateAsync(`sprinkle.${thread.name}.sprinklerState`, {
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
- await asyncTime.setTimeout(switchingDistanceMS, undefined, undefined);
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
- if (adapter.config.pressureRelief === true // Druckentlastungsventil aktiviert
713
- && adapter.config.pumpSelection !== 'noPump' // && Pumpe vorhanden
714
- ) {
715
- try {
716
- const empty = await findPressureReliefValve();
717
- if (empty) {
718
- pressureReliefValve.name = empty.objectName;
719
- pressureReliefValve.wateringTime = 10;
720
- pressureReliefValve.pipeFlow = empty.pipeFlow;
721
- pressureReliefValve.enable = false;
722
- pressureReliefValve.control = empty.control;
723
- adapter.log.info(`Pressure relief valve: ${pressureReliefValve.name} with pipeFlow ${pressureReliefValve.pipeFlow} l/h for 10s opened!`);
724
- await setValve(pressureReliefValve, true);
725
- await asyncTime.setTimeout(1000 * pressureReliefValve.wateringTime, undefined, undefined);
726
- await setValve(pressureReliefValve, false);
727
- await asyncTime.setTimeout(switchingDistanceMS, undefined, undefined);
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
- // let bValveFound = false; // Ventil gefunden
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.parallel > 0) throw new Error(`clearEntireList: Not all valves in the list have been deleted`); // Nicht alle Ventile in der Liste wurden gelöscht
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
- return false;
1583
+ return false;
1572
1584
  }
1573
1585
 
1574
1586
  }, // End clearEntireList