Undefined variable: IPS_VARIABLE

Hallo Forum,

nach über einem halben Jahr taste ich mich langsam wieder an IPS ran. Es scheinen sich einige Dinge geändert zu haben. Ich habe eine Integer-Variable mit einem Aktionsscript. Zu folgendem Scriptteil finde ich die Lösung nicht:

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

	switch ($_IPS['VARIABLE'])

Das Script wird als Fehlerhaft markiert und die Variable nicht verändert.

$IPS_VARIABLE ist seit längerem $_IPS[‚VARIABLE‘]

Ich vermute du nutzt nicht die 3.4 und auch nicht die 4.0 für Windows, oder?

paresy

Hallo Paresy

danke für die schnelle Antwort.

ich „nutze“ die 3.4. Aber wie erwähnt hatte ich eine längere Sendepause.

Es müsste eigentlich auch so heißen:
SetValue($_IPS[‚VARIABLE‘], $_IPS[‚VALUE‘]);
…du willst ja vermutlich in die „Aktion-Variable“ den Wert eintragen und nicht die Variable in die Variable schreiben?!

Systemvariablen — IP-Symcon :: Automatisierungssoftware

Edit: Hier noch ein Skript zum Überprüfen deiner Skripte auf aktuelle Systemvariablen:

<?
$search = Array('$IPS_SENDER', '$IPS_SELF', '$IPS_VALUE', '$IPS_VARIABLE', '$IPS_INSTANCE',
                      '$IPS_EVENT', '$IPS_TRIGGER', '$IPS_OLDVALUE', '$IPS_TARGET', '$IPS_LINK',
                     '$IPS_REMOTE_ADDR', '$IPS_DIRECTION', '$IPS_DURATION', '$IPS_COMPONENT',
                     '$IPS_REMOTE_HOST', '$IPS_STATUS', '$IPS_STATUSTEXT' );


$eventIDs = IPS_GetEventList();
$found = false;
$anzahl = 0;

foreach($eventIDs as $id)
{
    if ($id != $_IPS['SELF'])
   {
      $event = IPS_GetEvent($id);
      $data = $event['EventScript'];
      foreach($search as $befehl)
      {
         if(!(strpos($data, $befehl) === false))
            {
            $found = true;
            $anzahl++;
            echo "Event: ".IPS_GetName($id)." #".$id.", Systemvariable: ".$befehl.", gefunden.
";
         }
      }
    }
}

echo "\rEs sind noch ".$anzahl." Änderungen bei den Events zu machen!

";

$scriptIDs = IPS_GetScriptList();
$found = false;
$anzahl = 0;

foreach($scriptIDs as $id)
{
    if (($id != $_IPS['SELF']) AND ($id != "12345"))  //Hier kann man Ausnahmen definieren
   {
       $script = IPS_GetScript($id);
      $data = file_get_contents(IPS_GetKernelDir()."/scripts/".$script['ScriptFile']);
      foreach($search as $befehl)
      {
         if(!(strpos($data, $befehl) === false))
            {
            $found = true;
            $anzahl++;
            echo "Script: ".IPS_GetName($id)." #".$id.", Systemvariable: ".$befehl.", gefunden.
";
         }
      }
    }
}
echo "\rEs sind noch ".$anzahl." Änderungen bei den Scripts zu machen!

";
?>

Grüße,
Chris

Hi,

schau dir bitte mal Zeilen 14 und 38 an - bringen ja den eigentlich gesuchten Fehler ;-)))))))))))))))))))

Ich weiß nicht was du meinst :smiley: :wink: :stuck_out_tongue: Wollte euch nur testen :wink: :stuck_out_tongue:

Danke für den Hinweis :slight_smile:

Grüße,
Chris

Danke Chris. Zum Glück hab ich jetzt Urlaub. Da hat sich ja einiges angesammelt.

Das meiste kannst du mit „Ersetzen - In allen Skripten“ ändern, dann geht das recht fix. Aber dringend kontrollieren :slight_smile:

Grüße,
Chris

Ersetzen - In allen Skripten

genau deswegen mach ichs manuell.

dumme frage zwischendurch: habe das testskript laufen lassen; muss wohl noch an vielen Stellen nacharbeiten/aktualisieren :wink: aber wieso ist das derzeit schon zwingend notwendig? zumindest bei mir funktioniert ja noch alles mit der alten Syntax (ips v4 beta#83)

Man MUSS nicht, aber man SOLLTE :wink: Soweit ich das im Kopf habe, funktionieren bei IPS4 unter Windows noch alle alten Systemvariablen. Bei anderen System nur dann, wenn die Kompatibilität aktiviert ist. Irgendwann wird aber der Tag kommen, an dem die alten Schreibweisen der Systemvariablen nicht mehr funktionieren…und bis dahin sollte man alles umgestellt haben auf die neue Schreibweise :slight_smile:

Grüße,
Chris

Man sollte „deprecated“ Funktionen immer austauschen, wenn man davon weiss - es bleiben noch genug „hab ich nicht gesehen/gewusst“ Baustellen…