Ausschaltzeiten mit Script verzögern

Bin mir mit meinen bescheidenen Kentnissen ein „alles aus“ Script am basteln. Ausschalten tut es, nun möchte ich aber nicht einfach blup und alles ist aus, sondern etwas gestaffelt runterfahren. Kann mir jemand sagen, wie ich das in meiner Schnipselei unterbringe?

FS20_SwitchMode(36910 /*[Küche 2\Kaffeemaschine]*/, false);

FS20_SwitchMode(19780 /*[Allgemein\Licht Korridor]*/, false);

$id = 29278 /*[Led Bar\RGBW-868 Küche]*/;
PJ_RunProgram($id, 0);

$id = 52632 /*[Led Bar\RGBW-868 Cheminée]*/;
PJ_RunProgram($id, 0);

$id_sound = 50583 /*[Soundkarten\Küche]*/;
WAC_Stop($id_sound);

aber was genau wilst Du erreichen?
pauschal fallen mir 2 Methoden ein:

  1. zeitabhängig (wartezeit zwischen den Aktionen) -> IPS_SLEEP(000ms)
  2. folgende Aktion erst nach dem erste Aktion abgeschlo9ssen ist -> macht nur bei bidirektionalen Systemen Sinn, da Du FS20 hast hier wohl eher nicht

also bau doch mal die Wartezeit zwischen die einzelnen Aktionen ein?

Ergänzung: bei den RGBW’s bietet sich noch ein runterdimmen an: PJ_DimRGBW($id,0,30,0,30,0,30,0,30);

Grundsätzlich ist mit dem Einsatz von IPS_Sleep oder Sleep(); sparsam umzugehen, der Einsatz von Timern ist häufig der bessere Weg.

ok, ich präzisiere;):

beim Einsatz von IPS_SLEEP darf die Gesamtlaufzeit des Scripts 20 sec nicht überschreiten (IPS bricht dann die Verarbeitung ab).
Wenn die Gesamtlaufzeit unter 20 sec bleibt und im Gesamtsystem nicht allzuviele parallele Scripte ablaufen kann man das machen. Grundsätzlich ist der Einsatz von Timern sauberer - aber auch aufwändiger.

dass mit dem Sleep ist nicht das, was ich suche, da ich das ganze über ca. 2 Minuten verteilen möchte (halb schlafend vom Sofa aufstehen - Schalter betätigen - und dann unfallfrei ins Bett).

Wie müsste es denn mit einem Timer aussehen?

schau dir das mal an:

das Script gaht davon aus dass alle von dir benannten Devices vor dem Abschalten on sind -> ob das immer die Realität ist sei mal dahingestellt. Aber ich will Dir nur das Prinzip näherbringen:


<?
//++++++++++++++ Konfig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$timer_id = 30400 /*[z01 Test Temp\jbu\Devices abschalten\Script\]*/ ;
$kaffeemaschine_id = 36910 /*[Objekt #36910 existiert nicht]*/;
$korridor_licht_id = 19780 /*[Objekt #19780 existiert nicht]*/;
$kueche_rgbw_id = 29278 /*[Objekt #29278 existiert nicht]*/;
$cheminee_rgbw_id = 52632 /*[Objekt #52632 existiert nicht]*/;
$sound_id = 50582 /*[Objekt #50582 existiert nicht]*/ ;


//++++++++++++++ Konfig Ende +++++++++++++++++++++++++++++++++++++++++++++++++++


If (@$IPS_SENDER == "Webfront")
{
	IPS_SetEventActive($timer_id, true);
   IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 1, 1*60); // Timer in Sekunden
	FS20_SwitchMode($kaffeemaschine_id, false); // schaltbefehl 0
}
elseif (@$IPS_EVENT == $timer_id)
{
	if ($kaffeemaschine_id == false)
	{
		IPS_SetEventActive($timer_id, true);
	   IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 1, 1*60); // Timer in Sekunden
	   FS20_SwitchMode($korridor_licht_id, false); // schaltbefehl 1
   }
   elseif ($korridor_licht_id == false)
	{
	   IPS_SetEventActive($timer_id, true);
	   IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 1, 1*60); // Timer in Sekunden
		PJ_RunProgram($kueche_rgbw_id, 0); // schaltbefehl 2
	}
	elseif($kueche_rgbw_id == false)
	{
		IPS_SetEventActive($timer_id, true);
	   IPS_SetEventCyclic($timer_id, 2, 1, 0, 0, 1, 1*60); // Timer in Sekunden
		PJ_RunProgram($cheminee_rgbw_id, 0); // schaltbefehl 3
	}
	elseif ($cheminee_rgbw_id == false)
	{
		IPS_SetEventActive($timer_id, false);
		WAC_Stop($sound_id); // schaltbefehl 4
	}
}
?>

Du legst das Script an, darunter ein zyklisches Event, der Rest sollte selbsterklärend sein - aber bestimmt hast Du noch Fragen :wink:

Das nenn ich mal Service.

aber leider läuft mir so nicht durch, da ich nicht immer alles eingeschaltet habe. Hab auch einen Fehler erhalten bei den Geräten, die schon aus waren.

IPS_Sleep wäre da wahrscheinlich doch die bessere Variante, aber die beisst nicht. Habe die Zeit auf 190 ms gestellt, aber das Script wird sofort durchgearbeitet.

genau. Aber man könnte sich iterativ an die optimale Lösung heran tasten.:wink:

würde ich ja sehr gerne, wenn ich wüsste wie. Deutlich geworden ist mir einmal mehr, dass ich zur Deckung meiner Ansprüche langsam aber sicher hinter PHP muss. Ich werde mal schauen, was ich momentan hinbringe und wie du’s schon angedeutet hast, sicherlich nochmals nachfragen.

probier evtl. oben mein Script nochmal aus, ich hatte ein paar Syntaxfehler gefunden und korrigiert (die Voraussetziung ist allerdings noch immer, dass alle Devices eingeschaltet sind).
Wenn Du dazu fragen hast meld Dich gern, der Einstig in PHP ist nicht einfach, mir ging das vor 8 Monaten genau so. Da ist man froh wenn man hier im Forum einen Erklärbär findet :wink:

und ich wette: wenn sysrun das sieht verdichtet der das Script auf 3 Zeilen:D

ok. Danke erstmal. Muss jetzt für heute leider passen.

Wünsche Dir einen schönen Abend.