Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Bewässerungssteuerung per Interface in View

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Bewässerungssteuerung per Interface in View

    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User last edited by

      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 Reply Last reply Reply Quote 0
      • ?
        A Former User last edited by

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

        1 Reply Last reply Reply Quote 0
        • S
          Superdad last edited by Superdad

          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.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          494
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          blockly climate javascript monitoring
          2
          3
          384
          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