Badezimmerlüfter, meine Lösung

Begonnen von Herr 3x, 17 Dezember 2013, 19:22:25

Vorheriges Thema - Nächstes Thema

Herr 3x

Hallo,

ich habe im Bad eine Lüftung, die ich automatisieren wollte. Dabei entlüftet ein Ventilator eine Toilette und das getrennte Bad.
Aufgabe war, dass der Lüfter zeitverzögert eingeschaltet werden soll und auch eine Nachlaufzeit haben soll.
Außerdem soll er ab einer bestimmten Feuchtigkeit, z.B. beim Duschen oder Baden anspringen.

Meine Lösung als blutiger Anfänger sieht bisher so aus:


define Luefter_state dummy

define Lueftung_Toilette_an notify LICHTSCHALTER:on { \
  if (Value("LUEFTER") eq "off") {fhem "define onTimer_Toilettenluefter at +00:02:30 set LUEFTER,Luefter_state on"}\
  if (Value("LUEFTER") eq "on") {fhem "delete offTimer_Toilettenluefter";;fhem "set LUEFTER on"}\
  }
define Lueftung_Toilette_aus notify LICHTSCHALTER:off { \
  if (Value("LUEFTER") eq "on") {fhem "set Luefter_state on";;fhem "define offTimer_Toilettenluefter at +00:03:00 set LUEFTER,Luefter_state off"}\
  if (Value("LUEFTER") eq "off") {fhem "delete onTimer_Toilettenluefterluefter";;fhem "set LUEFTER off"}\
  }

define Lueftung_Bad notify FEUCHTESENSOR { \
  my $hum_Bad = (ReadingsVal("FEUCHTESENSOR","humidity",40));;\
  if ($hum_Bad > 62 && (Value("LUEFTER") eq "off")) { fhem ("set LUEFTER on")}\
  if ($hum_Bad < 60 && (Value("LUEFTER") eq "on") && (Value("Luefter_state") eq "off")) { fhem ("set LUEFTER off")}}


Verbesserungsvorschläge?

Grüße
Herr 3x

volschin

Sieh Dir doch mal das Modul Threshold an. Damit ist einiges einfacher möglich.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

Herr 3x

Danke für den Tipp, das Modul kannte ich noch nicht.

Damian

Ist so vielleicht etwas eleganter:

define Luefter_state dummy

define w_Luefter_state_off watchdog LICHTSCHALTER:off 00:03 LICHTSCHALTER:on set Luefter_state off;; trigger w_Luefter_state_off .

define w_Luefter_state_on watchdog LICHTSCHALTER:on 00:02:30 LICHTSCHALTER:off set Luefter_state on;; trigger w_Luefter_state_on .

define TH_Luefter THRESHOLD FEUCHTESENSOR:humidity:2:62 OR Luefter_state:state:on LUEFTER|set @ on|set @ off|0


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Herr 3x

@Damian

Vielen Dank für den Input, das sieht echt eleganter aus  ;)
Da ich bislang kaum mit Perl und nix fhem zu tun hatte brauche ich etwas länger zum begreifen:
define TH_Luefter THRESHOLD FEUCHTESENSOR:humidity:2:62 OR Luefter_state:state:on LUEFTER|set @ on|set @ off|0
ist der Zweipunktregler. Allerdings verstehe ich die Schreibweise LUEFTER|set @ on|set @ off|0[ noch nicht ganz.
Kann aber auch einfach sein, dass ich heute nicht mehr ganz fit bin   ???  O.k. Doku morgen nochmal lesen  ;D

Grüße
Herr 3x

Damian

Zitat von: Herr 3x am 17 Dezember 2013, 21:13:54
Allerdings verstehe ich die Schreibweise LUEFTER|set @ on|set @ off|0[ noch nicht ganz.
heißt:

set LUEFTER on, wenn Feuchtigkeit über 62 oder Luefter_state  = on und umgekehrt
set LUEFTER off, wenn Feuchtigkeit unter 60 und Luefter_state = off

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

John

Hallo Herr 3x,

ich habe vor 1 Jahr damit begonnen mich mit exakt demselben Problem, wie du es hast, auseinanderzusetzen.

ZitatAußerdem soll er ab einer bestimmten Feuchtigkeit, z.B. beim Duschen oder Baden anspringen.
So dachte ich zunächst auch, bis ich im Sommer feststellen musste, dass der Lüfter nicht mehr aufhört zu laufen.

Meine physikalischen Grundlagen zu Feuchteregelung waren offensichtlich noch nicht ausreichend.

Die gemessene relative Feuchte gibt die Fähigkeit der Luft wieder, Feuchte aufzunehmen.
Diese ist jedoch deutlich von der  Temperatur abhängig.

Es kann tatsächlich (im Sommer) Situationen geben, in denen du dir durch Lüften die Feuchte geradezu ins Haus holst.

Die Lösung:
Sind relative Luftfeuchte und Temperatur bekannt, so kann man die Taupunkt-Temperatur errechnen.
Die Taupunkt-Temperatur ist  die Temperatur, bei der die Luftfeuchte 100% wäre.

Ist der Taupunkt aussen niedriger als innen, macht es grundsätzlich Sinn den Lüfter zu aktivieren (+ Sicherheitsabstand von z.B. 1 Grad)

Dazu gibt es auch ein FHEM-Modul namens Dewpoint, das hilft den Taupunkt zu bestimmen und
es kann  sogar das Startsignal für den Lüfter generieren.

Erst wenn also die Taupunkt-Bedingung gegeben ist, macht Feuchte-Regelung Sinn. (Im Winter ist das nie ein Problem)

Den Taupunkt aussen habe ich über über die Yahoo-Wetterdaten(Temperatur und Feuchte) abgeleitet,
es ist also kein eigener Sensor nötig.

Zusätzlich habe ich einen gleitenden Grenzwerte für die relative Feuchte im Bad eingeführt, je kälter es aussen ist
umso trockener muss das Bad sein.

Damit lässt sich die Tauwasserbildung an den Fenster etwas reduzieren.

Anbei ein Chart, das die Regelung verdeutlicht.
Die markierten Bereiche zeigen die Lüfteranforderung durch zu hohen Feuchte.
Die anderen sind die Anforderung über die Toiletten.

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Damian

Da hat John recht.

Wenn du Luft nach draußen herausbläst, könnte es im Sommer vielleicht klappen (evtl. die Schaltgrenze von 62 etwas erhöhen), wenn du von außen nach innen die Luft hineinbläst (was ich nicht annehme), wird mit dieser Steuerung dein Lüfter an feuchtwarmen Tagen wahrscheinlich nicht ausgehen.

Gruß

Damian



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Herr 3x

Hallo,

Ja, John hat natürlich recht. Die 62% rel. Feuchte sind nur ein erster Test.
Ich bin ja Anfänger und möchte erst einmal top down anfangen.
Ich habe mir eine Lösung mit dem Modul dewpoint vorgestellt, womit ich die Ansprechschwelle verschieben könnte.
Allerdings ist das Lüften hier auch nicht so kritisch, da
- das Bad rund 17 m^2 hat und die Feuchte sich mehr verteilt
- das Haus ein Altbau mit deutlich höherem Luftaustausch ist, vorher wohnte ich in einem Niedrigenergiehaus, da war Feuchtigkeit ein deutlich kritischeres Thema
- im Sommer das Fenster auch mal länger auf sein kann und kaum noch Temperaturdifferenz innen zu außen mit der Taupunktproblematik vorkommen kann, somit das motorische Lüften entfallen kann.

Ich wollte eigentlich außen auch einen Temperatursensor anbringen, den könnte ich gut verwenden.

Ich habe das Gefühl, dass man alle Bedingungen auch erst nach einem Jahr raus hat. Fhem vier Jahreszeiten eben.

Vielen Dank für die hilfreichen Tipps

Herr 3x


volschin

Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

locodriver

#10
Passend zum Thema will ich hier mal meine Umsetztung posten, vielen Dank übrigens an Damian für die Unterstützung!

Beim Umbau unseres Bades wollte ich eine zusätzliche Lüftung einbauen, weil wir keinen Dachüberstand haben und es bei starkem Regen an das Fenster eher noch zu einem Feuchtigkeitseintrag beim Lüften mit offenem/gekipptem Fenster kommt. Die Luft wird übrigens aus dem Schlafzimmer gesaugt (Türspalt) und in einen Abluftschacht gedrückt.

Das Bad hat ca. 25 m³ Rauminhalt, die Klempner hatten erst einen Lüfter mit 60 W-Motor eingebaut, der "schaffte" nur 1 -2 % Feuchtereduzierung pro Stunde, jetzt ist ein 100 W-Motor drin und der bringt 5 -6 %.
Allerdings macht er mehr Krach, sodass ich zwischen 20 und 8 Uhr den Lüfter nicht automatisch laufen lasse (Zugang zum Bad vom Schlafzimmer aus).

Außerdem wollte ich den Lüfter auch mit der Hand schalten können und die Automatik auch abschalten.

Der Lüfter wird mit einem HM-Schaltaktor geschaltet, ich habe sowohl L1 als auch die Steuerleitung zusammen geschaltet; so läuft beim Ausschalten der Lüfter nicht nach.

Da kam Folgendes raus:

Schalter ein/aus bzw. Auto ein/aus: 2 Tasten eines 6-fach HM-WM-55.

T3 kurz: manuell aus
T4 kurz: manuell ein für 60 Min. bzw. toggle
T3 lang: Automatik aus
T4 lang: Automatik ein

# Badluefter
define BD_Vent_aus notify BD_T6_Btn_03:trigger:.Short.* set BD_Vent_Man off
attr BD_Vent_aus room 004Bad

define BD_Vent_toggle notify BD_T6_Btn_04:trigger:.Short.* {Log 1, "Vent ist ".ReadingsVal("BD_Luefter_Sw_01","state","")}{if ((ReadingsVal("BD_Vent_Man","state","") =~ m /on/)){fhem "set BD_Vent_Man off";;}else {fhem "set BD_Vent_Man on";;}}
attr BD_Vent_toggle room 004Bad

define BD_Ventauto_aus notify BD_T6_Btn_03.Long.1-.* set Luefterautomatik off
attr BD_Ventauto_aus room 004Bad

define BD_Ventauto_ein notify BD_T6_Btn_04.Long.1-.* set Luefterautomatik on
attr BD_Ventauto_ein room 004Bad


Dummy für Automatik ein/aus:

define Luefterautomatik dummy
attr Luefterautomatik Luft_auto BD__auto_struc
attr Luefterautomatik Luft_auto_map on:closed off:open
attr Luefterautomatik alias Ventilatorautomatik
attr Luefterautomatik devStateIcon Ein:switch.on Aus:switch.off
attr Luefterautomatik eventMap on:Ein off:Aus
attr Luefterautomatik room 004Bad,010Wohnung
attr Luefterautomatik webCmd Aus:Ein


Dummies zum Speichern und Darstellen von manuallem und automatischem Betrieb (die Bedienung über Webinterface ist noch vom Testen aktiv):

define BD_Vent_Man dummy
attr BD_Vent_Man devStateIcon Ein:switch.on Aus:switch.off
attr BD_Vent_Man eventMap on:Ein off:Aus
attr BD_Vent_Man room 004Bad
attr BD_Vent_Man webCmd Aus:Ein

define FileLog_BD_Vent_Man FileLog ./log/BD_Akt-%Y.log BD_Vent_Man
attr FileLog_BD_Vent_Man logtype text
attr FileLog_BD_Vent_Man room CUL_HM

define BD_Vent_Auto dummy
attr BD_Vent_Auto devStateIcon Ein:switch.on Aus:switch.off
attr BD_Vent_Auto eventMap on:Ein off:Aus
attr BD_Vent_Auto room 004Bad
attr BD_Vent_Auto webCmd Aus:Ein

define FileLog_BD_Vent_Auto FileLog ./log/BD_Akt-%Y.log BD_Vent_Auto
attr FileLog_BD_Vent_Auto logtype text
attr FileLog_BD_Vent_Auto room CUL_HM


Verknüpfung beider Dummies und Aktor schalten (als ODER-Schaltung):

define BD_Vent_Sum_notify notify BD_Vent_.*:(on|off) {\
if ((Value("BD_Vent_Man") eq "Aus") && (Value("BD_Vent_Auto") eq "Aus")){fhem "set BD_Luefter_Sw_01 off";;}\
if (Value("BD_Vent_Man") eq "Ein"){fhem "set BD_Luefter_Sw_01 on-for-timer 3600";;Log 1, "Vent ist manuell ein";;}\
if (Value("BD_Vent_Auto") eq "Ein"){fhem "set BD_Luefter_Sw_01 on";;Log 1, "Vent ist automatisch ein";;}}
attr BD_Vent_Sum_notify devStateIcon Ein:switch.on Aus:switch.off
attr BD_Vent_Sum_notify room 004Bad


Zeit-, Feuchtigkeits- und Fenstersteuerung: Der Lüfter soll im Automatikbetrieb nur zwischen 8 und 20 laufen wenn die Feuchtigkeit größer 70 % ist und das Badfenster geschlossen ist und die Feuchtigkeit um 4 % reduzieren.
Im manuellen Betrieb gibt es keine weiteren Bedingungen - nach 60 Min. geht der Lüfter ja sowieso aus.

define BD_Vent_auto_struc structure Luft_auto BD_Fenster Luefterautomatik
attr BD_Vent_auto_struc clientstate_behavior absolute
attr BD_Vent_auto_struc clientstate_priority closed open
attr BD_Vent_auto_struc room 004Bad

define BD_Vent_auto_TH THRESHOLD BD_Regler:humidity:4 AND BD_Vent_auto_struc:state:closed|set BD_Vent_Auto on|set BD_Vent_Auto off|2
attr BD_Vent_auto_TH icon icoLuefter
attr BD_Vent_auto_TH room 004Bad
attr BD_Vent_auto_TH state_format _m _dv

define BD_Vent_auto_HC Heating_Control BD_Vent_auto_TH 08:00|70 20:00|105 set @ desired %
attr BD_Vent_auto_HC room 004Bad


Bei HC bzw. WDT (geht auch) ist der Trick, um 20 Uhr die Schaltschwelle auf einen "utopischen" Wert zu ändern  :D.

Anbei noch ein Plot, die Aktoren bzw. Dummies schreiben in ein File und sind auf verschiedene Maximalwerte gemappt, damit man den Auslöser und den Ventilator erkennen kann.

Ich bin mit der Funktion sehr zufrieden, mal seh'n, wie es im Sommer ist, wenn sich die Feuchteverhältnisse ändern.

Schönes WE, Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

roedert

#11
Ich habe meine Badezinmmner-Lüftung mittlerweile ziemlich erfolgreich implementiert.

Ein- und Ausschalten des Lüfters nur über feste Feuchtigkeitswerte brachte aber nicht viel, da die Schwellen je nach Jahreszeit/Wetter zu unterschiedlich waren. Deshalb schalte ich ein wenn die Feuchtigkeit sprunghaft ansteigt (+5%) und wieder aus wenn sie trotz eingeschaltetem Lüfter nicht mehr großartig abnimmt (weniger als 0.3%).
Als absolute Ober- und Untergrenze gibt es noch die Dummys Bad.LowHumidity und Bad.LowHumidity, die mit entsprechenden Werten gefüllt werden müssen.

Temperatur und Feuchtigkeit liefert alle 5min ein HMS100TF. Bei jedem Notify schreibe ich mir die Luftfeuchtigkeit in 3 Dummy-Variablem weg um somit eine "History" zu haben bzw. die Differenz der letzten 15min berechnen zu können.

Sieht dann in etwa so aus:

define Bad.Temperatur HMS xxxx
define Bad.Luefter FS20 xxxxxxxx xx
define Bad.LowHumidity dummy
define Bad.HighHumidity dummy
define Bad.LastHumidity.1 dummy
define Bad.LastHumidity.2 dummy
define Bad.LastHumidity.3 dummy
define Bad.DiffHumidity dummy

define Bad.Humidity_nfy Bad.Temperatur:humidity.* {
  fhem "set Bad.DiffHumidity " . (ReadingsVal('Bad.Temperatur','humidity',0) - Value("Bad.LastHumidity.3"));

  if ( Value("Bad.Luefter") ne "on" &&
       (Value("Bad.DiffHumidity") >= 5 || ReadingsVal('Bad.Temperatur','humidity',0) >= Value("Bad.HighHumidity")) )
    {fhem "set Bad.Luefter on"};; 

  if ( Value("Bad.Luefter") ne "off" &&
       ( (Value("Bad.DiffHumidity") > -0.3 && Value("Bad.DiffHumidity") <= 0) ||
         ReadingsVal('Bad.Temperatur','humidity',0) <= Value("Bad72.LowHumidity") ) )
    {fhem "set Bad.Luefter off"};; 

  fhem "set Bad.LastHumidity.3 " . Value("Bad.LastHumidity.2");
  fhem "set Bad.LastHumidity.2 " . Value("Bad.LastHumidity.1");
  fhem "set Bad.LastHumidity.1 " . ReadingsVal('Bad.Temperatur','humidity',0);
}

Herr 3x

Vielen Dank an locodriver und roedert für die ausführlichen Lösungen.

Die Idee mit der manuellen Schaltung finde ich gut, allerdings Gefällt mir das Differenzieren zur Sprungerkennung noch besser. Wobei mir das Ausschaltkriterium nicht so gut gefällt - was ist, wenn man nach dem Baden das Fenster aufmacht, läuft dann der Lüfter nicht unnötig weiter, da je nach Außenluft die Feuchte sich deutlich ändert?

Herr 3x

roedert

Zitat von: Herr 3x am 26 Dezember 2013, 12:28:46
Wobei mir das Ausschaltkriterium nicht so gut gefällt - was ist, wenn man nach dem Baden das Fenster aufmacht, läuft dann der Lüfter nicht unnötig weiter, da je nach Außenluft die Feuchte sich deutlich ändert?

Auch kein Problem, dann wertest du eben den Fensterkontakt in den Bedingungen noch mit aus.

Califax

Zitat von: John am 17 Dezember 2013, 21:50:59

Zusätzlich habe ich einen gleitenden Grenzwerte für die relative Feuchte im Bad eingeführt, je kälter es aussen ist
umso trockener muss das Bad sein.

Damit lässt sich die Tauwasserbildung an den Fenster etwas reduzieren.



Hallo John,
kannst du beschreiben, wie du den gleitenden Grenzwert berechnet hast? Mir schwebt eine ähnliche Lösung vor, aber ich weiß nicht wie ich dabei vorgehen soll.
Eigentlich müsste man ja die Oberflächentemperatur abschätzen, z.b. 70% der Differenz von außen und innen? Ich habe innen und außen Feuchte und Temperatursensoren.
Grüße Califax