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
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
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) :
$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
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.
Yes, so is richtig, danke