ein timer problem mit meinem script

hallo und guten tag !

das ich noch immer mit der programmieung fats am anfang stehe, habe ich ein sicher einfaches problem. mein script bricht nach 30sek mit timeout ab. es startet meinen av-receiver und startet danach meinen streaming client. wie kann ich das „ordentlich“ scripten ?

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : webradio_on.ips.php
Trigger  : 
Interval : 
*/
COMPort_SendText(39016, "PWON");
COMPort_SendText(39016, chr(13));
IPS_Sleep(1000);
COMPort_SendText(39016, "MV20");
COMPort_SendText(39016, chr(13));
IPS_Sleep(50);
COMPort_SendText(39016, "SIDBS/SAT");
COMPort_SendText(39016, chr(13));
IPS_Sleep(50);
COMPort_SendText(39016, "Z250");
COMPort_SendText(39016, chr(13));
IPS_Sleep(50);
COMPort_SendText(39016, "Z2DBS/SAT");
COMPort_SendText(39016, chr(13));
IPS_Sleep(50);
COMPort_SendText(39016, "Z1DBS/SAT");
COMPort_SendText(39016, chr(13));
IPS_Sleep(2000);
WinLIRC_SendOnce(34135,"streamium","internet");
IPS_Sleep(25000);
WinLIRC_SendOnce(34135,"streamium","favoriten");
IPS_Sleep(3000);
WinLIRC_SendOnce(34135,"streamium","down");
IPS_Sleep(2000);
WinLIRC_SendOnce(34135,"streamium","ok");

?>

such mal nach max_execution_time

hallo und danke olli !

ich habe es mal als text in den ips dateien gesucht aber leider nicht gefunden … soll das in einer datei stehen ?

ist das script denn überhaupt so in der form sinnvoll ?

@toni: danke :slight_smile:

frank

sorry, ich meinte die Forumsuche

auch sorry fürs nicht ordentlich suchen vorher. ich bin aber eher davon ausgegangen, dass mein script an si´ch schon käse ist und wollte es gleich richtig machen und nicht einfach den timeout ändern :slight_smile:

ich habe jetzt deinen kommentar gelesen zu set_time_limit() . das habe ich mal ins script eingebaut aber ohne erfolg. max_execution habe ich gleich gelassen. es kommt aber: Wrong parameter count for set_time_limit()

muss der parameter überhaupt ins script ?

Hallo Frank,

ich würde sowas über den Script-Timer lösen, dann sind beliebige Laufzeiten möglich. Ab 10 Sekunden nehme ich den Timer, daher habe ich einige Sleep dringelassen, soll ja auch nur eine kleine Hilfe sein. Aber das ist natürlich alles Geschmackssache…:rolleyes:
Dazu muss jedoch eine Zusatzvariable angelegt werden, welche den aktuellen Stand speichert. Die einzelnen Teile würde ich dann mit Switch-Case Anweisungen trennen. In etwa könnte das so aussehen:

<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File     : webradio_on.ips.php
Trigger  : 
Interval : 
*/

$state = GetValueInteger("Timer_state"); // das ist die Hilfsvariable

Switch ($state)
{
	case 1:
		COMPort_SendText(39016, "PWON");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(1000);
		COMPort_SendText(39016, "MV20");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(50);
		COMPort_SendText(39016, "SIDBS/SAT");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(50);
		COMPort_SendText(39016, "Z250");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(50);
		COMPort_SendText(39016, "Z2DBS/SAT");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(50);
		COMPort_SendText(39016, "Z1DBS/SAT");
		COMPort_SendText(39016, chr(13));
		IPS_Sleep(2000);
		WinLIRC_SendOnce(34135,"streamium","internet");
		SetValueInteger("Timer_state",$state + 1);
		IPS_SetScriptTimer($IPS_SELF ,25); // 1. Wartezeit (vorher: IPS_Sleep(25000);)
	break;
		
	case 2:
		WinLIRC_SendOnce(34135,"streamium","favoriten");
		IPS_Sleep(3000);
		WinLIRC_SendOnce(34135,"streamium","down");
		IPS_Sleep(2000);
		WinLIRC_SendOnce(34135,"streamium","ok");
		SetValueInteger("Timer_state", 0); // das deaktiviert den imer wieder
		IPS_SetScriptTimer($IPS_SELF ,1); // die Hilfsvariable wird in den Ausgangszustand zurückgesetzt
	break;
}

?>  

Das kann man natürlich beliebig erweitern. Zeiten spielen hierbei keine Rolle mehr. :smiley:
Hilfsvariable anlegen nicht vergessen!

Gruß
Fabian

Schöner Ansatz… Die Lösung sagt mir sehr zu… :wink:

Gruß,

Toni

Korrekturvorschlag meinerseits… :rolleyes:

Statt so:

Besser so:

<?
    case 2:
        WinLIRC_SendOnce(34135,"streamium","favoriten");
        IPS_Sleep(3000);
        WinLIRC_SendOnce(34135,"streamium","down");
        IPS_Sleep(2000);
        WinLIRC_SendOnce(34135,"streamium","ok");
        SetValueInteger("Timer_state", 1); // die Hilfsvariable wird in den Ausgangszustand zurückgesetzt
        IPS_SetScriptTimer($IPS_SELF ,0); // das deaktiviert den Timer wieder
    break;

Gruss,
Olli

@Olli:

Danke!

Ich hatte es nicht getestet, war nur so „ins Blaue“ gestrickt. Natürlich hast Du Recht, ich hab’s vertauscht. :o

PS: zumindest passt der Kommentar zum Wert :smiley:

hallo und guten morgen !

vielen dank erstmal :slight_smile: das meint ich mit einem ordentlichen script :smiley:
ich habe es so übernommen und einen integer variable Timer_script angelegt. wenn ich das script starte, passiert aber absolut nix. keine fehlermeldung aber auch keine reaktion. was habe ich vergessen ?

happy day ,frank

Hallo Frank,

wahrscheinlich steht Deine Variable noch auf 0.

Im Skript werden nur die Fälle (case) 1 und 2 behandelt.

Setze sie einfach mal auf 1 und starte erneut.

Gruß
HJH

klappt :slight_smile: danke !

wahrscheinlich steht Deine Variable noch auf 0.

:confused: …hätte ich dran denken müssen und bei Case 0 anfangen, oder die Var beim Start initialisieren müssen im default case…