Ablaufsteuerung mit Zeitverzögerung

Hier ein Code-Stückchen für eine beliebige Anzahl an Zuständen - damit lassen sich viele Steuerungsaufgaben schnell lösen. Danke an Nancilla :loveips: für die Basis. Suchbegriffe: Ablauf, Steuerung, Zustand, Automat

<?

// Flexible Ablaufsteuerung (S0-S3) mit Zeitverzögerungen
// Autor: Nancilla - 03/2013


$actor1ID = 36818;   // ID Gerät 1
$actor2ID = 10636;   // ID Gerät 2
$ablaufglobal = 56711;   	// ID Ablaufvariable (beinhält den aktuellen Zustand)
									// diese Variable muss manuell angelegt werden (Typ INTEGER)
$durchlaufglobal = 52519;   // ID Durchlaufvariable (aktuelle Anzahl der durchgeführten Durchläufe)
									// diese Variable muss manuell angelegt werden (Typ INTEGER)

$zeit1 = 25;   	// Zeit 1 in Sekunden
$zeit2 = 30;	// Zeit 2 in Sekunden
$durchlaeufe = 5; // Anzahl der Durchläufe

$ablauf = GetValueInteger($ablaufglobal);			// Einlesen der globalen Variable
$durchlauf = GetValueInteger($durchlaufglobal);	// Einlesen der globalen Variable

if ($durchlauf < $durchlaeufe)
{
        switch($ablauf) {

        case 0: // Zustand S0
	        HM_WriteValueBoolean($actor2ID,"STATE", true);
   	     SetValueInteger($ablaufglobal , 1);
      	  IPS_SetScriptTimer($_IPS['SELF'],$zeit2);
        break;

        case 1: // Zustand S1
	        HM_WriteValueBoolean($actor1ID,"STATE", true);
   	     SetValueInteger($ablaufglobal, 2);
      	  IPS_SetScriptTimer($_IPS['SELF'],$zeit2);
        break;

        case 2: // Zustand S2
	        HM_WriteValueBoolean($actor1ID,"STATE", false);
   	     SetValueInteger($ablaufglobal, 3);
      	  IPS_SetScriptTimer($_IPS['SELF'],1);
        break;

        case 3: // Zustand S3
	        HM_WriteValueBoolean($actor2ID,"STATE", false);
   	     SetValueInteger($durchlauf, ($durchlauf+1));
      	  SetValueInteger($ablaufglobal, 0);
			  SetValueInteger($durchlaufglobal,GetValueInteger($durchlaufglobal)+1 );
			  IPS_SetScriptTimer($_IPS['SELF'],$zeit1);
        break;
        }
}
else // Ende der Durchläufe
{
			IPS_SetScriptTimer($_IPS['SELF'],0);
			SetValueInteger($durchlaufglobal, 0);	// Startzustand wiederherstellen
			SetValueInteger($ablaufglobal, 0);		// Startzustand wiederherstellen
}
?>

Es ehrt mich zwar, dass du mich erwähnst…
aber ich habe nur das Script-Gerüst für deine indivuelle Fragestellung erfasst bzw. als Idee vorgegeben, bin aber nicht Autor für das Script, was du hier im Forum „Anleitungen/Nützliche PHP Skripte“ einträgst.

So wie du es eingetragen hast (ohne Beschreibung und Zusammenhänge oder Verweis) kann es nur kaum jemand verwerten.

P.S. Und was ist das… $zeit2 = 30uuj8i; ?

Meinst Du das ?

Sorry, bitte löschen wenn es hier nicht passt.:wink:
Die Beschreibung von Hrn. Steiner ist auch nicht wesentlich umfangreicher.:o

na na, nicht gleich bei jedem Feedback jammern!

doch, ist sie: sie ist kurz und knackig, kommt aber auf den Punkt. Selbst Einsteiger dürften beim Lesen des Beitrags von Steiner erkennen, worum es dabei geht, was man damit anstellen kann und wie das Script im Groben funktioniert. Das Gleiche gilt für die Parametrierung des Scripts.
All das fehlt in Deinem Beitrag.
So werden zumindest die wenigsten Einsteiger erkennen können, ob ihnen Dein Script weiterhilft oder nicht. Und die Experten werden sich ihre Lösung vermutlich eher selbst häkeln als hier zu rätseln.