Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten

    This topic has been deleted. Only users with topic management privileges can see it.
    • JLeg
      JLeg @wendy2702 last edited by

      @wendy2702 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

      @homoran Hattest du eine Seite vorher schon 😀

      Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

      Hat da jemand Erfahrungswerte?

      unsere vermutlich nicht ungewöhnliche Stratos Eco-Z lässt sich von 6 - 60W einstellen. Und 60W ballern schon ganz gut 😉 - im Timerbetrieb reichen bei uns 10-12W völlig…

      wendy2702 1 Reply Last reply Reply Quote 1
      • wendy2702
        wendy2702 @JLeg last edited by

        @jleg sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

        Stratos Eco-Z

        OK.

        Dann muss ich wohl auch mal in eine neue Pumpe investieren damit das Wasser schneller an der richtigen Stelle warm ist.

        1 Reply Last reply Reply Quote 0
        • alk
          alk @wendy2702 last edited by alk

          @wendy2702 Habe hier eininge Versuche gemacht und in einem typischen Haushalt/Haus mit Brauchwasserspeicher im Keller und Bäder im EG, OG, DG braucht eine typische Umwäzpumpe ca. 20sec und die Leitung ist genügend voll mit warmem Wasser. Von nun an kommt ja auch, ohne Pumpe, genügend warmes Wasser nach.

          1 Reply Last reply Reply Quote 0
          • alk
            alk @Cumulus 0 last edited by

            @cumulus-0 Mit einem Schlater ist es auch ein gute Möglichkeit. Aktuell braucht es bis warmes Wasser kommt ca. 20sec nachdem du das Wasser aufgedreht hast.

            1 Reply Last reply Reply Quote 0
            • BananaJoe
              BananaJoe Most Active last edited by

              Also bei mir geht im Bad das Radio an wenn jemand Licht anmacht ... da könnte ich auch gleich die Pumpe 20 Sekunden laufen lassen ...

              Oder per ZigBee Türkontakt. Dann bräuchte es aber etwas um festzustellen ob man rein oder rausgeht. Oder man geht nach Zeit und ob sich die Wasseruhr vorher gedreht hat (was diese nicht getan haben sollte)

              Frederik Buss 1 Reply Last reply Reply Quote 1
              • Frederik Buss
                Frederik Buss @BananaJoe last edited by Frederik Buss

                @bananajoe Da hast Du mich auf eine super Idee gebracht. Ich hatte vorher schon die Zirkulationspumpe per Shelly angesteuert. Ich habe zwar im Haus auch 2 Wemos verbaut, aber für die Zirkulationspumpe finde ich die Shelly Lösung einfacher und wenn man den Eco Modus einschaltet und die Cloud ausschaltet ist der Stromverbrauch der Shellys auch wirklich niedrig (~0,4 W).
                Jedenfalls habe ich über Homematic ein kleines Script aktiviert, was die Pumpe für 2 Minuten laufen lässt, sowie eine Variable setzt, wenn der Lichtschalter betätigt wird. Täglich prüft morgens ein weiteres Script ob am Vortag die Pumpe gelaufen ist und schaltet automatisch ein, wenn nicht. Somit wird jeden Tag mindestens einmal das Wasser umgewälzt, Desinfektionsschaltung läuft nach wie vor wöchentlich.
                Im Bad ist zusätzlich ein Bewegungsmelder installiert, welcher aber das Licht nur gedimmt einschaltet. Somit drücken wir den Schalter in der Regel auch nur dann, wenn auch wirklich Bedarf besteht.

                1 Reply Last reply Reply Quote 2
                • I
                  IlmenauRatte @h07d0q last edited by

                  @h07d0q Ich habe das mit einem sonoff Basic R3 gelöst.
                  Da hat man esp, Relais und Netzteil alles in einem Gerät.
                  Viel besser als Rules ist Script, dazu muss man tasmota selbst kompilieren, das ist aber sehr easy.
                  Und wenn man original maxim ds18b20 bestellt, hat man auch keine Temperatur Ausreißer.

                  1 Reply Last reply Reply Quote 1
                  • Noschvie
                    Noschvie @h07d0q last edited by

                    Hallo @h07d0q
                    wie ist deine Langzeit-Erfahrung mit deiner Steuerung?
                    Ist deine akt. Version im Web zu finden? Möchte sie gerne auch einsetzen bzw. umsetzen, danke im Voraus!

                    1 Reply Last reply Reply Quote 0
                    • Noschvie
                      Noschvie @Homoran last edited by

                      @homoran sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                      habt ihr euch mal bei stall.biz den wiffi-pump angesehen?

                      Der Algorithmus ist leider nicht Open Source, die Platine sieht eigentlich ganz gut und brauchbar aus.

                      1 Reply Last reply Reply Quote 0
                      • H
                        h07d0q last edited by h07d0q

                        @noschvie
                        meine aktuelle Version habe ich minimal angepasst.

                        //https://forum.iobroker.net/post/133815
                        //VL
                        const idTempVL = 'sonoff.0.HWR.DS18B20-2_Temperature';
                        const iddTVL = '0_userdata.0.WWZirkulationspumpe.dTVL';
                        const swOn = 0.7;  // Grenzwert in K/min
                        var speedVL
                        var speedVLold = 0;
                        //RL
                        const idTempRL = 'sonoff.0.HWR.DS18B20-1_Temperature';
                        const iddTRL = '0_userdata.0.WWZirkulationspumpe.dTRL';
                        const swOff = 0.3;  // Grenzwert in K/min
                        var speedRL
                        var speedRLold = 0;
                        
                        var timer = null, alarmTimer;
                        var iAlarmTimer = 40*60000;   // Wenn die Pumpe außergewöhnlich lange läuft
                        const minTime = 120000;   // Minimum Zeit in Millisekunden, welche die Pumpe laufen soll, bevor abgeschalten werden kann (TRL ist noch unter swOff)
                        const minTemp = 38;      // Minimum Temperatur, bevor die Pumpe wieder läuft
                        const minPercent = 0.8;  // Minimum Prozent von RL/VL bevor abgeschalten wird
                        var checkMinTimeErreicht = false;      // Check für minTime
                        var checkMinSpeedVL = 1;         // Check für minimalen speedVL für Ausschalten, sonst wird zu früh abgeschalten
                        var h1, h2
                        const idAktor = 'sonoff.0.HWR.POWER2';
                        var aktor = getState(idAktor).val;
                        on({id: idAktor, ack: true}, function(dp) {aktor = dp.state.val;});
                        
                        // Erweiterter Log im ioBroker
                        const LOG_INFO = true;    // Informationen loggen
                        const LOG_DEBUG = false;   // Erweiterter Log für Debugging
                        const Telegram_DEBUG = false;   // Erweiterter Log für Debugging
                        
                        
                        //////////////////////////////////////////////////////////
                        /* Einschalten bei steigender Vorlauftemperatur */
                        on(idTempVL, function(dp) {  // Triggern bei Wertänderung
                           h1 = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);  // K/min
                           speedVL = (h1 + speedVLold)/2;
                           //if (LOG_DEBUG) console.debug(([Math.round(speedVL*100)/100,' speedVL = (',Math.round(h1*100)/100,' + ',Math.round(speedVLold*100)/100,')/2 K/min'].join('')));
                           speedVLold = h1;
                           if (speedVL < -5 || speedVL > 5) {return;}
                           //if (LOG_DEBUG) console.debug((['state - oldState: ',dp.state.val,' - ',dp.oldState.val,' = ',Math.round((dp.state.val - dp.oldState.val)*100)/100].join('')));
                           //if (LOG_DEBUG) console.debug((['TDiff: ',(dp.state.lc - dp.oldState.lc),'ms'].join('')));
                           //if (LOG_DEBUG) console.debug(speedVL + ' K/min.');
                           setState(iddTVL, Math.round(speedVL*1000)/1000, true);
                           
                           if (LOG_DEBUG) console.debug('VL: ' + speedVL + ' >= ' + swOn + ' & ' + !aktor + ' & ' + getState(idTempVL).val + ' <= ' + minTemp);
                           if (speedVL >= swOn && !aktor && getState(idTempVL).val <= minTemp) {
                              setState(idAktor,true);
                              var messageText =['Zirkulationspumpe an.  (*dTVL: ',Math.round(speedVL*1000)/1000,', dTRL: ',Math.round(speedRL*1000)/1000,')'].join('');
                              //if (Telegram_DEBUG) sendTo("telegram", "send", { text: messageText });
                              if (LOG_INFO) console.log((messageText));
                              
                              /* Prüfung mit Alarm */
                              if (!getState("0_userdata.0.Anwesenheit.Status.anyonePresent").val) {
                                  var messageText =['Zirkulationspumpe an, obwohl niemand da ist!\r\n(*dTVL: ',Math.round(speedVL*1000)/1000,', dTRL: ',Math.round(speedRL*1000)/1000,')'].join('');
                                  sendTo("telegram", "send", { text: messageText });
                                  console.error((messageText));
                              }
                              if (LOG_INFO) console.log(Math.round(speedVL*100)/100 + ' K/min');
                              if (LOG_INFO) console.log('Temperatur ist um mehr als ' + swOn + ' K/min gestiegen.');
                              //clearTimeout(timer);
                              timer = setTimeout(function() {
                                  //if(aktor) setState(idAktor, false);
                                checkMinTimeErreicht = true
                              }, minTime);
                              alarmTimer = setTimeout(function() {
                                var messageText = 'speedRL: ' + Math.round(speedRL*1000)/1000 + ' <= ' + swOff + '\r\nspeedRL: ' + Math.round(speedRL*1000)/1000 + ' > 0 \r\nspeedRL: ' + Math.round(speedRL*1000)/1000 + ' > ' + Math.round(speedRLold*1000)/1000 + '(old)\r\naktor: ' + aktor + '\r\ncheckMinTimeErreicht: ' + checkMinTimeErreicht + '\r\nSpeedVl: ' + Math.round(speedVL*1000)/1000 + ' <= ' + checkMinSpeedVL + '\r\nRL/VL Temp: ' + (getState(idTempRL).val+4.0) + '/' + getState(idTempVL).val + ' = ' + Math.round(((getState(idTempRL).val+4.0)/getState(idTempVL).val)*100)/100 + ' > ' +  minPercent;
                                sendTo("telegram", "send", { text: 'Zirkulationspumpe läuft seit mehr als ' + iAlarmTimer/60000 + ' Minuten!\r\n\r\n' + messageText });
                              }, iAlarmTimer);
                           }
                        });
                        
                        /* Ausschalten bei fallender Rücklauftemperatur, nach minimaler Zeit, bei stagnierender Vorlauftemperatur */
                        /* neu: minPercent */
                        on(idTempRL, function(dp) {  // Triggern bei Wertänderung
                            h2 = 60000 * (dp.state.val - dp.oldState.val) / (dp.state.lc - dp.oldState.lc);  // K/min
                            speedRL = (h2 + speedRLold)/2;
                            //if (LOG_DEBUG) console.debug(([Math.round(speedRL*100)/100,' speedRL = (',Math.round(h2*100)/100,' + ',Math.round(speedRLold*100)/100,')/2 K/min'].join('')));
                            speedRLold = h2;
                            if (speedRL < -5 || speedRL > 5) {return;}
                            setState(iddTRL, Math.round(speedRL*1000)/1000, true);
                            var messageText = 'speedRL: ' + Math.round(speedRL*1000)/1000 + ' <= ' + swOff + '\r\nspeedRL: ' + Math.round(speedRL*1000)/1000 + ' > 0 (deaktiviert) \r\nspeedRL: ' + Math.round(speedRL*1000)/1000 + ' < ' + Math.round(speedRLold*1000)/1000 + '(old)\r\naktor: ' + aktor + '\r\ncheckMinTimeErreicht: ' + checkMinTimeErreicht + '\r\nSpeedVl: ' + Math.round(speedVL*1000)/1000 + ' <= ' + checkMinSpeedVL + '\r\nRL/VL Temp: ' + (getState(idTempRL).val+4.0) + '/' + getState(idTempVL).val + ' = ' + Math.round(((getState(idTempRL).val+4.0)/getState(idTempVL).val)*100)/100 + ' > ' +  minPercent;
                            if (LOG_DEBUG) console.debug('RL! ' + messageText);
                            //if(speedRL <= swOff && speedRL > 0 && speedRL < speedRLold && aktor && checkMinTimeErreicht && speedVL <= checkMinSpeedVL && (getState(idTempRL).val/getState(idTempVL).val) > minPercent) {
                            if(speedRL <= swOff && speedRL < speedRLold && aktor && checkMinTimeErreicht && speedVL <= checkMinSpeedVL && (getState(idTempRL).val/getState(idTempVL).val) > minPercent) {
                                clearTimeout(timer);
                                checkMinTimeErreicht = false
                                setState(idAktor,false);
                                messageText = 'Zirkulationspumpe aus\r\n' + messageText
                                if (Telegram_DEBUG) sendTo("telegram", "send", { text: messageText });
                                if (LOG_INFO) console.log((messageText));
                                clearTimeout(alarmTimer);
                            }
                        });
                        
                        //Debug
                        /*
                        if (LOG_DEBUG) {
                        on({id: new RegExp(idTempVL + "$|" + idTempRL + "$"), change: "ne"}, async function (obj) {
                            console.debug((['(dTVL: ',Math.round(speedVL*1000)/1000,', dTRL: ',Math.round(speedRL*1000)/1000,', aktor: ',aktor,', timeout: ',checkMinTimeErreicht ,')'].join('')));
                        });
                        }
                        */
                        

                        Das läuft so jetzt schon seit mehr als zwei Jahren und meine Frau hat sich nicht beschwert 😁 Die Infos per Telegram müsste ich eigentlich mal einstampfen. Der Alarm bei zu langer Laufzeit ist auf jeden Fall hilfreich, manchmal ist es in Fehlalarm, wenn der Aktor seit der Aktivierung keine WLAN Verbindung hat z.B.. Wie oben schon erwähnt, ist es nicht zu erwarten, dass beim Zapfen direkt Heißwasser kommt, aber nach kurzer Zeit, oder wenn man kurz zapft und dann wartet.

                        Noschvie 1 Reply Last reply Reply Quote 1
                        • Noschvie
                          Noschvie @h07d0q last edited by

                          @h07d0q sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                          meine aktuelle Version

                          Danke! Möchte gerne Zeit investieren und diesen Algorithmus unter Tasmota mit Berry implementieren... mal sehen, ob ChatGPT dafür eine Hilfe ist.

                          H 1 Reply Last reply Reply Quote 0
                          • H
                            h07d0q @Noschvie last edited by

                            @noschvie said in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                            mal sehen, ob ChatGPT dafür eine Hilfe ist.

                            Viel Erfolg 😬

                            Noschvie 1 Reply Last reply Reply Quote 0
                            • Noschvie
                              Noschvie @h07d0q last edited by

                              @h07d0q die Analyse durch ChatGPT findest du hier:
                              https://gist.github.com/Noschvie/239cfa9c463f940ff0bd7a9bdc1bdebe

                              Nun geht's an die Transferierung bzw. Konvertierung nach Berry auf ein Tasmota Device...

                              H 1 Reply Last reply Reply Quote 1
                              • H
                                h07d0q @Noschvie last edited by

                                @noschvie said in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                                geht's

                                Ohh interessant! Vor allem, dass es vermutlich auch über Rules gehen würde, allerdings vermisse ich den Teil der Rücklauftemperatur-Überwachung zur Abschaltung...

                                Schon komisch so eine detaillierte Analyse seines zusammengefrickelten Codes zu lesen😁

                                Noschvie 1 Reply Last reply Reply Quote 0
                                • Noschvie
                                  Noschvie @h07d0q last edited by

                                  @h07d0q der Berry Code ist fehlerhaft, was die Syntax betrifft. Aber ich komme trotzdem weiter, durch Nachfragen und google...
                                  Habe mir eine Berry Class erstellt zum Tracken der Vor- und Rücklauf-Temperatur und zum Berechnen der Speed usw... es dauert weil unerfahren mit Berry, aber es wird...
                                  In welchem Intervall werden bei dir die Trigger Funktionen aufgerufen?

                                  Noschvie 1 Reply Last reply Reply Quote 0
                                  • Noschvie
                                    Noschvie @Noschvie last edited by

                                    Hab's gefunden: die Trigger Funktionen werden im Inerval von 10 Sekunden aufgerufen.

                                    H 1 Reply Last reply Reply Quote 0
                                    • H
                                      h07d0q @Noschvie last edited by

                                      @noschvie oh sorry, deine Frage im letzten Post habe ich übersehen.. die Trigger reagieren auf Wertänderung der States vom Tasmota Sensor. Da dieser im Standard alle 10s abgerufen wird, sollte das nicht in meinem Code stehen, da dort die Zeit zwischen neuem und allem Trigger zum Rechnen verwendet wird und nicht starre 10s. Ich könnte mir vermutlich eine eigene Tasmota Firmware kompilieren, welche die Sensoren öfter über MQTT raushaut, aber es funktioniert auch so ausreichend gut.

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        mf2105 last edited by

                                        @alk tldr, wollte ich auch mal so lösen. Inzwischen stehen einfach ein Echo DOT bzw Plus (mit Zigbee) in Küche und Bad (u.a.), die auch das Licht, Musik, Radio, Rolläden steuern und die Türklingel (Ring) signalisieren.
                                        An der WWZP ist einfach eine Zigbee- Steckdose zwischengesteckt. Wenn nun jmd WW braucht sagt man einfach "Alexa, Wasser" und die ZP läuft für 1min und gut ist..
                                        Mehr Energie kann man glaube ich nicht sparen...

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        1.1k
                                        Online

                                        31.7k
                                        Users

                                        79.7k
                                        Topics

                                        1.3m
                                        Posts

                                        esp8266 projekt javasript json string mqtt-broker-client-adapter nodemcu tasmota mqtt relay-switch tasmota 1wire
                                        19
                                        45
                                        8491
                                        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