Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

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

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

Intervallskript / Bewaesserungsskript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 2 Kommentatoren 886 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    Pumbadinho
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      Solear
      schrieb am zuletzt editiert von
      #2

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

      Grüße

      Solear

      iobroker als LXC unter Proxmox

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        Pumbadinho
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        626

        Online

        32.5k

        Benutzer

        81.7k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe