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. Bewässerungssteuerung per Interface in View

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Bewässerungssteuerung per Interface in View

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
climatemonitoringblocklyjavascript
3 Beiträge 2 Kommentatoren 419 Aufrufe 1 Watching
  • Ä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.
  • ? Offline
    ? Offline
    Ein ehemaliger Benutzer
    schrieb am zuletzt editiert von
    #1

    HI,

    hab in meinem Garten eine Pumpe in einem Schacht die mit einem HM Aktor (HM-LC-Sw2-FM) geschaltet werden.

    In dem Schacht befindet sich auch ein Wassersensor (HM-Sen-Wa-Od).

    Daher hab ich einen % Satz der Füllung und lasse mir den umrechnen in einen Liter Wert.

    Nun würde ich gern mir ein Interface einbinden wollen, das ich einmal vorgeben kann die Bewässerung soll entweder z.b. 10min dauern oder 10% von der Füllung sollen verteilt werden.

    Eingegeben mit +- oder Pfeiltasten und einer Bestätigungstaste?!

    Wenn man dies noch mit Wochentagen kombinieren könnte wäre das ein Traum.

    Hat jemand so etwas schon mal gemacht und kann mir da weiter helfen??

    Vielen Dank für Eure Unterstützung
    Tobias

    1 Antwort Letzte Antwort
    0
    • ? Offline
      ? Offline
      Ein ehemaliger Benutzer
      schrieb am zuletzt editiert von
      #2

      Oder kann man über ein Fenster wenigsten Die Dauer vorgeben wielange der Aktor eingeschaltet sein soll?

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        Superdad
        schrieb am zuletzt editiert von Superdad
        #3

        Habe es folgendermaßen gelöst:

        ![alt text](Bewässerung.jpg image url)

        Kreis1,2 und 3 sind meine Bewässerungskreise.
        Pumpe "Winterbetrieb" (vergessen den Namen zu ändern!) ist die Pumpe für die Kreise1,2 und 3.
        Pumpe nach Füllstand schalten, ist meine zweite Pumpe, wenn der Füllstand kurz vor Überlauf ist. Dann pumpe ich einen gewissen Level ab.

        Meine View zum downloaden.
        In Vis (View importieren) einfügen:

        View Beregnung.txt

        Dann unter Scripte einfügen:

        1. Eigene States anlegen:
        createState('javascript.0.AnAus', '', {
            name: 'Kreis1 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.AnAus2', '', {
            name: 'Kreis2 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.AnAus3', '', {
            name: 'Kreis3 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.Kreis1', '', {
            name: 'Kreis1 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.Kreis2', '', {
            name: 'Kreis1 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.Kreis3', '', {
            name: 'Kreis1 Beregnung',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.Countdown.countdown', '', {
            name: 'Countdown',
            type: 'number',
            unit: 'min'
        });
        createState('javascript.0.Countdown.countTrigger', '', {
            name: 'Trigger',
            type: 'number',
            unit: ''
        });
        createState('javascript.0.Countdown.Zeitvorgabe', '', {
            name: 'Zeitvorgabe',
            type: 'boolean',
            unit: ''
        });
        

        und natürlich einmal ausführen.

        1. Script für Countdown, also die Auswahl der Zeit auf dem Zeitbalken. (Ist von pix)
        /* Countdown
        // http://forum.iobroker.net/viewtopic.php?f=32&t=3436&hilit=countdown
        
        01.08.2016 pix
        
        */
        
        var interval = null;
        var countdown = 60 * 1000; // 60min * 60s * 1000ms
        
        createState('Countdown.Sleeptimer.countdown', seconds2text(countdown), {name: 'Sleeptimer Countdown / Restzeit', type: 'string'});
        createState('Countdown.Sleeptimer.countdown_seconds', countdown, {name: 'Sleeptimer Countdown / Restzeit in s', type: 'number', def: countdown});
        createState('Countdown.Sleeptimer.afterCount', {name: 'Sleeptimer Countdown / afterCount', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.countTrigger', {name: 'Sleeptimer Countdown / countTrigger', type: 'boolean', def: false});
        
        var idCountdown =     'javascript.'+ instance +'.Countdown.Sleeptimer.countdown',
            idCountdown_sec = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown_seconds',
            idAfterCount =    'javascript.'+ instance +'.Countdown.Sleeptimer.afterCount',
            idTrigger =       'javascript.'+ instance +'.Countdown.Sleeptimer.countTrigger';
        
        // SPEZIFISCHE UMSETZUNG für a-flow
        
        createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
        
        var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min',
            id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min',
            id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min',
            id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min',
            id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
            id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min',
            id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
        
        
        
        // Countdown
        
        function seconds2text(_seconds) {
            var sec_num = parseInt(_seconds, 10); // don't forget the second param
            var hours   = Math.floor(sec_num / 3600);
            var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
            var seconds = sec_num - (hours * 3600) - (minutes * 60);
        
            var time;
            if (hours > 0) {
                // if (hours   < 4) {hours   = "0" + hours;}
                if (minutes < 4) {minutes = "0" + minutes;}
                if (seconds < 10) {seconds = "0" + seconds;}
                // time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
                time = hours + ':' + minutes + ':' + seconds + ' Std.';
            } else if (minutes > 0) {
                if (minutes < 4) {minutes = "0" + minutes;}
                if (seconds < 10) {seconds = "0" + seconds;}
                // time = minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
                time = minutes + ':' + seconds + 'min';
            } else {
                if (seconds < 10) {seconds = "0" + seconds;}
                // time = seconds + ' Sekunden'; // original
                time = seconds + ' s';
            }
            return time;
        }
        
        function count() {
            // remove trigger
            if (getState(idTrigger).val) setState(idTrigger, false);
        
            // Abbruch bei Knopfdruck
            if ( getState(id5min).val || getState(id10min).val || getState(id15min).val || getState(id20min).val || getState(id30min).val || getState(id40min).val || getState(id60min).val ) { 
                setState(idCountdown, 00);
                setState(idAfterCount, false);
                clearInterval(interval);
                interval = null;
                nachricht = "Das Programm wird gestartet";
                sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
            }   
            
            if (countdown > 1) {
                setState(idCountdown_sec, parseInt(countdown,10));
                setState(idCountdown, seconds2text(--countdown));
            } else {
                clearInterval(interval);
                interval = null;
                setState(idCountdown_sec, 0);
                setState(idCountdown, seconds2text(0));
                setState(idAfterCount, true);
            }
        }
        
        on(idTrigger, function (obj) {
            if (obj.state.val) {
                setState(idCountdown_sec, parseInt(countdown,10));
                setState(idCountdown, seconds2text(countdown));
                setState(idAfterCount, false);
                if (!interval) {
                    count();
                    interval = setInterval(count, 1000);
                }
            }
        });
        // wenn idAfterCount true wird, kann eine Aktion ausgeführt werden
        on(idAfterCount, function (obj) {
            if (obj.state.val) {
                log('Countdown abgelaufen');
                // weitere Aktionen einfügen
                // Sprachausgabe
            nachricht = 'Das Programm ist fertig'; 
            // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe fertig
            sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});
            }
        });
        
        
        
        // Taster für VIS
        
        createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false});
        createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
        
        var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min',
            id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min',
            id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min',
            id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min',
            id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
            id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min',
            id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
        
        
        
        function sleeptimer(dauer) {
            if (interval) {    // wenn Countdown schon läuft
                clearInterval(interval);
                interval = null;
                setState(idCountdown_sec, parseInt(0,4));
                setState(idCountdown, seconds2text(0));
                log(dauer + 'min Sleeptimer gestoppt');
        
                // Sprachausgabe
                 nachricht = 'Das Programm wird gestoppt'; 
                 // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe Teigprogramm ein
                 sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                 // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
                
            } else {
                countdown = dauer * 60;                                                 // Dauer festlegen (in Minuten)
                setState(idTrigger, true);                                              // Countdown starten
                log(dauer + 'min Sleeptimer gestartet');
        
                // Sprachausgabe
                // nachricht = 'Das Programm wird gestartet'; 
                // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe Teigprogramm ein
                // sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
            }
        }
        
        on(id5min, function (obj) {                                                     // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(5);                                                          // 5min Zeit übergeben
                setStateDelayed(id5min, false, 250);                                    // nach viertel Sekunde wieder auf false
            }
        });
        
        on(id10min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(10); // 10min Zeit übergeben
                setStateDelayed(id10min, false, 250); // nach viertel Sekunde wieder auf false
            }
        });
        
        on(id15min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(15); // 15min Zeit übergeben
                setStateDelayed(id15min, false, 250); // nach viertel Sekunde wieder auf false
            }
        });
        
        on(id20min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(20); // 20min Zeit übergeben
                setStateDelayed(id20min, false, 250); // nach viertel Sekunde wieder auf false
        
                // Sprachausgabe
                // nachricht = 'Das Programm wird gestartet'; 
                // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe Teigprogramm ein
                // sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);        
            
            }
            
        });
        
        on(id30min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(30); // 30min Zeit übergeben
                setStateDelayed(id30min, false, 250); // nach viertel Sekunde wieder auf false
                
                 // Sprachausgabe
                 // nachricht = 'Das Programm wird gestartet'; 
                 // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe Teigprogramm ein
                 // sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                 // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
            
            }
        });
        
        on(id40min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(40); // 40min Zeit übergeben
                setStateDelayed(id40min, false, 250); // nach viertel Sekunde wieder auf false
                
                 // Sprachausgabe
                 // nachricht = 'Das Pprogramm wird gestartet'; 
                 // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);                  // Sprachausgabe Teigprogramm ein
                 // sendTo("paw.0",'TabKueche',{send:  'say', text:  nachricht});             // Sprachausgabe ueber PAW
                 // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
            
            }
        });
        
        on(id60min, function (obj) { // bei jeder Änderung
            if (obj.state.val) {
                sleeptimer(60); // 60min Zeit übergeben
                setStateDelayed(id60min, false, 250); // nach viertel Sekunde wieder auf false
            }
        
        });
        
        
         
        
        1. Script für Pumpe Kreis1. Läuft bei mir über 12V Ventile, die ich dann bei Bedarf einschalte plus die Pumpe.
        // Pumpe: Ausschalten nach x Minuten
        // http://forum.iobroker.net/viewtopic.php?f=21&t=5067
        
        function weiter() {
            var Zeitvorgabe = getState('javascript.0.Countdown.Zeitvorgabe').val ;      // Zeit auswählen
        
            //#############################################################
            // Bewässerung zunächst ausschalten beim erstmaligen Skriptstart
            // um im Falle eines Reboots den zuvor laufenden Bewässerungstimer auszuschalten (Not-Aus),
            // da er nach Reboot den zuvor gesetzten Ausschalttrigger nicht mehr ausführen kann
            setState("hm-rpc.0.xxxxxxxxxxx.1.STATE", false);
            setState("hm-rpc.0.xxxxxxxxxxx.4.STATE", false);
            //#############################################################
        
            log (Zeitvorgabe);
            if (Zeitvorgabe === 0 || Zeitvorgabe === isNaN) Zeitvorgabe = 30;
            setStateDelayed("hm-rpc.0.xxxxxxxxxx.1.STATE", true);                       // Kreis 1 Ventil einschalten
            setStateDelayed("hm-rpc.0.xxxxxxxxxx.4.STATE", true, 1000);                 // nach 1 Sek. Pumpe ein
            setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", Zeitvorgabe);                     // OnTime setzen
        
            // Countdown starten für Anzeige der Zeit auf View
            setState('javascript.0.Countdown.countTrigger', true);                      // Countdown Brunnen starten
            
            setStateDelayed("javascript.0.AnAus", 0, (Zeitvorgabe*60*1000));            // nach x Min. ausschalten  -> Pumpe
            setStateDelayed("hm-rpc.0.xxxxxxxxx.2.STATE", false);                      // Ventil 2 auf false setzen
            setStateDelayed("hm-rpc.0.xxxxxxxxx.3.STATE", false);                      // Ventil 3 auf false setzen
            sendTo('telegram', "Brunnen eingeschaltet. \nNach " + (Zeitvorgabe) + " Minuten wird er wieder automatisch ausgeschaltet."); 
            //log ("Brunnen eingeschaltet. Nach " + (Zeitvorgabe*60*1000) + " Sekunden wird er wieder automatisch ausgeschaltet.");    
        }
        
        
        function weiter2() {
            setState("hm-rpc.0.xxxxxxxxxx.1.STATE", false);                             // Brunnen Ventil aus
            setState("hm-rpc.0.xxxxxxxxxx.4.STATE", false);                             // Brunnen Pumpe aus
            sendTo('telegram', "Brunnen ausgeschaltet."); 
            //log ("Brunnen ausgeschaltet.");    
            setState('javascript.0.Countdown.countTrigger', false);                     // Countdown Pumpe aus
            setState('javascript.0.Countdown.Zeitvorgabe', 0);                          // Zeitvorwahl auf Null setzen
            setState('javascript.0.Countdown.countdown', 0);                            // Countdown auf Null setzen
            setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", 0);                               // OnTime auf Null
        }
        
        on({id: "javascript.0.AnAus", change: "ne", val: 1}, function() {               // Bewaesserung Kreis1 einschalten
            //log("Auslöser Schalter - Cux: Brunnen ein");
            weiter();
            event("Gartenpumpe Kreis1 läuft");                                          // in eventlist schreiben
            
            // Sprachausgabe
            // nachricht = 'Kreis eins ist eingeschalten ' 
            // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);               // Sprachausgabe Kreis 1 ein
            Ausgabe = "Kreis eins ist eingeschalten";
            sendTo("paw.0",'TabKueche',{send:  'say', text:  Ausgabe});                 // Sprachausgabe ueber PAW
        }); 
        
        on({id: "javascript.0.AnAus", change: "ne", val: 0}, function() {               // Bewaesserung Kreis1 ausschalten
            weiter2();
            event("Gartenpumpe Kreis1 aus");
            
            // Sprachausgabe
            // nachricht = 'Kreis eins ist ausgeschalten ' 
            // setState("sayit.2.tts.text"/*Text to speech*/, nachricht);               // Sprachausgabe Kreis 1 aus
            Ausgabe = "Kreis eins ist ausgeschalten";
            sendTo("paw.0",'TabKueche',{send:  'say', text:  Ausgabe});                 // Sprachausgabe ueber PAW
        }); 
        
        1. Falls du verschiedene Kreise hast, kannst du das Script dann für deine Kreise anpassen.

        Ich habe bei mir 3 Scripte laufen. Für jeden Kreis ein eigenes Script.
        Kann man sicherlich eleganter lösen! Bei mir läuft es jedenfalls sehr gut.

        Hoffe, dir geholfen zu haben.

        CCU3

        iOBroker auf IntelNUC Proxmox

        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

        705

        Online

        32.6k

        Benutzer

        82.2k

        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