Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Intervallskript / Bewaesserungsskript

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    886

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Intervallskript / Bewaesserungsskript

Scheduled Pinned Locked Moved Skripten / Logik
3 Posts 2 Posters 909 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    Pumbadinho
    wrote on last edited by
    #1

    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
    0
    • S Offline
      S Offline
      Solear
      wrote on last edited by
      #2

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

      Grüße

      Solear

      iobroker als LXC unter Proxmox

      1 Reply Last reply
      0
      • P Offline
        P Offline
        Pumbadinho
        wrote on last edited by
        #3

        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
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        Support us

        ioBroker
        Community Adapters
        Donate

        357

        Online

        32.6k

        Users

        82.1k

        Topics

        1.3m

        Posts
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Home
        • Recent
        • Tags
        • Unread 0
        • Categories
        • Unreplied
        • Popular
        • GitHub
        • Docu
        • Hilfe