wc lüfter nachlauf, nachts kein betrieb - best practice

Hallo zusammen und einen guten tag,

ich bin ziemlich neu hier, lese schon seit einigen wochen mit und versuche nun schritt für schritt die möglichen szenarien einer umstellung durchzudenken.

momentan beschäftigt mich die frage wie ich am besten den nachlauf des toilettenlüfters regeln könnte.

ich gehe davon aus dass ich via taster die wc beleuchtung ein und ausschalte, der lüfter hängt an einem eigenen stromkreis und ist somit extra versorgt und geschalten (zb. FS20-SU). anlaufen soll er allerdings erst wenn das licht länger als 2 minuten ein (IPS_Sleep??) ist und zusätzlich sollte der lüfter nur von 07 bis 21 uhr anlaufen und nach austasten der beleuchtung noch 1 minute nachlaufen…
wie würdet ihr das am besten umsetzen? gibts vielleicht ähnliche scripte, die ich hier via suche nicht gefunden habe?

danke gleich mal im voraus für eure gedanken und bemühungen

lg.

svrroot

Willkommen bei uns,

würde das nicht mit sleep() machen, diesen Befehl sollte man wenn möglich meiden und nur für kurze Pausen verwenden. In diesm Fall würde ich einen Timer verwenden.

  1. Licht an
  2. Timer auf 120s setzen
  3. Uhrzeit prüfen und Lüfter an wenn Licht noch an
  4. Timer auf 60s setzen - Lüfter aus

auserdem Script mit Variable verknüpfen um Taster zu prüfen und Timer/Licht/Lüfter zu stoppen

Kurzer Vorschlag, zum Scriptschreiben bin ich heute zu müde.:cool:

Hallo

Wie Ferengi-Master es schon geschrieben hat ist der Einsatz von Timern zu empfehlen.
Nachfolgend mal das Skript meines Flurlichttimers, entsprechend abgewandelt:


define("VarLichtStatus", 12345, true);   // ID der Licht-Statusvar.
define("VarLuefterStatus", 12345, true); // ID der Lüfter-Statusvar.

define("DelayOn", 120, true);  // Zeit (in sek.) bis Lüfterstart
define("DelayOff", 60, true);  // Nachlaufzeit (in sek.) für Lüfter
define("MinHour", 7, true);    // Beginn (Stunde) der Lüfterfreigabe
define("MaxHour", 21, true);   // Ende (Stunde) der Lüfterfreigabe

// Aufruf durch Variablentrigger
if ($IPS_SENDER == "Variable") {
  if (GetValue(VarLichtStatus)) {
    // Status des Lichts überprüfen und entsprechend reagieren
    switch ($IPS_VALUE) {
      case true: // Licht wurde eingeschaltet...
        // Lüfter nur zwischen 7 und 21 Uhr einschalten
        $hour = (int)date('G');
        if ($hour >= MinHour and $hour <= MaxHour) { 
          // Timer programmieren und starten
          IPS_SetScriptTimer($IPS_SELF, DelayOn);
        }
      break;
            
      case false:
        // Licht wurde ausgeschaltet, Lüfterstatus beachten
        if (GetValue(VarLuefterStatus)) {
          // Lüfter läuft, Nachlauftimer starten
          IPS_SetScriptTimer($IPS_SELF, DelayOff);
        } else {
          // Lüfter läuft nicht, Starttimer löschen
          IPS_SetScriptTimer($IPS_SELF, 0);
        }
      break;
    }
  }
}

if ($IPS_SENDER == "TimerEvent") {
  $Licht   = GetValue(VarLichtStatus);
  $Luefter = GetValue(VarLuefterStatus);
  //Timer abgelaufen, je nach Licht- und Lüfterstatus reagieren
  if ($Licht AND !$Luefter) {
    // Licht ist an, Lüfter steht --> Starttimer abgelaufen, Lüfter EIN
    ===> HIER EINSCHALTBEFEHL FÜR LÜFTER EINTRAGEN
    // Und den Timer löschen
    IPS_SetScriptTimer($IPS_SELF, 0);
  } elseif (!$Licht AND $Luefter) {
    // Licht ist aus, Lüfter läuft --> Nachlauftimer abgelaufen, Lüfter AUS
    ===> HIER AUSSCHALTBEFEHL FÜR LÜFTER EINTRAGEN
    // Und den Timer löschen
    IPS_SetScriptTimer($IPS_SELF, 0);
  } else {
    // Unbekannter Status, Timer löschen
    IPS_SetScriptTimer($IPS_SELF, 0);
  }
}

Dieses Skript muss durch die Licht-Statusvariable getriggert werden, der Rest sollte dann von alleine funktionieren :rolleyes:.