Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Intervallskript / Bewaesserungsskript

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Intervallskript / Bewaesserungsskript

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Pumbadinho last edited by

      Hallo zusammen,

      ich arbeite gerade an meinem ersten Skript und habe hier mal eine erste funktionierende Version. Ich möchte dieses Skript für meine Gartenbewaesserung verwenden, aber es ist recht universell gehalten, von daher kann man es für jede Art von Intervallschaltung verwenden.

      `//-----------------------------------------------------------------
      // Skript zur Gartenbewässerung
      //
      // Author: Pumbadinho (IObroker Forum)
      //
      //ToDo: Bewaesserung.Auto als boolean anlegen
      //ToDo: Zeit ändern ohne Skript neu starten zu müssen
      //ToDo: Dauersumiteration optimieren
      //
      // Versionhistory
      // 0.1 : Initial creation
      //-----------------------------------------------------------------
      
      //-----------------------------------------------------------------
      // Deklarationen
      //-----------------------------------------------------------------
      
      var dauer = [1,1];                                                                          	//Array für die Dauer der Intervallschritte (min)
      var dauersum = 0;                                                                           	//komulativer Dauer Wert
      var defaultDauer = 10;                                                                      	// ist ein intervall nicht gesetzt, wird der defaulwert verwendet
      
      var objekte = [];
      objekte[0] = ["hm-rpc.0.KEQXXXXXXX.1.STATE"];                             		// Hier die Objekte des ersten Intervalls Komma getrennt ablegen
      objekte[1] = ["hm-rpc.0.KEQXXXXXXX.1.STATE"];                                 	// Hier die Objekte des ersten Intervalls Komma getrennt ablegen
      //Weitere Ojektarrays nach bedarf anlegen
      
      createState('Bewaesserung.Auto',true);                                                  	// Erstellen des Objektes javascript.0.Bewaesserung.Auto              
      createState('Bewaesserung.Start',"22:00");                                             	// Erstellen des Objektes javascript.0.Bewaesserung.Start              
      
      var jsBewStart = "javascript.0.Bewaesserung.Start";                                 // in den objekten angelegte variable zur Bestimmung ob start aktiv ist
      var jsBewAuto = "javascript.0.Bewaesserung.Auto";                                  // in den objekten angelegte variable zur Bestimmung ob Bew aktiv ist
      var prefixLog = "Bewaesserung - ";
      
      //-----------------------------------------------------------------
      // Erstellung CronJobs
      //-----------------------------------------------------------------
      
      /**/
      objekte.forEach(function(element, index, array){                                      // Durchgehen der einzelnen Intervallgruppen
          dauersum = 0;
          for (var i = 0; i <= index-1; i++){
              if (dauer[i]){                                                                      		// Prüfung ob eine Dauer definiert ist
                  dauersum += dauer[i];                                                           	// vorheriger Wert + länge aktuelles Intervall
              } else {
                  dauersum += defaultDauer;                                                      // vorheriger Wert + Defaultwert
              }    
          }
      
          var cronTime = addMinutesToCrontime(getCronTime(getState(jsBewStart).val),dauersum);    // erstelle die Crontime String und addiere die dauersum Minuten
          log (prefixLog + parseInt(index+1) + ". Crontime Job erstellt: " + cronTime);
          schedule(cronTime,function(){
              if(getState(jsBewAuto).val){                                                        	// Nur wenn javascript.0.Bewaesserung.Auto = true
                  //log ("Old: " + objekte[index-1]);
                  if (index > 0){                                                                 	// Letzten Aktoren müssen nur deakviert werden, wenn es nicht die erste Gruppe ist
                      objekte[index-1].forEach(function(elementi, indexi, arrayi){        // Die Aktoren des vorherigen Intervalls deaktivieren
                          setState(elementi,false);
                          log(prefixLog + elementi + " ausgeschaltet");
                      });
                  }
                  element.forEach(function(elementi, indexi, arrayi){                       // Die Aktoren des aktuellen Intervalls aktivieren
                      setState(elementi,true);
                      log(prefixLog + elementi + " eingeschaltet");
                  });
              }
      
          });
      });
      
      // dektivieren letzter Aktoren
      if (dauer[objekte.length-1]){                                                                 // Prüfung ob eine Dauer definiert ist
          dauersum += dauer[objekte.length-1];                                               // vorheriger Wert + länge aktuelles Intervall
      } else {
          dauersum += defaultDauer;                                                       	// vorheriger Wert + Defaultwert
      }  
      var cronTime = addMinutesToCrontime(getCronTime(getState(jsBewStart).val),dauersum);        // Erstelle die Crontime String und addiere die dauersum Minuten
      log (prefixLog + parseInt(objekte.length+1) + ". Crontime Job erstellt: " + cronTime);
      schedule(cronTime,function(){
          if(getState(jsBewAuto).val){                                                            // Nur wenn javascript.0.Bewaesserung.Auto = true
              //log ("Old: " + objekte[index-1]);
              objekte[objekte.length - 1].forEach(function(elementi, indexi, arrayi){             // Die vorher aktivierten Aktoren deaktivieren
                  setState(elementi,false);
                  log(elementi + " augeschaltet");
              });    
          }
      });
      
      /**/
      
      //-----------------------------------------------------------------
      // Funktionen
      //-----------------------------------------------------------------
      // gibt die Zeit des Formats xx:xx als Cronzeit zurück x x * * *
      function getCronTime (zeit){
          var hours = parseInt(zeit.split(":")[0]);
          var minutes = parseInt(zeit.split(":")[1]);
          return minutes + " " + hours + " * * *";
      }
      
      //gibt die um difMinutes erhöhte Cronzeit zurück
      function addMinutesToCrontime(cronZeit, difMinutes){
          var hours = parseInt(cronZeit.split(" ")[1]);
          var minutes = parseInt(cronZeit.split(" ")[0]) + difMinutes;
          if (minutes >= 60) {
              hours += parseInt(minutes/60);
              minutes = minutes % 60;
          }
      
          return minutes + " " + hours + " * * *";
      }` 
      
      Anmerkungen werden gerne genommen. wie ihr seht, stehen noch einige ToDo's an, aber das ich jetzt am Wochenende wegfahre, wollte ich euch das Skript schonmal unoptimiert präsentieren.[/i][/i]
      
      1 Reply Last reply Reply Quote 0
      • S
        Solear last edited by

        Sehr schön! Ich bin gespannt wie es weitergeht!

        Grüße

        Solear

        1 Reply Last reply Reply Quote 0
        • P
          Pumbadinho last edited by

          Wenn es jemand einsetzt würde ich mich sehr über die Erfahrungen freuen. Anregungen oder Ideen zur Anpassung versuche auch gerne zu realisieren.

          Gesendet von meinem Nexus 6P mit Tapatalk

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          1.2k
          Online

          31.7k
          Users

          79.7k
          Topics

          1.3m
          Posts

          2
          3
          830
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo