Hier ein Code-Stückchen für eine beliebige Anzahl an Zuständen - damit lassen sich viele Steuerungsaufgaben schnell lösen. Danke an Nancilla 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
}
?>