Frage zu Case in Integervariable

Habe diesem Script eine Integer-Variable übergeordnet mit den 4 Möglichkeiten. Wenn ich 15 oder 30 auswähle springt das Ergebnis auf die 45. 00 und 45 geht.

Dasselbe in der „Stunden-Variante“ funktioniert.

<?

if($IPS_SENDER == „Execute“) return;
SetValue($IPS_VARIABLE, $IPS_VALUE);

   switch ($IPS_VALUE)
{
    case 0:
      	$Weckzeit_Minuten = SetValue(11342 /*[Wecker\Variablen Wecker Andrea\Weckzeit_Minuten]*/, '00');
        break;

    case 1:
      	$Weckzeit_Minuten = SetValue(11342 /*[Wecker\Variablen Wecker Andrea\Weckzeit_Minuten]*/, '15');
        break;

    case 2:
      	$Weckzeit_Minuten = SetValue(11342 /*[Wecker\Variablen Wecker Andrea\Weckzeit_Minuten]*/, '30');
        break;

    case 3:
      	$Weckzeit_Minuten = SetValue(11342 /*[Wecker\Variablen Wecker Andrea\Weckzeit_Minuten]*/, '45');
        break;

}

?>

Hallo,

was mir zunächst auffällt:

-statt $IPS_VALUE lieber $_IPS[‚VALUE‘]
-statt $IPS_VARIABLE lieber $_IPS[‚VARIABLE‘]
-SetValue setzt einen Wert, es schaut aber aus als wolltest du einen auslesen, dann wäre GetValue richtig. Oder was sollen diese Rückgabewerte?
-was für ein Variablenprofil benutzt du? Hat es 4 Werte 0/1/2/3, denen „00“ „15“ „30“ und „45“ als Bezeichner zugeordnet sind? Ist das überhaupt eine Int, du weist ja Strings zu.

Allgemein habe ich den Eindruck, dass das Skript schon im Ansatz mehrere gravierende Fehler enthält und eine genauere Kenntnis der Gesamtsituation hilfreich wäre. Dann könnte man dir vielleicht wirklich weiter helfen.

Hab’s grad selber bemerkt. Sorry, war ein Flüchtigkeitsfehler. Die zu schaltende Float hatte den gleichen Namen wie die Integer und ich habe auf die Integer verzeigt. Nun läuft’s.

Dennoch sei die Frage bitte erlaubt: Was soll das mit dem Rückgabewert von SetValue? Gibt die Funktion überhaupt etwas zurück?

die Funktion schreibt mir den jeweiligen Wert in eine Float. 0,15,30 oder 45.

was mich stutzig macht ist das hier:

$Weckzeit_Minuten = SetValue

SetValue gibt true oder false zurück, abhängig davon ob das Setzen geklappt hat. In der Regel braucht man sich dafür nicht zu interessieren. Ich wundere mich, warum du diesen (boolean) Rückgabewert in eine Variable schreibst, die $Weckzeit_Minuten heißt. Es sieht für mich aus, als ob du irgendetwas damit beabsichtigst, was (so) nicht klappen kann.

Es ist gut möglich, dass es bislang alles funktioniert, aber ich bin glaube ich zu pedantisch, um so etwas übersehen zu können :wink:

dann möchte ich wieder mal was dazulernen. Im Webfront habe ich wie im Bild die Integer-Variable für die Minuten. Mit dieser wird das Aktions-Script ausgelöst und schreibt mir den entsprechenden Wert mit SetValue in die „Steuervariable“. Bislang funktioniert dies so einwandfrei. Mit meinen bescheidenen PHP-Kentnisse ist dies eine von mir viel gebrauchte Praktik. Aber ich würde mich natürlich freuen, falls diese Lösung wirklich problematisch ist, dies korrigieren zu können.

Das tun wir alle, andauernd, ich inbegriffen. :slight_smile:

Wenn ich das richtig verstehe, handelt es sich bei dem Profil der Integer-Variable im WF um ein Profil mit vier Einträgen denen jeweils ein String zugeordnet ist: {0 => ‚00‘, 1 => ‚15‘, 2 => ‚30‘, 3 => ‚45‘} - soweit richtig verstanden?

Den selben „Anzeigewert“ weist du dann bei Änderung auch der Float zu, welche du „Steuervariable“ nennst. Richtig?

Wenn ich das korrekt verstehe, würde ich mir dazu folgende Fragen stellen:

-Warum muss die „Steuervariable“ eine Float sein? Wenn sie nur die o.g. Werte haben kann, wäre Integer dafür der passende Datentyp.
-Wozu der Umweg über die andere Integer-Variable im Webfront? Warum wird die Steuervariable nicht direkt im WF verknüpft und mit einem einfachen Skript

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

beschrieben? Dann müsstest du der Steuervariablen nur noch ein entsprechend angepasstes Profil verpassen: {0 => ‚00‘, 15 => ‚15‘, 30 => ‚30‘, 45 => ‚45‘}. Das erscheint mir auch viel intuitiver als der Umweg über die Werte von 0…3.
-Brauchst du den Rückgabewert von SetValue? Es sieht mir nicht danach aus. Wenn ich jetzt nicht irgendetwas ganz falsch verstehe, brauchst du auch die switch/case-Konstruktion nicht. Es müsste der Einzeiler genügen, den ich angegeben habe.