entprellen von Fenstergriffen

Mit Fenstergriffen lassen sich sehr gut Aktionen auslösen. Wenn ich bei Dunkelheit eine Terrassentür öffne, möchte ich z.B., dass der Rolladen sich öffnet, die Spots im Türsturz gedimmt werden und die Gartenbeleuchtung eingeschaltet wird. Tagsüber soll sich nur der Rolladen öffnen und beim Schließen der Tür ebenfalls schließen, falls er vorher zu war.
Voraussetzung dafür ist, dass die Griffstellung „offen“ nicht nur Übergangsstatus zwischen „gekippt“ und „geschlossen“ ist. Mit diesem Skript lässt sich die Griffstellung entprellen:

<?
// erste Abfrage der Türgriffe, externe Variable "loop" auf 1 setzen, Timer setzen und Abbruch
// der Status der Griffe wird in das array $Status1 eingelesen und per "implode" in der externen Variable als Integer gespeichert
// nach Ablauf des Timers startet das Skript neu bei der zweiten Abfrage
// Auslösendes Ereignis ist eine Variablenänderung des Status eines jeden Griffs
// ----------------------------------------------------------------------------------------------------------------------------------
$loop = GetValue (31443 /*[Program\Fenstergriffe\Status entprellen\loop]*/);
if ($loop == 0)
	{
  	$Status1 = array(	GetValue (54227 ),
	  					GetValue (23034 ),
							GetValue (49257 ),
							GetValue (12813 ),
							GetValue (43301 ),
							);
	SetValue (31443 /*[Program\Fenstergriffe\Status entprellen\loop]*/ , 1);
	SetValue (27480 /*[Program\Fenstergriffe\Status entprellen\HoppeStatus_temp]*/, implode ("", $Status1));
	IPS_SetScriptTimer (40918 /*[Program\Fenstergriffe\Status entprellen]*/ , 3);
	}
// ----------------------------------------------------------------------------------------------------------------------------------
// zweite Abfrage der Türgriffe, Variable loop wieder auf 0 und Timer löschen
// Abfrage der Griffe in $Status und Umwandeln in in die interne Integer-Variable $Status2
// wenn $Status1 und $Status2 gleich sind, wurde die Griffstellung seit der ersten Abfrage nicht verändert
// ----------------------------------------------------------------------------------------------------------------------------------
if ($loop == 1)
	{
		$Status = array(	GetValue (54227 ),
	  						GetValue (23034 ),
							GetValue (49257 ),
							GetValue (12813 ),
							GetValue (43301 ),
							);
		SetValue (31443 /*[Program\Fenstergriffe\Status entprellen\loop]*/, 0);
		IPS_SetScriptTimer (40918 /*[Program\Fenstergriffe\Status entprellen]*/ , 0);
		$Status1 = GetValue (27480 /*[Program\Fenstergriffe\Status entprellen\HoppeStatus_temp]*/);#
		$Status2 = implode ("", $Status);
		$diff = $Status1 - $Status2;
// -----------------------------------------------------------------------------------------------------------------------------------
// Wenn $Status 1 == $Status2, so wurde die Grifstellung seit dem ersten loop nicht verändert.
// Der entprellte Wert der Griffstellungen wird zur weiteren Verarbeitung für jeden Griff in eine externe Variable übergeben
// -----------------------------------------------------------------------------------------------------------------------------------
		if ($diff == 0)
		{
		SetValue (29743, substr ($Status1,-5,1)); // externe Variable für den entprellten Zustand von 54227
	  	SetValue (28829, substr ($Status1,-4,1));
		SetValue (14374, substr ($Status1,-3,1));
		SetValue (21445, substr ($Status1,-2,1));
		SetValue (32499, substr ($Status1,-1,1));
		}
            else
		{
		SetValue (31443 /*[Program\Fenstergriffe\Status entprellen\loop]*/ , 0);
		IPS_SetScriptTimer (40918 /*[Program\Fenstergriffe\Status entprellen]*/ , 3);
		}
	}
?>

Die Variable „loop“ wird als externe Variable für das Skript angelegt (hier 31443). Ebenso "HoppeStatus_temp (hier 27480) als integer. 40918 ist hier das Skript selbst und muss entpsrechend geändert werden. Dei fünf „GetValue“ beziehen sich auf die „Status“-Instanzen der Griffe. Am Ende werden die entprellten Zustände in fünf externe Variablen übergeben.
Das Skript ist für Hoppe-Griffe geschrieben, sollte sich aber auch auf HM übertragen lassen.
Verbesserungen sind gerne willkommen.

nette Grüße,
Sven