Variable Event per Script

Hallo,

ich habe Probleme mit dem Syntax des IPS_RegisterVariableEvent Befehls.
folgende Befehlzeile funktioniert nicht:


IPS_RegisterVariableEvent($variable,"OnLimitDrop","18","test");

Irgenwie muss da noch ein Fehler drinstecken, kann mir da wer einen Tip geben?

Die 18 ohne Anführungsstriche setzen.:wink:

IPS_RegisterVariableEvent(„variable“,„OnLimitDrop“,18,„test“);

Habe ich auch schon probiert, funktioniert auch nicht,
Kann es sein, dass das Script Test nicht gefunden wird?

Hast Du auch eine globale Integer Variable angelegt und steht diese auch am Anfang?


IPS_RegisterVariableEvent("globale Integer Variable","OnLimitDrop",18,"test"); 

Du hast recht es liegt an meiner Variablen. Wenn ich eine deklarierte Variable einsetze gehts. Ich will die Variablen aber im Script erst mit IPS_CreateVariable erzeugen und dann einem Script als Event zuordnen.
Hier mal ein Teil meines Scripts zur Verdeutlichung (habs jetzt auf OnUpdate geändert, weil OnLimit natürlich nicht mit Boolean Variablen geht):


$var="FB_S20_";
$count=2;

//Variablen anlegen (20 Stück)
for ($i=1; $i<$count+1; $i++)
{
$variable=$var.$i.".Status";
echo $variable;
//IPS_CreateVariable($variable,$type);
IPS_RegisterVariableEvent($variable,"OnUpdate","N/A","test");

die Variablen sind dann unter Variables vorhanden.

Hallo,

dann musst Du aber Deine Zaehlvariable „i“ in einen String umwandeln, bevor Du die neue „Zeichenkette variable“ bildest.

Hallo Torro,

warum soll er das machen das gesamte Konstrukt


$variable=$var.$i.".Status";

ist doch ein String.
So wie er es geschrieben hat sollte es funktionieren.

Hallo,

nein, $i ist eine Zaehlvariable vom Typ Integer, sie bedient ja die Schleife.
In PHP 5.2 werden solche Typungereimtheiten meines Wissens noch exakter durch die Error Routinen rausgeschmissen.

mit der PHP-Version 5.1.6 klappt sowas einwandfrei.

Gruß Rolf

Hallo,

@ransi, versuche es mal hiermit:

IPS_RegisterVariableEvent("$variable","OnLimitDrop","18","test");

@Torro, Rolf-L
mit php-5.1.6 funktioniert es.
oder gleich diese Variante:

$variable=$var.(string)$i.".Status";

Gruß
Günter

Also ich habe die ganze Sache getestet und bei mir funktioniert sowohl die IPSCreate Funktion, als auch die IPS_RegisterVariableEvent mit $variable=$var.$i.".Status"; einwandfrei.

Jap, dennoch hat Torro recht.

Solche „unsauberen Lösungen“ könnten beim Einspielen einer neuen PHP-Version nach einem IPS-Update euer System komplett lahmlegen. Dann dürft ihr in jedem einzelnen Script jede einzelne Zeile kontrollieren.

Machts gleich sauber, dann wird alles gut… :p;)

Toni

Danke das Ihr Euch so ausführlich mit dem Problem befasst.

Ich komme aber erst heute abend dazu die verschiedenen Möglichkeiten auszuprobieren.
Was mich wundert, bei IPS_CreateVariable funktionierts mit $variable so wie sie ist und bei IPS_RegisterVariableEvent gehts nicht:confused:.


Machts gleich sauber, dann wird alles gut... 

Jawohl Behüter der sauberen PHP Sprache.:smiley: Hast ja Recht.:wink:

So, ich habe jetzt nochmal alles mögliche durchprobiert.
Es funktioniert mit OnValue und mit OnLimitDrop (mit einer anderen Variablen), aber nicht mit OnUpdate und OnChange.
Bei den beiden gibts den Value N/A, aber wenn ich an die Value Stelle im Befehl „N/A“ schreibe gehts genausowenig wie mit " ". Wenn man die Stelle ganz wegläßt gibts einen Syntaxerror. Was muss denn dahin?

Beispiel:
Ram_Frei hier Integer. Geht auch für On Update.


 IPS_RegisterVariableEvent("Ram_Frei","OnChange",0,"Test_2");

Hallo Thomas,

das habe ich jetzt auch probiert, geht nicht.
Hier nochmal das Script:


$var="FB_S20_";
$type="Boolean";
$loc="IP-SYMCON\\FB_S20\\";
$name="FB_S20_";
$count=2;

//Variablen anlegen (20 Stück)
for ($i=1; $i<$count+1; $i++)
{
$variable=$var.(string)$i.".Status";
echo $variable."
";
//IPS_CreateVariable($variable,$type);
//LOC_SetLocation_Variable($variable,"IP-SYMCON\\FB_S20");
//IPS_RegisterVariableEvent("aktPage","OnLimitDrop",18,"test"); //die Zeile funktioniert
//IPS_RegisterVariableEvent("FB_S20_1.Status","OnUpdate","N/A","test"); //funkt. nicht
IPS_RegisterVariableEvent($variable,"OnUpdate",0,"test"); //funkt. nicht
//IPS_RegisterVariableEvent($variable,"OnValue",false,"test"); //funktioniert
$event=IPS_GetScriptEventList("test");
print_r ($event);

als Ergebnis bekomme ich:
FB_S20_1.Status
Array
(
)
FB_S20_1.Status
Array
(
)

Ich weis nicht mehr woran es liegen könnte.

Hallo Michael,

da Du hier Bool Werte verwendest bitte anstelle der 0, true oder false einsetzen.

Ich werd verrückt, da soll einer drauf kommen.

Danke Dir das wars, jetzt funktionierts.

Ist das denn mit dem (string)$i jetzt sauber, wie Toni sagte?

Na fein wenns geht.:slight_smile:
Und $i ist mit (string) davor hier jetzt eindeutig. Da dürfte auch Toni nichts mehr dagegen haben.:rolleyes: