suche simples Nachlaufrelais / Zeitschalter script

Hallo!

Ich suche jetzt schon ne weile, bin aber leider nicht fündig geworden :frowning:

Ich suche für Entlüftungsanwendung ein Script das bei „Tastendruck“ einen Ausgang für eine bestimmte Zeit lang (in meinem Fall so ca 45min) auf Ein schaltet und danach selbst wieder ausschaltet.

Wär froh wenn mir geholfen werden könnte.
Vielen DANK im Voraus!

LG Hannes

Gleich das erste Beispiel in der Doku unter „Wie kann ich …

Danke!

mir ist aber noch nicht ganz klar wo ich das Script platzieren soll damit es funktioniert.

Hier habe ich das Skript das ich verwende um im Webfront einen Taster angezeigt zu bekommen.
Soll ich das hier reinmurksen?

Muss ich den Timer selbst anlegen oder funktioniert das vom script aus?


<?
if($IPS_SENDER == "WebFront")
{
    switch($IPS_VALUE)
    {
        case 1:
        IPS_SetVariableProfileAssociation("Taster_hr", 0, "Ein", "", 0xFFA943);
        IPS_SetVariableProfileAssociation("Taster_hr", 1, "", "", -1);
        SetValue(46032 /*[Objekt #46032 existiert nicht]*/, 1);
        // ''IPS_Sleep(1000);
        break;
        case 0:
        IPS_SetVariableProfileAssociation("Taster_hr", 1, "Aus", "", -1);
        IPS_SetVariableProfileAssociation("Taster_hr", 0, "", "", -1);
        SetValue(46032 /*[Objekt #46032 existiert nicht]*/,0);
        //'' IPS_Sleep(1000);
        break;
        
    }
}

?>

Okay, alles klar!
Jetzt hab ich es geschafft :slight_smile:

Vielen Dank für den Hinweis!

LG Hannes

Jetzt war ich grad am schreiben :frowning: Also poste ich es trotzdem :smiley:

<?
$StatusVariable = 12345;  // ID deiner Bool-Variable die du schalten willst
$zeit = 45;  // Zeit (in Minuten) in der die Variable geschaltet werden soll

if($IPS_SENDER != "TimerEvent") {
	SetValue($StatusVariable, true);
	$ZeitSekunden = $zeit * 60;
	IPS_SetScriptTimer($IPS_SELF, $ZeitSekunden);
}
else {
	SetValue($StatusVariable, false);
   IPS_SetScriptTimer($IPS_SELF, 0);
}
?>

Skript aufrufen setzt die Variable auf TRUE und wenn nach 45 Minuten das Skript durch den Timer aufgerufen wird, dann wird der Timer gestoppt und die Variable auf FALSE gesetzt…

Grüße,
Chris

Danke auch für deine Antwort!

Ich denke das sie auf jeden Fall auch den Ein- oder Anderen in Zukunft weiterhilft!

LG Hannes

Falls Du Homematic benutzt: Einige Aktoren können das auch allein erledigen. Der Datenpunkt dazu heisst ON_TIME.

Da hätte ich auch noch was:
Sehr dynamisch dh. Skript braucht nicht angepasst werden und geht mit diversen Instanzen:

Unten die Befehle anpassen für FS20 Homematic Z-Wave etc.
Einfach ein Ereignis an das Script anlegen mit Verweis auf die Variable die unter einer Instanz hängt und getriggert wird bei an, danach das Ereignis umbenennen:
{IRGENDEINTEXT}, {ANZAHL MINUTEN BIS AUSSCHALTEN}

Bsp:

poweroff.png

Das Script wird dann gestartet und legt an der Entsprechenden Instanz ein Ereignis an und schaltet das Gerät aus…


<?
/* BESCHREIBUNG ----------------------------------------------------------------

   Dies ist ein generisches Script um Geräte automatisch nach einer
	vorgegebenen Zeit wieder auszuschalten.
	
	Um die Funktionalität zu nutzen, Ereignisse an diesem Script festmachen.
	ZB: Leuchte1->status = true. Also wenn Leuchte1 angeschaltet wurde.
	Der Ereignissname muss manuell gepflegt bzw. angepasst werden und folgende
	Form haben:
	{beliebiger Name},{Timout in Minuten}, {Channel für Ausschalten, optional}
	Beispiel
	
	Leuchte Flur, 3, 2
	oder
	Leuchte Garage, 10
	
	Das Script legt dann unter der Trigger Insatz ein Ereignis an (Name kann
	unten	konfiguriert werden) und aktiviert dieses mit dem Ausschalt Befehl.
	Aktuell für Z-Wave, kann aber leicht für andere Geräte angepasst werden.
	
------------------------------------------------------------------------------*/
	
/* CONFIGURATION -------------------------------------------------------------*/
 $c_EVENT_NAME = "(Auto Power Off)";
/*----------------------------------------------------------------------------*/
if($_IPS['SENDER'] == "Variable"){
	 // AuslösendeInstanz und Event herausfinden und Parameter aus Namen extrahieren.
 	 $l_inst = IPS_GetParent($_IPS['VARIABLE']);
	 $s_event = $_IPS['EVENT'];
	 $s_name  = IPS_GetName($s_event);
	 $s_name_a  = explode(",",$s_name);
	 $l_POWEROFF = intval($s_name_a[1]);

	 // Prüfen ob Multichannel
	 if(!@empty($s_name_a[2])){
	   // Multi Switch
	   $l_multi = intval($s_name_a[2]);
	 } else {
	    $l_multi = 1;
	 }
	 echo "POWEROFF Script Trigger: ".IPS_GetName($l_inst)." Off: ". $l_POWEROFF."
";

	 // Ausschaltzeit berechnen
	 $l_POWEROFF = time() + ($l_POWEROFF * 60);
	 
	 // Prüfen ob bereits altes Event exisitert und ID lesen.
	 $l_subitems_a = IPS_GetChildrenIDs($l_inst);
	 $e_id = 0;
	 foreach($l_subitems_a as $z => $id){
		$l_detail = IPS_GetObject($id);
	   if($l_detail["ObjectType"] == 4){ // Prüfen ob Sub-Item Ereignis ist
	      if($l_detail["ObjectName"] == $c_EVENT_NAME){
	         $e_id = $id;
	      }
	   }
	 }
	 
	// Fals kein altes Ereignis gefunden wurde, neues anlegen.
   if($e_id == 0){
	 	$e_id = IPS_CreateEvent(1);
 		IPS_SetParent($e_id,$l_inst);
	 	IPS_SetName($e_id,$c_EVENT_NAME);
	 }
	IPS_SetHidden($e_id, true);
	
	 // Ereigniszeit setzen
 	 IPS_SetEventCyclic($e_id,1,0,0,0,0,0);
	 IPS_SetEventCyclicTimeBounds($e_id, $l_POWEROFF, 0);
	 IPS_SetEventCyclicDateBounds($e_id, $l_POWEROFF, 0);
	 IPS_SetEventActive($e_id,true);

	 // Befehl für Ereignis festlegen und setzen
	 if($l_multi == 1){
		// Hier Z-WAVE, Anpassen für andere Geräte
		$code = " ZW_SwitchMode($l_inst,false);
 echo 'Auto Off $l_inst';
";
	 } else {
		// Hier Z-WAVE, Anpassen für andere Geräte
	   $code = " ZW_SwitchModeEx($l_inst, false, $l_multi);
 echo 'Auto Off $l_inst';
";
	 }
	 IPS_SetEventScript($e_id, $code);
}