Generisches Skript für automatisches Ausschalten von Geräten

Hallo zusammen,
habe mal ein Script gebastelt und best. Geräte automatisch auszuschalten, rein über Events gesteuert ohne Programmierung etc.

Aktuell für Z-Wave, befehl kann aber unten einfach angepasst werden:


<?php /* 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);
	 }

	 // 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);
}
?>

Beispiel:

p2.png