Ablaufsteuerung [Exercise]

Um bestimmte Ereignisse / Aktionen nacheinander auszuführen, verwende ich eine Hilfs-Variable - hier „Step“.
Diese reicht von 0 bis X - also dei Anzahl der Aktionen und wird am Ende wieder auf 0 gesetzt.
Der zeitliche Abstand der Aktionen wird durch: IPS_SetScriptTimer($IPS_SELF, ZZ);
bestimmt, wobei ZZ die Zeit in Sekunden ist (siehe Anhang).

MST

$id = 22283 /*[0 OG\Flur\VELUX Rollläden\Velux Rollladen]*/;
$step =	GetValue(23228 /*[6 Szenarien\Beschatten\Step]*/);

if(($IPS_SENDER <> "TimerEvent")and($step == 0)){
	SetValue(21336 /*[6 Szenarien\Beschattung]*/, True);
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 1);
	IPS_SetScriptTimer($IPS_SELF, 60);
	TMEX_F29_SetPin($id, 0, False);
	TMEX_F29_SetPin($id, 2, True);
	return;
}
if($IPS_SENDER == "TimerEvent"){
	switch($step) {
      case 1:
   	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 2);
		IPS_SetScriptTimer($IPS_SELF, 10);
		TMEX_F29_SetPin($id, 2, False);
	   break;
   case 2:
		SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 3);
		IPS_SetScriptTimer($IPS_SELF, 60);
		TMEX_F29_SetPin($id, 1, True);
		break;
   case 3:
		SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 4);
		IPS_SetScriptTimer($IPS_SELF, 10);
		TMEX_F29_SetPin($id, 2, False);
   	break;
   case 4:
		SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 5);
		IPS_SetScriptTimer($IPS_SELF, 20);
		HM_WriteValueFloat(42614 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden links]*/, "LEVEL", 1);  // runter
		break;
   case 5:
		SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 6);
		IPS_SetScriptTimer($IPS_SELF, 20);
		HM_WriteValueFloat(27397 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden mitte]*/, "LEVEL", 1);  // runter
		break;
   case 6:
		// Ablauf  fertig
		SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 0);
		IPS_SetScriptTimer($IPS_SELF, 0);
		HM_WriteValueFloat(58828 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden rechts]*/,"LEVEL", .5);  // runter
	}
}

oder

$id = 22283 /*[0 OG\Flur\VELUX Rollläden\Velux Rollladen]*/;
$step = GetValue(23228 /*[6 Szenarien\Beschatten\Step]*/);

if(($IPS_SENDER <> "TimerEvent")and($step == 0)){
	SetValue(21336 /*[6 Szenarien\Beschattung]*/, True);
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 1);
	IPS_SetScriptTimer($IPS_SELF, 60);
	TMEX_F29_SetPin($id, 0, False);
	TMEX_F29_SetPin($id, 2, True);
	return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 1)){
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 2);
	IPS_SetScriptTimer($IPS_SELF, 10);
	TMEX_F29_SetPin($id, 2, False);
	return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 2)){
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 3);
	IPS_SetScriptTimer($IPS_SELF, 60);
	TMEX_F29_SetPin($id, 1, True);
	return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 3)){
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 4);
	IPS_SetScriptTimer($IPS_SELF, 10);
	TMEX_F29_SetPin($id, 2, False);
	return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 4)){
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 5);
	IPS_SetScriptTimer($IPS_SELF, 20);
	HM_WriteValueFloat(42614 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden links]*/, "LEVEL", 1);  // runter
	return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 5)){
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 6);
	IPS_SetScriptTimer($IPS_SELF, 20);
	HM_WriteValueFloat(27397 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden mitte]*/, "LEVEL", 1);  // runter
        return;
}
if(($IPS_SENDER == "TimerEvent")and($step == 6)){
	// Ablauf  fertig
	SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/, 0);
	IPS_SetScriptTimer($IPS_SELF, 0);
	HM_WriteValueFloat(58828 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden rechts]*/,"LEVEL", .5);  // runter
}

Hinweis: das Skript muss über „IPS_RunScript“ oder „Ausführen“ gestartet werden

ablauf_step.png

Hallo steiner

kann man das auch mit einer Temperaturabfolge benützen??

das heisst
switch schalten bis temperatur erreicht, pause…
switch schalten bis temperatur erreicht, pause…
dito…
script abschliessen.

gruss Urs

Besser wäre doch hier das Script durch die Temperaturänderung oder bei bestimmten Wert zu triggern und mit if-Abfrage einen entsprechenden Befehl auszulösen. Oder was hast du genau vor?

Vorhaben steht hier:

Umsetzung (vielleicht)

  1. Skript manuell starten (Skriptteil 1) --> Brenner starten, Ereignis (bei Temp. >25!) aktivieren --> „Suppe wird warm“
  2. Voriges Ereignis tritt ein (startet Skriptteil 2) --> Brenner ausschalten, Ereignis (25) deaktivieren, Timer 45 min. starten --> „Suppe“ ruht
  3. Timer startet neuen Lauf (startet Skriptteil 3) --> Brenner ein, Ereignis (bei Temp. > 52°) aktivieren, Timer deaktivieren --> „Suppe“ wärmt weiter
  4. Ereignis (52) tritt ein (startet Skriptteil 2) --> Brenner ausschalten, Ereignis (52) deaktivieren, Timer 30 min. starten --> „Suppe“ ruht
  5. Timer (30) (startet Skriptteil 5) --> alle Timer deaktivieren, Meldung „habe fertig“

siehe 2. Skript von Steiner (geht aber ohne die Step-Geschichte)

http://www.ip-symcon.de/service/dokumentation/einfuehrung/schnelleinstieg/
http://www.ip-symcon.de/service/dokumentation/vorgehensweisen/wie-kann-ich/
http://www.ip-symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/ (was sendet?

Gruß
Buno

Ich denke hier versucht man einfach eine Schrittkette nachzubauen, ähnlich Ablaufsteuerung einer Maschine mittels Sps. Ich tue ebenso für den Ablauf meiner Externen Backups. Die Variable „Schritt“ wird von den dementsprechenden Unterprogrammen oder Betätigung am Touchscreen gesetzt, ebenso damit das Script erneut angestoßen.
Ansonsten ist meine Lösung fast mit der von Steiner identisch.

<?
$schritt = GetValueInteger(33320 /*[System\Backup\Schritt]*/);
$filename = 'u:\data.txt';
$filename_film = 'u:\filme.txt';

switch ($schritt) {
    case 1:                                                                                                             //Schrittkette Backup Data
         SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Bitte Platte BACKUP einlegen");
         SetValueInteger(33320 /*[System\Backup\Schritt]*/, 2);
			break;
	 case 2:
         if (file_exists($filename))
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Backup wird gestartet");
   		 IPS_RunScript(38819 /*[System\Backup\Backup Data ausführung]*/);
   		 SetValueInteger(33320 /*[System\Backup\Schritt]*/, 3);
   		} else
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Falsche oder keine Wechselplatte eingelegt");
   		 SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/, "Bitte Platte BACKUP einlegen");
			}
        break;
	 case 3:
			IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
			SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/, "#minus#Backup DATA notwendig");
        break;
	 case 4:                                                                                                             //Schrittkette Backupplatte entfernen
			if (file_exists($filename))
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Backup beendet");
   		 SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/, "Bitte Platte entfernen");
   		} else
			{
          rename("c:\log\data.log", "c:\log\data.old");
   		 IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
   		 SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/, "#minus#Backup DATA beendet");
     		}
        break;
    case 11:                                                                                                             //Schrittkette Backup Filme
         SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Bitte Platte FILME einlegen");
         SetValueInteger(33320 /*[System\Backup\Schritt]*/, 12);
			break;
	 case 12:
         if (file_exists($filename_film))
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Backup wird gestartet");
   		 IPS_RunScript(38819 /*[System\Backup\Backup Data ausführung]*/);
   		 SetValueInteger(33320 /*[System\Backup\Schritt]*/, 13);
   		} else
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Falsche oder keine Wechselplatte eingelegt");
   		 SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/, "Bitte Platte FILME einlegen");
			}
        break;
	 case 13:
			IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
			SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/, "#minus#Backup Filme notwendig");
        break;
	 case 14:                                                                                                             //Schrittkette Backupplatte entfernen
			if (file_exists($filename_film))
			{
   		 SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/, "Backup beendet");
   		 SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/, "Bitte Platte entfernen");
   		} else
			{
          rename("c:\log\filme.log", "c:\log\filme.old");
   		 IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
   		 SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/, "#minus#Backup Filme beendet");
     		}
        break;
}
?>

gruß
goran