NEWS

  • Starter

    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

  • Starter

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


  • 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.

Suggested Topics

687
Online

34.7k
Users

40.7k
Topics

558.1k
Posts