Switch Case mit Variable im Timer Event

Ich kriegs nicht auf die Reihe und brauche Rettung! Warum geht das nicht?:

if($_IPS[‚SENDER‘] == „TimerEvent“)
{
switch (GetValueInteger(12110)) {
case 0:
SetValueInteger(12110,1);
break;
case 1:
SetValueInteger(12110,2);
break;
case 2:
SetValueInteger(12110,0);
}
}

Er springt in das Event, macht aus der 0 die 1, springt dann wieder in das Event und tut so als würde immer noch 0 in der Variablen stehen. Ich kann auf der WebFront Oberfläche beobachten, dass die Variable dann immer 1 bleibt und das Event immer wieder durchlaufen wird ?!

Man könnte es besser verstehen, wenn man wissen würde was Du tun willst :wink:
Was Dein Script macht ist: es „zählt“ 0,1,2,0,1,2,0, usw. … bei Auslösung durch den Timer. Wie sieht der denn aus?

„Code einfügen“ hilft der Lesbarkeit ungemein:

<?

if($_IPS['SENDER'] == "TimerEvent") {
    switch (GetValueInteger(12110)) {
        case 0:
            SetValueInteger(12110,1);
        break;
        case 1:
            SetValueInteger(12110,2);
        break;
        case 2:
            SetValueInteger(12110,0);
    }
}

?>

EDIT: Bruno hat natürlich Recht - PHP-Tags sind natürlich optimal :smiley:

Besten Gruß
/Jens

Und Du hast eine Integer-Variable angelegt, nicht nur ne Bool?

PS: Bitte php-Tags verwenden Editor mittlere Zeile ganz rechts, sollte dann so aussehen (mit Skriptanpassung) :wink: :

$var_int = 52821;

if($_IPS['SENDER'] == "TimerEvent")
{
switch (GetValueInteger($var_int))
{
case 0:
SetValueInteger($var_int,1);
break;
case 1:
SetValueInteger($var_int,2);
break;
case 2:
SetValueInteger($var_int,0);
}
}

Gruß
Bruno

Hi Jens, was Du schreibst: „Was Dein Script macht ist: es „zählt“ 0,1,2,0,1,2,0“ - wäre genau mein Ziel, leider macht er eben nur 0,1,1,1,1,1,1. Das ist es was ich nicht verstehe.
Der Timer ist im gleich Skript mit

IPS_SetScriptTimer($_IPS['SELF'], 5);

angelegt (ich hoffe ich hab das Code-Einfügen jetzt richtig gemacht :slight_smile:
Die Variable ist im Objektbaum als Integer angelegt:

Moin!

Ich habe zwar nicht verstanden, was dein Ziel ist, aber dieses Script hier zählt jede Sekunde weiter.

0 - 1 - 2 - 0 - 1 - 2 - 0 - … bis du den Timer wieder deaktivierst, z.B. mit „IPS_SetScriptTimer($_IPS[‚SELF‘], 0);“

<?
$var_int = CreateVariableByName($_IPS['SELF'], "Counter", 1);

if($_IPS['SENDER'] != "TimerEvent") {
   IPS_SetScriptTimer($_IPS['SELF'], 1);
}
else {
	switch (GetValueInteger($var_int)) {
	case 0:
		SetValueInteger($var_int,1);
	break;
	case 1:
		SetValueInteger($var_int,2);
	break;
	case 2:
		SetValueInteger($var_int,0);
	break;
	}
}


function CreateVariableByName($id, $name, $type, $profile = "")
{
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
        if($profile !== "")
        {
            IPS_SetVariableCustomProfile($vid, $profile);
        }
    }
    return $vid;
}
?>

Grüße,
Chris

Ok, danke für Eure Hilfe. Ich hatte noch ein ganz anderes Verständnisproblem. Ich bin immer davon ausgegangen, dass im Falle einer durch das Timer-Event ausgelösten Skiptverarbeitung nur der Bereich

if($_IPS['SENDER']=="TimerEvent")...

durchlaufen wird. Ist aber natürlich Blödsinn, der führt einfach das ganze Skript, an dem der Timer hängt noch einmal aus (da wurde irgendwo die Variable wieder auf 0 gesetzt).

/closed

… und im „case 2:“ hat auch das „break;“ gefehlt. :slight_smile:

Yes, so is richtig, danke :wink: