Ankündigung

Einklappen
Keine Ankündigung bisher.

Ansteuerung Zirkulationspumpe

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Ansteuerung Zirkulationspumpe

    Voraussetzung:
    - Anwesenheit wird zyklisch auf den Bus gesendet
    - Heizung oder Logik sendet Signal für WW-Bereitung auf den Bus

    Features:
    - PWM-Modus für die Zirkulationspumpe (z.B. 5 Minuten an, dann 25 Minuten aus)
    - Zirkulation nur im bestimmten Zeitraum und bei Anwesenheit
    - Bei WW-Bereitung wird auch die Zirkulationspumpe angeschalten

    Im Anhang die Dateien als *.zip.
    Die *.conf.sample editieren und nach conf.d im Wiregate-Plugin Verzeichnis kopieren. Das .sample muss dann entfernt werden.

    Konfigurationsdatei
    Zirkulationspumpe.conf.sample
    Code:
    ###Ansteuerung einer Zirkulationspumpe
    
    #Die Pumpe wird im PWM-Modus betrieben, also innerhalb der eingestellten Zykluszeit (base_time)
    #fuer X-Prozent (on_perc) einmal eingeschalten.
    #Weiterhin erfolgt die Zuschaltug nur im angegebenen Zeitfenster (start/end) und 
    #bei Anwesenheit (praesenz_ga = 1).
    #Bei der Warmwasserbereitung wird die die Zirkulationspumpe dauerhaft eingeschaltet 
    #um auch das Wasser in der Leitung mit zu erw‰rmen. 
    #Dafuer muss die Signalisierung der Warmwasserbereitung 
    #ueber die GA (ww_ga) mit einem einstellbaren Wert (ww_ga_val) erfolgen.
    #
    # $zirk_ga      ->  Gruppenadresse der Zirkulationspumpe
    #                   Aktor muss bei 0 ausschalten und bei 1 anschalten
    #                   DPT sollte im WG hinterlegt sein bzw. DPT 1.001
    #
    # $praesenz_ga  ->  Gruppenasdresse welche zyklisch die Anwesenheit sendet
    #                   0 = Abwesend   1 = Anwesend
    #                   DPT sollte im WG hinterlegt sein bzw. DPT 1.001
    #
    # $start        ->  Uhrzeit zum Start der Zirkulationsbereitschaft
    #                   Format: 'hh:mm'
    #
    # $end          ->  Uhrzeit zum Ende der Zirkulationsbereitschaft
    #                   Format: 'hh:mm'
    #
    # $base_time    ->  Zykluszeit des PWM-Modus in Minuten
    #                   Bei z.B. 60 Minuten Zykluszeit und 50 % Einschaltdauer ($on_perc)
    #                   wird die Pumpe 30 Minuten angeschalten und 30 Minuten ausgeschalten
    #                   Bei z.B. 30 Minuten Zykluszeit und 50 % Einschaltdauer ($on_perc)
    #                   wird die Pumpe 15 Minuten angeschalten und 15 Minuten ausgeschalten
    #
    # $on_perc      ->  Anschaltzeit des PWM-Modus in Prozent
    #                   Bei z.B. 60 Minuten Zykluszeit ($base_time) und 25 % Einschaltdauer
    #                   wird die Pumpe 15 Minuten angeschalten und 45 Minuten ausgeschalten
    #                   Bei z.B. 30 Minuten Zykluszeit ($base_time) und 10 % Einschaltdauer
    #                   wird die Pumpe 3 Minuten angeschalten und 27 Minuten ausgeschalten
    #
    # $ww_ga        ->  Gruppenasdresse welche den Status der Warmwasserbereitung der Heizung sendet
    #                   DPT muss im WG hinterlegt sein !!!
    #                   Die Heizung oder eine Logik muss Ihren Status auf den Bus senden der Wert fuer die
    #                   W-Bereitung wird in $ww_ga_val eingetragen
    #                   ueber einen Binaereingang lassen sich z.B. auch Waermepumpen ohne KNX-Anbindung auswerten
    #                   Beispiel: BE1 = Kompressor, BE2 = Umschaltventil (Heizen/WW), BE3 = Solepumpe
    #                   externe Logik: WENN Kompressor = "an" UND Umschaltventil = "WW" UND Solepumpe = "an" DANN Sende WW=1
    #
    # $ww_ga_val    ->  Wert der von der Heizung oder Logik bei WW-Bereitung gesendet wird
    #                   DPT sollte im WG hinterlegt sein bzw. DPT 1.001
    
    ### VARIABLEN DIE DEFINIERT WERDEN MueSSEN ###
    
    $zirk_ga = '0/5/5';         #GA Zirkulationspumpe
    $praesenz_ga = '0/7/0';     #GA fuer Meldung der Praesenz
    $start = '7:00';	    #Startzeit Zirkulationsbereitschaft
    $end = '22:30';	            #Endzeit Zirkulationsbereitschaft
    $base_time = 30; 	    #Zykuluszeit in Minuten
    $on_perc = 15;	            #Einschaltdauer in Prozent
    $ww_ga = '0/5/0';           #GA fuer Statusuebertragung Heizung
    $ww_ga_val = '2';           #Wert fuer WW-Bereitung von GA
    
    ### ENDE ###
    Plugin-Datei
    Code:
    ###Zirkulationspumpe
    #v0.1 2012-07-29
    #JuMi2006 - > https://knx-user-forum.de
    
    ### MAIN ### 
    # Variablen definieren
    my $time = time();
    my $ww;
    my($zirk_ga,$praesenz_ga,$start,$end,$base_time,$on_perc,$ww_ga,$ww_ga_val);
    &readConf;
    
    $plugin_subscribe{$ww_ga}{$plugname} = 1;
    $plugin_info{$plugname.'_cycle'} = 60;
    
    ### CHECK PRAESENZ
    my $praesenz = knx_read($praesenz_ga,300);
    
    ### CHECK ZEITFENSTER
    my $allowtime = &check_time;
    
    ### CHECK WARMWASSERBEREITUNG
    if (knx_read($ww_ga,300) == $ww_ga_val)
    {
    my $ww = 1;
    }else{}
    
    ### MAIN / VERARBEITUNG
    if ($ww == 1)
        {
        #Zirkulation waehrend WW-Bereitung
        knx_write($zirk_ga,1,1.001);
        }
            else
                {
                if ($praesenz == 1 and
                    $allowtime == 1)
                    {
                    #PWM Zirkulation wenn Anwesenheit, im Zeitfenster und keine WW-Bereitung
                    & pwm;
                    }else{
                        #Kein Zirkulation wenn Abwesenheit, ausserhalb Zeitfenster und keine WW-Bereitung
                        knx_write($zirk_ga,0,1.001);
                        }
                }
    
    #-------------S U B S -------------#
    
    ### ZEITABFRAGE ###
    sub check_time{
    use Time::Local;
    my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday) = localtime();
    my ($sh,$sm,$eh,$em);
    my $allowtime = ();
    if ($start =~/(\w{1,})\:(\w{1,})/)
    {
    $sh = $1;
    $sm = $2;
    }
    if ($end =~/(\w{1,})\:(\w{1,})/)
    {
    $eh = $1;
    $em = $2;
    }
    my $su = timelocal (0,$sm,$sh,$day,$mon,$year); #Start-Zeit in Unixzeit
    my $eu = timelocal (0,$em,$eh,$day,$mon,$year); #End-Zeit in Unixzeit
    
    my $time = time ();
    ##Startzeit vor Endzeit z.B. 14-18 Uhr
    	if ($sh <= $eh) #Startzeit vor Endzeit z.B. 14-18 Uhr
    	{
            if ($time < $eu && $time > $su)
    	{
    	$allowtime = 1;
    	}else{}
    	if ($sm > $em && $sh == $eh) 
    	{
            $allowtime = 1;
    	}else{}
    	}
    ##Startzeit nach Endzeit z.B. 18-7 Uhr
    	if ($sh > $eh) #Startzeit nach Endzeit z.B. 18-7 Uhr
    	{
    	if ($time > $su)
    	{
            $allowtime = 1;
    	}else{}	
    	if ($time < $eu)
    	{
            $allowtime = 1;
    	}else{}
    	}
    return $allowtime;
    }
    
    ### PWM ###
    sub pwm{
    
    my $on_time = (($base_time/100)*$on_perc);
    my $off_time = ($base_time - $on_time);
        
    $on_time *= 60;     #Minuten in Sekunden umrechnen
    $off_time *= 60;    #Minuten in Sekunden umrechnen
    
    
    if ($plugin_info{$plugname.'_state'} eq 'pwm-off')                #status = aus
    {
        if  (($plugin_info{$plugname.'_stat-time'} + $off_time) <= $time) #zyklus aus ist vorbei
        {
        #ANSCHALTEN
        knx_write($zirk_ga,1,1.001);
        #STATUS = EIN setzen
        $plugin_info{$plugname.'_state'} = 'pwm-on';
        #ANZEIT = jetzt
        $plugin_info{$plugname.'_stat-time'} = $time;
        } else {}
    } else {}
    
    
    if ($plugin_info{$plugname.'_state'} eq 'pwm-on')                #status = an
    {
        if  (($plugin_info{$plugname.'_stat-time'} + $on_time) <= $time) #zyklus an ist vorbei
        {
        #AUSCHALTEN
        knx_write($zirk_ga,0,1.001);
        #STATUS = AUS setzen
        $plugin_info{$plugname.'_state'} = 'pwm-off';
        #AUSZEIT = JETZT
        $plugin_info{$plugname.'_stat-time'} = $time; 
        } else {}
    } else {}
    
    if (
        ($plugin_info{$plugname.'_stat-time'} + $on_time + $off_time) <= $time)
    {
        #ANSCHALTEN
        knx_write($zirk_ga,1,1.001);
        #STATUS = EIN setzen
        $plugin_info{$plugname.'_state'} = 'pwm-on';
        #ANZEIT = jetzt
        $plugin_info{$plugname.'_stat-time'} = $time;
        plugin_log($plugname, "INITIALISIERUNG nach Abwesenheit");
    } else {}
    }
    
    ### READ CONF ###
    sub readConf
    {
        my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
        if (! -f $confFile)
        {
            plugin_log($plugname, "no conf file [$confFile] found."); 
        }
        else
        {
            #plugin_log($plugname, "reading conf file [$confFile]."); 
            open(CONF, $confFile);
            my @lines = <CONF>;
            close($confFile);
            my $result = eval("@lines");
            #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
            if ($@) 
            {
                plugin_log($plugname, "ERR: conf file [$confFile] returned:");
                my @parts = split(/\n/, $@);
                plugin_log($plugname, "--> $_") foreach (@parts);
            }
        }
    }
    Angehängte Dateien
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    #2
    Praktisch, kann ich grad exakt so brauchen

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      In der aktuellen Version spammt mir das Plugin minütlich mein Log zu mit der Ausgabe "2". Kannst Du ergründen woran es liegt ?
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Vermutlich einfach: der _cycle steht auf 60sek und es gibt keinen expliziten return (mit oder eben "return;" ohne Wert=kein Logeintrag) -> Also ist solange die letzte stattgefunden Berechnung/Zuweisung der return-Wert und wird ins Log geschrieben

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Hallo,

          danke für das Plugin!

          Ich habe (momentan) keine Anwendung dafür, dafür aber einen Erweiterungsvorschlag:

          Wenn man ein Wiregate hat, bietet es sich doch an, die Temperatur am Ende der Zirkulationsleitung zu messen und abzuschalten, wenn die Temperatur auf dem Soll ist?!

          Gruß,
          Hendrik

          Kommentar


            #6
            JAIN, eigentlich macht entweder die Temperatursteuerung oder der PWM-Betrieb Sinn.
            Ich glaube jedoch dass bei der Steuerung der Pumpe über die Rücklauftemperatur die Pumpenlaufzeit länger wird und damit auch der Verlust über die Rohrleitung. Allein die Trägheit der Temperatursensoren (Anlegefühler) wird dazu beitragen. Das ist aber auch nur eine Vermutung.
            Mit 15% Laufzeit bei 30 Minuten ist die Pumpe 4,5 Minuten an und 25,5 Minuten aus. Hier passt das WW das aus der Leitung kommt von der Temperatur her ganz gut. Das kann aber individuell verschieden sein, mir reicht zuerst "warmes" Wasser aus der Leitung, richtig "heiß" darf dann ruhig ein wenig dauern da man es eher selten und dann in größeren Mengen benötigt (Spülen, Baden, Duschen).
            Wichtiger war mir die Zirkulation auf Präsenz abzustimmen und der Tipp von haegar80 in einem anderen Thread die Zirkulation während der WW-Bereitung laufen zu lassen. Damit erhöht sich zwar die Laufzeit der WW-Bereitung aber der Speicher ist deutlich länger auf höherem Temperatur-Niveau was dann das Nachheizen verzögert.
            Angehängte Dateien
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Zitat von JuMi2006 Beitrag anzeigen
              JAIN, eigentlich macht entweder die Temperatursteuerung oder der PWM-Betrieb Sinn.
              Ich glaube jedoch dass bei der Steuerung der Pumpe über die Rücklauftemperatur die Pumpenlaufzeit länger wird und damit auch der Verlust über die Rohrleitung. Allein die Trägheit der Temperatursensoren (Anlegefühler) wird dazu beitragen. Das ist aber auch nur eine Vermutung.
              Klasse Plugin!
              Ich habe bei mir eine Zeit-, Präsenz- und Temperaturabhängige Regelstrategie:
              Zeitsteuerung: Konnex Betriebsmodus des RTR im Bad (ich wollte keine zusätzliche Zeitschaltuhr und damit wird auch die Heizung im Bad angesteuert)
              Temperatur: Anlegefühler am Zirkulationsrücklauf Aus: 50°C Ein: 38°C
              Präsenz: Zirkulation wird nur eingeschalten, wenn innerhalb einer bestimmten Zeit eine Präsenz erkannt wurde

              Mit den 50°C Ausschlattemperatur läuft die Pumpe auch nicht so lange, weil es im WW-Vorlauf dann schon viel wärmer ist.

              Natürlich das schon angesprochene Einschalten der Zirkulation, wenn WW Bereitung läuft und die Speichertemperatur > dem Ausschaltwert der Zirkulation. Ausgeschaltet wird die Zirkulation dann über die Temperatur des Zirkulationsrücklaufes

              Mit diesen Werten läuft die Pumpe sehr wenig und es ist immer warmes Wasser da wenn wir es brauchen. Ich glaube das ist bei uns ist schon fast das Optimum.

              Gruß
              Sascha

              Kommentar


                #8
                Hallo Sascha,

                klingt nach einem schlüssigen Konzept. Jedoch sind 50°C Zirkulations-Rücklauf für Wärmepumpenbesitzer schon ein Horror. Da lob ich mir wirklich Gas, Öl und Pellets. Da kommts auf 5° mehr oder weniger nicht an.

                Bis meine Zirkulation 50° Rücklauf hat glüht der Zähler oder der E-Stab ... letzterer ist schon in der HV lahmgelegt.

                Bei den heutigen Pumpen reden wir ja auch nicht über die Verluste durch Stromverbrauch sondern vielmehr geht es um Verluste durchs Rohrnetz.
                Bei uns geht die Zirkulation noch durch die unbeheizt Garage (jedoch ins Haus integriert) und hat recht lange Wege. Die Pumpe selbst nimmt 7W ... lächerlich. Der Standort der Heizung war aber (Lückenbebauung in der Innenstadt) ziemlich festgelegt und da muss man eben irgendwo Abstriche machen.
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  #9
                  Zitat von JuMi2006 Beitrag anzeigen
                  Jedoch sind 50°C Zirkulations-Rücklauf für Wärmepumpenbesitzer schon ein Horror.
                  Deswegen ist die Einschalt- und Ausschalttemperatur und die Präsenzzeit flexibel in der Visu einstellbar. Das passt dann für jeden Geschmack und für Anpassungen aufgrund der persönlichen Lernkurve. ;-)

                  Wenn 50°C bei einer Wärmepumpe Horror sind, dann ist aber so eine lauwarme Plärre ein idealer Nährboden...

                  Gruß
                  Sascha

                  Kommentar


                    #10
                    Hallo,

                    Zitat von JuMi2006 Beitrag anzeigen
                    JAIN, eigentlich macht entweder die Temperatursteuerung oder der PWM-Betrieb Sinn.
                    Dann habe ich die PWM noch nicht verstanden.
                    Wenn ich es richtig verstehe, bedeutet PWM hier nur, dass die Pumpe einen gewissen Teil des Tages läuft. Sagen wir 20%. Außerdem ist die Pumpe aus, wenn keiner da ist. Und nachts.

                    Wenn du aber ne halbe Stunde duscht, läuft die Pumpe dennoch.
                    Wenn du gerade Wasser gebraucht hast läuft sie dennoch.

                    Ich glaube jedoch dass bei der Steuerung der Pumpe über die Rücklauftemperatur die Pumpenlaufzeit länger wird und damit auch der Verlust über die Rohrleitung.
                    Möglich. Daher: Beides

                    mir reicht zuerst "warmes" Wasser aus der Leitung, richtig "heiß" darf dann ruhig ein wenig dauern da man es eher selten und dann in größeren Mengen benötigt (Spülen, Baden, Duschen).
                    Sehe ich auch so.
                    Wichtiger war mir die Zirkulation auf Präsenz abzustimmen und der Tipp von haegar80 in einem anderen Thread die Zirkulation während der WW-Bereitung laufen zu lassen. Damit erhöht sich zwar die Laufzeit der WW-Bereitung aber der Speicher ist deutlich länger auf höherem Temperatur-Niveau was dann das Nachheizen verzögert.
                    Verstehe ich leider nicht. Meinst du das:
                    https://knx-user-forum.de/243706-post3.html
                    Verstehe ich nicht. Wo soll nicht länger eine warme Brühe stehen?
                    In der WW-Leitung?

                    P.S: Womit hast du das schöne Diagramm gemacht?

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      Ich machs mal nicht chronologisch. Grundsätzlich hat die Pumpe mit dem Plugin 3 Betriebsmodi:

                      1. Pumpe aus

                      2. Pumpe läuft mit 100% während der Warmwasserbereitung

                      3. Pumpe ist im PWM-Betrieb

                      Pumpe aus:
                      Ist eigentlich klar: Keine Warmwasserbereitung, niemand da oder eben Nachts

                      Pumpe läuft während WW-Bereitung:
                      Ich will keine kühle oder nicht so warme Brühe in der Zirkulationsleitung stehen haben. Das reisst die Speichertemperatur direkt nach der WW-Bereitung um gute 2-4 Grad runter weil dann nämlich das "kalte" Wasser durch den Speicher läuft. Nun haben wir aber bei der WW-Bereitung erstmal überall heißes Wasser.

                      Pumpe im PWM-Betrieb:
                      Wenn die Pumpe durch Präsenz und Zeitfenster die Freigabe hat dann läuft sie im o.g. Beispiel alle 26 Minuten für 4 Minuten an. Das reicht um immer warmes Wasser zu haben. Die Zirkulationsleitung hat per se erstmal nen größeren Wärmeverlust als der Speicher. Zykluszeit und prozentualer AN-Anteil ist eben einstellbar.
                      Wegen der geringen Temperaturdifferenz bei der WP von "brauchbarem", "zu kaltem" oder eben "heißesten" WW macht m.M. dort eine Temperatursteuerung keinen Sinn, oder man hat eben einen großen Speicher.

                      Die Pumpe läuft also während des Zeitfensters und bei Präsenz nur 15% der Zeit.

                      Diagramm:
                      Comet-Visu (SVN) -> Diagramm-Info
                      (Screenshot)
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        Ist jetzt nicht mein Fachgebiet:
                        Aber ist das nicht sehr legionellen fördernd wenn die Leitung immer für den Wachstum gut temperiert wird? (thermisches vernichten erst bei >75grad).

                        Gruß

                        Kommentar


                          #13
                          Also das mit den Legionellen wird IMHO allgemein - wenn man nicht gerade ein Altenheim oder eine Säuglingsstation betreibt - ein klein bisschen überbewertet..
                          Es ist wahrscheinlicher das mich morgen ein Asteroid erschlägt oder mich im Urlaub eine der anderen 10 Mio Bakterien dahinrafft, als an Legionellen zu sterben..

                          Nach der Legionellen-Verordnung ist für mich der nächste Schritt das man nicht mehr ohne Michelin-Panzer über die Strasse gehen darf weil es könnte ja sein dass..

                          Makki
                          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                          -> Bitte KEINE PNs!

                          Kommentar


                            #14
                            Nuja meine persönliche Paranoia besteht nur in dem körperlichen unwohl befinden, dass mich die legionellen unter die Erde bringen wäre ein 5er im Lotto. Der Asteroid der 6er und Aliens die superzahl.
                            Das die eher in stagnations Leitungen ihren Lebensraum haben ist auch klar.
                            dass Leute ohne Frischwasser durchlauf erhitzer immer noch leben ist der beweis, dass die nicht wirklich tödlich sind, aber wären sie so harmlos dass man sie ausser acht lassen könnte hätten sich viele Leute ein paar Euros sparen können und ein Standard Boiler in den Keller stellen können.

                            Das ist nur meine persönliche Paranoia vor kleingetier, die einem dass Leben schwerer machen, als es sein müsste (sind aber nur Platz 2. Platz 1 sind Zecken )

                            Gruß

                            Kommentar


                              #15
                              Naja, das meine ich ja: das alleine macht einen Aufwand und eine Energieverschwendung sonders gleichen* (in Mietobjekten muss man nämlich, wir "dürfen" ja nur) - wo wir doch gleich auch alle soviel Energie und CO2 einsparen wollten

                              Makki

                              *) z.B. eben Zirkulationsleitungen mit 2L Inhalt über 60° heizen zu müssen, was keine WP wirtschaftlich sinnvoll schafft..
                              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                              -> Bitte KEINE PNs!

                              Kommentar

                              Lädt...
                              X