Scriptausfürhung unterbrechen?

Hallo und sorry für die vielleicht Blöde Fragestellung.

Anwendung:
Ich nutze einen Schaltaktor um mir einen bestimmten Zustand durch ein „Licht“ visualisieren zu lassen.
Zustand 1: Aktor ist für 60 Sekunden an.
Zustand 2: Aktor blinkt (an/aus) für 60 Sekunden.
Problem: Wenn Zustand 1 und 2 sich überschneiden (was vorkommt) dann wird erst das eine Script ausgeführt - dann das andere. Ergo der Zustand ist dann optisch nicht definiert.

Frage:
Kann man die Ausführung eines Scriptes stoppen? Dann könnte ich am Anfang jedes Scripts den „kill“ des anderes Scriptes durchführen und dann den Status sauber darstellen.

Wenn du nur ein Script nutzt und den Zustand (blickt, an, aus) in einer Hilfsvariablen speicherst, kannst du im Script entsprechend reagieren.

Ich hab das mal gemacht - aber es funktioniert nicht - das „blinken“ kann nicht unterbrochen werden. Wobei das blinken SO eh schlecht implementiert wird… (es bricht anch 30 sekunden ab)


<?
$Status1 = GetValue(44420);
	if($Status1 == true)
	{
		for ($i=0; $i<60; $i++)
		{
		HM_WriteValueBoolean(21537, "STATE", true);
		IPS_Sleep(500); 
		HM_WriteValueBoolean(21537, "STATE", false);
		IPS_Sleep(500); 
		}
	}
   if($Status1 == false)
	{
   	if($IPS_SENDER == "TimerEvent")
		{
		HM_WriteValueBoolean(21537, "STATE", false);
		//Timer ausschalten
		IPS_SetScriptTimer($IPS_SELF, 0);
		} else {
    	HM_WriteValueBoolean(21537, "STATE", true);
		//Timer anschalten
		IPS_SetScriptTimer($IPS_SELF, 60);
		}
	}
?>



Scripte werden nach 30 Sekunden beendet. Mit deiner Umsetzung blockierst du einen von 10 möglichen Slots.

Besser funktioniert das mit dem Scripttimer ;).

hat jemand einen „handfesteren“ tip? in der hilfe unter „Skriptverwaltung“ finde ich dazu nix…

Du weist aber schon was dieses macht.

for ($i=0; $i<60; $i++)
        {
        HM_WriteValueBoolean(21537, "STATE", true);
        IPS_Sleep(500); 
        HM_WriteValueBoolean(21537, "STATE", false);
        IPS_Sleep(500); 
        }

Kein Wunder, das dein Script abbricht.

Du jagst das ganze 59 mal durch die Schleife. Für was soll das gut sein.

Ich hatte gehofft mir meinem Grundpost das Grundproblem möglichst eindeutig zu beschreiben.

  1. ich „jage das“ 60 mal durch, damit der Aktor „blinkt“. Ich möchte über einen Zeitraum von x Sekunden dass der Aktor an und aus geht um einen Status angezeigt zu bekommen.

  2. mir ist klar, dass meine Implementierung Schrott ist - aber nach 4h lesen und ausprobieren ist das nunmal leider das beste, was ich hinbekommen habe.

Dafür gibt es entsprechende Hardware. Nur Signalisierung oder auch mit Soundausgabe.

Für das was Du da vor hast, ist dein Aktor gar nicht ausgelegt und wird früher oder später seinen Dienst quittieren. Zumal Du damit dein ganzes Funknetz zu müllst.

Nette Lösung. :smiley:

Früher löste man das mit einer astabilen Kippstufe oder astabilem Multivibrator. Ok, die Zeiten ändern sich. :stuck_out_tongue:

Deine Implementierung ist grundsätzlich ok, deine Hardware ist Schr… ;).

Wie Rainer schon geschrieben hat wird dein Aktor nicht lange halten. Außerdem ist es in IPS nicht „sinnvoll möglich“ ewig lange laufende Scripte zu verwenden. Dadurch blockierst du einen PHP Slot und die „Homematic Funkstörung“ ist auch nicht schön.

Du solltest deine „Meldetechnik“ überdenken.

danke - ich entnehme allen hier eingereichten antworten, dass es nicht möglich ist, die ausführung eines skripts zu beenden.

Falsch entnommen :wink:

Script kannst Du mit exit abbrechen.

Gruß Rolf