iobroker.sprinklecontrol 1.0.7 → 1.0.9

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/main.js CHANGED
@@ -157,6 +157,29 @@ function startAdapter(options) {
157
157
  adapter.log.warn(`sensorRainfall => Wrong value: ${state.val}, Type: ${typeof state.val}`);
158
158
  }
159
159
  }
160
+
161
+ // wenn in der config unter methodControlSM!== 'analog' oder 'bistable' eingegeben wurde, dann Bodenfeuchte-Sensor auslesen
162
+ if (myConfig.config) {
163
+
164
+ // @ts-ignore
165
+ function filterByID(obj){
166
+ return (((obj.methodControlSM === 'analog') || (obj.methodControlSM === 'bistable')) && (obj.triggerSM === id));
167
+ }
168
+ const filter = myConfig.config.filter(filterByID);
169
+ if (filter) {
170
+ for (const fil of filter) {
171
+ if (id === myConfig.config[fil.sprinkleID].triggerSM){
172
+ // analog
173
+ if (fil.methodControlSM === 'analog') {
174
+ myConfig.setSoilMoistPct(fil.sprinkleID, state.val);
175
+ } else if (fil.methodControlSM === 'bistable') { // bistable
176
+ myConfig.setSoilMoistBool(fil.sprinkleID, state.val);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+
160
183
  // Feiertagskalender
161
184
  if (adapter.config.publicHolidays === true) {
162
185
  if (id === `${adapter.config.publicHolInstance}.heute.boolean`) {
@@ -262,28 +285,6 @@ function startAdapter(options) {
262
285
  }
263
286
  }
264
287
  }
265
- // wenn in der config unter methodControlSM!== 'analog' oder 'bistable' eingegeben wurde, dann Bodenfeuchte-Sensor auslesen
266
- if (myConfig.config) {
267
-
268
- // @ts-ignore
269
- function filterByID(obj){
270
- return (((obj.methodControlSM === 'analog') || (obj.methodControlSM === 'bistable')) && (obj.triggerSM === id));
271
- }
272
- const filter = myConfig.config.filter(filterByID);
273
- if (filter) {
274
- for (const fil of filter) {
275
- if (id === myConfig.config[fil.sprinkleID].triggerSM){
276
- // analog
277
- if (fil.methodControlSM === 'analog') {
278
- myConfig.setSoilMoistPct(fil.sprinkleID, state.val);
279
- } else if (fil.methodControlSM === 'bistable') { // bistable
280
- myConfig.setSoilMoistBool(fil.sprinkleID, state.val);
281
- }
282
- }
283
- }
284
- }
285
- }
286
-
287
288
  const idSplit = id.split('.', 5);
288
289
  const _found = myConfig.config.find((d) => d.objectName === idSplit[3]);
289
290
  if (_found) {
@@ -321,7 +322,7 @@ function startAdapter(options) {
321
322
  const _extBreak = await valveControl.extBreak(_found.sprinkleID, state.val).catch((e) => {
322
323
  adapter.log.warn(`main.extBreak: ${e}`);
323
324
  });
324
- if (_extBreak?.name) adapter.log.info(`_extBreak: ${_extBreak.name}, ${_extBreak.val ? 'on' : 'off'}`);
325
+ if (_extBreak?.name) adapter.log.info(`extBreak: ${_extBreak.name}, ${_extBreak.val ? 'on' : 'off'}`);
325
326
  if (_extBreak?.val === false) {
326
327
  /* Zustand des Ventils im Thread < 0 > off, < 1 > wait, < 2 > on, < 3 > break, < 4 > Boost(on), < 5 > off(Boost), < 6 > Cistern empty, <<< 7 >>> extBreak */
327
328
  adapter.setState(`sprinkle.${_found.objectName}.sprinklerState`, {
@@ -375,7 +376,7 @@ function startAdapter(options) {
375
376
  currentPumpUse.controller.ackTrue(state);
376
377
  }
377
378
  // The state was deleted
378
- adapter.log.debug(`state ${id} deleted`);
379
+ // adapter.log.debug(`state ${id} deleted`);
379
380
  }
380
381
  }
381
382
  } catch (e) {
@@ -573,7 +574,7 @@ async function checkStates() {
573
574
 
574
575
  /* control.autoOnOff */
575
576
  const _autoOnOff = await adapter.getStateAsync('control.autoOnOff');
576
- if (_autoOnOff?.val && typeof _autoOnOff.val === 'boolean') {
577
+ if (typeof _autoOnOff.val === 'boolean') {
577
578
  autoOnOffStr = _autoOnOff.val;
578
579
  } else {
579
580
  autoOnOffStr = true;
@@ -799,7 +800,7 @@ const calcPos = schedule.scheduleJob('calcPosTimer', '5 0 * * *', function() {
799
800
  evaporation.setNewDay();
800
801
 
801
802
  // Startzeit Festlegen → verzögert wegen Daten von SunCalc
802
- setTimeout(() => {
803
+ adapter.setTimeout(() => {
803
804
  startTimeSprinkle();
804
805
  secondStartTimeSprinkle();
805
806
  if (adapter.config.enableTimeBasedRestriction === true) {
@@ -959,7 +960,7 @@ function addStartTimeSprinkle() {
959
960
  // @ts-ignore
960
961
  adapter.log.debug(`greaterETpCurrent: ${(adapter.config.selectAddStartTime === 'greaterETpCurrent')} & ${(adapter.config.triggerAddStartTimeETpCur < evaporation.getETpTodayNum())}, withExternalSignal; ${(adapter.config.selectAddStartTime === 'withExternalSignal')} & ${addStartTimeSwitch}`);
961
962
  }
962
- setTimeout(()=>{
963
+ adapter.setTimeout(()=>{
963
964
  schedule.cancelJob('sprinkleAddStartTime');
964
965
  }, 200);
965
966
  });
@@ -1080,8 +1081,8 @@ function startTimeSprinkle() {
1080
1081
 
1081
1082
  const scheduleStartTime = schedule.scheduleJob('sprinkleStartTime', `${ startTimeSplit[1] } ${ startTimeSplit[0] } * * *`, function() {
1082
1083
  startOfIrrigation("firstStartTime");
1083
- setTimeout (() => {
1084
- setTimeout(()=>{
1084
+ adapter.setTimeout (() => {
1085
+ adapter.setTimeout(()=>{
1085
1086
  nextStartTime();
1086
1087
  }, 800);
1087
1088
  schedule.cancelJob('sprinkleStartTime');
@@ -1089,6 +1090,32 @@ function startTimeSprinkle() {
1089
1090
  });
1090
1091
  }
1091
1092
 
1093
+ /**
1094
+ * Start of irrigation
1095
+ * - selectStartTime: firstStartTime | autoStart
1096
+ * firstStartTime → Startvorgang durch StartTimeSprinkle
1097
+ * autoStart → Startvorgang durch addStartTimeSprinkle
1098
+ * - Zisterne leer → Abbruch
1099
+ * - Filter enabled → Prüfung der Filterkriterien für alle Sprenger, die aktiviert sind (autoOn == true) und zusätzliche Bewässerung aktiviert haben (addWateringTime > 0)
1100
+ * - Test Bodenfeuchte → Prüfung der Bodenfeuchte für die Sprenger, die die automatische Bewässerung aktiviert haben (autoOn == true) und zusätzliche Bewässerung aktiviert haben (addWateringTime > 0)
1101
+ * - bistable: Bodenfeuchte-Sensor mit 2-Punkt-Regler true und false → Wenn true, dann Startvorgang
1102
+ * - analog: Bodenfeuchte-Sensor im Wertebereich von 0 bis 100% → Prozentuale Bodenfeuchte zu gering → Startvorgang
1103
+ * - fixDay: Start an festen Tagen ohne Sensoren → Bewässerungstag erreicht → Startvorgang
1104
+ * - calculation: Berechnung Bodenfeuchte auf Basis von ETpToday und dailyHighTemp → Prozentuale Bodenfeuchte zu gering → Startvorgang
1105
+ * - Wenn in der Config Regenvorhersage aktiviert: Startvorgang abbrechen, wenn der Regen den eingegebenen Schwellwert überschreitet.
1106
+ * - Start der Bewässerung
1107
+ * - Berechnung der Bewässerungszeit
1108
+ * - Start der Bewässerung über valveControl.addList(memAddList)
1109
+ * - Message über startende Bewässerung mit Angabe der Bewässerungszeit
1110
+ * - Log über startende Bewässerung mit Angabe der Bewässerungszeit
1111
+ * - Wenn extBreak == true → Startvorgang abbrechen und extBreak || START => Message und Log
1112
+ * - Wenn in der Config Regenvorhersage aktiviert: Startvorgang abbrechen, wenn der Regen den eingegebenen Schwellwert überschreitet.
1113
+ * - Wenn autoOnOff == false → keine auto Start
1114
+ * - Wenn Zisterne leer → keine zusätzliche Bewässerung möglich
1115
+ * - Wenn in der Config Regenvorhersage aktiviert: Startvorgang abbrechen, wenn der Regen den eingegebenen Schwellwert überschreitet.
1116
+ *
1117
+ * @param {string} selectStartTime - firstStartTime | autoStart
1118
+ */
1092
1119
  const startOfIrrigation = async (selectStartTime) => {
1093
1120
  let messageText = '';
1094
1121
 
@@ -1257,21 +1284,27 @@ const startOfIrrigation = async (selectStartTime) => {
1257
1284
  function secondStartTimeSprinkle() {
1258
1285
  schedule.cancelJob('sprinkleSecondStartTime');
1259
1286
 
1260
- // if (autoOnOff == false) => keine auto Start
1287
+ // if (autoOnOff == false) => keine auto Start
1261
1288
  if (!autoOnOffStr) {
1262
- adapter.log.info(`Sprinkle: autoOnOff === Aus ( ${autoOnOffStr} )`);
1263
- adapter.setState('info.nextAutoStart', {
1264
- val: 'autoOnOff = off(0)',
1265
- ack: true
1266
- });
1267
1289
  return;
1268
1290
  }
1269
-
1270
- const secondStartTimeSplit = adapter.config.secondStartTime.split(':');
1291
+ const curTime = new Date();
1292
+ let myWeekday = curTime.getDay(); // 0 = Sonntag, 1 = Montag, ..., 6 = Samstag
1293
+ let secondStartTime = adapter.config.secondStartTime;
1294
+
1295
+ // Start am Wochenende, an Feiertagen oder Urlaub →, wenn Zeiten des Wochenendes verwendet werden soll
1296
+ if((adapter.config.publicWeekend2 && ((myWeekday === 6) || (myWeekday === 0))) // Start am Wochenende
1297
+ || (adapter.config.publicHolidays2 && ((myWeekday === 6) || (myWeekday === 0)) // heute Feiertag
1298
+ || (holidayStr === true)) // Urlaub
1299
+ ){
1300
+ secondStartTime = adapter.config.weekEndLiving;
1301
+ }
1302
+
1303
+ const secondStartTimeSplit = secondStartTime.split(':');
1271
1304
  // @ts-ignore
1272
1305
  const scheduleSecondStartTime = schedule.scheduleJob('sprinkleSecondStartTime', `${ secondStartTimeSplit[1] } ${ secondStartTimeSplit[0] } * * *`, function() {
1273
1306
  startOfIrrigation("secondStartTime");
1274
- setTimeout(()=>{
1307
+ adapter.setTimeout(()=>{
1275
1308
  schedule.cancelJob('sprinkleSecondStartTime');
1276
1309
  }, 200);
1277
1310
  });
@@ -2297,7 +2330,7 @@ async function main() {
2297
2330
 
2298
2331
  await checkActualStates().catch((e) => adapter.log.warn(`checkActualStates: ${e}`));
2299
2332
  // @ts-ignore
2300
- timer = setTimeout(() => {
2333
+ timer = adapter.setTimeout(() => {
2301
2334
  startTimeSprinkle();
2302
2335
  secondStartTimeSprinkle();
2303
2336
  addStartTimeSprinkle();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sprinklecontrol",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "Control of several sprinklers depending on weather conditions and pump performance.",
5
5
  "author": {
6
6
  "name": "Dirk Peter",
@@ -29,18 +29,20 @@
29
29
  "node": ">= 22"
30
30
  },
31
31
  "dependencies": {
32
- "@iobroker/adapter-core": "^3.3.2",
32
+ "@iobroker/adapter-core": "^3.4.1",
33
33
  "node-schedule": "^2.1.1",
34
34
  "suncalc": "^1.9.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@alcalzone/release-script": "^5.2.0",
37
+ "@alcalzone/release-script": "^5.2.1",
38
38
  "@alcalzone/release-script-plugin-iobroker": "^5.2.0",
39
39
  "@alcalzone/release-script-plugin-license": "^5.2.0",
40
40
  "@alcalzone/release-script-plugin-manual-review": "^5.2.0",
41
41
  "@iobroker/adapter-dev": "^1.5.0",
42
42
  "@iobroker/eslint-config": "^2.3.4",
43
- "@iobroker/testing": "^5.2.2"
43
+ "@iobroker/testing": "^5.2.2",
44
+ "@tsconfig/node22": "^22.0.5",
45
+ "@types/node": "^22.19.19"
44
46
  },
45
47
  "main": "main.js",
46
48
  "files": [