iobroker.sprinklecontrol 0.2.7 → 0.2.10

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/lib/myConfig.js CHANGED
@@ -21,7 +21,7 @@ let adapter;
21
21
  * @param {string} res.analogZPct - analog Zero Percent [Auswahlfeld in der Config des Sprinklers > Bodenfeuchte-Sensor > analog > Wert bei 0 %]
22
22
  * @param {string} res.analogOHPct - analog One Hundert Percent [Auswahlfeld in der Config des Sprinklers > Bodenfeuchte-Sensor > analog > Wert bei 100 %]
23
23
  * @param {string} res.maxSoilMoistureIrrigation - maximale Bodenfeuchte nach der Bewässerung [Auswahlfeld in der Config des Sprinklers]
24
- * @param {string} res.startDay - Auswahl (threeRd = Start im 3 Tages Rhythmus,twoNd = Start im 2 Tages Rhythmus, fixDay = Start an festen Tagen Sun-Sat)
24
+ * @param {string} res.startDay - Auswahl (threeRd = Start im 3-Tages-Rhythmus,twoNd = Start im 2-Tages-Rhythmus, fixDay = Start an festen Tagen Sun-Sat)
25
25
  * @param {boolean} res.sun - Sontag, Sunday (Sun)
26
26
  * @param {boolean} res.mon - Montag, Monday (Mon)
27
27
  * @param {boolean} res.tue - Dienstag, Tuesday (Tue) (Tues)
@@ -33,7 +33,7 @@ let adapter;
33
33
  */
34
34
  function getMetConSM(res) {
35
35
 
36
- if (res.methodControlSM === 'bistable' && res.triggerSM.length > 5) {
36
+ if (res.methodControlSM === 'bistable') {
37
37
  // bistable (Bodenfeuchte-Sensor)
38
38
  adapter.subscribeForeignStates(res.triggerSM);
39
39
  return {
@@ -49,7 +49,7 @@ function getMetConSM(res) {
49
49
  };
50
50
 
51
51
 
52
- } else if (res.methodControlSM === 'analog' && res.triggerSM.length > 5) {
52
+ } else if (res.methodControlSM === 'analog') {
53
53
  // analog (Bodenfeuchte-Sensor)
54
54
  adapter.subscribeForeignStates(res.triggerSM);
55
55
  return {
@@ -97,7 +97,7 @@ function getMetConSM(res) {
97
97
  setVal: null,
98
98
  setBool: null
99
99
  };
100
- } else {
100
+ } else if (res.methodControlSM === 'calculation') {
101
101
  // interne (Berechnung der Verdunstung)
102
102
  return {
103
103
  setStartDay: null,
@@ -110,6 +110,19 @@ function getMetConSM(res) {
110
110
  setVal: parseFloat(res.maxSoilMoistureIrrigation) / 2,
111
111
  setBool: null
112
112
  };
113
+ } else {
114
+ adapter.log.warn('Emergency program! No irrigation type is selected in the SprinkleControl configuration! Please adjust.');
115
+ return {
116
+ setStartDay: 'twoNd',
117
+ setStartFixDay: [false, false, false, false, false, false, false], // Sun, Mon, Tue, Wed, Thur, Fri, Sat
118
+ setMetConSM: 'fixDay',
119
+ setTrigSM: '',
120
+ setAnalogZPct: null,
121
+ setAnalogOHPct: null,
122
+ setPct: null,
123
+ setVal: null,
124
+ setBool: null
125
+ };
113
126
  }
114
127
  }
115
128
 
@@ -127,13 +140,19 @@ const myConfig = {
127
140
  /** Name des Bewässerungskreises
128
141
  * @type {string}
129
142
  */
130
- const objectName = res.sprinkleName.replace(/[.;, ]/g, '_');
143
+ let objectName
144
+ if(res.sprinkleName !== '') {
145
+ objectName = res.sprinkleName.replace(/[.;, ]/g, '_');
146
+ } else if (res.sprinkleName === '') {
147
+ objectName = res.name.replace(/[.;, ]/g, '_');
148
+ }
131
149
  const metConSM = getMetConSM(res);
132
150
  const newEntry = {
133
151
  /** Starttage in der Woche
134
152
  * - 0(Sun); 1(Mon); 2(Tue); 3(Wed); 4(Thur); 5(Fri); 6(Sat)
135
153
  * @type {Array.<boolean>}
136
- * startFixDay */ startFixDay: metConSM.setStartFixDay, // Sontag, Sunday (Sun)// Montag, Monday (Mon)// Dienstag, Tuesday (Tue) (Tues)// Mittwoch, Wednesday (Wed)// Donnerstag, Thursday (Thur) (Thurs)// Freitag, Friday (Fri)// Samstag, Saturday (Sat)
154
+ * startFixDay */
155
+ startFixDay: metConSM.setStartFixDay, // Sontag, Sunday (Sun)// Montag, Monday (Mon)// Dienstag, Tuesday (Tue) (Tues)// Mittwoch, Wednesday (Wed)// Donnerstag, Thursday (Thur) (Thurs)// Freitag, Friday (Fri)// Samstag, Saturday (Sat)
137
156
  /** - Auswahl:
138
157
  * - threeRd = Start im 3 Tages Rhythmus,
139
158
  * - twoNd = Start im 2 Tages Rhythmus
@@ -177,15 +196,13 @@ const myConfig = {
177
196
  adapter.subscribeStates(newEntry.autoOnID); // abonnieren der Statusänderungen des Objekts (reagieren auf 'autoOn' der einzelnen Bewässerungskreise)
178
197
  // adapter.subscribeForeignStates(newEntry.idState); // abonnieren der Statusänderungen des Objekts (reagiert auf Änderung des 'Ventils' der einzelnen Bewässerungskreise zur Fehlerkontrolle bzw. Verbrauchsermittlung)
179
198
  }
180
- if (adapter.config.debug) {
181
- adapter.log.info('#1.0 => Set ID: ' + objectName + '(' + newEntry.sprinkleID + ') hinzugefügt - ' + JSON.stringify(myConfig.config[newEntry.sprinkleID]));
182
- }
199
+ adapter.log.debug(`Config ${objectName} created (${newEntry.sprinkleID}) - ${JSON.stringify(myConfig.config[newEntry.sprinkleID])}`);
183
200
  }
184
201
  }
185
202
  },
186
203
  /**
187
204
  * apply Evaporation
188
- * => Verdunstung anwenden auf die einzelnen Sprenger kreise
205
+ * Verdunstung anwenden auf die einzelnen Sprenger kreise
189
206
  * @param {number} eTP - pot. Evapotranspiration nach Penman ETp in mm/d
190
207
  */
191
208
  applyEvaporation: (eTP) => {
@@ -203,9 +220,7 @@ const myConfig = {
203
220
  entry.soilMoisture.val = entry.soilMoisture.maxRain;
204
221
  }
205
222
  entry.soilMoisture.pct = Math.round(1000 * entry.soilMoisture.val / entry.soilMoisture.maxIrrigation) / 10; // Berechnung in %
206
- if (adapter.config.debug) {
207
- adapter.log.info('#1.1 Set ID: ' + objectName + ' => soilMoisture: ' + entry.soilMoisture.val + ' soilMoisture in %: ' + entry.soilMoisture.pct + ' %');
208
- }
223
+ adapter.log.debug(`apply Evaporation: ${objectName} => soilMoisture: ${entry.soilMoisture.val} soilMoisture: ${entry.soilMoisture.pct} %`);
209
224
  adapter.setState(pfadActSoiMoi, {
210
225
  val: entry.soilMoisture.pct,
211
226
  ack: true
@@ -216,7 +231,7 @@ const myConfig = {
216
231
  },
217
232
  /**
218
233
  * Bodenfeuchte (soilMoisture) setzen auf: => pct = 100%; val = maxIrrigation
219
- * @param {number} mySprinkleID - ID des Bewässerungskreis
234
+ * @param {number} mySprinkleID - ID des Bewässerungskreises
220
235
  */
221
236
  setSoilMoistPct100: (mySprinkleID) => {
222
237
  myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxIrrigation;
@@ -240,10 +255,10 @@ const myConfig = {
240
255
  ack: true
241
256
  });
242
257
  } else {
243
- adapter.log.warn('The ' + myConfig.config[mySprinkleID].objectName + ' soil moisture sensor does not provide a Boolean signal');
258
+ adapter.log.warn(`The ${myConfig.config[mySprinkleID].objectName} soil moisture sensor does not provide a Boolean signal`);
244
259
  }
245
260
  } else {
246
- adapter.log.warn('Please check the signals and settings of the ' + myConfig.config[mySprinkleID].objectName + ' soil moisture sensor');
261
+ adapter.log.warn(`Please check the signals and settings of the ${myConfig.config[mySprinkleID].objectName} soil moisture sensor`);
247
262
  }
248
263
  },
249
264
  /**
@@ -258,10 +273,10 @@ const myConfig = {
258
273
  newVal = parseFloat(newVal);
259
274
  if (newVal < myConfig.config[mySprinkleID].analogZPct) {
260
275
  myVal = myConfig.config[mySprinkleID].analogZPct;
261
- adapter.log.warn(myConfig.config[mySprinkleID].objectName + ': analog soil moisture sensor at 0 % => The value range was undercut');
276
+ adapter.log.warn(`${myConfig.config[mySprinkleID].objectName}: analog soil moisture sensor at 0 % => The value range was undercut`);
262
277
  } else if (newVal > myConfig.config[mySprinkleID].analogOHPct) {
263
278
  myVal = myConfig.config[mySprinkleID].analogOHPct;
264
- adapter.log.warn(myConfig.config[mySprinkleID].objectName + ': analog soil moisture sensor at 100 % => The range of values has been exceeded');
279
+ adapter.log.warn(`${myConfig.config[mySprinkleID].objectName}: analog soil moisture sensor at 100 % => The range of values has been exceeded`);
265
280
  } else {
266
281
  myVal = newVal;
267
282
  }
@@ -271,20 +286,20 @@ const myConfig = {
271
286
  ack: true
272
287
  });
273
288
  } else {
274
- adapter.log.warn('The ' + myConfig.config[mySprinkleID].objectName + ' soil moisture sensor does not provide a Number signal');
289
+ adapter.log.warn(`The ${myConfig.config[mySprinkleID].objectName} soil moisture sensor does not provide a Number signal`);
275
290
  }
276
291
  } else {
277
- adapter.log.warn('Please check the signals and settings of the ' + myConfig.config[mySprinkleID].objectName + ' soil moisture sensor');
292
+ adapter.log.warn(`Please check the signals and settings of the ${myConfig.config[mySprinkleID].objectName} soil moisture sensor`);
278
293
  }
279
294
  },
280
295
  /**
281
- * Bodenfeuchte (soilMoisture) erhöhen bis maxRain
296
+ * Bodenfeuchte (soilMoisture) erhöhen bis maxIrrigation (100%)
282
297
  * @param {number} mySprinkleID - ID des Bewässerungskreis
283
298
  * @param {number} addVal - soilMoisture.val wird um den Wert addVal erhöht
284
299
  */
285
300
  addSoilMoistVal: (mySprinkleID, addVal) => {
286
301
  myConfig.config[mySprinkleID].soilMoisture.val += addVal;
287
- if (myConfig.config[mySprinkleID].soilMoisture.val > myConfig.config[mySprinkleID].soilMoisture.maxRain) {myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxRain}
302
+ if (myConfig.config[mySprinkleID].soilMoisture.val > myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) {myConfig.config[mySprinkleID].soilMoisture.val = myConfig.config[mySprinkleID].soilMoisture.maxIrrigation}
288
303
  myConfig.config[mySprinkleID].soilMoisture.pct = Math.round(1000 * myConfig.config[mySprinkleID].soilMoisture.val
289
304
  / myConfig.config[mySprinkleID].soilMoisture.maxIrrigation) / 10; // Berechnung in %
290
305
  adapter.setState('sprinkle.' + myConfig.config[mySprinkleID].objectName + '.actualSoilMoisture', {
@@ -12,11 +12,11 @@ let adapter;
12
12
  * @type {{}}
13
13
  */
14
14
  let ObjMessage = {};
15
+
15
16
  /**
16
- * Modul zum versenden von Nachrichten mittels Telegram, E-Mail, Pushover oder WhatsApp
17
- * Der passende Adapter muss installiert sein!
18
- * @param {any} adapter
19
- * @param {object} ObjMessage
17
+ * Modul zum Versenden von Nachrichten mittels Telegram, E-Mail, Pushover oder WhatsApp
18
+ * der passende Adapter muss installiert sein!
19
+ * @type {{onlySendError(): boolean, sendMessage(string): void, initConfigMessage(ioBroker.Adapter): void}}
20
20
  */
21
21
  const sendMessageText = {
22
22
 
@@ -24,7 +24,7 @@ const sendMessageText = {
24
24
  *
25
25
  * @param {ioBroker.Adapter} myAdapter - Kopie von Adapter main.js
26
26
  */
27
- initConfigMessage: (myAdapter) => {
27
+ initConfigMessage (myAdapter) {
28
28
  adapter = myAdapter;
29
29
  switch (adapter.config.notificationsType) {
30
30
  case 'Telegram':
@@ -51,7 +51,7 @@ const sendMessageText = {
51
51
  /** @type {string} */ emailReceiver: adapter.config.emailReceiver,
52
52
  /** @type {string} */ emailSender: adapter.config.emailSender,
53
53
  /** @type {boolean} */ onlyError: adapter.config.emailOnlyError,
54
- /** @type {number} */ waiting: parseInt(adapter.config.emailWaitToSend) * 1000
54
+ /** @type {number} */ waiting: (parseInt(adapter.config.emailWaitToSend) * 1000) || 0
55
55
  };
56
56
  break;
57
57
 
@@ -87,7 +87,7 @@ const sendMessageText = {
87
87
  * send Message ist für Telegram formatiert und muss für andere Empfänger umformatiert werden
88
88
  *@param {string} message - Botschaft
89
89
  */
90
- sendMessage: (message) => {
90
+ sendMessage (message) {
91
91
 
92
92
  let sendMessage = message;
93
93
 
@@ -98,9 +98,7 @@ const sendMessageText = {
98
98
  ObjMessage.instance !== '' &&
99
99
  ObjMessage.instance !== null &&
100
100
  ObjMessage.instance !== undefined) {
101
- if (adapter.config.debug) {
102
- adapter.log.debug('start sendMessageText per Telegram');
103
- }
101
+ adapter.log.debug('start sendMessageText per Telegram');
104
102
  sendMessage = '<b><u>SprinkleControl:</u></b>\n' + sendMessage;
105
103
  // send Telegram Message
106
104
  if ((ObjMessage.User) && (ObjMessage.User !== 'allTelegramUsers')) {
@@ -128,9 +126,7 @@ const sendMessageText = {
128
126
  ObjMessage.instance !== undefined) {
129
127
  sendMessage = '<b><u>SprinkleControl:</u></b>\n' + sendMessage;
130
128
  sendMessage = sendMessage.replace(/\n/g, '<br />');
131
- if (adapter.config.debug) {
132
- adapter.log.debug('start sendMessageText per E-Mail on used E-Mail-Instance: ${adapter.ObjMessage.instance}');
133
- }
129
+ adapter.log.debug(`start sendMessageText per E-Mail on used E-Mail-Instance: ${ObjMessage.instance}`);
134
130
  // Send E-Mail Message
135
131
  adapter.sendTo(ObjMessage.instance, 'send', {
136
132
  html: sendMessage,
@@ -147,9 +143,7 @@ const sendMessageText = {
147
143
  ObjMessage.instance !== '' &&
148
144
  ObjMessage.instance !== null &&
149
145
  ObjMessage.instance !== undefined) {
150
- if (adapter.config.debug) {
151
- adapter.log.debug('start sendMessageText per E-Mail on used E-Mail-Instance: ${adapter.ObjMessage.instance}');
152
- }
146
+ adapter.log.debug(`start sendMessageText per E-Mail on used E-Mail-Instance: ${ObjMessage.instance}`);
153
147
  // Send pushover Message
154
148
  if (ObjMessage.SilentNotice === 'true' || ObjMessage.SilentNotice === true) {
155
149
  adapter.sendTo(ObjMessage.instance, 'send', {
@@ -178,12 +172,11 @@ const sendMessageText = {
178
172
  ObjMessage.instance !== null &&
179
173
  ObjMessage.instance !== undefined) {
180
174
  sendMessage = '<b><u>SprinkleControl:</u></b>\n' + sendMessage;
175
+ sendMessage = sendMessage.replace(/\n/g,'%0A'); // Zeilenumbruch
181
176
  sendMessage = sendMessage.replace(/<b>|<\/b>/g, '*'); // Fett Bold
182
177
  sendMessage = sendMessage.replace(/<i>|<\/i>/g, '_'); // kursive Italic
183
178
  sendMessage = sendMessage.replace(/<u>|<\/u>/g, ''); // unterstrichen
184
- if (adapter.config.debug) {
185
- adapter.log.debug(`start sendMessageText per WhatsApp on used WhatsApp-Instance: ${ObjMessage.instance}`);
186
- }
179
+ adapter.log.debug(`start sendMessageText per WhatsApp on used WhatsApp-Instance: ${ObjMessage.instance}`);
187
180
  // Send WhatsApp Message
188
181
  adapter.sendTo(ObjMessage.instance, 'send', {
189
182
  text: sendMessage
@@ -198,7 +191,7 @@ const sendMessageText = {
198
191
  * Nachrichtenversandabfrage => true (Ja)
199
192
  * @returns {boolean}
200
193
  */
201
- onlySendError: () => {
194
+ onlySendError () {
202
195
  return (adapter.config.notificationEnabled && adapter.config.notificationsType && ObjMessage.onlyError);
203
196
  }
204
197
 
@@ -16,7 +16,7 @@ let adapter;
16
16
 
17
17
  /**
18
18
  * Thread-list
19
- * => Auflistung aller aktiver Sprenger-Kreise
19
+ * Auflistung aller aktiver Sprenger-Kreise
20
20
  * @type {array}
21
21
  */
22
22
  const threadList = [];
@@ -62,7 +62,7 @@ const currentPumpUse = {
62
62
 
63
63
  /**
64
64
  * Sprinkle (sprinkleName) delete
65
- * => Ventil (sprinkleName) löschen
65
+ * Ventil (sprinkleName) löschen
66
66
  * @param {array.<{sprinkleName: string}>} killList
67
67
  */
68
68
  function delList (killList) {
@@ -81,9 +81,7 @@ function delList (killList) {
81
81
  /* If a valve is found, delete the last array (entry). Wenn Ventil gefunden letzten Array (Auftrag) löschen */
82
82
  if (bValveFound) {
83
83
  threadList.pop();
84
- if (adapter.config.debug) {
85
- adapter.log.info('#2.10 order deleted ID: ' + sprinkleName + ' ( rest orders: ' + threadList.length + ')');
86
- }
84
+ adapter.log.debug(`delList=> order deleted ID: ${sprinkleName} ( rest orders: ${threadList.length} )`);
87
85
  }
88
86
  }
89
87
 
@@ -152,7 +150,7 @@ function boostList (sprinkleID) {
152
150
 
153
151
  /**
154
152
  * If boostOn is ended by entering "runningTime = 0", normal operation should be restored. (Delete timer)
155
- * => Wenn boostOn über die Eingabe "runningTime = 0" beendet wird, so soll zum Normalen ablauf wieder zurückgekehrt werden. (Löschen der Timer)
153
+ * Wenn boostOn über die Eingabe "runningTime = 0" beendet wird, so soll zum Normalen ablauf wieder zurückgekehrt werden. (Löschen der Timer)
156
154
  * @param {number} sprinkleID
157
155
  */
158
156
  function boostKill (sprinkleID) {
@@ -170,9 +168,7 @@ function boostKill (sprinkleID) {
170
168
  if (entry.times.boostTime1) {
171
169
  clearTimeout(entry.times.boostTime1);
172
170
  entry.times.boostTime1 = null;
173
- if (adapter.config.debug) {
174
- adapter.log.info('#2.11 ID: ' + entry.sprinkleName + ' => boostTime2 (Ende) gelöscht)');
175
- }
171
+ adapter.log.debug(`boostKill => ID: ${entry.sprinkleName} => boostTime2 (Ende) gelöscht)`);
176
172
  }
177
173
  if (entry.times.boostTime2) {
178
174
  clearTimeout(entry.times.boostTime2);
@@ -207,14 +203,14 @@ const valveDelay = () => {
207
203
  * @returns {Promise<void>}
208
204
  */
209
205
  const switchTheValvesOffOn = async (threadList, parallel) => {
210
- /**Sammlung von .sprinkleName die am Ende von updateList gelöscht werden
206
+ /**Sammlung von.sprinkleName die am Ende von updateList gelöscht werden
211
207
  * @type {array} - */
212
208
  const killList = [];
213
209
  for (const entry of threadList) { // ausschalten der Ventile
214
- if ((!entry.enabled // ( Ventile ausgeschaltet z.B. Intervall-Beregnung
210
+ if ((!entry.enabled // Ventile ausgeschaltet z.B. Intervall-Beregnung
215
211
  || entry.enabled && entry.myBreak // || in Pause z.B. Boost
216
- || entry.killSprinkle) // || Bewässerung erledigt )
217
- && entry.enabled !== entry.enabledState // && Ventil nicht aktuell
212
+ || entry.killSprinkle) // || Bewässerung erledigt
213
+ && entry.enabled !== entry.enabledState // && Ventil nicht aktuell
218
214
  ) {
219
215
  adapter.setForeignState(entry.idState, {
220
216
  val: false,
@@ -223,11 +219,11 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
223
219
  if (err) {
224
220
  return err;
225
221
  } else {
226
- adapter.log.info('#2.06 Set (' + myConfig.config[entry.sprinkleID].methodControlSM + ') ID: ' + entry.sprinkleName + ', value: ' + entry.enabled);
222
+ adapter.log.info(`Set (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}`);
227
223
  }
228
224
  });
229
225
  entry.enabledState = entry.enabled;
230
- /* Ventil aus threadList löschen => Aufgabe beendet und sind nicht in der Pause */
226
+ /* Ventil aus threadList löschen Aufgabe beendet und sind nicht in der Pause */
231
227
  if (entry.killSprinkle) {
232
228
  killList.push(entry.sprinkleName);
233
229
  }
@@ -257,7 +253,7 @@ const switchTheValvesOffOn = async (threadList, parallel) => {
257
253
  if (err) {
258
254
  return err;
259
255
  } else {
260
- adapter.log.info('#2.05 Set (' + myConfig.config[entry.sprinkleID].methodControlSM + ') ID: ' + entry.sprinkleName + ', value: ' + entry.enabled + ', duration: '+ addTime(entry.wateringTime,''));
256
+ adapter.log.info(`Set (${myConfig.config[entry.sprinkleID].methodControlSM}) ID: ${entry.sprinkleName}, value: ${entry.enabled}, duration: ${addTime(entry.wateringTime,'')}`);
261
257
  }
262
258
  });
263
259
  entry.enabledState = entry.enabled;
@@ -326,7 +322,7 @@ function updateList () {
326
322
  && (!entry.calcOn // Vergleich nur bei Berechnung der Verdunstung
327
323
  || !entry.autoOn // Vergleich nur bei Automatik
328
324
  || (myConfig.config[entry.sprinkleID].soilMoisture.val < myConfig.config[entry.sprinkleID].soilMoisture.maxIrrigation)) // Bodenfeuchte noch nicht erreicht? (z.B. beim Regen)
329
- ) { /* zeit läuft */
325
+ ) { /* Zeit läuft */
330
326
  adapter.setState('sprinkle.' + entry.sprinkleName + '.countdown', {
331
327
  val: addTime(entry.wateringTime - entry.count, ''),
332
328
  ack: true
@@ -374,7 +370,7 @@ function updateList () {
374
370
  ack: true
375
371
  });
376
372
 
377
- /* Wenn in der Konfiguration Bodenfeuchte = 100% gesetzt ist und Auto-Bewässerung aktive, dann Bodenfeuchte = 100% setzen*/
373
+ /* Wenn in der Konfiguration Bodenfeuchte = 100 % gesetzt ist und Auto-Bewässerung aktive, dann Bodenfeuchte = 100 % setzen*/
378
374
  if (entry.autoOn && entry.calcOn && myConfig.config[entry.sprinkleID].endIrrigation) {
379
375
  myConfig.setSoilMoistPct100(entry.sprinkleID);
380
376
  }
@@ -384,15 +380,13 @@ function updateList () {
384
380
  if (myConfig.config[entry.sprinkleID].booster) {
385
381
  if (boostOn) {boostKill(entry.sprinkleID);}
386
382
  boostReady = true;
387
- if (adapter.config.debug) {
388
- adapter.log.info('#2.12 ID: ' + entry.sprinkleName + 'UpdateList Sprinkle Off: boostReady = ' + boostReady);
389
- }
383
+ adapter.log.debug(`ID: ${entry.sprinkleName}UpdateList Sprinkle Off: boostReady = ${boostReady}`);
390
384
  }
391
385
  /* Zeiten löschen */
392
386
  clearInterval(entry.countdown);
393
387
  /*clearTimeout(entry.onOffTimeoutOn);*/
394
388
  clearTimeout(entry.onOffTimeoutOff);
395
- /* Ventil aus threadList löschen => Aufgabe beendet */
389
+ /* Ventil aus threadList löschen Aufgabe beendet */
396
390
  //delList(entry.sprinkleName);
397
391
  entry.killSprinkle = true;
398
392
  updateList();
@@ -408,7 +402,7 @@ function updateList () {
408
402
  }
409
403
 
410
404
  if (curFlow < 0) {
411
- /* - wenn beim Umschalten der Pumpen die Förderleistung zu gering => Ventile deaktivieren - */
405
+ /* - wenn beim Umschalten der Pumpen die Förderleistung zu gering Ventile deaktivieren - */
412
406
  // aufsteigend sortieren nach der Verbrauchsmenge
413
407
  threadList.sort(mySortAscending);
414
408
 
@@ -427,7 +421,7 @@ function updateList () {
427
421
  ack: true
428
422
  });
429
423
  // valveOnOff(entry, false, '#2.6 Set: wait, ID: ');
430
- adapter.log.info('#2.07 Set ID: ' + entry.sprinkleName + ' Pump delivery rate too low, wait! curFlow ' + curFlow + ' parallel: ' + parallel);
424
+ adapter.log.info(`Set ID: ${entry.sprinkleName} Pump delivery rate too low, wait! curFlow ${curFlow} parallel: ${parallel}`);
431
425
  }
432
426
  }
433
427
  }
@@ -447,9 +441,7 @@ function updateList () {
447
441
  entry.enabled = true; // einschalten merken
448
442
  if (myConfig.config[entry.sprinkleID].booster) {
449
443
  boostReady = false;
450
- if (adapter.config.debug) {
451
- adapter.log.info('#2.13 ID: ' + entry.sprinkleName + 'UpdateList sprinkle On: boostReady = ' + boostReady);
452
- }
444
+ adapter.log.debug(`ID: ${entry.sprinkleName}UpdateList sprinkle On: boostReady = ${boostReady}`);
453
445
  setTimeout(() => {
454
446
  boostList(entry.sprinkleID);
455
447
  }, 50);
@@ -484,7 +476,7 @@ function updateList () {
484
476
 
485
477
  switchTheValvesOffOn(threadList, parallel).then(err => {
486
478
  if (err) {
487
- adapter.log.error('#Error - Set (false) err: ' + err);
479
+ adapter.log.error('Error - Set (false) err: ' + err);
488
480
  sendMessageText.sendMessage('Error - Set (fase) err: ' + err);
489
481
  }
490
482
  });
@@ -494,11 +486,11 @@ function updateList () {
494
486
 
495
487
  /**
496
488
  * +++++ Set the current pump for irrigation +++++
497
- * => Festlegen der aktuellen Pumpe zur Bewässerung
489
+ * Festlegen der aktuellen Pumpe zur Bewässerung
498
490
  */
499
491
  function setActualPump () {
500
492
  if (adapter.config.cisternSettings === true) {
501
- /* Zisternen-Bewässerung Einstellung in der config (2.Pumpe) aktiviert */
493
+ /* Zisternen-Bewässerung Einstellung in der config (2. Pumpe) aktiviert */
502
494
  if (currentPumpUse.enable === true) {
503
495
  /* Bewässerungspumpen aktiv */
504
496
  if ((fillLevelCistern < parseFloat(adapter.config.triggerMinCisternLevel)) && (currentPumpUse.pumpCistern === true)) {
@@ -514,7 +506,7 @@ function setActualPump () {
514
506
  val: true,
515
507
  ack: false
516
508
  }); // Hauptpumpe Ein
517
- adapter.log.info('#2.08 Pump change (cistern empty) Cistern pump off => main pump on');
509
+ adapter.log.info('Pump change (cistern empty) Cistern pump off => main pump on');
518
510
  updateList(); // Wasserverbrauch an Pumpenleistung anpassen
519
511
  }
520
512
  if (fillLevelCistern < parseFloat(adapter.config.triggerMinCisternLevel)) {
@@ -584,7 +576,7 @@ function setPumpOnOff(pumpOnOff) {
584
576
  ack: false
585
577
  });
586
578
  currentPumpUse.enable = true;
587
- adapter.log.info('#2.01 Set pump on');
579
+ adapter.log.info('Set (pump) on');
588
580
  }
589
581
  } else {
590
582
  if (state.val !== false) {
@@ -593,11 +585,11 @@ function setPumpOnOff(pumpOnOff) {
593
585
  ack: false
594
586
  });
595
587
  currentPumpUse.enable = false;
596
- adapter.log.info('#2.02 Set pump off');
588
+ adapter.log.info('Set (pump) off');
597
589
  }
598
590
  }
599
591
  } else if (err) {
600
- adapter.log.error('#2.17 triggerMainPump ' + currentPumpUse.pumpName + ' is not available (ist nicht erreichbar): ' + err);
592
+ adapter.log.error(`triggerMainPump ${currentPumpUse.pumpName} is not available (ist nicht erreichbar): ${err}`);
601
593
  }
602
594
  });
603
595
  }
@@ -618,7 +610,7 @@ function setVoltageOnOff(voltageOnOff) {
618
610
  val: true,
619
611
  ack: false
620
612
  });
621
- adapter.log.info('#2.03 Set voltage on');
613
+ adapter.log.info('Set (voltage) on');
622
614
  }
623
615
  } else {
624
616
  if (state.val !== false) {
@@ -626,11 +618,11 @@ function setVoltageOnOff(voltageOnOff) {
626
618
  val: false ,
627
619
  ack: false
628
620
  });
629
- adapter.log.info('#2.04 Set voltage off');
621
+ adapter.log.info('Set (voltage) off');
630
622
  }
631
623
  }
632
624
  } else if (err) {
633
- adapter.log.error('#2.13 triggerControlVoltage is not available (ist nicht erreichbar): ' + err);
625
+ adapter.log.error('triggerControlVoltage is not available (ist nicht erreichbar): ' + err);
634
626
  }
635
627
  });
636
628
  }
@@ -678,8 +670,8 @@ function addConsumedAndTime(entry) {
678
670
  /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
679
671
 
680
672
  /**
681
- *
682
- * @type {{clearEntireList: valveControl.clearEntireList, initValveControl: valveControl.initValveControl, setFillLevelCistern: valveControl.setFillLevelCistern, addList: valveControl.addList}}
673
+ * -- externe Funktionen -> initValveControl - addList - clearEntireList - setFillLevelCistern --
674
+ * @type {{clearEntireList(): void, initValveControl(ioBroker.Adapter): void, setFillLevelCistern(number): void, addList(Array<{auto: Boolean, sprinkleID: Number, wateringTime: Number}>): void}}
683
675
  */
684
676
  const valveControl = {
685
677
  /**
@@ -687,7 +679,7 @@ const valveControl = {
687
679
  * => Initialisieren Sie die Startkonfiguration von ventilControl
688
680
  * @param {ioBroker.Adapter} myAdapter
689
681
  */
690
- initValveControl: (myAdapter) => {
682
+ initValveControl (myAdapter) {
691
683
  adapter = adapter || myAdapter;
692
684
  currentPumpUse.pumpCistern = false;
693
685
  currentPumpUse.pumpName = adapter.config.triggerMainPump || '';
@@ -703,7 +695,7 @@ const valveControl = {
703
695
  val: 0 + ' : ' + adapter.config.maximumParallelValves,
704
696
  ack: true
705
697
  });
706
- /* Pumpe ausschalter wenn vorhanden */
698
+ /* Pumpe ausschalter, wenn vorhanden */
707
699
  if (adapter.config.triggerMainPump !== '') {
708
700
  adapter.getState('adapter.config.triggerMainPump', (err, state) => {
709
701
  if (state) {
@@ -714,7 +706,7 @@ const valveControl = {
714
706
  }
715
707
  });
716
708
  }
717
- /* Pumpe (Zisterne) ausschalter wenn vorhanden */
709
+ /* Pumpe (Zisterne) ausschalter, wenn vorhanden */
718
710
  if (adapter.config.triggerCisternPump !== '') {
719
711
  adapter.getState('adapter.config.triggerCisternPump', (err, state) => {
720
712
  if (state) {
@@ -728,7 +720,7 @@ const valveControl = {
728
720
  /* alle Ventile (.name = "hm-rpc.0.MEQ1234567.3.STATE") in einem definierten Zustand (false) versetzen*/
729
721
  const result = adapter.config.events;
730
722
  if (result) {
731
- for(const res of result) {
723
+ for (const res of result) {
732
724
  adapter.getState(res.name, (err, state) => {
733
725
  if (state) {
734
726
  adapter.setState(res.name, {
@@ -743,19 +735,19 @@ const valveControl = {
743
735
 
744
736
  /**
745
737
  * Add Sprinkle
746
- * => Sprinkle hinzufügen
747
- * - auto => Automatik == (true), Handbetrieb == (false)
748
- * - sprinkleID => zugriff auf myConfig.config[sprinkleID].???
749
- * - wateringTime => Bewässerungszeit in min
738
+ * Sprinkle hinzufügen
739
+ * - auto Automatik == (true), Handbetrieb == (false)
740
+ * - sprinkleID zugriff auf myConfig.config[sprinkleID]. xyz
741
+ * - wateringTime Bewässerungszeit in min
750
742
  * @param {Array.<{auto: Boolean, sprinkleID: Number, wateringTime: Number}>} sprinkleList
751
743
  */
752
- addList: (sprinkleList) => {
744
+ addList (sprinkleList) {
753
745
  //
754
746
  for (const res of sprinkleList) {
755
747
  const sprinkleName = myConfig.config[res.sprinkleID].objectName;
756
748
  /**
757
749
  * add done
758
- * => hinzufügen erledigt (Sprenger bereits aktive)
750
+ * hinzufügen erledigt (Sprenger bereits aktive)
759
751
  * @type {boolean}
760
752
  */
761
753
  let addDone = false;
@@ -774,9 +766,7 @@ const valveControl = {
774
766
  ack: false
775
767
  });
776
768
  addDone = true; // Sprinkle found
777
- if (adapter.config.debug) {
778
- adapter.log.info('#2.14 update ID: ' + entry.sprinkleName + ' new time: ' + addTime(res.wateringTime, ''));
779
- }
769
+ adapter.log.debug(`update ID: ${entry.sprinkleName} new time: ${addTime(res.wateringTime, '')}`);
780
770
  break;
781
771
  }
782
772
  }
@@ -821,9 +811,7 @@ const valveControl = {
821
811
  val: addTime(res.wateringTime, ''),
822
812
  ack: false
823
813
  });
824
- if (adapter.config.debug) {
825
- adapter.log.info('#2.15 ID: ' + sprinkleName + 'new order created: ' + JSON.stringify(threadList[newThread.id]));
826
- }
814
+ adapter.log.debug(`ID: ${sprinkleName} new order created: ${JSON.stringify(threadList[newThread.id])}`);
827
815
  }
828
816
  }
829
817
  updateList();
@@ -833,7 +821,7 @@ const valveControl = {
833
821
  * switch off all devices, when close the adapter
834
822
  * => Beim Beenden des adapters alles ausschalten
835
823
  */
836
- clearEntireList: () => {
824
+ clearEntireList () {
837
825
  if (boostListTimer) {
838
826
  clearTimeout(boostListTimer);
839
827
  }
@@ -872,10 +860,8 @@ const valveControl = {
872
860
  clearTimeout(entry.times.boostTime2);
873
861
  entry.times.boostTime2 = null;
874
862
  }
875
- threadList.pop();
876
- if (adapter.config.debug) {
877
- adapter.log.info('#2.16 order deleted Stop all ID: ' + entry.sprinkleName + ' ( rest orders: ' + threadList.length + ')');
878
- }
863
+ threadList.pop(); // del last array
864
+ adapter.log.debug(`order deleted Stop all ID: ${entry.sprinkleName} ( rest orders: ${threadList.length} )`);
879
865
  }
880
866
  updateList();
881
867
  }, // End clearEntireList
@@ -884,11 +870,11 @@ const valveControl = {
884
870
  * Änderungen des Füllstands setzen + Vorrang der Pumpe setzen
885
871
  * @param {number} levelCistern
886
872
  */
887
- setFillLevelCistern: (levelCistern) => {
873
+ setFillLevelCistern (levelCistern) {
888
874
  fillLevelCistern = (typeof levelCistern === 'number') ? levelCistern : 0 ;
889
875
  setActualPump();
890
876
  } // End setFillLevelCistern
891
- }; // End valveControl
877
+ } // End valveControl
892
878
 
893
879
  /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
894
880