Ereignis limitiert ablaufen lassen? (Zirkulation mittels IR-Bewegungsmelder)

Hallo Zusammen,

ich habe jetzt einen Z-Wave IR-Bewegungsmelder im Bad um die Zirkulation auszulösen.
Das klappt auch wunderbar per Ereignis (Variablenänderung mit Grenze „true“), aber die Zirkulation läuft dann ggf. auch 2-3x wenn man einen Moment im Bad ist. Ich würde das ganze gerne limitieren, z.B. auf 1x alle 15-20 min.
Jetzt wäre meine Frage, geht das mit einem Ereignis alleine? Ich habe nichts gefunden um das hinzubekommen.

Ein Skript schreiben ginge natürlich auch, dann müsste ich den Zeitstempel der letzten Zirkulation speichern und mit dem aktuellen vergleichen oder?
Aber es wäre natürlich eleganter nur die Variable und ein Ereignis zu nehmen…:

Gruß,
Matthias

Für den Anfang kannst du erst Mal den Haken ‚nachfolgende Ereignisse ausführen‘ im Ereignis entfernen.
Dann löst das Ereignis nur noch aus wenn der Wert sich von false auf true ändert und nicht jedesmal wenn der Melder true nur aktualisiert.
Michael

Danke Michael!
Allerdings geht der Sensor nach ~1 min. wieder auf false und das ist genau dann wenn das nächste Ereignis ausgelöst werden kann.
Und das ist genau das was ich nicht will :smiley:

Gruß,
Matthias

Script ist schon sinnvoll ;).

Meine Pumpe läuft nur 1 Minute und wird dann 15 Minuten gesperrt. Nur wenn die Dusche an ist läuft sie dauerhaft. Das reduziert etwas die Temperaturschwankungen wenn woanders auch Warmwasser gezapft wird.

Hast Du denn zufällig den Skript zu Hand? :slight_smile:
Dann spare ich mir das Coden :wink:

Als Ideengeber mit diversem Anpassungsbedarf könntest du es vielleicht nutzen ;). Alt, hardcoded und nach heutigen Gesichtspunkten bedingt optimal programmiert.

Außerdem ist ein kleiner Teil Jalusie-Steuerung mit drin und meine eigenen Funktionen zur Statusmeldung. Aber mit den Texten der Statusmeldungen und dem folgenden Bild solltest du die passenden Teile behalten können ;-).

Auslöser sind mehrere Bewegungsmelder, die im Script aber nicht einzeln betrachtet werden.


<?
include_once("56429.ips.php" ); // GlobalDefinesAndFunctions

$debug = true; 

function boolStringAufZu($bValue = false) {                      // returns string
  return ($bValue ? 'geschlossen ' : 'geöffnet    ');
}
function boolStringEinAus($bValue = false) {                      // returns string
  return ($bValue ? 'ein         ' : 'aus         ');
}
function VarAktTime($varID) {
	$var = IPS_GetVariable($varID);
	$akt = date("d.m.Y H:i:s", $var['VariableChanged']);
	return ($akt);
}

$LaufZeit = GetValueInteger(33985);
$PausenZeit = GetValueInteger(16758); 

$lastmove = GetValueInteger(19289);
$firstmove = GetValueBoolean(41574);
$Abwesend = GetValueBoolean(46199);
$StatusZirkulationspumpe = GetValueBoolean(50904);
$StatusDusche = GetValueBoolean(43330);
$InnenLichtGesperrt = GetValueBoolean(22352);
// $RolloPosition = GetValueInteger( "M137pos4");

if (!$InnenLichtGesperrt AND $RolloPosition = 100 AND $firstmove) {
  	if ($debug)
     	SetStatusMeldungen(StatusAllgemein, IPS_GetName($_IPS['SELF']), "Erste Bewegung am Tag, Rollo Spalt öffnen (80%)");
	// Velux Rollo Flur auf 80% öffnen
	SetValueInteger(35380, 80);
	SetValueBoolean(41574, false);
}


if ( $StatusDusche == True ) {
	if ($debug)
		SetStatusMeldungen(StatusZirkulationspumpe, IPS_GetName($_IPS['SELF']), "Licht Dusche ist an => Zirkulationspumpe läuft");
} else {
	if ($_IPS['SENDER'] == "Variable") {
   	// Bewegung erkannt
   	if (time() >= $lastmove + $PausenZeit) {
      	if ($debug)
        	SetStatusMeldungen(StatusZirkulationspumpe, IPS_GetName($_IPS['SELF']), "Bewegung erkannt und Pause abgelaufen => Pumpe EIN");
		SetValueInteger(19289, time());            // Zeit merken
		LCN_SwitchRelay(46796, true);
		IPS_SetScriptTimer($_IPS['SELF'], $LaufZeit);
      } else {
      	if ($debug)
         	SetStatusMeldungen(StatusZirkulationspumpe, IPS_GetName($_IPS['SELF']), "Bewegung erkannt aber Pumpe gesperrt bis: " . date("H:i", $lastmove+$PausenZeit));
      }
   }
}

if ($_IPS['SENDER'] == "TimerEvent") {
	switch ($_IPS['EVENT']) {
		case "21959":     // ScriptTimer
		   if ($debug)
				SetStatusMeldungen(StatusZirkulationspumpe, IPS_GetName($_IPS['SELF']), "Timer abgelaufen => Pumpe AUS");
			LCN_SwitchRelay(46796, false);
			IPS_SetScriptTimer($_IPS['SELF'], 0);
		break;
		case "56837":     // Morgen Reset FirstMove
		   if ($debug)
				SetStatusMeldungen(StatusZirkulationspumpe, IPS_GetName($_IPS['SELF']), "FirstMove zurücksetzen");
			SetValueBoolean(41574, true);
		break;
	}
}

?>

Hi Ralf,

ist doch gut - das mit der Jalousie gefällt mir echt! Allerdings ist bei mir das Bad der einzige Raum OHNE Motor im Erdgeschoss :smiley:

Ich habe jetzt kurz und schmerzlos folgendes gemacht:
(Ich benutze den WIFFI-Pump von Eugen Stall)

<?
$pause=GetValueInteger(30818)*60;
$bewegung=GetValueBoolean(23038);
$lastmove=GetValueInteger(17371);
if (time() >= $lastmove + $pause) { 
        SetValueInteger(17371, time());            // Zeit merken 
        
//########### URL Zusammenstellen (IP aus der homematic)#######################
$http = "http://";             
$IP=GetValueString(20734);
$trigger = "/?trigger:";
$dauer=GetValueFloat(37798);

//########### Befehl zusammenstellen und absetzen ##############################
$URL = $http . $IP . $trigger . $dauer . ":";                       
file_get_contents("$URL");
    }
?>