Ankündigung

Einklappen
Keine Ankündigung bisher.

Lüftung über Luftfeuchte steuern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Lüftung über Luftfeuchte steuern

    Liebe Forenmitglieder!

    Ich bräuchte eine Idee, wie ich meine Badezimmerlüftung besser steuern kann.
    Zuerst mal die bauliche Situation:
    Ich habe eine Wohnraumlüftung Comfoair350, die ich mit dem Plugin steuere. Ins Badezimmer habe ich direkt von der Lüftung weg mittels T-Stück eine direkte Zu und Abluft verlegt. In der Hauptleitung, die dann ins restliche Haus weitergeht, habe ich eine Motorabsperrklappe verbaut.
    Sinn dieser Bauform ist, da ich im Badezimmer kein Fenster habe, möchte ich, wenn die Luftfeuchte im Badezimmer über einen eingestellten wert steigt, die Klappen ins restliche Haus schließen und die Lüftung auf höchste Stufe einschalten, damit ich den ganzen Luftstrom ins Badezimmer umleite.
    Mein Gedankengang war, eine Logic, die über die Wertänderung des Feuchtefühlers gesteuert wird zu triggern. Ändert sich der Wert der Luftfeuchte, wird folgende Logic ausgeführt.
    Code:
    if sh.Erdgeschoss.Badezimmer.luftfeuchte() < sh.kwl.feuchte.sollwert():
       if sh.kwl.feuchte.aktiv() == True:
          sh.kwl.feuchte.normal(True)
          time.sleep(sh.kwl.feuchte.timer())
         sh.kwl.feuchte.normal(False)
         sh.kwl.feuchte.aktiv(False)
         sh.GPIO.badezimmerklappen(False)
         merker = sh.kwl.speicher()
         sh.kwl.level(merker)
         sh.kwl.feuchte.aktiv(False)
       else:
          sh.GPIO.badezimmerklappen(False)
          merker = sh.kwl.speicher()
          sh.kwl.level(merker)
          sh.kwl.feuchte.aktiv(False)
    else:
       sh.GPIO.badezimmerklappen(True)
       sh.kwl.level(4)
       sh.kwl.feuchte.aktiv(True)
       sh.kwl.feuchte.normal(False)
    Wird die Feuchte überschritten, macht die Logic die Klappen zu und schaltet die Lüftung auf höchste Stufe, wird die Feuchte unterschritten, bleiben die Klappen und die Lüfterstufe noch bis zum ablauf des timers aktiv (Nachlaufzeit).
    Würde soweit ja auch funktionieren, wenn die Logic nicht bei jeder Wertänderung des Feuchtefühlers neu gestartet werden würde. Dann passiert nämlich, dass sich die Lüftung dauern ein und ausschaltet.

    Meine Frage daher gibt es eine möglichkeit die Ausführung der logic zu unterbinden, solange der timer läuft?
    Hoffe, ich habe das verständlich beschrieben.

    LG Gersch

    #2
    Welchen Timer meinst Du denn? Du kannst doch einfach ein if einbauen was die Logik überspringt wenn der Timer läuft...?
    Ansonsten gibt es noch das Stichwort Hysterese

    Kommentar


      #3
      Bei jeder Werteänderung der Luftfeuchte sowas der Art machen (bei mir ist auch Zuluft dabei, daher ist die Temperatur auch mit drin - ist es zu heiß, soll das nicht triggern:

      Code:
      if sh.knx.uf.bathroom_uf.temperature.humidity() > 60.0 and sh.knx.uf.bathroom_uf.temperature.last_humidity() <= 60.0 and sh.eta_unit.temperature_outside.value() < 26:
          sh.knx.uf.bathroom_uf.ventilation.mode4(1)
      Zurückschalten muss ich nicht, da mode4 bei mir 15 Min Intensivlüftung macht und das Gerät danach in den vorherigen Mode zurückschaltet. Ginge aber ähnlich zu lösen. Unter 50-60% behaupte ich, braucht man dann ja nicht mehr lüften.

      Dumm war es nur in manchem Sommer, wo die Luftfeuchte draußen auch schon > 60% war. Da ging das Ding manchmal in den Dauerbetrieb. Ist aber auch eher ein Use Case für den Winter, zwecks Wasserkondensation.
      Zuletzt geändert von psilo; 21.05.2021, 16:54.

      Kommentar


        #4
        Hallo Leute
        Sorry, das ich mich nicht gleich gemeldet habe, aber ich konnte mich krankheitsbedingt nicht gleich melden.
        Sinnvoll wäre es gewesen, wenn ich gleich meine items mit Erklärung gepostet hätte, dann wäre mein Problem vielleicht verständlicher.

        Code:
        kwl:
          level:
           type: num
           comfoair_send: WriteVentilationLevel
           comfoair_read: ReadCurrentVentilationLevel
           comfoair_read_afterwrite: 1 # seconds
           comfoair_trigger: ReadSupplyAirRPM
           comfoair_trigger_afterwrite: 6 # seconds
           comfoair_init: 'true'
           sqlite: 'yes'
        
        speicher:
           type: num
           cache: 'True'
           visu_acl: rw
           sqlite: 'yes'
        
        feuchte:
          sollwert:
            type: num
            cache: 'True'
            visu_acl: rw
            sqlite: 'yes'
        
          aktiv:
            type: bool
            cache: 'True'
            visu_acl: rw
            sqlite: 'yes'
        
        normal:
          type: bool
         cache: 'True'
         enforce_updates: 'no'
         autotimer: sh.kwl.feuchte.timer() = false = latest
        
        dauer:
         name: dauer
         cache: 'True'
         type: num
         visu_acl: rw
        
        timer:
         type: num
         eval: sh.kwl.feuchte.dauer() * 60
         eval_trigger: kwl.feuchte.dauer
         enforce_updates: true
         visu_acl: rw
        
        
        anzeige:
         type: str
         visu_acl: rw
         cache: 'True'
        Zur ersten If schleife:
        Code:
        if sh.Erdgeschoss.Badezimmer.luftfeuchte() < sh.kwl.feuchte.sollwert():
        Ist die Luftfeuchte größer als der eingestellte Sollwert greift mal das else
        Code:
        else:
           sh.GPIO.badezimmerklappen(True)   //Klappen gehen zu
           sh.kwl.level(4)                                     // Lüftung wird auf Stufe 4 gesetzt
           sh.kwl.feuchte.aktiv(True)                   // Ein Hilfsitem, damit ich weiß, das die Feuchte überschritten wurde 
           sh.kwl.feuchte.normal(False)              // Das Item mit dem Autotimer, welches nach ablauf der Zeit wieder zurückschalten soll
        Da die Logic ja bei jeder Wertänderung des Luftfeuchtefühlers getriggert wird, tritt dann irgendwann der Zeitpunkt ein, wo in der ersten If schleife die Luftfeuchte kleiner ist, als der vorgegebene Sollwert.
        Hier unterscheide ich dann, ob zeitverzögert, weil die Luftfeuchte zu hoch war geschaltet werden soll, oder gleich, weil sich die Lüfterstufe durch das uzsu geändert hat. Hier zu muss ich noch sagen, das die logic nicht nur bei einer Luftfeuchteänderung getriggert wird, sondern auch, wenn die Lüfterstuffe geändert wird (manuell oder durch uzsu).
        Ist
        Code:
        if sh.kwl.feuchte.aktiv() == True:
        was ja jetzt der Fall ist, wird
        Code:
        sh.kwl.feuchte.normal(True)
        Auf True gesetzt und das item bleibt so lange auf true, bis die Zeit abläuft. Danach geht es wieder auf False. Einfachheitshalber dachte ich mir, ich halte in dieser Zeit die Logic einfach mit
        Code:
        time.sleep(sh.kwl.feuchte.timer())
        in dieser Zeit an und schalte dann erst wieder zurück.

        Funktioniert soweit ja auch wunderbar. Mein Problem ist aber, wenn in dieser Zeit, wo der Autotimer vom Item sh.kwl.feuchte.normal läuft, bzw die logic durch den timesleep angehalten wird, die Luftfeuchte erneut steigt, weil der nächste duschen geht, wird die logic durch das steigen der Luftfeuchte erneut ausgeführt und die erste if-Schleife greift wieder. Das item sh.kwl.feuchte.normal wird zwar wieder auf false gesetzt, der autotimer im item dürfte aber trotzdem weiterlaufen und schaltet das item nach ablauf der Zeit wieder ein.
        Im admininterface habe ich dann unter Threads binnen kürzester Zeit geschätzte 15 mal die logic stehen und die Lüftung schaltet ein und aus.
        Meine Idee wäre daher zu verhindern, das die logic erneut getriggert wird, wenn das item sh.kwl.feuchte.normal auf true steht.

        Habe daher versucht das ganze nochmals in eine if schleife zu verpacken
        Code:
        if item sh.kwl.feuchte.normal() == False:
          if sh.Erdgeschoss.Badezimmer.luftfeuchte() < sh.kwl.feuchte.sollwert():
            if sh.kwl.feuchte.aktiv() == True:
              sh.kwl.feuchte.normal(True)
              time.sleep(sh.kwl.feuchte.timer())
              sh.kwl.feuchte.normal(False)
              sh.kwl.feuchte.aktiv(False)
              sh.GPIO.badezimmerklappen(False)
              merker = sh.kwl.speicher()
              sh.kwl.level(merker)
              sh.kwl.feuchte.aktiv(False)
            else:
              sh.GPIO.badezimmerklappen(False)
              merker = sh.kwl.speicher()
              sh.kwl.level(merker)
              sh.kwl.feuchte.aktiv(False)
          else:
           sh.GPIO.badezimmerklappen(True)
           sh.kwl.level(4)
           sh.kwl.feuchte.aktiv(True)
           sh.kwl.feuchte.normal(False)
        Dann schaltet die Lüftung allerdings gleich nach unterschreiten des Sollwertes wieder zurück auf die zuvor eingestellte Stufe und ich weiß nicht warum.

        Kommentar


          #5
          Also erstmal kannst Du direkt am Anfang der Logik ja über das trigger Objekt herausfinden, was die Logik getriggert hat. Danach kannst Du ja schon mal einiges abfangen.

          Dann kannst Du einen Timer setzen, wenn Du es willst. Und mit remove_timer() kannst Du den auch wieder löschen.

          Vielleicht wird so ein Schuh draus...

          Kommentar


            #6
            Du musst prüfen, ob die absolute (!) Luftfeuchtigkeit draußen geringer ist als drinnen.
            Sonst erreichst du abhängig von den Temperaturen das Gegenteil von dem, was du erreichen willst.

            Kommentar

            Lädt...
            X