Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Poolpumpe, Solarsteuerung, PH Dosierung bräuchte etwas Hilfe

    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

    Poolpumpe, Solarsteuerung, PH Dosierung bräuchte etwas Hilfe

    This topic has been deleted. Only users with topic management privileges can see it.
    • coyote
      coyote Most Active last edited by

      Hi all,

      bin dabei meine Pool Steuerung fertig zu stellen, bräuchte aber etwas Hilfe bei den Scripten.
      Zunächst die Punkte die ich realisieren möchte:

      Punkt 1:
      Bei einer Differenztemperatur (Pool/Absorber) von 4 Grad soll das Ventil zum Absorber geschaltet werden.
      Da die Temperatur vom Pool im Ansaugrohr gemessen wird, steigt diese meist noch 1-2 Grad, wenn die Pumpe läuft. Daher soll bei erreichen der Diff Temperatur die Pumpe erst ca. 5 min laufen, dann soll wiederum geprüft werden, ob die Diff Temperatur immer noch größer 4 ist.
      Wenn dem so ist, soll das Ventil zum Absorber geschaltet werden, ist die Temperatur aber nach den 5 Minuten Laufzeit wieder kleiner 4 soll das Ventil nicht geschaltet werden und die Pumpe wieder aus.

      Punkt 2:
      Wie kann ich per Script die Laufzeit der Pumpe berechnen? Die Pumpe soll 6h am Tag laufen. Normalerweise 3h morgens, 3h Abends. Wird aber tagsüber die Pumpe angeschaltet, weil über den Absorber gepumpt wird, soll sie Abends nicht mehr laufen. Und in VIS hätte ich diese Laufzeit auch gerne.

      Punkt 3:
      Wenn die Poolpumpe morgens oder Abends automatisch eingeschaltet wird, sollen nach 10min der PH und Chlor Wert geprüft werden. Sind die Werte darunter, soll 2min dosiert werden, dann aus, nach 10min soll wieder geprüft werden und je nach dem wieder dosiert werden oder nicht.

      Hier mal mein Versuch zu Punkt 1:

      //Diff Temp größer 4 Grad
      
       on({
          id: 'mqtt.0.Poolsteuerung.DTemp.T'/*Poolsteuerung/DTemp/T*/,
          change: "ne",
          valGt: 4,
          oldValLe: 4,
          logic: "and"
      }, function () {   
          var sperre = getState('javascript.0.Pool.Pumpensperre.manuell').val;
          var pooltemp = getState('mqtt.0.Poolsteuerung.PTemp').val;
      
              setState('hm-rpc.0.NEQ0116143.1.STATE', true);
              sendTo('telegram.0', 'DiffTemp erreicht, Pumpe wird eingeschaltet, dann nochmal geprüft');
          var intervall1 = setInterval(function(){
                var difftemp = getState('mqtt.0.Poolsteuerung.DTemp.T').val;
           if ( difftemp >= 4 && sperre === false){  
              sendTo('telegram.0', "DiffTemp ist größer 4°C, Wert ist: " + difftemp + '°C' + " Ventil wird nach Solar geschaltet, Pumpe schon 5min aktiv");
               setState('mqtt.0.Poolsteuerung.GPIO.25'/*Relais1*/, 0);
               setState('mqtt.0.Poolsteuerung.GPIO.26'/*Relais2*/,1);
               clearInterval(intervall1);
           }
           } ,20000);
      });   
        
        
      //Diff Temp kleiner 2 Grad
      
       on({
          id: 'mqtt.0.Poolsteuerung.DTemp.T'/*Poolsteuerung/DifferenzTemp/DiffTemp*/,
          change: "ne",
          valLt: 2,
          oldValGe: 2,
          logic: "and"
      }, function () {
          var difftemp = getState('mqtt.0.Poolsteuerung.DTemp.T').val;
      
              sendTo('telegram.0', "Differenztemperatur ist kleiner 2°C, Wert ist: " + difftemp + '°C' + " Ventil wird nach Pool geschaltet und Pumpe aus");
              setState('mqtt.0.Poolsteuerung.GPIO.25'/*Relais1*/, 1);
              setState('mqtt.0.Poolsteuerung.GPIO.26'/*Relais2*/,0);
              setState('hm-rpc.0.NEQ0116143.1.STATE', false);
              
      });
      

      Funktioniert beim ersten Test auch soweit. Ist die Temperatur kleiner 2 könnte ich den interval beim trigger unter 2 Grad wieder löschen, aber wie komme ich aus dem interval wieder raus, wenn die Temperatur kleiner 4 aber größer 2 ist.

      Zu Punkt 2 hab ich leider so gar keine Idee 😞 wollte es mit mytime Adapter lösen, wollte beim ersten Test aber auch nicht so, wie ich will. Schau ich mir nochmal an, aber vllt ist es mit Script viel einfacher.

      Zu Punkt 3: Dass die Pumpe variabel über VIS zu bestimmter Zeit ein/aus geschaltet wird habe ich schon laufen, dass ich nach 10 min Laufzeit die Werte prüfe, denk ich bekomme ich auch hin, aber wie löse ich es, dass immer nach 10 min nochmal geprüft wird und gegebenenfalls nochmal Nachdosiert wird?

      //Pumpe morgens EIN
      
      const idEinMorgens = 'javascript.0.Pool.EinschaltzeitMorgens';  //als String "hh:mm"
      
      
      var t = getState(idEinMorgens).val.split(':');
      var timer = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
           if (getState("javascript.0.Pool.PumpeAktiv").val === true ){
               if(getState('mqtt.0.Poolsteuerung.End_P.S'/*Poolsteuerung/End P/S*/).val === 1){
               setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, true);
                sendTo('telegram', "Pool Pumpe morgens EIN, Ventil Pool");
                log("Pumpe ein nach restart"); 
               }
               if ((getState('mqtt.0.Poolsteuerung.End_S.S'/*Poolsteuerung/End S/S*/).val === 1) && (getState('mqtt.0.Poolsteuerung.End_Rueck.S'/*Poolsteuerung/End Rueck/S*/).val === 1)){
                    setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, true);
                sendTo('telegram', "Pool Pumpe morgens EIN, Ventil Solar & Rücklauf offen");
               }
           }
      });
      
      on(idEinMorgens, function(dp) {
         
         t = dp.state.val.split(':');
         clearSchedule(timer);
         timer = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
           if (getState("javascript.0.Pool.PumpeAktiv").val === true ){
               if(getState('mqtt.0.Poolsteuerung.End_P.S'/*Poolsteuerung/End P/S*/).val === 1){
               setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, true);
                sendTo('telegram', "Pool Pumpe morgens EIN, Ventil Pool");
                log("Pumpe ein nach restart"); 
               }
               if ((getState('mqtt.0.Poolsteuerung.End_S.S'/*Poolsteuerung/End S/S*/).val === 1) && (getState('mqtt.0.Poolsteuerung.End_Rueck.S'/*Poolsteuerung/End Rueck/S*/).val === 1)){
                    setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, true);
                sendTo('telegram', "Pool Pumpe morgens EIN, Ventil Solar & Rücklauf offen");
               }
           }
         });
      });
      
      // Pumpe morgens AUS
      
      const idAusMorgens = 'javascript.0.Pool.AusschaltzeitMorgens';  //als String "hh:mm"
      
      
      var t1 = getState(idAusMorgens).val.split(':');
      var timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
           if (getState("javascript.0.Pool.PumpeAktiv").val === true){
         setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, false);
         sendTo('telegram', "Pool Pumpe morgens AUS");
        log("Pumpe morgens aus nach restart");
      }
      });
      
      on(idAusMorgens, function(dp) {
         
         t1 = dp.state.val.split(':');
         clearSchedule(timer1);
         timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
            if (getState("javascript.0.Pool.PumpeAktiv").val === true){
             setState("hm-rpc.0.NEQ0116143.1.STATE"/*Pool Pumpe.STATE*/, false);
               sendTo('telegram', "Pool Pumpe morgens AUS");
        log("Pumpe morgens Aus über trigger");
         }
         });
      });
      

      Leider ist bei meinen Scripten viel try and error dabei, aber irgendwann funktioniert es meistens, auch wenn es nicht der sauberste Code ist 😁

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @coyote last edited by mickym

        @coyote Zu dem Punkt2 mit der Laufzeitsteuerung habe ich mal mit NodeRed und @schneidy76 und je nachdem wie lange die gelaufen ist mal etwas entsprechendes gemacht:

        https://forum.iobroker.net/topic/43480/gelöst-poolsteuerung-anfänger-braucht-e-hilfe/13?_=1628181748578

        Auch wenn Du mit dem Tool vielleicht nicht vertraut bist, vielleicht gibt Dir die Logik manche Anregung.

        Im Prinzip hat man einfach abends in Intervallen abgeprüft, ob noch eine offene Restlaufzeit vorhanden ist, die die Pumpe noch laufen muss. Ab wann hängt halt von der möglichen Maximallaufzeit ab. Also wenn 3h Abends - dann halt ab 21 Uhr prüfen etc.

        coyote 1 Reply Last reply Reply Quote 0
        • coyote
          coyote Most Active @mickym last edited by

          @mickym danke dir, bin gerade am Testen, ob ich es nicht doch ganz einfach mit dem mytime Adapter hinbekomme.
          Den kann ich, auf 6h setzen, nachdem die Pumpe morgens 3h gelaufen ist pausieren, falls die Pumpe dann tagsüber die restlichen 3h noch gelaufen ist, kann ich mit dem "end" DP von mytime mir einfach eine Sperre setzen, damit sie Abends nicht mehr einschaltet. Test läuft 😊

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

          Support us

          ioBroker
          Community Adapters
          Donate

          410
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          2
          3
          181
          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