NEWS
Kontrollierte Wohnraumlüftung steuern - Vallox
-
Ich habe hier eine Vallox laufen mit der ich auch zufrieden bin. Die hat aber nur einen zentralen Sensor. Dieser Sensor ist aber nicht empfindlich genug. Wenn man mehrere Räume hat und ein Raum ist etwas kleiner(Schlafzimmer) kann dort der Wert für Co2 sehr hoch sein, aber da die Luft aus allen Räumen beim Sensor ankommt, merkt der nicht viel. Vallox hat eine integrierte Regelung über diesen Sensor.
Externe Werte für Co2 kann man auch nicht an die Lüftung geben.
So habe ich mir eine Regelung gebaut, dass die Lüftung immer auf den höchsten Wert reagiert - ob ihr das wollt, liegt bei Euch. Bei mir im Schlafzimmer war jedenfalls der CO2 -Wert viel zu hoch, weil wir wegen Pollenallergie bei geschlossenem Fenster schlafen - daher auch die Lüftung.
Ich schreibe das über den KNX-Bus in das Profil, wie die Basisumdrehung der Lüftung ist. Standard sind hier 35%, so dass alle 3 Stunden im gesamten Haus die Luft ausgetauscht ist. Ehrlicherweise muss man dazu sagen, dass das auch dazu führt, dass in der Übergangszeit die Temperatur fällt, da in der Nacht durch das Schlafzimmer der Luftaustausch angekurbelt wird. Wenn draußen -2°C sind,dann kommt hier Luft mit 18°C in die Räume. Das fängt die Fußbodenheizung nicht ab.Jetzt aber zum Script -
Ihr müsst Eure Triggerpunkte eintragen (bei mir KNX) und dann die Werte in eine Liste schreiben.
Dann wird der höchste Wert ermittelt und die Lüfterstufe danach gesetzt - das ist ein laufender Prozess - immer wenn sich der Co2 Wert in irgendeinem Teil des Hauses verändert, wird die Lüfterstufe neu bestimmt und bei Bedarf angepasst.
Es wird noch geprüft, ob die Stoßlüftung aktiv ist, dann wird nichts gemacht.
Wenn Ihr nur das Netzwerkmodul von Vallox einsetzt (ist im Standard enthalten, es gibt einen Adapter für iobroker, dann biegt nur die Datenpunkte dahin um und es sollte funktionieren.// Lüftung nach CO2 Gehalt setzen var grenzwwertco2=800; var temp_string; // Triggerpunkte, die die Lüftungssteurung triggern sollen on({ id: [].concat(['openknx.0.Messwerte_BWM.Haus.Arbeitszimmer_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.Bad_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.Gästebad_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.HWR_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.Schlafzimmer_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.Sportraum_CO2_Messwert']).concat(['openknx.0.Messwerte_BWM.Haus.Wohnzimmer_CO2_Messwert']), change: 'ne' }, async (obj) => { // console.log("Name:"+obj.name) //############################################################################################ // Objekte, true/false für den Status // Stoßlüftung aktiv var checkactive=getState('alias.0.Lueftung.Lueftungsprofil_Stosslueftung_An_Aus').val; // Awesend aktiv var anwesend_active =getState('openknx.0.Lueftung.Vallox.Lüftungsprofil_Anwesend_Ein_Aus').val;; //Abwesend aktiv - Standardprofil var abwesend_active =getState('openknx.0.Lueftung.Vallox.Lüftungsprofil_Abwesend_Ein_Aus').val;; //############################################################################################ // Nur starten, wenn Sto0lüftung nicht aktiv if (((obj.state ? obj.state.val : '')) && (checkactive == false)) { // Liste mit allen Co2 Werten erzeugen var werte = [getState('openknx.0.Messwerte_BWM.Haus.Wohnzimmer_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.Sportraum_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.Arbeitszimmer_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.Bad_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.Gästebad_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.HWR_CO2_Messwert').val,getState('openknx.0.Messwerte_BWM.Haus.Schlafzimmer_CO2_Messwert').val] // größten Wert ermitteln, der die Lüftung steuert. var groessterWert = Math.max(...werte); //console.log(`Der größte Wert ist: ${groessterWert}`); var luefterstufe = setLuefterstufe(groessterWert); // console.log((['Lüftung:',obj.name," - Vallox %: ",luefterstufe," - Co2 - groesster Wert:", groessterWert].join(''))); // iqontrol setzen zur Kontrolle // setServiceMessage(((['Lüftung:',obj.name," - Vallox %: ",luefterstufe," - Co2- groesster Wert:", groessterWert].join(''))),1); // Abfrage welches Profil hier aktiv ist if ( anwesend_active==true) {temp_string="Anwesend"} if ( abwesend_active==true) {temp_string="Abwesend"} // Wert in den Datenpunkt zur Steuerung schreiben // nur, wenn Lüfterstufe noch nicht gesetzt ist if (getState('openknx.0.Lueftung.Vallox.'+temp_string+'_Lüfterstufe_Status').val!=luefterstufe) { setState('openknx.0.Lueftung.Vallox.'+temp_string+'_Lüfterstufe_Stellwert',luefterstufe); console.log ((obj.name+" Vallox % "+temp_string+""+getState("openknx.0.Lueftung.Vallox."+temp_string+"_Lüfterstufe_Stellwert").val+" - Co2 groesster Wert ", groessterWert)); // iqontrol Servicelog schreiben kann auch ausgeschaltet werden setServiceMessage( (obj.name+" Vallox %: "+temp_string+""+getState("openknx.0.Lueftung.Vallox."+temp_string+"_Lüfterstufe_Stellwert").val+" - Co2 groesster Wert: ", groessterWert),1) setServiceMessage(((['Lüftung ',obj.name," - Vallox %: ",luefterstufe," - Co2 ", obj.state.val].join(''))),1); } else { // wenn Lüfterstufe schon erreicht console.log ("Lüfterstufe schon gesetzt "+obj.name+" Vallox % "+getState("openknx.0.Lueftung.Vallox."+temp_string+"_Lüfterstufe_Stellwert").val+"--"+luefterstufe+" "+" Co2:- groesster Wert " +groessterWert); // Alternative zum Schreiben mit setServiceMessage direkt in den Datenpunkt von iqontrol - kann ausgeschaltet werden // setState("iqontrol.0.Lists.Servicemessages.ACTUAL_TEXT",("Lüfterstufe schon gesetzt "+obj.name+" Vallox % "+getState("openknx.0.Lueftung.Vallox."+temp_string+"_Lüfterstufe_Stellwert").val+"--"+luefterstufe+" "+" Co2" +obj.state.val)); } } } ); // Lüfterstufe nach Co2 Wert zurückgeben für Vallox // Werte nach eigenen Anforderungen anpassen function setLuefterstufe(wert) { switch (true) { case wert < 800 : return 35; case wert >= 801 && wert < 850: return 40; case wert >= 850 && wert < 900: return 45; case wert >= 900 && wert < 950: return 55; case wert >= 950 && wert < 1000: return 55; case wert >= 1000 && wert < 1100: return 60; case wert >= 1100 && wert < 1200: return 65; case wert >= 1200 : return 70; default: return 35; } }
Bei Fragen einfach fragen.
Gruß Tom -
@tomtom24 Das Problem scheint ja eher zu sein, dass die Lüftung die Frischluft "mit der Gießkanne" im Haus verteilt.
Wie ist denn die Architektur der Lüftung? in jeden Raum ein Luftaustritt, aber nur einen zentralen Lüfter mit Wärmetauscher?Wenn ja:
Gibt es da ein Verstellmöglichkeit für die Luftmengenverteilung auf die verschiedenen Räume? Wie ist die ausgeführt? In die Luftkanäle eingelegte feste Verengungsstücke, oder Stellschrauben?
Wäre es vielleicht möglich, die Luftströme etwas mehr zu lenken, und die Frischluft gezielter nur in den belasteten Raum zu leiten?Vielleicht motorisch verstellbare Lamellen-Auslässe vor die Luftaustritte statt fest montierter Gitter...
Auch ein zusätzlicher Luftaustausch aus dem Schlafzimmer mit anderen Räumen über einen separaten Lüfter wäre eine Möglichkeit, die verbrauchte Luft im Schlafzimmer los zu werden.
-
@martinp ja, das ist die Gießkanne. Ich habe die Luftaustrittsöffnungen schon so gestellt, dass es im SZ am größten ist und in den anderen Räumen nicht so groß.
Mehr möchte ich im Moment auch nicht machen. Klar kann man da technisch noch eine Menge reinbasteln, mir reicht es aber im Moment so.Ich habe das jetzt ab und anstellbar gemacht - das ist auch nur in der Übergangszeit ein bisschen problematisch. Wenn die Pollensaison vorbei ist, dann machen wir das Fenster im SZ auf und schon ist das ganze Problem weg.
Daher ist es für mich eine gute Lösung für ein temporäres Problem -
@tomtom24 Klingt nach eine pragmatischen Lösung. Man weiß ja auch nicht, was motorische Basteleien an den Luftauslässen ggfs. nachher im Betrieb an Arbeitsgeräuschen mit sich bringen. Ich habe so Phasen, wo ich bei jedem Geräusch wach werden würde ...